垃圾收集 - 空引用和引用新对象

时间:2013-10-06 11:54:28

标签: java scjp

我想了解在第1行中创建的对象何时将是垃圾收集...我假设它在第3行但我不认为这是我的答案中的一个选项 - 第4行& 5是答案的一部分

class MyObject{
    public void myMethod(){
        System.out.println("Mymethod");
    }
}


public class Test {

    public static void main(String[] args) {
        MyObject m = new MyObject(); //line1
        m.myMethod();//line2
        m = null;//line3
        m = new MyObject();//line4
        m.myMethod();//line5
    }

}

2 个答案:

答案 0 :(得分:4)

如果你将引用设置为null并不意味着垃圾收集器会启动并为它清理内存。

当JVM垃圾收集器启动时,只有符合条件/标记的对象才会被垃圾收集。垃圾收集器会检查所有符合垃圾收集条件的对象,即没有从任何地方引用的对象。

JVM使用名为Marking的进程将对象标记为垃圾回收。当GB启动时,它只会删除标记的对象。

答案 1 :(得分:1)

正确答案是,无法说明第1行创建的对象何时会被垃圾回收。所有你可以肯定地说,它变成符合条件的在第3行被垃圾收集。可以在第3行之后被垃圾收集,但我们不能说它成为。