Saltar al contenido

¿Cuál es la diferencia entre PermGen y Metaspace?

Te damos la bienvenida a nuestra web, en este lugar encontrarás la respuesta a lo que buscas.

Solución:

La principal diferencia desde la perspectiva del usuario, que creo que la respuesta anterior no enfatiza lo suficiente, es que Metaspace por defecto aumenta automáticamente su tamaño (hasta lo que proporciona el sistema operativo subyacente), mientras que PermGen siempre tiene un tamaño máximo fijo. Puede establecer un máximo fijo para Metaspace con parámetros de JVM, pero no puede hacer que PermGen aumente automáticamente.

En gran medida es solo un cambio de nombre. Antes, cuando se introdujo PermGen, no había Java EE o clase dinámica (des) carga, por lo que una vez que se cargaba una clase, se atascaba en la memoria hasta que la JVM se apagaba, por lo tanto Permanente Generacion. Hoy en día, las clases pueden cargarse y descargarse durante la vida útil de la JVM, por lo que Metaspace tiene más sentido para el área donde se guardan los metadatos.

Ambos contienen la java.lang.Class instancias y ambos sufren fugas de ClassLoader. La única diferencia es que con la configuración predeterminada de Metaspace, toma más tiempo hasta que nota los síntomas (ya que aumenta automáticamente tanto como puede), es decir, simplemente aleja el problema sin resolverlo. OTOH Me imagino que el efecto de quedarse sin memoria del sistema operativo puede ser más grave que simplemente quedarse sin JVM PermGen, por lo que no estoy seguro de que sea una gran mejora.

Ya sea que esté utilizando una JVM con PermGen o con Metaspace, si está realizando una descarga dinámica de clases, debe tomar medidas contra las fugas del cargador de clases, por ejemplo, utilizando mi biblioteca ClassLoader Leak Prevention.

Adiós, adiós PermGen, hola Metaspace

PermGen ha sido eliminado por completo.

Recolección de basura Metaspace – La recolección de basura de las clases muertas y los cargadores de clases se activa una vez que el uso de metadatos de la clase alcanza el MaxMetaspaceSize.

El espacio Metadata se llevó a cabo ya no es contigua a la Java heap, El metadata ahora se ha trasladado a la memoria nativa a un área conocida como el Metaspace.

En palabras simples,

Dado que los metadatos de clase se asignan fuera de la memoria nativa, el espacio máximo disponible es la memoria total disponible del sistema. Por lo tanto, ya no te encontrarás OOM errors y podría terminar derramándose en el espacio de intercambio.

la eliminación de PermGen no significa que los problemas de fuga del cargador de clases hayan desaparecido. Entonces, sí, aún tendrá que monitorear su consumo y planificar en consecuencia, ya que una fuga terminaría consumiendo toda su memoria nativa.

Algunos otros artículos, con análisis: Link1, Link2, y este

En resumen, el tamaño de Metaspace aumenta automáticamente en la memoria nativa según sea necesario para cargar metadatos de clase si no está restringido con -XX:MaxMetaspaceSize

Sección de Reseñas y Valoraciones

Si te gustó nuestro trabajo, tienes la libertad de dejar un tutorial acerca de qué te ha gustado de este enunciado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *