¿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?


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, 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.


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.


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.

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.


3

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


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.


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.


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.


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í

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.