为什么没有调用 finalize?
我有几个关于java中的垃圾回收器的问题。
Q1.As 据我所知,当对象超出范围并且JVM即将收集垃圾时,finalize()被调用。我以为finize()方法是由垃圾回收器自动调用的,但它在这种情况下似乎不起作用。这是什么解释?为什么我需要显式调用finize()方法?
public class MultipleConstruct {
int x,y;
public MultipleConstruct(int x)
{
this.x= x;
y=5;
System.out.println("ONE");
}
@Override
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
super.finalize();
System.out.println("FINALIZED");
}
public static void main(String[] args) throws Throwable {
MultipleConstruct construct = new MultipleConstruct(3);
}
}
问题 2.另外,何时调用垃圾回收器?我知道gc是一个守护进程线程,由JVM调用,具体取决于剩余的堆大小。这是否意味着,JVM 等待程序使用资源的阈值限制,然后通知 gc 清除垃圾对象。
编辑:gc 如何解析循环引用?