2 peter20091001 peter20091001 于 2017.08.29 22:10 提问

关于Java垃圾回收的问题

public class Person {
public void finalize() {
System.out.println("finalized");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Person();
new Person();
System.gc();
}

}
这段代码运行后,会执行finalize方法,为什么改成
Person p1 = new Person();
Person p2 = new Person();
运行时finalize方法就不执行了呢?

3个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2017.08.30 09:24

说明JVM没有执行GC操作。

u013855332
u013855332   2017.08.30 18:53

finalize只在GC时执行,GC时有一个终结队列,每个重写了终结方法,且没有执行过该方法的对象,都会被扔到这个终结队列中,然后再慢慢执行,所以finalize方法并不总是及时执行。

ispwill
ispwill   2017.08.31 17:17

System.gc()不会总是有效

ispwill
ispwill 调用 gc 方法暗示着 Java 虚拟机做了一些努力来回收未用对象,以便能够快速地重用这些对象当前占用的内存。当控制权从方法调用中返回时,虚拟机已经尽最大努力从所有丢弃的对象中回收了空间。
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片