По ссылке https://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.html, PhantomReferences является помещёны только тогда, когда объект физически удаляются из памяти и WeakReferences является помещён до завершения или сбор мусора фактически произошло.Понимание ссылки Фантом против слабой ссылки относительно Ссылки очереди
Разница заключается именно в том, когда происходит заражение. WeakReferences помещаются в очередь, как только объект, к которому они указывают , становится слабодоступным. Это до финализации или мусора. коллекция действительно произошла; теоретически объект может быть даже «воскрешен» методом неортодоксального finalize(), но значение WeakReference оставалось бы мертвым. PhantomReferences помещается в очередь только , когда объект физически удаляется из памяти, а метод get() всегда возвращает значение null специально, чтобы вы не могли «воскресить» почти мертвый объект.
, тогда как в соответствии с http://www.ibm.com/developerworks/library/j-refs/, PhantomReference добавляется к его ReferenceQueue до объекта кучного освобождается и и WeakReferences добавляют к его ReferenceQueue после финализации или сборке мусора.
В отличие от мягких и слабых ссылок, то PhantomReference добавляется к его ReferenceQueue до объекта куча освобождается. (Помните, что все Объекты PhantomReference должны быть созданы с ассоциированным ReferenceQueue.) Это позволяет предпринять действия перед тем, как объект кучи будет восстановлен.
Когда метод finalize() объекта кучи запущен и его память освобождена, объект WeakReference добавляется в свой ReferenceQueue, если он существует.
Я смущен. Какой из них правильный?
В основном, я хочу знать разницу между слабым и фантомным ссылкой относительно ссылочной очереди?