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

В java, когда объект становится недоступным?

В java, что является недостижимым объектом? Когда объект становится недоступным? Изучая сбор мусора, я не мог понять эту концепцию.

Кто-нибудь может дать какие-либо идеи с примерами?

4b9b3361

Ответ 1

Если на него больше нет ссылочных переменных, ИЛИ, когда он остался сиротом на острове.

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

class A { int i = 5; }
class B { A a = new A(); }
class C {
   B b;
   public static void main(String args[]) {
      C c = new C();
      c.b = new B();
      // instance of A, B, and C created
      c.b = null;
      // instance of B and A eligible to be garbage collected.
   }

EDIT: Просто хочу указать, что хотя экземпляр A имеет ссылку, он теперь находится на острове, потому что экземпляр B не имеет ссылки на него. Экземпляр A имеет право на сбор мусора.

Ответ 2

Объект не может быть отменен, если на нем больше нет ссылок, или эти ссылки сами являются неприемлемыми объектами.

Integer i = new Integer(4);
// the new Integer object is reachable  via the reference in 'i' 
i = null;
// the Integer object is no longer reachable. 

Ответ 3

в графе объектов, когда он не связан с ним, тогда ссылка становится недоступной. затем сборщик мусора сканирует эти болтающиеся объекты-сироты и вытаскивает из него выделенную память.

java.lang.ref. {Phantom, Soft, Weak} Ссылка Запускает недоступные объекты.  Если финализатор запущен, GC уже знает его недостижимость.

прочитайте о завершении - http://java.sun.com/developer/technicalArticles/javase/finalization/

В языке, который имеет только сильные ссылки, объекты кучи могут быть доступными или недоступными из программа. Набор достижимых объектов определяется набором переменных класса и переменных метода в программе указывая на объекты кучи. Этот набор обычно называется корневым набором программы. Объект, на который указывает переменная в корневом наборе программы достижимо. Кроме того, объект может быть косвенным достижимым. То есть, объект если есть другой доступный объект, указывающий на него. Такая цепочка ссылок из корневого набора программы к кучевому объекту называется путь достижимости. Объект может иметь более одного пути достижимости, а также иметь нет путей достижимости вообще. Если объект не имеет путей достижимости, он считается мусором и может быть немедленно собранный сборщиком мусора.

Объект переходит в недостижимое состояние, когда нет более сильных ссылок на него. Когда объект недоступен, он является кандидатом на сбор. Обратите внимание на формулировку: только потому, что объект является кандидатом на сбор, это не означает, что он будет немедленно собран. JVM может задерживать сбор до тех пор, пока не будет немедленно потребована память, потребляемая объектом. Важно отметить, что не только любая сильная ссылка будет содержать объект в памяти. Они должны быть ссылками на цепочку из корня сборщика мусора. Корни GC - это особый класс переменной, включающий

Временные переменные в стеке (любого потока) Статические переменные (из любого класса) Специальные ссылки из собственного кода JNI

больше, если вам нравится http://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html

Ответ 4

Недостижимый объект - это объект, который не имеет к нему доступной ссылки. Другими словами, никаких ссылок на него нет.