Я думаю, что ошибка, которую вы делаете здесь, заключается в этой части:
Ссылка финализатора из "нефинализированного" связанного списка, принадлежащего потоку Финализатора.Мой объект занимает 3-е место в очереди для завершения.
Если вы говорите об этом:
static private Finalizer unfinalized = null;
в ВС Finalizer.java
(Finalizer
содержит next
и prev
Finalizer
, следовательно, часть «связанный список», для тех, кто играет дома), тогда это не список вещей, которые должны быть завершены.
Finalizer.add()
нет (как ядумаю, что вы предполагаете) вызывается во время процесса завершения, когда объект недоступен;скорее, этот метод вызывается во время создания объекта (например, в течение <init>
, по собственному коду для любого объекта, который переопределяет finalize()
.
Наличие финализатора вцепочка next
не означает, что она должна быть завершена, это
static private ReferenceQueue queue
, которая содержит такие объекты. Наличие в связанном списке просто означает, что имеет *1029* a finalize()
method.
Следовательно, ваша первая точка - красная сельдь, ваша вторая точка обеспечивает доступ к элементу, а третья точка вытекает из второй (потому что WeakReference
не будет очищен, пока объектдостижимо).
Надеюсь, это поможет!