2011-04-14 18 views

Respuesta

19

Cuando ya no hay variables de referencia que se refieren a él, O cuando está huérfano en una isla.

Una isla es un objeto que tiene una variable de referencia que lo señala, sin embargo, ese objeto no tiene variables de referencia que lo apunten.

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: Sólo quiero señalar que a pesar de que la instancia de A tiene una referencia, que está en una isla ahora porque la instancia de B no tiene una referencia a él. La instancia A es elegible para la recolección de basura.

+1

Muy buen ejemplo, pero la nomenclatura variable es un poco confusa. – Kiril

5

Un objeto no se puede volver a encontrar cuando no hay más referencias al mismo, o esas referencias son a su vez de objetos no recuperables.

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. 
0

Un objeto inalcanzable, es un objeto que no tiene una referencia "alcanzable". En otras palabras, no hay referencias al mismo.

4

en el gráfico de objetos cuando uno no está vinculado a él, entonces la referencia se vuelve inalcanzable. luego, el recolector de basura busca estos objetos huérfanos colgantes y logra recuperar la memoria asignada.

java.lang.ref. {Phantom, Soft, Weak} Reference Enqueues objetos inalcanzables. Si se ejecuta el finalizador, el GC ya sabe que es inalcanzable.

leer sobre finalization- http://java.sun.com/developer/technicalArticles/javase/finalization/

En un lenguaje que tiene sólo referencias fuertes, objetos montón pueden o bien ser alcanzable o inalcanzable desde el programa . El conjunto de objetos alcanzables está determinado por el conjunto de variables de clase y variables de método en el programa que apunta a los objetos de montón. Este conjunto generalmente se conoce como el conjunto raíz del programa. Se puede acceder a un objeto apuntado por una variable en el conjunto raíz del programa. Además, un objeto puede ser indirectamente alcanzable. Es decir, un objeto es alcanzable si hay otro objeto accesible que lo señala. Dicha cadena de referencias del conjunto raíz del programa a un objeto de montón se denomina ruta de acceso. Un objeto puede tener más de una ruta de acceso, así como tener no hay rutas de accesibilidad en absoluto. Si el objeto no tiene rutas de accesibilidad, se considera basura y puede ser recolectado inmediatamente por el recolector de basura en el momento .

Un objeto entra en un estado inalcanzable cuando no existen más referencias sólidas a él. Cuando un objeto es inalcanzable, es un candidato para la recolección. Tenga en cuenta la fraseología: el hecho de que un objeto sea un candidato para la recopilación no significa que se recopilará inmediatamente. La JVM puede demorar la recopilación hasta que haya una necesidad inmediata de que el objeto consuma la memoria. Es importante tener en cuenta que no cualquier referencia fuerte mantendrá un objeto en la memoria. Deben ser referencias que encadenan desde una raíz de recolección de basura.raíces GC son una clase especial de variable que incluye

variables temporales en la pila (de cualquier tema) Las variables estáticas (de cualquier clase) referencias especiales de código nativo JNI

más si te gusta a http://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html

+0

"Un objeto entra en un estado inalcanzable cuando no existen más referencias sólidas a él": esto no es correcto. Un objeto puede tener una referencia fuerte a él, pero no accesible desde el conjunto raíz, y por lo tanto será basura recolectada. Por ejemplo, A referencias B y B hacen referencia a A, pero no se puede llegar a ambas desde el conjunto raíz. – namanhams

Cuestiones relacionadas