Мы знаем, что в Java, кроме основных типов данных, все остальные типы являются ссылочными. По продолжительности своего жизненного цикла Java делит ссылочные типы наСильные ссылки, мягкие ссылки, слабые ссылки, фантомные ссылки.
В обычных обстоятельствах мы в основном используем только сильные ссылочные типы, а другие ссылочные типы мы можем видеть только во время интервью или при чтении исходного кода библиотек классов или других фреймворков в будние дни.
1. Сильные цитаты
Например, новый объект, который мы используем в повседневной жизни, является сильной ссылкой.Object obj = new Object();
Когда места в памяти JVM недостаточно, лучше сгенерировать OutOfMemoryError, чтобы вызвать аварийное завершение программы, чем восстановить память.Живые объекты с сильными ссылками!
Помните, что он живой, невозможно, чтобы новый объект никогда не был восстановлен сборщиком мусора. Когда обычный объект не имеет другого отношения ссылки, пока он выходит за рамки ссылки или явно присваивает ссылке значение null, ваш объект указывает, что он не является живым, поэтому он может быть переработан GC. Конечно, время восстановления не обязательно является конкретным, в зависимости от стратегии восстановления GC.
2. Мягкие ссылки
Мягкие ссылки имеют более короткое время жизни, чем сильные ссылки. Мягкие ссылки выполняются черезSoftReference
класс реализован.
Object obj = new Object();
SoftReference softObj = new SoftReference(obj);
obj = null; //去除强引用
Это простой способ использования мягких ссылок. пройти черезget()
метод получения объекта. Когда JVM считает, что места в памяти недостаточно, она возвращается и пытается восстановить объект, на который указывает мягкая ссылка, то есть когда JVM бросаетOutOfMemoryError
Перед этим объект мягкой ссылки будет очищен. Мягкие ссылки можно использовать с очередями ссылок(ReferenceQueue)
используется в комбинации.
Object obj = new Object();
ReferenceQueue queue = new ReferenceQueue();
SoftReference softObj = new SoftReference(obj,queue);
obj = null; //去除强引用
когдаsoftObj
мягкая ссылкаobj
После рекультивации GC,softObj
объект будет набитqueue
, то мы можем передать очередьpoll()
чтобы проверить, был ли переработан объект, о котором вы заботитесь, и, если очередь пуста, вернутьnull
. В противном случае возвращается объект мягкой ссылки, которыйsoftObj
.
Мягкие ссылки обычно используются для реализации кэшей, чувствительных к памяти.Если есть свободная память, кэш можно сохранить, а когда памяти недостаточно, он будет очищен, чтобы гарантировать, что кэш не исчерпает память. при использовании кеша. Например, кешированное изображение в структуре кэша изображений осуществляется через мягкую ссылку.
3. Слабые ссылки
Слабые ссылки делаются черезWeakReference
Реализация класса, его жизненный цикл короче, чем мягкая ссылка, в том числе за счетget()
метод получения объекта.
Object obj = new Object();
WeakReference<Object> weakObj = new WeakReference<Object>(obj);
obj = null; //去除强引用
Во время GC этот объект будет утилизирован независимо от нехватки памяти, а также может взаимодействовать сReferenceQueue
То же самое относится к кэшам, чувствительным к памяти.ThreadLocal
Для ключа в .
4. Фантомные ссылки
Также известны как фантомные ссылки, которые передаются черезPhantomReference
класс реализован. Может быть истребован GC в любое время, как если бы ссылок не было.
Object obj = new Object();
ReferenceQueue queue = new ReferenceQueue();
PhantomReference<Object> phantomObj = new PhantomReference<Object>(obj , queue);
obj = null; //去除强引用
Вы не можете получить доступ к какому-либо свойству или функции объекта через виртуальную ссылку. Так какая от этого польза? Виртуальные ссылки просто обеспечивают способ гарантировать, что объектыfinalize
Механизм, чтобы сделать что-то позже. Например, после того, как объект переработан, отправляется системное уведомление или что-то в этом роде. Фиктивные ссылки обязательныReferenceQueue
Конкретный метод использования такой же, как и в программной ссылке, упомянутой выше. В основном используется для отслеживания активности объектов, собирающих мусор.
Если есть ошибки, поправьте меня!
Личный публичный аккаунт: стратегия прокачки да
Имеются соответствующие расширенные материалы интервью (распространение, настройка производительности, классическая книга в формате pdf), ожидающие сбора.