完成和垃圾收集

时间:2014-06-29 10:59:47

标签: java garbage-collection

你能帮我理解垃圾收集吗?

当我强制终结时,我应该在finzlize方法中出现。我在那里放了一个断点。

好吧,当我开始调试时,我的程序在没有停在该断点处完成。 你能帮我理解我做错了什么吗?

public class Book {
    protected void finalize(){
        int a = 0; // Breakpoint;
    }
}

public class Test {
    public static void main(String[] args){
        Book a = new Book();
        System.gc();
    }
}

2 个答案:

答案 0 :(得分:3)

在这种特殊情况下,新的Book实例不会被垃圾收集,因为它仍然被局部变量a引用。

此外,正如其他答案所示,在finalize返回之前,无法保证所有对象都完全GCed(并且System.gc已调用)。特别是,稍后可以在不同的线程中调用finalize方法。如果您的主应用程序在此之前终止,则可能根本不会调用该方法。

答案 1 :(得分:1)

垃圾收集是查看堆内存,识别哪些对象正在使用哪些对象以及删除未使用的对象的过程。

in use object 或引用的对象意味着程序的某些部分仍然保持指向该对象的指针。

程序的任何部分都不再引用未使用的对象或未引用的对象。因此,可以回收未引用对象使用的内存。

有关详细信息Java Memory ManagementHow Garbage Collection works in Java