programacion - ¿Qué es el gráfico de objetos en java?
java swing (6)
Cada vez que estudio colector de basura escucho el término objeto gráfico. ¿Qué significa exactamente?
Como sabemos, los objetos son instancia de una clase. Un objeto puede tener una referencia al otro objeto (uso de punteros para direccionamiento). Además, estos objetos pueden tener referencia a otro objeto y así conducir a referencias de Jerarquía de Objetos entre sí.
Este es un gráfico de objetos.
De lo que estamos hablando es de la noción matemática de un gráfico dirigido que consta de nodos y aristas que conectan los nodos. Un gráfico de objetos es un gráfico cuyos nodos son objetos y cuyos bordes son una relación de interés entre los objetos.
En el caso del recolector de basura Java, el gráfico de objetos de interés es el gráfico de objetos alcanzables. En este gráfico, los nodos son objetos Java y los bordes son las referencias explícitas o implícitas que permiten que un programa en ejecución "alcance" a otros objetos desde uno dado. (Por ejemplo, una referencia implícita, hay una referencia implícita de un objeto a su objeto de clase y, por lo tanto, a los objetos de pila que contienen las estadísticas de clases y su código ... pero estoy divagando).
Como explicó @Chandra Patni, la recolección de basura funciona al atravesar el gráfico de accesibilidad que consta de todos los objetos a los que se puede acceder desde uno de un conjunto de puntos de partida; El "conjunto raíz" en la terminología de GC. Cualquier objeto que no se encuentre en el recorrido de este gráfico ya no puede influir en el cálculo y, por lo tanto, es elegible para la recolección de basura.
El gráfico de objetos es básicamente un gráfico de dependencia entre objetos
Se utiliza para determinar qué objetos son alcanzables y cuáles no, para que todos los objetos inalcanzables puedan ser elegibles para la recolección de basura.
Los objetos tienen referencias a otros objetos que a su vez pueden tener referencias a más objetos, incluido el objeto inicial. Esto crea una gráfica de objetos, útil en el análisis de accesibilidad. Por ejemplo, si el objeto inicial es alcanzable (digamos que está en la pila local de un hilo), entonces todos los objetos en el gráfico son accesibles y un recolector de basura exacto no puede cosechar ninguno de estos objetos. De manera similar, comenzando con un conjunto de objetos vivos (raíces) si creamos una lista de todos los objetos accesibles, todos los demás objetos son juegos de recolección de basura.
Object graph es una red de instancias de clases de nuestra aplicación / software que existen actualmente en la memoria.
Haga clic para ver la imagen: http://blog.ploeh.dk/content/binary/Windows-Live-Writer/Compose-object-graphs-with-confidence_921A/Tree_1.png
También puede ser una larga cadena de objetos a una gráfica corta de un objeto. Por ejemplo: digamos que tenemos clases como PetDog, Owner, PetKennel en una aplicación. Ahora, PetDog tiene propietario, Propietario tiene uno o varios PetDog, PetDog está entrenado por un PetKennel y PetKennel entrena a muchos PedDog. Ahora, en la implementación de esas relaciones en el Enfoque Orientado a Objetos, nosotros, un Propietario (supongamos que usted: una instancia / objeto de la clase Propietario) podríamos hacer referencia (enlace a) muchas instancias de PetDog (si tiene muchos perros, puede hacer referencia a un solo PetDog) , nuevamente, un PetDog hace referencia a su instancia / objeto del propietario particular (es decir, a usted en su caso de perros, se hará referencia al Sr. John (vinculado a) a su perro), es posible que haya comprado un perro mascota de un club canino diferente (donde están los perros). entrenado y vendido también) luego cada una de las referencias / instancias de PetDog / objetos vinculados a sus clubes Kennel particulares. Esto crea una red compleja de objetos relacionados entre sí.
Si representa cada instancia / objeto (cada objeto de PetDog, Propietario, PetKennel) como círculo / cuadrado (o cualquier forma) en su cuaderno de notas / bocetos y dibuje flechas o líneas para representar a quién está vinculado (referencia) el objeto con el que objeto a continuación, crear un gráfico de objetos.
En algún momento sucede que cuando elimina o cambia los enlaces entre esas instancias de cualquier clase, es posible que algunas instancias no sean referenciadas (vinculadas) a otras instancias que serán eliminadas por el recolector de basura.
Un ''Object Graph'' es la conceptualización de todas las instancias de los objetos de su modelo de objeto (las clases en su programa) y sus interconexiones.
Tomar como ejemplo:
Tienes dos clases
Class Foo
{
String aString = "foo";
Bar aBar;
}
Class Bar
{
String aString = "boo";
}
Si Foo myFoo
que crear una instancia, seleccione Foo myFoo
y luego cree una instancia de Bar myBar
y conéctelos, myFoo.aBar = myBar;
, su gráfico de objetos consistiría en una sola instancia de Foo
con una referencia a una sola instancia de Bar
.
El recolector de basura básicamente usa el gráfico de objetos para determinar qué instancias en la memoria todavía están vinculadas a algo y posiblemente necesitadas por el programa, y qué instancias ya no son accesibles y, por lo tanto, pueden eliminarse.
Alguien en wikipedia pone más elocuentemente que yo:
Las aplicaciones orientadas a objetos contienen redes complejas de objetos interrelacionados. Los objetos están vinculados entre sí por un objeto que posee o contiene otro objeto o que contiene una referencia a otro objeto. Esta red de objetos se denomina gráfico de objetos y es la estructura más abstracta que se puede usar para analizar el estado de una aplicación.