2

我想了解在第 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
    }

}
4

2 回答 2

4

如果您设置对 null 的引用,这并不意味着垃圾收集器将启动并为它清理内存。

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

JVM 使用一个称为标记的过程来标记对象以进行垃圾回收。当 GB 启动时,它只会删除标记的对象。

于 2013-10-06T11:56:32.840 回答
1

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

于 2013-10-06T11:59:33.413 回答