Подтвердить что ты не робот

Может ли кто-то объяснить разницу между сильными, мягкими, слабыми и Phantom ссылками и их использованием?

Я пытаюсь понять разницу между разными ссылками, но теория не вызывает никаких идей для меня, чтобы визуализировать то же самое.

Может кто-нибудь объяснить вкратце различные ссылки?

Пример для каждого из них будет лучше.

4b9b3361

Ответ 1

Еще одна хорошая статья по теме:
Java Reference Objects или как я научился прекращать волноваться и любить OutOfMemoryError, с хорошими диаграммами

http://www.kdgregory.com/images/java.refobj/object_life_cycle_with_refobj.gif

Extract:

Как вы могли догадаться, добавление трех новых необязательных состояний к диаграмме жизненного цикла объекта создает беспорядок.
Хотя документация указывает на логическую прогрессию от достижимой цели с помощью мягких, слабых и phantom, для исправления, фактическая прогрессия зависит от того, какие объекты ссылки создаются вашей программой.
Если вы создаете WeakReference, но не создаете SoftReference, тогда объект переходит непосредственно от сильно доступного до слабо доступного до финализированного для сбора. жизненный цикл объекта, с объектами справки

Также важно помнить, что не все объекты привязаны к ссылочным объектам - на самом деле, очень немногие из них должны быть.
Объектом ссылки является слой косвенности: вы проходите через ссылочный объект для доступа к указанному объекту и, очевидно, вам не нужен этот слой косвенности во всем коде.
На самом деле большинство программ будут использовать ссылочные объекты для доступа к относительно небольшому числу объектов, создаваемых программой.

Ссылки и ссылки

Объект ссылки обеспечивает слой косвенности между вашим программным кодом и другим объектом, называемым референтом.
Каждый ссылочный объект строится вокруг своего референта и предоставляет метод get() для доступа к референту. Когда вы создадите ссылку, вы не сможете изменить ее референт. После того как референт был собран, метод get() возвращает значение null. отношения между кодом приложения, soft/weak reference и referent

alt text


Еще больше примеров: Java-программирование: Пакет ссылок

alt text http://www.pabrantes.net/blog/space/start/2007-09-16/1/referenceTypes.png

  • Случай 1: Это регулярный случай, когда объект называется достижимым.

  • Случай 2: Есть два пути к объекту, поэтому выбирается самый сильный из них, который имеет сильную ссылку, поэтому объект может достигать цели.

  • Случай 3: Еще раз есть два пути к объекту, самым сильным является "Слабая ссылка" (так как другая является ссылкой Phantom), поэтому объект считается слабо доступным.

  • Случай 4: существует только один путь, а самое слабое звено - слабая ссылка, поэтому объект слабо доступен.

  • Случай 5: только один путь и самая слабая ссылка - это ссылка Phantom, поэтому объект фантомно доступен.

  • Случай 6: теперь есть два пути, и самый сильный путь - тот, у которого есть мягкая ссылка, поэтому теперь объект называется мягко доступным.

Ответ 3

Там действительно простое правило:

  • объекты с сильной ссылкой - это стандартные биты кода типа Object a = new Object(). Объекты, на которые ссылаются, не являются мусором, если ссылка (a, выше) является "достижимой". Следовательно, все, что не может быть достигнуто, может считаться мусором.

Итак, посмотрим на несильные ссылочные типы:

  • объекты с слабой ссылкой, вероятно, будут собраны JVM, как только они станут доступными для GC (и WeakReference очищены). Слабая ссылка на a будет выглядеть как new WeakReference<Object>(a). Слабые ссылки полезны в том случае, если вы хотите использовать кеш, в котором данные нужны только в том случае, если ключи существуют как сильно доступные в другом месте (например, HttpSessions).
  • объекты с мягкой привязкой, вероятно, будут перемещаться в JVM, пока не потребуется восстановление памяти. Мягкие ссылки полезны для кешей, где значения долговечны, но могут собираться при необходимости.

Я никогда не уверен в phantom те!