Слабая ссылка - это разновидность ссылочной переменной, которая специально обрабатывается сборщиком мусора.
Это вводит другой вид достижимости, любой объект может быть:
- сильно достижимо (доступно из любого жизненного потока только по нормальным ссылкам)
- слабо достижимо (не достижимо сильно, но доступно по слабой ссылке (или несколькими способами, каждый из которых включает слабую ссылку))
- вообще недоступен
(Есть также Мягкие ссылки и Фантомные ссылки , которые я здесь опускаю - они работают аналогично и вводят больше уровней между ними.)
Если объект вообще недоступен, его можно собрать в любой момент.
Если объект является сильно достижимым, он вообще не может быть собран мусором.
Если сборщик мусора обнаруживает, что объект (или группа объектов) слабо доступен (возможно, по нескольким слабым ссылкам), сразу очищает все эти ссылки , а затем объекты недоступны (и могут быть мусором).
(На самом деле существует / может быть этап завершения между «недостижимым» и коллекцией, что также может сделать объект снова достижимым.)
Для использования Слабых ссылок вы можете использовать класс java.lang.ref.WeakReference
- фактическая ссылка находится в закрытой переменной этого класса и может быть установлена только с помощью конструктора, а затем очищена. Вы можете создать подкласс этого класса, если вам нужны другие данные, кроме самой ссылки, которая все еще должна быть там, когда ссылка очищена.
Для пула объектов в смысле «избегать дорогостоящих реализаций» слабая ссылка не является правильным инструментом.