[Buena descripción] [1] del tipo que sabe mucho sobre los componentes internos de GC. Por cierto, hay mucha información útil relacionada con GC en su blog. [1]: blogs.oracle.com/jonthecollector/entry/…
Ivan Dubrov
Respuestas:
84
Generación permanente. Por supuesto, los detalles son específicos de la implementación.
Brevemente, contiene los objetos Java asociados con clases y cadenas internas. En la implementación del cliente de Sun con el uso compartido activado, classes.jsase asigna la memoria para formar los datos iniciales, con aproximadamente la mitad de solo lectura y la mitad de copia en escritura.
Los objetos Java que son simplemente antiguos se mantienen en la Generación de tenencia.
La JVM utiliza PermGen para contener clases cargadas. Puedes aumentarlo usando:
-XX:MaxPermSize=384m
si está utilizando Sun JVM u OpenJDK.
Entonces, si obtiene una OutOfMemoryException: PermGen, necesita hacer que PermGen sea más grande o es posible que tenga problemas con el cargador de clases.
¿Cuál fue la respuesta aceptada en el momento de publicar este comentario? La respuesta actualmente aceptada ( esta , de "Tom Hawtin - tackline") me parece precisa. ¿Podría tener sentido editar su comentario para que no haga que las personas desconfíen de la respuesta aceptada actual?
jbyler
20
Generación permanente. Consulte la guía de ajuste de Java GC para obtener más detalles sobre el recolector de basura.
No coincide realmente con la pregunta original, pero puede ser que alguien la encuentre útil. PermGen es de hecho un área de la memoria donde Java solía mantener sus clases. Entonces, muchos de nosotros nos hemos encontrado con OOM en PermGen, si hubiera, por ejemplo, muchas clases.
Desde Java 8, el área de PermGen ha sido reemplazada por el área de MetaSpace, que es más eficiente y es ilimitada de forma predeterminada (o más precisamente, limitada por la cantidad de memoria nativa, dependiendo de la disponibilidad de memoria virtual del sistema operativo y jvm de 32 o 64 bits). Sin embargo, es posible ajustarlo de alguna manera, por ejemplo, especificando un límite máximo para el área. Puede encontrar más información útil en esta publicación de blog .
Si mal no recuerdo, gen significa generación, como en un recolector de basura generacional (que trata los objetos más jóvenes de manera diferente a los objetos de mediana edad y "permanentes"). El principio de localidad sugiere que los objetos creados recientemente serán eliminados primero.
Permgen es sinónimo de generación permanente. Es una de las áreas de memoria de JVM. Es parte de Heap con un tamaño fijo mediante el uso de una bandera llamada MaxPermSize.
¿Por qué el nombre "PermGen"?
Este permgen fue nombrado en los primeros días de Java. Permgen mains mantiene todos los metadatos de las clases cargadas. Pero el problema es que una vez que se carga una clase, permanecerá en la JVM hasta que se cierre la JVM. Así que el nombre Permgen es optar por eso. Pero más tarde, la carga dinámica de clases entró en escena, pero el nombre no se cambió. Pero con Java 8 , también han abordado ese problema. Ahora permagen pasó a llamarse MetaSpace con tamaño de memoria dinámica.
Respuestas:
Generación permanente. Por supuesto, los detalles son específicos de la implementación.
Brevemente, contiene los objetos Java asociados con clases y cadenas internas. En la implementación del cliente de Sun con el uso compartido activado,
classes.jsa
se asigna la memoria para formar los datos iniciales, con aproximadamente la mitad de solo lectura y la mitad de copia en escritura.Los objetos Java que son simplemente antiguos se mantienen en la Generación de tenencia.
fuente
La JVM utiliza PermGen para contener clases cargadas. Puedes aumentarlo usando:
-XX:MaxPermSize=384m
si está utilizando Sun JVM u OpenJDK.
Entonces, si obtiene una OutOfMemoryException: PermGen, necesita hacer que PermGen sea más grande o es posible que tenga problemas con el cargador de clases.
fuente
Generación permanente. Consulte la guía de ajuste de Java GC para obtener más detalles sobre el recolector de basura.
fuente
No coincide realmente con la pregunta original, pero puede ser que alguien la encuentre útil. PermGen es de hecho un área de la memoria donde Java solía mantener sus clases. Entonces, muchos de nosotros nos hemos encontrado con OOM en PermGen, si hubiera, por ejemplo, muchas clases.
Desde Java 8, el área de PermGen ha sido reemplazada por el área de MetaSpace, que es más eficiente y es ilimitada de forma predeterminada (o más precisamente, limitada por la cantidad de memoria nativa, dependiendo de la disponibilidad de memoria virtual del sistema operativo y jvm de 32 o 64 bits). Sin embargo, es posible ajustarlo de alguna manera, por ejemplo, especificando un límite máximo para el área. Puede encontrar más información útil en esta publicación de blog .
fuente
PermGen es sinónimo de generación permanente .
Aquí hay una breve propaganda sobre DDJ
fuente
Generación permanente
fuente
Si mal no recuerdo, gen significa generación, como en un recolector de basura generacional (que trata los objetos más jóvenes de manera diferente a los objetos de mediana edad y "permanentes"). El principio de localidad sugiere que los objetos creados recientemente serán eliminados primero.
fuente
Permgen es sinónimo de generación permanente. Es una de las áreas de memoria de JVM. Es parte de Heap con un tamaño fijo mediante el uso de una bandera llamada MaxPermSize.
¿Por qué el nombre "PermGen"?
Este permgen fue nombrado en los primeros días de Java. Permgen mains mantiene todos los metadatos de las clases cargadas. Pero el problema es que una vez que se carga una clase, permanecerá en la JVM hasta que se cierre la JVM. Así que el nombre Permgen es optar por eso. Pero más tarde, la carga dinámica de clases entró en escena, pero el nombre no se cambió. Pero con Java 8 , también han abordado ese problema. Ahora permagen pasó a llamarse MetaSpace con tamaño de memoria dinámica.
fuente