Espacio de almacenamiento dinámico y metaespacio de generación permanente

Sarwan Soomro 16 febrero 2024
  1. Espacio de almacenamiento dinámico de generación permanente en Java
  2. Características clave de PermGen en Java
  3. PermGen vs Metaspace en Java
  4. Metaespacio (Java 8)
  5. Resumen
Espacio de almacenamiento dinámico y metaespacio de generación permanente

Esta breve demostración de espacios de memoria JVM explora cómo la máquina virtual Java maneja la asignación de memoria de datos de usuario. Aunque no cubriremos este tema con gráficos, es bastante básico y creemos que nuestra explicación será suficiente para formar su claridad.

Además, compararemos PermGen con Metaspace y ambos. Este breve artículo contiene mucha información para usted, así que siga leyendo para obtener más información.

Espacio de almacenamiento dinámico de generación permanente en Java

PermGen es una forma abreviada de espacio de almacenamiento dinámico de generación permanente utilizado por Java Virtual Machine. Es el espacio que ocupan todas las clases, métodos, objetos, cadenas internalizadas, etc.

Para la mayoría de las aplicaciones, la generación permanente no tiene un efecto perceptible en la eficiencia del recolector de basura. No obstante, algunas aplicaciones crean y cargan dinámicamente muchas clases, como JSP.

Nota
Dichas aplicaciones podrían requerir una generación permanente más grande para acomodar las clases adicionales.

Si surge tal caso, podemos usar la línea de comando para aumentar el tamaño MAX: PermGen. Comando para aumentar MAX: PermGen Tamaño: -XX:MaxPermSize=SIZE, -XX:PermSize=[tamaño].

Pero hay una cosa a tener en cuenta aquí. Dado que Java eliminó este espacio de memoria en el lanzamiento de la versión 8 del kit de desarrollo de Java, recibiremos estas advertencias si usamos estos indicadores de ajuste en Java 8 o posterior.

>> java -XX:PermSize=100m -XX:MaxPermSize=200m -version
OpenJDK 64-Bit Server VM warning: Ignoring option PermSize; support was removed in 8.0
OpenJDK 64-Bit Server VM warning: Ignoring option MaxPermSize; support was removed in 8.0

Características clave de PermGen en Java

PG también está incluido en la recolección de basura completa:

  1. Espacio para metadatos de clase JVM.
  2. La representación interna de las Clases Java en Hotspot.
  3. Información sobre la estructura de clases, campos e identificadores.
  4. Información sobre compilación de métodos y códigos de bytes.
  5. Variables
  6. Grupo siempre activo y resolución simbólica.

Problemas comunes con PermGen:

  1. Memoria limitada para MaxPermSize.
  2. Un MaxPermSize más grande provocaba reinicios.
  3. Problema de error de falta de memoria.
  4. Se activó la descarga de clases debido a la referencia de la aplicación.
  5. MaxPermSize (solo de 64 MB a 85 MB).

Además de estos temas, hay otros que deberías leer aquí: 1, 2.

PermGen vs Metaspace en Java

Desde Java 8, hemos visto el reemplazo de PermGen con Metaspace. Ligeras diferencias también prevalecieron en este cambio.

Por ejemplo, el Metaspace tiene un tamaño máximo predeterminado ilimitado, mientras que el primero no. Si leemos los documentos oficiales, nos enteramos de que PermGen tiene un tamaño máximo predeterminado de 64 MB en JVM de 32 bits.

Asimismo, dispone de 82 MB en JVMs de 64 bits en Java 7 y versiones anteriores. Pero desde ahora sabe que el error de falta de memoria ya no es una preocupación.

¿No deberíamos explorar Metaspace en su lugar? Obviamente, sí.

Metaespacio (Java 8)

Tómelo como un contenedor, un lugar donde la VM de Java guarda su memoria, como clases, métodos, variables, cadenas, etc., ya que ya hemos señalado las diferencias más importantes entre el espacio de memoria anterior y este.

Entonces, sin demora, averigüemos qué es diferente en Metaspace.

La siguiente tabla compara y contrasta Metaspace y PermGen.

S. N. Generación Permanente metaespacio
1 El PermGen Space fue eliminado en Java 8. El nuevo metaespacio espacial lo reemplazó, que se lanzó con Java 8.
2 Siempre tuvo un tamaño de memoria constante, como sugiere el nombre. Asignación dinámica de memoria en función del Sistema Operativo.
3 Recolector de basura ineficaz (GC). GC efectivo
Nota
El error PermGen sin memoria ya no es un problema desde que se reemplazó con Metaspace.

Sin embargo, si desea obtener más información al respecto, consulte este enlace: Ajuste de la recolección de elementos no utilizados de la máquina virtual.

Resumen

Aunque fue un artículo breve y directo, presentamos una breve caracterización de los espacios de memoria de generación permanente y metaespacio, el papel de los recolectores de basura y cómo la JVM los estructura a todos.

Además de eso, diferenciamos cada uno con ejemplos en tiempo real y citamos referencias útiles. En pocas palabras, la generación permanente todavía está presente en JDK 7 y versiones anteriores.

Metaspace, por otro lado, ofrece un espacio de memoria más confiable y flexible para nuestras aplicaciones.

Sarwan Soomro avatar Sarwan Soomro avatar

Sarwan Soomro is a freelance software engineer and an expert technical writer who loves writing and coding. He has 5 years of web development and 3 years of professional writing experience, and an MSs in computer science. In addition, he has numerous professional qualifications in the cloud, database, desktop, and online technologies. And has developed multi-technology programming guides for beginners and published many tech articles.

LinkedIn