親オブジェクトの場合、別のオブジェクトのメンバーであるオブジェクトはガベージ コレクションの対象になりますか? たとえば、次のシナリオを想像してみましょう。
MyClass_1 のコード:
public class MyClass_1 {
// Member object
private MyClass_2 myClass_2;
// Getter
public MyClass_2 getMyClass_2() {
return this.myClass_2;
}
// Setter
public void setMyClass_2(MyClass_2 myClass_2) {
this.myClass_2 = myClass_2;
}
}
MyClass_2 のコード:
public class MyClass_2 {
// Member object
private MyClass_3 myClass_3;
// Getter
public MyClass_3 getMyClass_3() {
return this.myClass_3;
}
// Setter
public void setMyClass_3(MyClass_3 myClass_3) {
this.myClass_3 = myClass_3;
}
}
さて、これで完了です (MyClass_3 のコードは関係ありません)。
// Instantiation of one root object
MyClass_1 object_1 = new MyClass_1();
// Composition of two more objects
object_1.setMyClass_2(new MyClass_2());
object_1.getMyClass_2().setMyClass_3(new MyClass_3());
// And now...
object_1 = null;
確かに、この時点でobject
_1 は Garbage Collectable ですが、object_2
andはobject_3
どうですか? メモリリークを避けるためにこれを行う必要がありますか?
object_1.getMyClass_2().setMyClass_3(null);
object_1.setMyClass_2(null);
object_1 = null;
それとも、JVM はそのリファレンス リリースを自動的に行いますか? 手動で行う必要がある場合、この目的で finalize() に頼ることはできますか?