Концепции сильного цитирования, мягкой цитирования, слабой цитирования и виртуального цитата
Сильный обзор
Сильные цитаты относятся к общим цитатам в коде программы. Например, объект и Str в следующем коде являются сильными цитатами:
Object Object = new Object (); String str = "hello";
Пока объект имеет сильную ссылку, связанную с ним, JVM определенно не будет переработать этот объект. Даже в отсутствие памяти JVM предпочел бы ошибочно допустить ошибку, чем утилизация такого объекта.
Например, следующий код:
открытый класс main {public static void main (string [] args) {new main (). fun1 (); } public void fun1 () {Object object = new Object (); Object [] objarr = новый объект [1000]; }}При запуске объекта [] objarr = новый объект [1000]; При выходе к этому предложению, если не хватает памяти, JVM принесет ошибку OOM и не будет переработать объект, на который указан объект. Тем не менее, следует отметить, что после выполнения Fun11, как объекта, так и Объррара больше не существуют, поэтому объекты, на которые они указывают, будут переработаны JVM.
Если вы хотите прервать связь между сильной ссылкой и объектом, вы можете отобразить ссылку на NULL, чтобы JVM переработал объект в соответствующее время.
Softreference
Мягкие ссылки используются для описания некоторых полезных, но не требуемых объектов и представлены в Java с использованием класса Java.lang.ref.softreference. Для мягких ссылок, связанных с объектами, JVM будет переработать объект только тогда, когда недостаточно памяти. Поэтому это можно хорошо использовать для решения проблемы OOM, и эта функция очень подходит для реализации кэширования: например, кэширование веб -страницы, кэширование изображений и т. Д.
Мягкая ссылка может быть использована в сочетании с эталонной очередью (reference quieue). Если объект, на который ссылается мягкая ссылка, переработана JVM, мягкая ссылка будет добавлена в связанную справочную очередь. Вот пример использования:
импортировать java.lang.ref.weakreference; открытый класс main {public static void main (string [] args) {sleaseReference <string> sr = new SleaseReference <string> (new String ("hello")); System.out.println (sr.get ()); System.gc (); // Уведомление GC JVM для системы сбора мусора.out.println (sr.get ()); }}Слабая обратная сторона
Слабые ссылки также используются для описания несущественных объектов. Когда JVM выполняет сбор мусора, объекты, связанные со слабыми ссылками, будут переработаны независимо от того, достаточно ли памяти. В Java используйте класс java.lang.ref.weakreference, чтобы представить его. Вот пример использования:
импортировать java.lang.ref.weakreference; открытый класс main {public static void main (string [] args) {sleaseReference <string> sr = new SleaseReference <string> (new String ("hello")); System.out.println (sr.get ()); System.gc (); // Уведомление GC JVM для системы сбора мусора.out.println (sr.get ()); }}PhantomReference
Виртуальные ссылки отличаются от предыдущих мягких ссылок и слабых ссылок, и они не влияют на жизненный цикл объекта. В Java используйте Java.lang.ref.phantomReference Class, чтобы представить его. Если объект связан с виртуальной ссылкой, он может быть переработан коллекционером мусора в любое время, точно так же, как с ним не связано ссылка.
Следует отметить, что виртуальные ссылки должны использоваться в связи с отсчета. Когда сборщик мусора готовится к переработке объекта, если он обнаружит, что он имеет виртуальную ссылку, он добавит эту виртуальную ссылку на связанную справочную очередь. Программа может понять, будет ли указанный объект, собранный мусор, оценив, была ли виртуальная ссылка добавлена в справочную очередь. Если программа обнаруживает, что в очередь ссылается на виртуальная ссылка, она может предпринять необходимые действия, прежде чем память о ссылочном объекте будет переработана.
Дальнейшее понимание мягких и слабых цитат
Мы часто используем сильные цитаты при написании кода. Для других трех типов цитат наиболее часто используемыми являются мягкие цитаты и слабые цитаты. Эти два имеют как сходство, так и различия. Все они используются для описания несущественных объектов, но объекты, связанные с мягкими ссылками, будут переработаны только при недостаточной памяти, в то время как объекты, связанные со слабыми ссылками, всегда будут переработаны, когда JVM собирается мусор. Ввиду приведенных выше функций мягкие ссылки подходят для кэширования. Когда память недостаточно, JVM может переработать память. Слабые ссылки могут использоваться для предотвращения утечки памяти в функции обратного вызова. Поскольку функции обратного вызова часто являются анонимными внутренними классами и неявно сохраняют ссылки на внешние классы, если функция обратного вызова вызывает обратно в другом потоке, и если внешний класс должен быть переработан в настоящее время, утечка памяти, потому что анонимные внутренние классы хранят сильные ссылки на внешние классы.
Приведенная выше статья кратко рассказывает о разнице между четырьмя методами цитирования в Java - это все контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.