• ベストアンサー

Javaガーベジコレクションについて

あるテキストにガーベジコレクションに関する次のような問題があります。  12. X3 x2 = new X3(); 13. X3 x3 = new X3(); 14. X3 x5 = x3; 15. x3 = x2; 16. X3 x4 = x3; 17. x2 = null; 18. // コードを挿入する オブジェクトをガーベジコレクションの対象にするには、18行目にどの1行を挿入しますか(2つを選択)。 A. x3 = null; B. x4 = null; C. x5 = null; D. x3 = x4; E. x5 = x4; 答えは、C とE になっていますが、どうしてそうなるのかどなたか分かりやすく教えていただけませんか。

質問者が選んだベストアンサー

  • ベストアンサー
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

どこのテキストかわかりませんが問題が悪いですね。答えも変です。 CとEだと13で作られたインスタンスはガーベッジコレクトの対象になりますが12で作られたインスタンスは対象にならないです。 しかも13で作られたインスタンスをガーベッジコレクトの対象にするだけならCかEのどちらか一方だけで十分です。

KuroGin
質問者

お礼

ご回答ありがとうございました。

KuroGin
質問者

補足

回答ありがとうございました。 おっしゃるとおりです。

その他の回答 (2)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.3

必要なのは一行です。 その一行は2通り書けるということです。 2行実行して、2つのインスタンス全部ガベージしろと云っているわけではありません。 全部ガベージするには、3つの変数全部参照外しをしないといけないので3行必要です。

KuroGin
質問者

お礼

よくわかりました。 ご回答ありがとうございました。

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

12. X3 x2 = new X3(); // instance A 13. X3 x3 = new X3(); // instance B 14. X3 x5 = x3; // instance B 15. x3 = x2; // instance A 16. X3 x4 = x3; // instance A 17. x2 = null; >オブジェクトをガーベジコレクションの対象にするには、18行目にどの1行を 問題文はこのとおりだったのか少し疑問ではあるけど、 まずはこの文章で、どちらか一方のインスタンスへの参照がすべて無くなればいいと言うことは解りますか? 一文で参照を外すことが出来るのは、一個ですよね?ということは、一変数からしか参照されていないものを変更すれば、参照が無くなってガベージの対象となります。

KuroGin
質問者

補足

17行目まで実行したときinstanceA を指している参照変数はx4 とx3 でinnstanceB を指している参照変数はx5 になっていると思います。 したがって、innstanceB は答えEによってガーベジコレクションの対象になります。引き続き、instanceA は答えAによってガーベジコレクションの対象になります。 従って答えはAとEになるのでしょうか。 

関連するQ&A