Знание концепций слабых и мягких ссылок отличается от того, как их использовать. Мы все знаем, что сборщик мусора восстанавливает память для объектов, которые соответствуют критериям утилизации, но не все программисты знают, что критерии переработки зависят от типа ссылки, указывающей на объект. Это основное различие между слабыми ссылками и мягкими ссылками на Java. Если у объекта есть только слабая ссылка, указывающая на него, сборщик мусора немедленно перерабатывает объект, что является неотложным способом переработки его. Относительно, если есть мягкие ссылки, указывающие на эти объекты, они будут переработаны только в том случае, если JVM требует памяти. Особое поведение слабых и мягких цитат делает их очень полезными в некоторых случаях. Например: мягкие ссылки можно использовать для реализации кэша. Слабые ссылки очень подходят для хранения метаданных, таких как хранение ссылок на загрузку класса. Если класс не загружен, нет никакой ссылки на загрузку класса. Как только последняя сильная ссылка будет удалена, будет переработан только слабый эталонный загрузчик класса. В этой статье мы поговорим о различных типах ссылок на Java, таких как: сильная ссылка и PhantomReference.
Слабые ссылки по сравнению с мягкими ссылками на Java
В Java есть четыре типа ссылок:
1. Сильная ссылка
2. SleaseReference
3. softreference
4. PhantomReference
Сильные ссылки - это самые простые ссылки, которые мы используем в программировании, например, переменная S в строке кода S = "ABC" - это прочная ссылка на объект строки "ABC". Любой объект, на который указано сильная ссылка, не может быть переработан коллекционером мусора, и эти объекты необходимы в программе. Слабые ссылки представлены классом класса класса java.lang.ref.weakreference Class, и вы можете создавать слабые ссылки, используя следующий код:
Кода -копия выглядит следующим образом:
Счетчик = новый счетчик ();
SleedReference <счетчик> SleedCounter = новый SleedReference <счетчик> (счетчик); // Слабая ссылка
счетчик = NULL;
Теперь, если вы назначаете нулевое значение счетчику сильного эталонного объекта, объект может быть переработан сборщиком мусора. Поскольку в настоящее время объект больше не содержит другие сильные ссылки, даже слабая учета, указывая на объект, не может помешать сборщику мусора утилизацию объекта. И наоборот, если объект содержит мягкую ссылку, объект Counter не переработан сразу, если JVM не требует памяти. Мягкие ссылки в Java представлены классом java.lang.ref.softreference.
Кода -копия выглядит следующим образом:
Counter Prime = New Counter ();
Softreference Soft = New Softreference (Prime);
Prime = NULL;
После того, как сильная ссылка пуста, второе поведение кода, счетчик, создает мягкую ссылку. Учитывая эту разницу между мягкими ссылками и слабыми ссылками, мягкие ссылки более подходят для механизмов кэширования, в то время как слабые ссылки более подходят для хранения метаданных. Другим примером использования слабых ссылок является Sleashhashmap, который является еще одной реализацией интерфейса карты, помимо Hashmap и Treemap. Sleashhashmap имеет особенность: ключи на карте инкапсулируются как слабые ссылки, что означает, что после удаления сильной ссылки слабые ссылки внутри Sleasehashmap не могут предотвратить собрание объекта коллекционером мусора.
Виртуальная ссылка является третьей доступной ссылкой в пакете java.lang.ref, представленном классом java.lang.ref.phantomreference. Объекты с виртуальными ссылками могут быть переработаны коллекционером мусора в любое время. Подобно слабым ссылкам и мягким ссылкам, вы можете создавать виртуальные ссылки через следующий код:
Кода -копия выглядит следующим образом:
DigitalCounter Digit = new DigitalCounter ();
PhantomReference Phantom = New PhantomReference (Digit);
Digit = NULL;
Как только сильная ссылка будет удалена, объект DigitalCounter в третьем ряду может быть переработан коллекционером мусора в любое время. Поскольку существует только одна виртуальная ссылка, указывающая на объект, виртуальная ссылка не может помешать сборщику мусора восстановить объект.
В дополнение к пониманию слабых ссылок, мягких ссылок, виртуальных ссылок и Sleasehashmap, вам также необходимо понимать reference quepue. В процессе создания любых слабых ссылок, мягких ссылок и виртуальных ссылок вы можете предоставить справочную очередь в очереди через следующий код:
Кода -копия выглядит следующим образом:
Ссылка на рефлексию = new Reference quide ();
DigitalCounter Digit = new DigitalCounter ();
PhantomReference <DigitalCounter> phantom = new PhantomReference <DigitalCounter> (цифра, опровержение);
Справочные экземпляры добавляются в справочную очередь, и вы можете перерабатывать объекты, запрашивая справочную очередь в любое время. Жизненный цикл объекта может быть описан на рисунке ниже: