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 ...
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 ...
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):
La generación permanente no tiene un impacto notable en el rendimiento del recolector de basura para la mayoría de las aplicaciones. Sin embargo, algunas aplicaciones generan y cargan dinámicamente muchas clases; por ejemplo, algunas implementaciones de páginas JavaServer Pages (JSP). Estas aplicaciones pueden necesitar una generación permanente más grande para contener las clases adicionales. Si es así, el tamaño máximo de generación permanente se puede aumentar con la opción de línea de comandos -XX: MaxPermSize =.
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.
-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á.
En Java 8 ese parámetro se usa comúnmente para imprimir un mensaje de advertencia como este:
Advertencia de máquina virtual del servidor Java HotSpot (TM) de 64 bits: ignorando la opción MaxPermSize = 512m; el soporte fue eliminado en 8.0
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