我有几个关于Java垃圾回收器的问题。
Q1.据我所知,当对象超出作用域且JVM即将收集垃圾时,会调用finalize()方法。我认为finalize()方法是被垃圾回收器自动调用的,但在这种情况下似乎不起作用。为什么需要显式地调用finalize()方法?
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);
}
}
Q2. 另外,垃圾回收器何时被调用?我了解gc是一个守护线程,并且根据剩余的堆大小由JVM调用。那是否意味着JVM等待程序使用资源的阈值限制,然后通知gc清除垃圾对象。
EDIT: gc如何解决循环引用?