Skip to content

Latest commit

 

History

History
61 lines (40 loc) · 2.31 KB

File metadata and controls

61 lines (40 loc) · 2.31 KB

References

Strong reference

Обычная ссылка на объект. Когда мы пишет T a = new T(); создается сильная ссылка a. Такие объекты очищаются GC не раньше чем станут неиспользуемыми

Если мы сделаем такой вызов: a = null;, то ссылка станет доступной для текущего объекта, и. если нет дополнительных ссылок, такая ссылка может быть очищена GC


Weak reference

Объявлена классом WeakReference<T>
Если объект имеет только слабую ссылку, то такой объект может быть удален GC (нет сильной или soft ссылки)

Это означает, что если мы напишем такой код:

// Сильная ссылка
Gfg g = new Gfg();
g.x();

// Создаем слабую ссылку 
WeakReference<Gfg> weakref = new WeakReference<Gfg>(g);

// Тут мы удаляем сильную ссылку на g
// g становится доступна для GC
// Но удаление данной ссылки будет тольк в том случае, если GC понадобится память
g = null; 

// Тут мы воостанавливаем сильную ссылку на g
g = weakref.get();

g.x();

Soft reference

Объявлена классом SoftReference
Данная ссылка будет жить, пока JVM не понадобится освободить память. Все мягкие ссылки будут очищены до наступления OutOfMemoryError


Phantom reference

Объявлена классом PhantomReference
Такая ссылка помечает объет как готовый на удаление. Затем JVM кладет объект в очередь ссылок (объект помещается после вызова метода finalize() на нем)
Важно помнить что метод get() всегда возвращает null


Больше информации: