Я пытаюсь понять разницу между разными ссылками, но теория не вызывает никаких идей для меня, чтобы визуализировать то же самое.
Может кто-нибудь объяснить вкратце различные ссылки?
Пример для каждого из них будет лучше.
Я пытаюсь понять разницу между разными ссылками, но теория не вызывает никаких идей для меня, чтобы визуализировать то же самое.
Может кто-нибудь объяснить вкратце различные ссылки?
Пример для каждого из них будет лучше.
Еще одна хорошая статья по теме:
Java Reference Objects или как я научился прекращать волноваться и любить OutOfMemoryError, с хорошими диаграммами
Extract:
Как вы могли догадаться, добавление трех новых необязательных состояний к диаграмме жизненного цикла объекта создает беспорядок.
Хотя документация указывает на логическую прогрессию от достижимой цели с помощью мягких, слабых и phantom, для исправления, фактическая прогрессия зависит от того, какие объекты ссылки создаются вашей программой.
Если вы создаетеWeakReference
, но не создаетеSoftReference
, тогда объект переходит непосредственно от сильно доступного до слабо доступного до финализированного для сбора. жизненный цикл объекта, с объектами справки
Также важно помнить, что не все объекты привязаны к ссылочным объектам - на самом деле, очень немногие из них должны быть.
Объектом ссылки является слой косвенности: вы проходите через ссылочный объект для доступа к указанному объекту и, очевидно, вам не нужен этот слой косвенности во всем коде.
На самом деле большинство программ будут использовать ссылочные объекты для доступа к относительно небольшому числу объектов, создаваемых программой.
Ссылки и ссылки
Объект ссылки обеспечивает слой косвенности между вашим программным кодом и другим объектом, называемым референтом.
Каждый ссылочный объект строится вокруг своего референта и предоставляет метод get() для доступа к референту. Когда вы создадите ссылку, вы не сможете изменить ее референт. После того как референт был собран, метод get() возвращает значение null. отношения между кодом приложения, soft/weak reference и referent
Еще больше примеров: Java-программирование: Пакет ссылок
alt text http://www.pabrantes.net/blog/space/start/2007-09-16/1/referenceTypes.png
Случай 1: Это регулярный случай, когда объект называется достижимым.
Случай 2: Есть два пути к объекту, поэтому выбирается самый сильный из них, который имеет сильную ссылку, поэтому объект может достигать цели.
Случай 3: Еще раз есть два пути к объекту, самым сильным является "Слабая ссылка" (так как другая является ссылкой Phantom), поэтому объект считается слабо доступным.
Случай 4: существует только один путь, а самое слабое звено - слабая ссылка, поэтому объект слабо доступен.
Случай 5: только один путь и самая слабая ссылка - это ссылка Phantom, поэтому объект фантомно доступен.
Случай 6: теперь есть два пути, и самый сильный путь - тот, у которого есть мягкая ссылка, поэтому теперь объект называется мягко доступным.
Статья, объясняющая эти типы ссылок (включая примеры): http://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.html
Там действительно простое правило:
Object a = new Object()
. Объекты, на которые ссылаются, не являются мусором, если ссылка (a
, выше) является "достижимой". Следовательно, все, что не может быть достигнуто, может считаться мусором.Итак, посмотрим на несильные ссылочные типы:
WeakReference
очищены). Слабая ссылка на a
будет выглядеть как new WeakReference<Object>(a)
. Слабые ссылки полезны в том случае, если вы хотите использовать кеш, в котором данные нужны только в том случае, если ключи существуют как сильно доступные в другом месте (например, HttpSessions).Я никогда не уверен в phantom те!