Нет, не все. Только сильные (strong) ссылки защищают объект от сборки мусора. Слабые (weak), фантомные (phantom) и мягкие (soft) ссылки этого не делают.
Вот их основные отличия:
- Сильная (Strong) ссылка: Стандартная ссылка в Java/Kotlin. Если на объект есть хотя бы одна сильная ссылка, он не будет собран сборщиком мусора. Присваивается по умолчанию.
- Мягкая (Soft) ссылка: Объект, на который ссылается мягкая ссылка, может быть собран сборщиком мусора только если JVM остро нуждается в памяти. Полезно для кеширования. Реализуется через
SoftReference.
- Слабая (Weak) ссылка: Объект, на который ссылается слабая ссылка, может быть собран сборщиком мусора в любой момент, если на него нет сильных ссылок. Используется для реализации кешей, которые не блокируют сборку мусора. Реализуется через
WeakReference.
- Фантомная (Phantom) ссылка: Объект, на который ссылается фантомная ссылка, уже поставлен в очередь на сборку мусора (
finalize уже вызван или не переопределен), но еще не был полностью удален. Нужна для отслеживания процесса сборки и освобождения ресурсов. Реализуется через PhantomReference.
Пример слабой ссылки:
java