Mientras aprendo sobre la creación de perfiles de memoria de Java, sigo viendo el término "espacio permanente" además de "montón". Sé lo que es el montón, ¿qué es el espacio de permanente?
Mientras aprendo sobre la creación de perfiles de memoria de Java, sigo viendo el término "espacio permanente" además de "montón". Sé lo que es el montón, ¿qué es el espacio de permanente?
Respuestas:
Significa generación permanente :
La generación permanente es especial porque contiene metadatos que describen las clases de usuario (clases que no forman parte del lenguaje Java). Ejemplos de tales metadatos son objetos que describen clases y métodos y se almacenan en la Generación Permanente. Las aplicaciones con una gran base de código pueden llenar rápidamente este segmento del montón, lo que provocará
java.lang.OutOfMemoryError
: PermGen sin importar qué tan alto sea su -Xmx y cuánta memoria tenga en la máquina.
Perm space
se usa para mantener información para clases cargadas y algunas otras características avanzadas como String Pool
(para pruebas de igualdad de cadenas altamente optimizadas), que generalmente se crean mediante String.intern()
métodos. A medida que su aplicación (número de clases) crezca, este espacio se llenará rápidamente, ya que la recolección de basura en este espacio no es muy efectiva para limpiar según sea necesario, rápidamente obtendrá un error de memoria insuficiente: espacio de generación permanente. Después de eso, ninguna aplicación se ejecutará en esa máquina de manera efectiva incluso después de tener una gran JVM vacía.
Antes de iniciar su aplicación, debe java -XX:MaxPermSize
deshacerse de este error.
Perm Gen significa generación permanente que contiene la información de metadatos sobre las clases.
El espacio de Permgen siempre se conoce como área de método. Cuando el subsistema del cargador de clases cargará el archivo de clase (código de bytes) en el área de método (permGen). Contiene todos los metadatos de la clase, por ejemplo: nombre completo de su clase, nombre completo de la clase principal inmediata, información de la variable, información del constructor, información del grupo constante, etc.
Lo que existe bajo PremGen: Class Area se incluye en el área PremGen. Los campos estáticos también se desarrollan en el momento de la carga de la clase, por lo que también existen en PremGen. El área de la piscina constante que tiene todos los campos inmutables que se agrupan como String se mantienen aquí. Además de eso, también se ubican los datos de clase cargados por los cargadores de clases, matrices de objetos, objetos internos utilizados por jvm.
PermGen Space significa asignación de memoria para generación permanente. Todos los objetos inmutables de Java entran en esta categoría, como los String
que se crean con literales o con String.intern()
métodos y para cargar las clases en la memoria. PermGen Space acelera nuestra búsqueda de igualdad de cadenas.