Pregunta

Estoy confundido con el montón, joven, Titular y la generación de Perm.

Podría alguien explicar por favor?

¿Fue útil?

Solución

El recolector de basura de Java se conoce como un generacional recolector de basura . Los objetos en una aplicación viven durante períodos de tiempo variables dependiendo del lugar donde se crean y cómo se utilizan. La idea clave aquí es que el uso de diferentes estrategias de recolección de basura para objetos duración y larga vida corta permite que el GC para ser optimizado específicamente para cada caso.

En términos generales, como objetos "sobrevivir" recolecciones de elementos repetidos en el Generación Joven que se migran a la Titular Generación . El Generación Permanente es un caso especial, que contiene objetos, que son necesarios por la JVM, que no necesariamente están representados en su programa, por ejemplo objetos que representan las clases y métodos.

Desde el Generación Joven por lo general contienen una gran cantidad de basura en él, está optimizado para deshacerse de una gran cantidad de objetos no utilizados a la vez. El Titular Generación , ya que contiene objetos de vida más larga está optimizado para la recolección de basura rápida sin perder una gran cantidad de memoria.

Con las mejoras en la tecnología de recolección de basura los detalles se han convertido en bastante complejas y varían dependiendo de la JVM y la forma en que se ha configurado. Debe leer la documentación rel="noreferrer"> para la JVM específico que esté utilizando, si lo que necesita saber exactamente lo que está sucediendo.

Dicho esto, no es un acuerdo histórico sencilla esto es todavía útil a nivel conceptual. Históricamente el Generación Joven colector copia y el Titular Generación haber un marca y barrido colector . Un copia colector paga esencialmente ningún costo de CPU para deshacerse de la basura, la mayor parte del costo es en el mantenimiento de objetos vivos, el precio de esta eficiencia es más pesado el uso de memoria. Un marca y el colector de barrido paga algún costo para la CPU tanto en vivo como objetos no utilizados, pero utiliza la memoria de manera más eficiente.

Otros consejos

Java memoria de la pila es parte de memoria asignada a JVM por el Sistema Operativo. Siempre que creamos objetos que se crean en el interior del montón en Java .

espacio de montón de Java se divide en tres regiones o generación por el bien de la recolección de basura llamado Generación jóvenes, viejos o Generación Generación titulares y permanente . generación permanente es basura recogida durante gc completa de punto de acceso JVM

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

La Vieja Generación se utiliza para almacenar objetos larga sobrevivir. 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. Con el tiempo la vieja generación necesita ser recogido. Este evento se llama una colección importante de basura.

La 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 ha sido sustituido por metaespacio desde Java 8 en libertad. PermSize y MaxPermSize parámetros serán ignorados ahora. Echar un vistazo esta href="https://dzone.com/articles/java-8-permgen-metaspace" artículo DZone por Pierre - Hugues Charbonneau a entender acerca metaespacio .

 introducir descripción de la imagen aquí

Fuente de la imagen: http://www.oracle .com / Webfolder / TechNetwork / tutoriales / OBE / java / GC01 / index.html

Consulte el mismo artículo para más detalles.

Todos los objetos en el montón sobreviven cuando están siendo referenciadas. Cuando no están más, el recolector de basura (GC) reclamará su memoria.

PermGen, Young y permanentes son diferentes Clasificaciones de objetos (o espacios en el montón donde pueden ser).

PermGen: estos objetos serán siempre allí, no son basura recogida. Clases de objetos están ahí, cuerdas internados, etc. No sé si hay un GC allí (cuando el sistema se descarga clases ... pero no es una cosa normal)

Young:. cuando se crea un objeto que está aquí

Titular:. un objeto va a esta clasificación / categoría cuando sobrevive N GC pases (sobrevivir = pases GC pero este objeto se hace referencia por lo que no se puede recuperar)

Dependiendo de GC utilizado y algunos parametrización, GC pasa más o menos a menudo.

A continuación, la recolección de basura puede tener diferentes enfoques para Maange objetos en el montón. Esta clasificación de los objetos ayuda a hacerlo.

Este es otro excelente (aunque largo) artículo sobre cómo sintonizar / tamaño de los parámetros de GC, que puede ayudar a entender aún más:

https://docs.oracle.com/ JavaSE / 8 / docs / notas técnicas / guías / vm / gctuning /

Una lectura muy útil si usted está teniendo problemas de GC y necesitan saber cómo leer los registros de GC, o la necesidad de entender cómo funciona su colector de GC actual.

Si desea conectar la monitorización remota de un sistema en funcionamiento para ver el uso de memoria en tiempo real y GC ejecuta la comprobación de esta herramienta a cabo:

http://java.sun.com/performance/jvmstat/visualgc.html

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