tags | title |
---|---|
Java, Basic, Weak, Soft, Phantom, Reference |
Strong, Soft, Weak and Phantom References |
Статья про слабые ссылки в википедии.
Строгие ссылки используются всегда при связывании переменной с объектом. Пока есть строгая ссылка на объект он не будет собран GC.
String s = new String("abc"); //s - строгая ссылка
Слабые ссылки представлены классом java.lang.ref.WeakReference. Как только остаётся только Weak ссылка, то объект будет жив только до следующей сборки. Используются во всяких кешах (Хотя лучше подходят для этого Soft). Также есть WeakHashMap использующая данные ссылки.
String s = new String("abc");
WeakReference<String> ws = new WeakReference<>(s);
s = null; //Теперь на "abc" ссылается только ws
Мягкие ссылки представлены классом java.lang.ref.SoftReference. Убираются GC только когда она нуждается в памяти. Имеет смысл использовать их для кеша (подходит лучше, чем Weak). Создаётся также как и WeakReference.
Фантомные ссылки представлены классом java.lang.ref.PhantomReference. Создаётся также как и WeakReference. Для Basic достаточно сложно. По факту при ближайшей сборке объект удаляется и помещается в специальную очередь из которой можно узнать удалён он или нет. Тут объяснение и тут.
T get()
- возращает объект на который указывает ссылка. Если он собран, то nullvoid clear()
- очищает ссылкуhttp://samolisov.blogspot.com/2011/09/phantomreferences-java.html