Java предоставляет четыре типа ссылок, которые определяют, как garbage collector обрабатывает объекты в памяти. Каждый тип служит определённой цели в управлении памятью и жизненном цикле объекта.
Сильные ссылки — самый распространённый тип. Когда ты создаёшь объект с помощью ключевого слова new, ты создаёшь сильную ссылку на него. Garbage collector никогда не удалит объект, пока на него существует сильная ссылка.
Object obj = new Object(); // сильная ссылка
Мягкие ссылки позволяют объектам быть удалёнными сборщиком мусора, когда памяти становится мало. Они полезны для реализации кэшей, которые можно очистить, если JVM нужна дополнительная память.
SoftReference<Object> softRef = new SoftReference<>(new Object());
Слабые ссылки позволяют объектам быть удалёнными сборщиком мусора в любой момент, независимо от доступной памяти. Garbage collector удалит объекты со слабыми ссылками во время следующего цикла сборки, если на них нет сильных ссылок. Чаще всего они используются в таких сценариях, как WeakHashMap.
WeakReference<Object> weakRef = new WeakReference<>(new Object());
Фантомные ссылки используются для отслеживания финализации объектов и выполнения действий по очистке. В отличие от других типов ссылок, get() всегда возвращает null. Они работают с ReferenceQueue, чтобы отловить момент, когда объекты вот-вот будут удалены сборщиком мусора.
PhantomReference<Object> phantomRef = new PhantomReference<>(new Object(), queue);
Главное различие между этими типами ссылок — их приоритет при сборке мусора:
Soft references собираются сборщиком мусора только когда память становится низкой, тогда как weak references могут быть собраны в любой момент независимо от доступной памяти.
Новый — ещё не проверен сообществом
Вы