¿Qué es el espacio para la permanente?

88

Mientras aprendo sobre la creación de perfiles de memoria de Java, sigo viendo el término "espacio permanente" además de "montón". Sé lo que es el montón, ¿qué es el espacio de permanente?

skiphoppy
fuente
13
Java 8 ha eliminado por completo este concepto y se ha trasladado a Metaspace
pramodc84
2
La referencia se explica bien aquí youtube.com/watch?v=PUUJ4rNpRhU
shareef

Respuestas:

103

Significa generación permanente :

La generación permanente es especial porque contiene metadatos que describen las clases de usuario (clases que no forman parte del lenguaje Java). Ejemplos de tales metadatos son objetos que describen clases y métodos y se almacenan en la Generación Permanente. Las aplicaciones con una gran base de código pueden llenar rápidamente este segmento del montón, lo que provocará java.lang.OutOfMemoryError: PermGen sin importar qué tan alto sea su -Xmx y cuánta memoria tenga en la máquina.

Andrew Hare
fuente
Andrew, solo tengo curiosidad por saber cuál podría ser el tamaño de PerGen.
gks
Solo tengo curiosidad si permgen es parte de la memoria del montón (como se indica en esta respuesta) o está fuera del montón (como se indica en esta respuesta - stackoverflow.com/a/31103100/3061686 ).
Akki
25

Perm spacese usa para mantener información para clases cargadas y algunas otras características avanzadas como String Pool(para pruebas de igualdad de cadenas altamente optimizadas), que generalmente se crean mediante String.intern()métodos. A medida que su aplicación (número de clases) crezca, este espacio se llenará rápidamente, ya que la recolección de basura en este espacio no es muy efectiva para limpiar según sea necesario, rápidamente obtendrá un error de memoria insuficiente: espacio de generación permanente. Después de eso, ninguna aplicación se ejecutará en esa máquina de manera efectiva incluso después de tener una gran JVM vacía.

Antes de iniciar su aplicación, debe java -XX:MaxPermSizedeshacerse de este error.

DKSRathore
fuente
El grupo de cadenas se cambia al espacio de pila desde Java 7.
Codificador de cafeína
20

Respuesta simple (y muy simplificada): es donde el jvm almacena sus propios datos contables, en lugar de sus datos.

Mate
fuente
17

Perm Gen significa generación permanente que contiene la información de metadatos sobre las clases.

  1. Suponga que si crea un nombre de clase A, su variable de instancia se almacenará en la memoria del montón y la clase A junto con los cargadores de clases estáticos se almacenarán en generación permanente.
  2. A los recolectores de basura les resultará difícil borrar o liberar el espacio de memoria almacenado en la memoria de generación permanente. Por lo tanto, siempre se recomienda mantener la configuración de la memoria permanente en el límite aconsejable.
  3. JAVA8 ha introducido el concepto llamado generación de metaespacio, por lo tanto, permgen ya no es necesario cuando usa las versiones jdk 1.8.
Praveen Kumar KS
fuente
5

El espacio permgen es el área del montón que contiene todos los datos reflectantes de la propia máquina virtual, como los objetos de clase y método.

Jesse
fuente
3

Contiene cosas como definiciones de clases, grupo de cadenas, etc. Supongo que podría llamarlo metadatos.

Mella
fuente
3

El espacio de Permgen siempre se conoce como área de método. Cuando el subsistema del cargador de clases cargará el archivo de clase (código de bytes) en el área de método (permGen). Contiene todos los metadatos de la clase, por ejemplo: nombre completo de su clase, nombre completo de la clase principal inmediata, información de la variable, información del constructor, información del grupo constante, etc.

Amruta
fuente
2

Lo que existe bajo PremGen: Class Area se incluye en el área PremGen. Los campos estáticos también se desarrollan en el momento de la carga de la clase, por lo que también existen en PremGen. El área de la piscina constante que tiene todos los campos inmutables que se agrupan como String se mantienen aquí. Además de eso, también se ubican los datos de clase cargados por los cargadores de clases, matrices de objetos, objetos internos utilizados por jvm.

hola, italiano
fuente
1

PermGen Space significa asignación de memoria para generación permanente. Todos los objetos inmutables de Java entran en esta categoría, como los Stringque se crean con literales o con String.intern()métodos y para cargar las clases en la memoria. PermGen Space acelera nuestra búsqueda de igualdad de cadenas.

Spark-Beginner
fuente
1
  • JVM tiene una representación interna de objetos Java y esas representaciones internas se almacenan en el montón (en la generación joven o en la generación permanente).
  • JVM también tiene una representación interna de las clases de Java y estas se almacenan en la generación permanente

ingrese la descripción de la imagen aquí

Roopesh Payyanath
fuente