2012-02-01 11 views
15

Estaba tratando de comprender la estructura de memoria de HotSpot JVM y me confundí con los dos términos 'Área de método' y 'PermGen'. Los documentos a los que le hice referencia dicen que el Área del método contiene la definición de clases y métodos, incluido el código de bytes. Algunos otros documentos dicen que están almacenados en el espacio PermGen.Área de método y PermGen

Entonces, ¿puedo concluir que estas dos áreas de memoria son las mismas?

+0

Actualización: de java8 en palabras no hay PermGen, y toda la clase, método, pasantes de cadena almacenados en Metaspace. Enlace: http://karunsubramanian.com/websphere/one-important-change-in-memory-management-in-java-8/ –

Respuesta

11

Debería echarle un vistazo al Java Memory Types y, opcionalmente, en este documento sobre el Garbage Collection en Java. El último es muy detallado y ambos son útiles.

En realidad la zona método es una parte de la Generación Permanente:

Una tercera generación estrechamente relacionada con la generación titular es el generación permanente. La generación permanente es especial porque contiene los datos que necesita la máquina virtual para describir objetos que no tienen una equivalencia en el nivel de lenguaje Java. Por ejemplo, objetos que describen clases y métodos se almacenan en la generación permanente .

5

usted podría considerar el "Área Método" un subconjunto de "PermGen", ya que el espacio permanente generación hace mantener DEFINCIONES de clase, sino que también lleva a cabo internado Cuerdas y otros bits de datos con pocas probabilidades de ser descartado nunca,

+0

Pero no es solo el subconjunto PermGen, puede haber un Área de Método fuera del espacio PermGen, derecha ? – falsarella

+1

No, tengo entendido que todo ese tipo de información va en PermGen. –

+1

Actualización: Las cadenas internas se almacenan en el montón principal desde Java 7 en adelante. http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html#jdk7changes –

3

Área de método es básicamente un espacio no dinámico como Stack que mantiene el esqueleto de clase. esqueleto incluye variables estáticas con valores, constructores, etc. La operación de reflexión se opera en esta área de memoria. Perm es un espacio de memoria paralelo a Heap con el código binario de la clase de ejecución actual.

Cuestiones relacionadas