qué que old generations gen garbagecollector example collector collection java garbage-collection jvm

old - que es gc en java



Java GC: ¿por qué dos regiones sobrevivientes? (7)

¿Cuáles son las ventajas y desventajas de copiar todas las instancias de una generación de un espacio a otro, en lugar de copiarlas en orden de direcciones de memoria al comienzo del espacio de una generación? Procesar elementos en orden probablemente requeriría agregar un puntero adicional por artículo, pero eliminaría la necesidad de uno de los espacios de "sobreviviente".

Para la JVM de Sun / Oracle, he leído que el algoritmo GC divide la nueva generación en una región Eden y dos regiones supervivientes. Lo que me pregunto es, ¿por qué dos regiones sobrevivientes y no solo una? El algo puede mantener ping-ponging entre Eden y solo una región de supervivientes (como lo hace actualmente entre dos regiones de supervivientes); o hay alguna falla en este enfoque?


Creo que la implementación de GC de JRockit funciona más como usted sugiere, con solo un espacio de eden y un único superviviente, pero no me cite sobre eso.

El motivo de los dos espacios de supervivencia de HotSpot JVM es reducir la necesidad de lidiar con la fragmentación. Los nuevos objetos se asignan en el espacio eden. Todo bien y bien Cuando está lleno, necesita un GC, así que elimine los objetos viciados y mueva los vivos a un espacio de supervivencia, donde puedan madurar durante un tiempo antes de ser promovidos a la generación anterior. Aún así hasta ahora. La próxima vez que nos quedemos sin espacio, tenemos un enigma. El siguiente GC aparece y borra algo de espacio tanto en eden como en nuestro espacio de supervivientes, pero los espacios no son contiguos. Entonces, ¿es mejor

  1. ¿Tratas de colocar a los supervivientes del Edén en los agujeros en el espacio del sobreviviente que fueron eliminados por el GC?
  2. Desplace todos los objetos en el espacio del superviviente hacia abajo para eliminar la fragmentación, y luego mueva a los supervivientes hacia ella.
  3. Solo diga "atorníllelo, estamos moviendo todo de todos modos" y copie a todos los sobrevivientes de ambos espacios en un espacio completamente separado - el segundo espacio de sobrevivientes - dejándolo con un espacio de eden y superviviente limpio donde pueda repite la secuencia en el próximo GC?

La respuesta de Sun a la pregunta es obvia.


Dos supervivientes son la implementación del algoritmo de marca y copia. Estos se utilizan en GC para la generación más joven. Como lo mencionó Ryan en la opción 3 here


Heap Memory en Java Los objetos Java creados en un área llamada Heap Memory. La memoria Heap se crea cuando la JVM se inicia, la memoria Heap aumenta o disminuye cuando se ejecuta una aplicación Java. Cuando la memoria del montón se llena, el recolector de basura elimina los objetos no utilizados, por lo que el recolector de basura crea un espacio para los objetos nuevos.

La memoria del montón está dividida en dos áreas (o generaciones) llamadas

1. espacio juvenil. 2. espacio viejo

1. En el espacio joven, hay espacio Eden para Objeto nuevo y hay dos Espacios Supervivientes (desde y hacia), estos dos Espacios Supervivientes son siempre del mismo tamaño.

2. Los espacios de supervivientes se utilizan para almacenar objetos de supervivencia. Cuando el espacio joven se llena, el recolector de basura saca los objetos no utilizados ejecutando una colección especial para jóvenes, donde todos los objetos que han vivido lo suficiente en el espacio joven son promovidos (movidos) al espacio antiguo, liberando así el espacio joven para más asignación de objetos.

3.Si el espacio de Eden está lleno, GC se ejecutará, si hay objetos vivos en este espacio de Eden, se moverán a Survivor Space.

4. En el espacio joven, GC utiliza normalmente el algoritmo de copia, que es rápido. Cada vez, los objetos de supervivencia se copian en uno de los espacios de superviviente.

5.Si Survivor Space está lleno, el resto de los objetos vivos se copian directamente al espacio antiguo.

6.En el espacio antiguo, GC usualmente usa el algoritmo Mark-Compact, que es lento pero requiere menos memoria.

7. Cuando el espacio viejo se llena, la basura se recoge allí, un proceso llamado colección antigua. En el espacio antiguo, los objetos de larga duración permanecen allí.

8.Se perderá la memoria, no habrá espacio para el nuevo Objeto, incluso el GC, para la parte VIEJA o Perm.

9.El objeto se mueve durante la recolección de basura: eden -> survivor -> tenured (old space)


Toda la respuesta actual habla sobre la fragmentación de la memoria, esta es también otra razón para tener generaciones en GC.

El tiempo de ejecución registra todos los "objetos antiguos" que apuntan a "objetos nuevos", esto se hace cada vez que se actualiza un campo "puntero". Luego, cuando se realiza un GC "minero", solo se deben escanear los objetos "nuevos".

Con los años se ha descubierto que simplemente tener "nuevo" y "viejo" no es suficiente, y es bueno tener una tercera generación que sea "de mediana edad".


El papel de los dos espacios de sobrevivientes se revierte luego de la operación de una pequeña recolección de basura

Los dos espacios de sobrevivientes. Estos contienen objetos que han sobrevivido al menos a una pequeña recolección de basura, pero se les ha dado otra oportunidad de ser inalcanzable antes de ser promovidos a la generación anterior. Solo uno de ellos contiene objetos, mientras que el otro está la mayor parte del tiempo sin usar.

Durante la operación de una recolección de basura menor, se marcarán los objetos que hayan sido encontrados como basura. Los objetos vivos en el edén que sobreviven a la colección se copian en el espacio del sobreviviente no utilizado. Los objetos vivos en el espacio de sobrevivientes que están en uso, que tendrán otra oportunidad de recuperarse en la generación joven, también se copiarán en el espacio del sobreviviente no utilizado. Finalmente, los objetos vivos en el espacio del sobreviviente que están en uso, que se consideran "suficientemente viejos", se promueven a la generación anterior.

Al final de la recolección de basura menor, los dos espacios de supervivencia intercambian roles. El eden está completamente vacío; solo un espacio de sobreviviente está en uso; y la ocupación de la generación anterior ha crecido levemente. Debido a que los objetos vivos se copian durante su operación, este tipo de recolector de basura se llama recolector de basura.

Fuente: arriba están los extractos de la página 83 de Java Performance , de Charlie Hunt y Binu John.


Generación Joven: Es un lugar donde vivió durante un período breve y se dividió en dos espacios:

Espacio Eden: los nuevos objetos se asignarán en el grupo de memoria. La suposición es que la mayoría de los objetos se desreferencian y se vuelven inalcanzables poco después de su creación. Los objetos que no están siendo desreferenciados serán copiados por el recolector de basura de nueva generación en los espacios de sobrevivientes. Se pueden copiar en algunos casos especiales directamente en el grupo de la generación anterior.

Espacios de supervivencia: estos dos espacios pequeños conservan los objetos supervivientes de una colección de basura de generación joven. Los objetos sobrevivientes se copiarán por un número (pequeño) de veces de un sobreviviente al otro. Esto permite cosechar nuestros objetos más desreferenciados.

Vieja generación: el grupo de memoria más grande que debe mantener los objetos vivos largos. Los objetos se copian en este grupo una vez que salen de los espacios de sobrevivientes.

Permament generation: este grupo bastante desconocido guarda la información de todas las clases. No necesita atención para la mayoría de las aplicaciones. Puede necesitar ser adaptado para algunas aplicaciones con muchas clases. También puede necesitar algo de asistencia si la aplicación carga y descarga permanentemente las clases.

Otras ventajas:

  • Fragmentación de la memoria
  • Mejora el rendimiento del GC

Encuentre los siguientes enlaces para más detalles que pueden ayudarlo a comprender más

http://www.scalingbits.com/javaprimer

http://java.sys-con.com/node/84695