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

Hasta Java 7 existe un área en la memoria de JVM llamado PermGen, donde JVM utiliza para mantener a sus clases. En Java 8 fue eliminado y sustituido por una zona llamada Metaspace.

¿Cuáles son las diferencias más importantes entre PermGen y Metaspace?

La única diferencia que yo sé es que java.lang.OutOfMemoryError: PermGen space no pueden ser lanzados y el parámetro de la máquina virtual MaxPermSize es ignorado.

  • el primer resultado de google: infoq.com/articles/Java-PERMGEN-Removed
  • Sí, pero este (y muchos otros) los resultados de google describir sólo Metaspace mecanismo, no mencionar nada acerca de las diferencias exactas entre este y PermGen.
InformationsquelleAutor Kao | 2014-11-25

3 Kommentare

  1. 123

    La principal diferencia desde una perspectiva de usuario, que pienso que la respuesta anterior no enfatizar lo suficiente – es que Metaspace por defecto auto aumenta su tamaño (hasta lo que el sistema operativo subyacente proporciona), mientras que PermGen siempre tiene un tamaño máximo fijo. Usted puede establecer un máximo fijo para Metaspace con JVM parámetros, pero no se puede hacer PermGen auto-incremento.

    Gran medida es sólo un cambio de nombre. De vuelta al PermGen se introdujo, no había Java EE o de la dinámica de la clase(de la onu)de carga, así que una vez que una clase se ha cargado estaba atascado en la memoria hasta que la JVM apagar – así Permanente Generación. Hoy en día las clases pueden ser cargados y descargados durante la vida útil de la JVM, así Metaspace tiene más sentido para el área donde los metadatos se mantiene.

    Ambos contienen las java.lang.Class instancias y ambos sufren de Cargador de clases de fugas. La única diferencia es que con Metaspace configuración predeterminada, se tarda más tiempo hasta que note los síntomas (ya que el auto aumenta tanto como pueda), es decir, sólo tiene que empujar el problema sin resolverlo. OTOH me imagino que el efecto de ejecutar fuera de la memoria del sistema operativo, pueden ser más graves que sólo se ejecuta fuera de la JVM PermGen, así que no estoy seguro de que es mucho de una mejora.

    Si estás usando una JVM con PermGen o con Metaspace, si usted está haciendo la dinámica de la clase de la descarga, usted debe tomar medidas en contra del cargador de clases de fugas, por ejemplo mediante el uso de mi Cargador de clases de Prevención de Fugas de la biblioteca.

    • Ni Permgen, ni Metaspace contienen instancias de la clase class. Sólo mantener la meta-información acerca de las clases cargadas. Las instancias de la clase la Clase se mantienen en regular montón, como instancias de otras clases.
    • Bonita comparación. Gracias
    • Por el camino, OTOH significa, «En Otro Lado»
  2. 35

    Bye, Bye PermGen, Hola Metaspace

    PermGen ha sido completamente eliminado.

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

    El espacio Metadata se celebró ya no es contigua a la Java heap, El metadata se ha trasladado ahora a los nativos de la memoria a una zona conocida como el Metaspace.

    En palabras Simples,

    Desde los metadatos de la clase se asigna de los nativos de la memoria, el máximo de espacio disponible es el total de memoria disponible del sistema. Por lo tanto, usted no encontrará OOM errors y podría terminar el derrame en el espacio de intercambio.

    La eliminación de PermGen no significa que el cargador de clases de problemas de pérdida se han ido. Así que, sí, usted todavía tendrá que controlar su consumo y planificar en consecuencia, desde una fuga acabaría consumiendo toda su nativo de memoria.

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

    • En lugar de MaxPermGen tiene MaxMetaspaceSize, así que no hay razón por la que va a utilizar más, o menos de memoria o tiene menos control.
    • lo de la memoria estamos hablando aquí? RAM de memoria o de disco duro de la memoria.
    • RAM(memoria interna)
  3. 9

    En resumen, Metaspace de tamaño automático de los aumentos en los nativos de la memoria como necesario para cargar los metadatos de clase si no restringido con -XX:MaxMetaspaceSize

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea