Почему Phantom Ссылки не удаляются, поскольку они находятся в очереди?

Мы видим, что "phantom достижимый" так же недоступен, как "недостижимый": & sect;

Объект phantom доступен, если он не является ни сильно, ни мягко, ни слабодоступным, он был завершен, и ссылка на него ссылается на phantom.

Наконец, объект недоступен и, следовательно, имеет право на рекультивацию, когда он недоступен ни в одном из указанных способов.

Теперь, из: http://download.oracle.com/javase/6/docs/api/java/lang/ref/PhantomReference.html

В отличие от мягких и слабых ссылок, phantom ссылки не будут автоматически очищаться сборщиком мусора, поскольку они находятся в очереди. Объект, доступный с помощью ссылок phantom, останется таким, пока все такие ссылки не будут очищены или сами не станут недоступными.

Какое основное обоснование? Есть ли даже один?

Является ли это еще одним типичным случаем причуды Java API?

Ответ 1

Мягкие ссылки очищаются при постановке в очередь, поскольку первичное использование мягких ссылок позволяет обеспечить кеширование больших объектов, а очистка мягких ссылок позволяет собирать большой кеш-объект.

Слабые ссылки очищаются при постановке в очередь, поскольку первичное использование слабых ссылок позволяет разрешить ссылаться на объект, не мешая ему собирать мусор, поэтому очистка ссылок, как только объект находится в очереди, позволяет собирать мусор.

Фантомные ссылки не очищаются, когда они установлены в очередь, поскольку один случай фантомных ссылок - это позволить выполнять очистку до того, как объект будет собран мусором. Не очищая ссылки, объект остается доступным для фантома (и не подлежит сбору мусора) до тех пор, пока пользователь PhantomReference не очистит этот объект, или PhantomReference не будет сам собран мусором.

Это объясняется здесь,

Объект доступен для фантома, если он не является ни сильным, мягким, ни слабодоступным, он был доработан, и к нему относится фантомная ссылка.

Наконец, объект недоступен и, следовательно, имеет право на рекультивацию, когда он недоступен ни в одном из указанных способов.

Ответ 2

Это было изменено в JDK 9. Теперь фантомные ссылки очищаются, как мягкие и слабые ссылки. И соответствующий абзац был удален из Джавадока.

В отличие от мягких и слабых ссылок, фантомные ссылки не автоматически очищаются сборщиком мусора, поскольку они находятся в очереди. Объект, доступный через фантомные ссылки, останется таким, пока все такие ссылки не будут очищены или сами не станут недоступными.