Почему не вызывается finalize?

У меня есть пара вопросов по сборщику мусора в 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 разрешает циклические ссылки?

10
задан Mankarse 17 October 2011 в 03:12
поделиться