Pregunta

Estoy tratando de entender lo que los conceptos de joven , edad y generaciones permanentes se encuentran en la terminología de almacenamiento dinámico de Java, y más específicamente las interacciones entre las tres generaciones.

Mis preguntas son:

  • ¿Cuál es la generación joven?
  • ¿Cuál es la vieja generación?
  • ¿Qué es la generación permanente?
  • ¿Cómo funciona las tres generaciones interactúan / relacionan entre sí?
¿Fue útil?

Solución

Este parece ser un malentendido común. En JVM de Oracle, la generación permanente no es parte de la pila. Es un espacio separado para las definiciones de clase y datos relacionados. En Java 6 y, cuerdas internados anteriores también fueron almacenados en la generación permanente. En Java 7, cuerdas internados se almacenan en la principal montón de objetos.

Aquí es un buen mensaje el generación permanente.

I como las descripciones dadas para cada espacio de Oracle en guiará en JConsole :

  

Para el Java HotSpot VM, la memoria   piscinas para la recolección de basura en serie   son los siguientes.

     
      
  • Eden Espacio (montón): La piscina de la que la memoria se asigna inicialmente   para la mayoría de los objetos.
  •   
  • superviviente del Espacio (montón): La piscina que contiene los objetos que han sobrevivido   la recolección de basura del Edén   espacio.
  •   
  • Titular Generación (montón): La piscina que contiene los objetos que han existido   durante algún tiempo en el espacio sobreviviente.
  •   
  • Generación Permanente (no montón): La piscina que contiene toda la reflectante   datos de la máquina virtual en sí,   tales como objetos de clase y método. Con   Java VM que compartir datos de clases utilización,   esta generación se divide en   de sólo lectura y zonas de lectura y escritura.
  •   
  • Código de caché (no montón): La Java HotSpot VM también incluye una memoria caché de código,   que contiene la memoria que se utiliza para   compilación y almacenamiento de los nativos   código.
  •   

Java utiliza la recolección de basura generacional. Esto significa que si usted tiene un objeto foo (que es una instancia de una clase), los más eventos de recolección de basura que sobrevive (si todavía hay referencias a ella), más lejos se promueve. Se inicia en la generación joven (que a su vez se divide en varios espacios - Eden y superviviente). Y sería finalmente terminan en la generación titular si sobrevivió lo suficiente

Otros consejos

  

El montón se divide en las generaciones jóvenes y viejos de la siguiente manera:

Generación Joven : Es el lugar donde vivió por un período breve y se divide en dos espacios:

  • Eden Espacio : Cuando el objeto creado usando la palabra clave nueva memoria asignados en este espacio.
  • Espacio sobreviviente : Esta es la piscina que contiene objetos que tienen sobrevivido después de la recogida de basura de Java desde el espacio Edén.

Vieja Generación : Este grupo contiene básicamente tenured y virtual    (Reservado) y el espacio será la celebración de aquellos objetos que sobrevivieron    después de la recogida de basura de la generación joven.

  • Titular del espacio:. Este bloque de memoria contiene los objetos que sobrevivieron después de múltiples medios de recogida de basura objeto que sobrevivió después de la recolección de basura desde el espacio sobreviviente

Generación Permanente:. Este bloque de memoria como el nombre dice también contiene metadatos clase y descriptores de información permanente por lo que el espacio PermGen siempre reservado para las clases y de los que está ligado a las clases para los miembros ejemplo estáticas

  

Java8 Actualización:. PermGen se sustituye por metaespacio que es muy similar
  La principal diferencia es que metaespacio modifica el tamaño de forma dinámica, es decir, se puede ampliar en tiempo de ejecución.
  espacio de Java metaespacio: sin límites (por defecto)

Código caché (virtual o reservado.): Si está utilizando Java HotSpot VM esto incluye área de caché de código que contiene la memoria que se utilizará para la compilación y almacenamiento de código nativo

introducir descripción de la imagen aquí

Cortesía

  

¿Cuál es la generación joven?

El Generación Joven es donde se asignan y edad todos los objetos nuevos. Cuando la generación joven se llena, lo que provoca una colección menor de basura. Una nueva generación llena de objetos muertos se recoge muy rápidamente. Algunos objetos son sobrevivido edad y, finalmente, se mueven a la vieja generación.

  

¿Cuál es la vieja generación?

El Vieja Generación se utiliza para almacenar objetos larga supervivientes. Por lo general, se establece un umbral para el objeto de la generación de jóvenes y cuando se cumpla esa edad, el objeto se mueve a la vieja generación. Finalmente, las necesidades de generación de edad para ser recogidos. Este evento se denomina importante recolección de basura

  

¿Qué es la generación permanente?

El generación permanente contiene metadatos requeridos por la JVM para describir las clases y los métodos utilizados en la aplicación. La generación permanente está poblada por la JVM en tiempo de ejecución basado en clases en uso por la aplicación.

PermGen se ha sustituido por metaespacio desde Java 8 en libertad.

PermSize y MaxPermSize parámetros serán ignorados ahora

  

¿Cómo funciona las tres generaciones interactúan / relacionan entre sí?

 introducir descripción de la imagen aquí

Fuente de la imagen y Oracle artículo tutorial TechNetwork: http: //www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

" El proceso de recolección de basura general " en el artículo anterior explica las interacciones entre ellos con muchos diagramas.

Tenga una mirada en el diagrama resumen:

 introducir descripción de la imagen aquí

La máquina virtual de Java está organizado en tres generaciones: una generación joven, una vieja generación, y una generación permanente. La mayoría de los objetos se asignan inicialmente en la generación joven. La vieja generación contiene objetos que han sobrevivido a un número de colecciones de generación de jóvenes, así como algunos objetos de gran tamaño que pueden ser asignados directamente en la vieja generación. La generación permanente mantiene los objetos que la JVM encuentra conveniente tener el recolector de basura manejar, tales como objetos que describe las clases y métodos, así como las clases y métodos propios.

Memoria en SunHotSpot JVM está organizado en tres generaciones: la generación joven, de antigua generación y generación permanente.

  • Generación Young:. Los objetos recién creados se asignan a la joven generación
  • Vieja Generación: Si las nuevas solicitudes de objeto para un espacio de almacenamiento dinámico más amplio, que se asigna directamente a la vieja generación. También los objetos que han sobrevivido unos pocos ciclos de GC es ascendido a la vieja generación es decir de larga vida en casa objetos de edad gen.
  • Generación Permanente: La generación permanente mantiene los objetos que la JVM encuentra conveniente tener el recolector de basura manejar, tales como objetos que describe las clases y métodos, así como las clases y métodos propios
  • .

FYI:. El gen permanente no se considera una parte de la pila de Java

¿Cómo funciona las tres generaciones interactúan / relacionan entre sí?       Objetos (excepto los grandes) se asignan primero a la generación joven. Si un objeto se mantienen con vida después de x no. de ciclos de recogida de basura que es ascendido a la vieja generación / tenured. Por lo tanto podemos decir que la joven generación contiene los objetos cortos vividas mientras que la vieja generación contiene los objetos que tienen una larga vida. La generación permanente no interactúa con las otras dos generaciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top