Поиск…


Различные типы ссылок

Пакет java.lang.ref предоставляет классы ссылочных объектов, которые поддерживают ограниченную степень взаимодействия с сборщиком мусора.

Java имеет четыре основных типа ссылок. Они есть:

  • Сильная ссылка
  • Слабая ссылка
  • Мягкая ссылка
  • Ссылка на Phantom

1. Сильная ссылка

Это обычная форма создания объектов.

MyObject myObject = new MyObject();

Держатель переменной содержит значительную ссылку на созданный объект. Пока эта переменная активна и сохраняет это значение, экземпляр MyObject не будет собираться сборщиком мусора.

2. Слабая ссылка

Если вы не хотите, чтобы объект был длиннее, и вам нужно как можно скорее очистить / освободить память, выделенную для объекта, это способ сделать это.

WeakReference myObjectRef = new WeakReference(MyObject);

Просто слабая ссылка - это ссылка, которая недостаточно сильна, чтобы заставить объект оставаться в памяти. Слабые ссылки позволяют вам использовать способность сборщика мусора определять доступность для вас, поэтому вам не нужно делать это самостоятельно.

Когда вам нужен созданный объект, просто используйте .get() :

myObjectRef.get();

Следующий код иллюстрирует это:

WeakReference myObjectRef = new WeakReference(MyObject);
System.out.println(myObjectRef.get()); // This will print the object reference address
System.gc();
System.out.println(myObjectRef.get()); // This will print 'null' if the GC cleaned up the object

3. Мягкая ссылка

Мягкие ссылки немного сильнее слабых ссылок. Вы можете создать мягкий ссылочный объект следующим образом:

SoftReference myObjectRef = new SoftReference(MyObject);

Они могут удерживать память сильнее, чем слабая ссылка. Если у вас достаточно ресурсов / ресурсов памяти, сборщик мусора не будет чистить мягкие ссылки с энтузиазмом, как слабые ссылки.

Мягкие ссылки удобны для использования в кешировании. Вы можете создавать объекты с мягкими ссылками в виде кеша, где они сохраняются до тех пор, пока ваша память не закончится. Когда ваша память не может предоставить достаточное количество ресурсов, сборщик мусора удалит мягкие ссылки.

SoftReference myObjectRef = new SoftReference(MyObject);
System.out.println(myObjectRef.get()); // This will print the reference address of the Object
System.gc();
System.out.println(myObjectRef.get()); // This may or may not print the reference address of the Object

4. Фантомная ссылка

Это самый слабый ссылочный тип. Если вы создали ссылку на объект с помощью Phantom Reference, метод get() всегда будет возвращать значение null!

Использование этой ссылки состоит в том, что «Объекты ссылки Phantom, которые выставляются после коллектора, определяют, что их референты могут быть повторно возвращены. Фантомные ссылки чаще всего используются для планирования действий по предотвращению вскрытия более гибким способом, чем это возможно с помощью Механизм завершения Java. " - От Phantom Reference Javadoc от Oracle.

Вы можете создать объект Phantom Reference следующим образом:

PhantomReference myObjectRef = new PhantomReference(MyObject);


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow