Сильная ссылка

Жесткая (или сильная) ссылка — это тип ссылки по умолчанию.

Объект не может быть удален сборщиком мусора, если он доступен по любой строгой ссылке.

List<String> list = new ArrayList<>();
list=null

Теперь на объект ArrayList() не ссылается никакая ссылочная переменная, поэтому теперь он будет собран сборщиком мусора.

Слабая ссылка

слабая ссылка действует как держатель объекта.

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

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

Мягкая ссылка

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

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

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

SoftReference<List<String>> listReference = new SoftReference<List<String>>(new ArrayList<String>());

Хорошим примером использования мягкой ссылки является реализация нашего собственного кэширования.

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

Фантомная ссылка

Подобно слабым ссылкам, фантомные ссылки не запрещают сборщику мусора ставить объекты в очередь для очистки. Разница заключается в том, чтоpссылки на фантомы должны быть опрошены вручную изочереди ссылок, прежде чем их можно будет завершить. Это означает, что мы можем решить, что мы хотим сделать, прежде чем они будут очищены.

Фантомные ссылки отлично подходят, если нам нужно реализовать некоторую логику финализации,и они значительно более надежны и гибки, чем метод finalize.

Свяжитесь со мной в Linkedin

[1]: Изображение- https://www.geeksforgeeks.org/reference-variable-in-java/

[2]: https://www.baeldung.com/java-reference-types