Страницы

Поиск по вопросам

понедельник, 9 декабря 2019 г.

Зачем нужны разные типы ссылок в Java?

#java


Углубляю познания о джаве. Наткнулся на статью о типах ссылок. Понял, что существуют
4 типа ссылок:


Strong reference 
Weak Reference
Soft Reference
Phantom Reference


Незнаю, правильно ли я понял, поэтому прошу подправить.

1 Тип сильная ссылка (Strong reference)

Object object = new Object();//создал обьект 
object = null;//теперь может быть собран сборщиком мусора


2 Тип слабая ссылка (Weak Reference)

// какой-то объект
Object object= new Object ();

// слабая ссылка на него
WeakReference weakStudent = new WeakReference(object);

// теперь объект Object  может быть собран сборщиком мусора
object= null;


3 Тип мягкая ссылка (Soft Reference)

// какой-то объект
Object object= new Object ();

// слабая ссылка на него
SoftReference softStudent = new SoftReference(object)

// теперь объект Student может быть собран сборщиком мусора
// но это случится только в случае сильной необходимости JVM в памяти
object= null;


4 Тип фантомная ссылка (ничего не понял про него)
    


Ответы

Ответ 1



Более-менее рассказано в документации к пакету java.lang.ref: Soft references are for implementing memory-sensitive caches, weak references are for implementing canonicalizing mappings that do not prevent their keys (or values) from being reclaimed, and phantom references are for scheduling post-mortem cleanup actions. Post-mortem cleanup actions can be registered and managed by a Cleaner. Подробнее и по-русски, в порядке убывания жёсткости: Сильные, они же обычные, нужны для указания на объекты, которые должны обязательно оставаться в памяти всё то время, что эти ссылки на него существуют. Если не складывается, получите OutOfMemoryError. Мягкие ссылки полезны для кэшей, чувствительных к доступному объёму оперативной памяти. Объекты по ним могут зачиститься, но только в случае необходимости. Например, если нужно насоздавать ещё объектов с сильными ссылками, а уже негде, лучше освободить кэш и замедлить работу, чем уронить процесс напрочь. Слабые ссылки полезны для сопоставления объектов чему-нибудь без удерживания их от зачистки когда они больше не нужны (а-ля Map<Ключ, WeakRef<Значение>>). На возможность зачистки они не влияют вообще никак, слабые ссылки будут очищены при очередном запуске сборщика. Фантомные ссылки возникают, когда объект уже признан мусором, финализирован и находится в процессе зачистки, о чём можно узнать с помощью класса Cleaner и выполнить в это время какие-то собственные действия. Плюс общее правило: политика зачистки для некоего объекта и очистки ссылок на него определяется самыми жёсткими из всех ссылок, что на него указывают. Глоссарий не вполне очевидных переводов: зачистить, зачистка — reclaim, reclamation очистить — clear

Комментариев нет:

Отправить комментарий