Específicamente, ¿por qué ayudaría solucionar un problema de PermGen OutOfMemoryError?
Además, puntos de bonificación por una respuesta que me señala la documentación sobre los argumentos de JVM ...
java
jvm
jvm-arguments
Geoff
fuente
fuente
Respuestas:
El espacio permanente es donde las clases, métodos, cadenas internalizadas y objetos similares utilizados por la VM se almacenan y nunca se desasignan (de ahí el nombre).
Este artículo de Oracle presenta sucintamente el funcionamiento y la parametrización del HotSpot GC y le recomienda que aumente este espacio si carga muchas clases (este suele ser el caso de los servidores de aplicaciones y algunos IDE como Eclipse):
Tenga en cuenta que esta otra documentación de Oracle enumera los otros argumentos de HotSpot.
Actualización: a partir de Java 8, tanto el espacio permgen como esta configuración han desaparecido. El modelo de memoria utilizado para las clases y métodos cargados es diferente y no está limitado (con la configuración predeterminada). No deberías ver este error más.
fuente
-XX:PermSize -XX:MaxPermSize
se utilizan para establecer el tamaño para la generación permanente.Generación permanente: la generación permanente es donde se guardan los archivos de clase. Estos son el resultado de clases compiladas y páginas JSP. Si este espacio está lleno, desencadena una recolección de basura completa. Si la recogida de basura completa no puede limpiar las clases antiguas sin referencia y no queda espacio para expandir el espacio permanente, se produce un error de falta de memoria (OOME) y la JVM se bloqueará.
fuente
En Java 8 ese parámetro se usa comúnmente para imprimir un mensaje de advertencia como este:
La razón por la que recibe este mensaje en Java 8 es porque Permgen ha sido reemplazado por Metaspace para abordar algunos de los inconvenientes de PermGen (como pudo ver por usted mismo, uno de esos inconvenientes es que tenía un tamaño fijo).
FYI: un artículo sobre Metaspace: http://java-latte.blogspot.in/2014/03/metaspace-in-java-8.html
fuente