У меня есть пара вопросов по сборщику мусора в java.
Q1. Насколько я понимаю, finalize () вызывается, когда объект выходит за пределы области видимости и JVM собирается собрать мусор. Я думал, что метод 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 разрешает циклические ссылки?