2012-06-13 10 views
13

Amigos,PermGen y Pila, Diferencia y su significado

¿Me podría dar importancia, diferencia y usos para Heap y PermGen. También sería bueno saber qué clase se cargan en ellos, respectivamente.

Explicación relacionada con la especificación Java VM sería de gran ayuda

Gracias Punith

+0

Consulte esta pregunta relacionada: http://stackoverflow.com/questions/2070791/young-tenured-and-perm-generation/33994430#33994430 –

Respuesta

21

La memoria (Heap) se gestiona en generaciones o agrupaciones de memoria que contienen objetos de diferentes edades. La recolección de basura ocurre en cada generación cuando la generación se llena. Los objetos se asignan en una generación para objetos más jóvenes o el young generation, y debido a la mortalidad infantil, la mayoría de los objetos mueren allí.

Cuando se construye un objeto nuevo va al espacio Eden que forma parte de Young Generation.

Si el objeto sigue vivo después de un tiempo va a tenured generation donde yacen los objetos de larga vida.

Si se supone que el objeto vive hasta que exista un proceso excesivo, el objeto se mueve a Perm Generation. Java classes se almacenan en la generación permanente.

0

Bueno, no soy un experto, pero la memoria PermGem reside dentro del Heap, ya que es como un lugar especial donde todas las clases se cargan en tiempo de ejecución. Entonces, si tiene demasiadas clases, PermGem arroja una OutOfMemoryException. Y bien, el montón almacena los objetos que instaure dentro de su código java, donde el GC recoge los objetos a los que no hace referencia ninguna variable en un hilo en ejecución en la pila.

+2

Eso no es cierto. PerGen es un espacio separado del montón. marque (esto) [https://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation] – Santosh

+0

sí, está en lo cierto. No estoy seguro si me leyeron de otra manera, pero tiene sentido, ya que lo que querían lograr con la separación es que el GC no verifique los datos permanentes, por lo que simplemente verifica las "cosas" que puede recopilar. –

0

Creo que Permgen es el área de memoria dentro de la memoria Heap solamente. Se creó para fines especiales, como la celebración de String.

Todo el objeto creado no recibe memoria Permgen Es solo para clasess especiales como String en JDK 6 o inferior.

En las versiones modernas de JDK como 8 y superiores, Pergen no se encuentra, sin embargo, se introducen nuevas memorias como Non Heap y otras memorias de caché diferentes.

Cuestiones relacionadas