Skip to content

Latest commit

 

History

History
35 lines (29 loc) · 2.54 KB

References.md

File metadata and controls

35 lines (29 loc) · 2.54 KB
tags title
Java, Basic, Weak, Soft, Phantom, Reference
Strong, Soft, Weak and Phantom References

Типы ссылок на Java объекты

Статья про слабые ссылки в википедии.

Strong

Строгие ссылки используются всегда при связывании переменной с объектом. Пока есть строгая ссылка на объект он не будет собран GC.

String s = new String("abc"); //s - строгая ссылка

Weak

Слабые ссылки представлены классом java.lang.ref.WeakReference. Как только остаётся только Weak ссылка, то объект будет жив только до следующей сборки. Используются во всяких кешах (Хотя лучше подходят для этого Soft). Также есть WeakHashMap использующая данные ссылки.

String s = new String("abc");
WeakReference<String> ws = new WeakReference<>(s);
s = null; //Теперь на "abc" ссылается только ws

Soft

Мягкие ссылки представлены классом java.lang.ref.SoftReference. Убираются GC только когда она нуждается в памяти. Имеет смысл использовать их для кеша (подходит лучше, чем Weak). Создаётся также как и WeakReference.

Phantom

Фантомные ссылки представлены классом java.lang.ref.PhantomReference. Создаётся также как и WeakReference. Для Basic достаточно сложно. По факту при ближайшей сборке объект удаляется и помещается в специальную очередь из которой можно узнать удалён он или нет. Тут объяснение и тут.

Методы