Кто-то может объяснить различие между Сильными, Мягкими, Слабыми и Фантомными ссылками и использованием его? [дубликат]

Этот вопрос уже имеет ответ здесь:

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

Кто-либо мог объяснить вкратце различные ссылки?

Пример для каждого добился бы большего успеха.

29
задан JoseK 9 December 2010 в 05:21
поделиться

3 ответа

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

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

Извлечение:

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

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

Ссылки и референты

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

alt text


Еще больше примеров: Java Programming: References 'Package

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

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

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

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

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

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

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

21
ответ дан 28 November 2019 в 02:00
поделиться

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

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

Таким образом, мы смотрим на не сильные типы ссылок:

  • слабо привязанные объекты , вероятно, будут собраны JVM, как только они станут доступными для GC (и WeakReference будет очищено). Слабая ссылка на a будет выглядеть как новое WeakReference(a). Слабые ссылки полезны в том случае, если вам нужен кэш, в котором данные нужны только в том случае, если ключи существуют так же сильно, как и в других местах (например, HttpSessions)
  • soft-rerencinged объекты, вероятно, будут болтаться в JVM до тех пор, пока им абсолютно не понадобится восстановить память. Мягкие ссылки полезны для кэшей, где значения долговечны, но могут быть собраны при необходимости
  • Я никогда не бываю слишком уверен насчет фантомных!

    3
    ответ дан 28 November 2019 в 02:00
    поделиться

    Статья, объясняющая эти виды ссылок (включая примеры): http://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.html

    7
    ответ дан 28 November 2019 в 02:00
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: