有多少个对象符合垃圾收集器的条件?

时间:2015-03-19 13:41:16

标签: garbage-collection

请您检查一下我的问题解决方案:“有多少个对象符合该行的垃圾收集器(//自定义代码)?”

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有资格删除,所以我们可以说只有一个对象有资格获得垃圾收集器!

这种做法是对的吗?

1 个答案:

答案 0 :(得分:0)

您是正确的,只有A,即创建的第一个Dog对象,显然可以收集。

但是,如果你的自定义代码&#34;不包括对d1d2d3的任何引用,编译器可以随时丢弃这些变量,将所有Dog个对象作为GC候选者。< / p>