关于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方法就不执行了呢?

说明JVM没有执行GC操作。

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

System.gc()不会总是有效