回答編集履歴

1

補記追加

2015/11/24 14:37

投稿

KSOH
KSOH

スコア12

test CHANGED
@@ -13,3 +13,9 @@
13
13
 
14
14
 
15
15
  静的フィールドに覚えておくと普通はプログラム終了時点までインスタンスは生存し続けますが、それは静的フィールドが存在しているクラスオブジェクトの参照が実行スタックからたどれるからに過ぎません。実行スタックにはローカル変数やメソッドの引数はもちろんですが、実行中のメソッドがなにかも記録されています。スタックにあるメソッドMが存在しているとメソッドM実行中はそのメソッドが定義されているクラスオブジェクトも存在し続ける必要があります。さらにそのクラス(のフィールドやメソッド)が直接・間接に参照している別のクラスも同様に存在し続けなければなりません。そういう関係もGarbage Collectorはたどっていきます。そんなわけで静的フィールドに覚えておくとたいていはプログラム終了時までずっと消えなくなるのです。
16
+
17
+
18
+
19
+ 補記:raccyさんの回答にある「発想が逆」という言葉。まさにそう思いました。プログラマーがGarbage Collectorがどう動くか考えて設計するのではなく、逆に**自然に記述されたプログラムが適切に動作するようにGarbage Collectorの方がよろしくやってくれる**と考えるべきだと思いマス。
20
+
21
+