【初心者】Java質問・相談スレッド109【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0876デフォルトの名無しさん
2007/12/11(火) 18:55:17その中で七並べを作っています。
テーブルクラスにあるテーブルに置かれたカードを見るというメソッドについてこう実装しました。
フィールドを返すだけです。
public Card[][] getCards()
{
return table_;
}
しかしこれだとtable_の内容が変更される場合があるので、
以下のようにコピーして返すよう改良しました。
public Card[][] getCards()
{
Card[][] table = new Card[Card.SUIT_NUM][Card.CARD_NUM];
for (int suit = 0; suit < Card.Suit_NUM; suit++) {
System.arraycopy(table_[suit], 0, table[suit], 0, Card.CARD_NUM);
}
return table;
}
その後のコラムにこのような事が書いてあります。
>実はこの方法も実はあまり良い方法とはいえない事があります。
>この方法ではgetCardsメソッドを呼び出すたびに新たな配列のコピーが生成されます。
>本書で扱っているような七並べレベルのプログラムでは何の問題もありませんが
>サーバサイドで24時間にわたって動き続けなければならないアプリケーションでは
>GCでシステムが一時的に停止して致命的な問題を引き起こしてしまうこともあるのです。
>不用なコピーを作らないようにする方法としては、table_に対する読み取りアク
>セスのみを提供するインターフェースを返すといった方法が挙げられます。
この「table_に対する読み取りアクセスのみを提供するインターフェース」
というのが想像ができません。
実装するとしたら具体的にどういったコードになるんでしょうか?
簡単なコードを示して貰えれば嬉しいです。
■ このスレッドは過去ログ倉庫に格納されています