- - PR -
ガベージコレクションの対象となるタイミングについて
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-11-14 16:53
現在Sun認定資格Javaプログラマーの勉強をしているのですが、
例題のなかに次のような2つの問題がありました。 (下記の2つの問題はそれぞれ別の会社の問題です。 ) 【問題1】下記プログラムにて"Hello"がガベージコレクションの対象になるのは いつか?
【問題2】下記プログラムにて"ABC"がガベージコレクションの対象になるのは いつか?
正解 【問題1】b = null の直後 【問題2】a = null の直後 この結果がいまいち腑に落ちないのですが、 まず、問題1に関しては String b = a と bとaが同じオブジェクトを参照しています。 その後、a = null としていますが、bはまだ "Hello"オブジェクトを参照しているので ガベージコレクションの対象にならず、b = null でガベージコレクションの対象になる。というのは合点がいきます。 しかし、同じような問題の問題2のほうですが、なぜか正解が a = null の時と言うことでした、、、。 疑問に思ったので、早速問題2のプログラムで上記のコードを実行させ デバッガでデバッグしのたですが、a=nullを実行した後もb[0]="ABC" となっています。これは、問題2の答え自体がまちがっているのでしょうか? はたまた、わたしが未熟なためにわからないなにか別の問題があるのでしょうか? 宜しければどなたかご教示お願いします。m(_ _)mペコリンコ [ メッセージ編集済み 編集者: 忍者鳥取県 編集日時 2003-11-14 16:58 ] | ||||||||
|
投稿日時: 2003-11-14 17:04
unibon です。こんにちわ。
#題意を酌みとって考えました。 > 【問題1】下記プログラムにて"Hello"がガベージコレクションの対象になるのは > いつか? b = null; の後の任意のタイミングで(実行環境に依存)。 > 【問題2】下記プログラムにて"ABC"がガベージコレクションの対象になるのは > いつか? b[0] = null; の後の任意のタイミングで(実行環境に依存)。
うむむ。 なお、細かく考えると、多くの実装系ではメソッドを抜けないと ガーベッジコレクションが動かないことも多かったかもしれません。 あるいは対象を"Hello" と考えるのか new String("Hello") なのかや、 "ABC" 自体はそもそもガーベッジコレクションになるのかは、 相当良く知っている人ではないと答えられないのですが、 まさか試験でそこまで問うことはないでしょう。 | ||||||||
|
投稿日時: 2003-11-14 17:30
文字列定数はコンスタントプールに格納されるから、 ガーベージコレクションされないんじゃなかったでしたっけ? | ||||||||
|
投稿日時: 2003-11-14 18:26
ここで議論するより、その問題集の作成者に訊くほうが確実のような気がします。
私も問題 2は腑に落ちませんので、ぜひともその作成者の見解をお聞きしたいです。問い合わせをお願いします。 | ||||||||
|
投稿日時: 2003-11-14 18:45
この問題はネットでJavaの問題集を販売してるサイトの サンプルです。そのため、正面きって問い合わせってのが ちと、つらい状況です(・_・、)ゴメリンコ 参考: http://www.crammedia.com/indexjp.asp | ||||||||
|
投稿日時: 2003-11-14 19:29
サンプルだから問い合わせられない、という理由が不明ですが、ゴメリンコなんて言っている余裕があるなら大丈夫ですね。
まあ試験がんばってください。 | ||||||||
|
投稿日時: 2003-11-14 19:49
、、、ですね。 先ほど問い合わせのメール出しておきました。 もし、なんらかの回答がありましたら掲載したいと思います。 ちなみにびしばしさんは、どのような点が腑に落ちないのでしょうか? 宜しければ、びしばしさんの意見もお聞かせください。 | ||||||||
|
投稿日時: 2003-11-14 23:07
>>"ABC" 自体はそもそもガーベッジコレクションになるのかは、
>文字列定数はコンスタントプールに格納されるから、 >ガーベージコレクションされないんじゃなかったでしたっけ? 正確には共有プールか何かに保存されているんだと思います. これ自体もGCの対象ではあるんでしょうが,おそらくは クラス自体が回収されないことには回収されないでしょう. いずれにせよ,不適切な問題なのは間違いないでしょう. なにせGCの回収の対象になるかならないかは,GCの実装に依存します. 「参照カウント 循環参照」,「保守的GC」辺りをキーワードに検索すれば 手がかりくらいはひっかかるでしょう. | ||||||||
