Чтобы понять слабые ссылки в Java, мне пришлось обратиться к Спецификации языка Java. Следующая часть из раздела 12.6 меня озадачивает:
Финализатор незавершенного объекта никогда не вызывался автоматически; финализатор завершенного объекта вызывается автоматически. Финализатор объекта никогда не вызывался автоматически, но виртуальная машина Java может в конечном итоге автоматически вызвать его финализатор.
Так в чем же формальная разница между незавершенным и финализируемым объектом? Из цитаты видно, что если unfinalized и finalizable должны быть разными, то для незавершенного объекта должно быть так, что не верно, что JVM может в конечном итоге вызвать свой финализатор. Немного запутанно, или мне все еще нужно изучить английскую семантику;)
Ссылка на раздел спецификации Java: Реализация финализации а>