java jvm jvm-hotspot permgen

java - -XX: MaxPermSize con o sin-XX: PermSize



jvm jvm-hotspot (3)

Al jugar con parámetros como -XX:PermSize y -Xms puede ajustar el rendimiento, por ejemplo, del inicio de su aplicación. No lo he visto recientemente, pero hace unos años, el valor predeterminado de -Xms era algo así como 32MB (creo), si su aplicación requería mucho más que eso, se activaría una serie de ciclos de memoria de relleno: completa recolección de basura: aumente la memoria, etc., hasta que haya cargado todo lo que necesita. Este ciclo puede ser perjudicial para el rendimiento de inicio, por lo que la asignación inmediata del número requerido podría mejorar el inicio.

Un ciclo similar se aplica a la generación permanente. Así que sintonizar estos parámetros puede mejorar el arranque (entre otros).

ADVERTENCIA La JVM tiene una gran optimización e inteligencia a la hora de asignar memoria, dividir el espacio eden y las generaciones anteriores, así que no haga cosas como hacer -Xms igual a -Xmx o -XX:PermSize igual a -XX:MaxPermSize como eliminará algunas de las optimizaciones que JVM puede aplicar a sus estrategias de asignación y, por lo tanto, reducirá el rendimiento de su aplicación en lugar de mejorarla.

Como siempre: realice mediciones no triviales para demostrar que sus cambios realmente mejoran el rendimiento en general (por ejemplo, mejorar el tiempo de inicio podría ser desastroso para el rendimiento durante el uso de la aplicación)

Nos hemos encontrado con un error de espacio Java.lang.OutOfMemoryError: PermGen y observando los parámetros JVM tomcat, además de los -Xms y -Xmx , también especificamos -XX:MaxPermSize=128m . Después de un poco de perfiles, puedo ver que ocasionalmente se realiza una recolección de basura en el espacio de PermGen, lo que evita que se ejecute por completo.

Mi pregunta es: aparte de aumentar el -XX:MaxPermSize ¿cuál sería la diferencia si también especificara -XX:PermSize ? Sé que la memoria total sería Xmx + maxPermSize, pero ¿hay alguna otra razón por la que -XX:PermSize no debería estar allí cuando se especifica -XX:MaxPermSize ?

Comparta si tiene experiencia en el mundo real al tratar con estos parámetros de JVM.

PD. La JVM es HotSpot 64bit Server VM build 16.2-b04


Si está realizando algunos ajustes de rendimiento, a menudo se recomienda establecer tanto -XX:PermSize como -XX:MaxPermSize en el mismo valor para aumentar la eficiencia de la JVM .

Aquí hay alguna información:

  1. Soporte para el montón de páginas grandes en plataformas x86 y amd64
  2. Soporte de Java para páginas de memoria grandes
  3. Configuración del tamaño de generación permanente

También puede especificar -XX:+CMSClassUnloadingEnabled para habilitar la opción de descarga de clases si está usando CMS GC . Puede ayudar a disminuir la probabilidad de que Java.lang.OutOfMemoryError: PermGen space


-XX:PermSize especifica el tamaño inicial que se asignará durante el inicio de la JVM. Si es necesario, la JVM asignará hasta -XX:MaxPermSize .