请您检查一下我的问题解决方案:“有多少个对象符合该行的垃圾收集器(//自定义代码)?”
class Dog {
String name;
}
public class TestGarbage {
public static void main(String[] args) {
Dog d1 = new Dog();
Dog d2 = new Dog();
Dog d3 = new Dog();
d1 = d3; // line 1
d3 = d2; // line 2
d2 = null; // line 3
// custom code
}
}
我从文档中得知:“在丢弃所有对它的引用之前,该对象不会成为垃圾收集的候选对象。”
对象和引用:(其中A,B和C是创建的对象)
d1 -> A
d2 -> B
d3 -> C
------- d1 = d3 ------
d1 -> C
d2 -> B
d3 -> C
------- d3 = d2 ------
d1 -> C
d2 -> B
d3 -> B
------- d2 = null ------
d1 -> C
d2 -> null
d3 -> B
A有资格删除,所以我们可以说只有一个对象有资格获得垃圾收集器!
这种做法是对的吗?
答案 0 :(得分:0)
您是正确的,只有A
,即创建的第一个Dog
对象,显然可以收集。
但是,如果你的自定义代码"不包括对d1
,d2
或d3
的任何引用,编译器可以随时丢弃这些变量,将所有Dog
个对象作为GC候选者。< / p>