¿Qué es el espacio permanente?

Mientras aprendía sobre el perfil de la memoria Java, sigo viendo el término “espacio permanente” además de “montón”. Sé lo que es el montón: ¿qué es el espacio permanente?

Representa la generación permanente :

La generación permanente es especial porque contiene metadatos que describen clases de usuario (clases que no son parte del lenguaje Java). Los 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 que causará java.lang.OutOfMemoryError : PermGen sin importar qué tan alto sea su -Xmx y cuánta memoria tiene en la máquina.

Perm space se usa para mantener la información de las clases cargadas y algunas otras funciones avanzadas como String Pool (para pruebas de igualdad de cadenas altamente optimizadas), que generalmente se crean con los métodos String.intern() . A medida que su aplicación (número de clases) crecerá, este espacio se llenará rápidamente, ya que la recolección de basura en este espacio no es muy efectiva para limpiar según se requiera, usted obtiene rápidamente memoria insuficiente: error de espacio de generación de perm. 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 comenzar su aplicación, debe java -XX:MaxPermSize para deshacerse de este error.

Respuesta simple (y simplificada): es donde jvm almacena sus propios datos de contabilidad, a diferencia de sus datos.

Perm Gen significa generación permanente que contiene información de metadatos sobre las clases.

  1. Supongamos que si crea un nombre de clase A, su variable de instancia se almacenará en la memoria del montón y la clase A junto con los cargadores de clases estáticos se almacenarán en la generación permanente.
  2. A los recolectores de basura les resultará difícil borrar o liberar el espacio de memoria almacenado en la memoria de generación permanente. Por lo tanto, siempre se recomienda mantener la configuración de la memoria permgen en el límite aconsejable.
  3. JAVA8 ha introducido el concepto llamado generación meta-espacio, por lo tanto, permgen ya no es necesario cuando se utilizan versiones jdk 1.8.

El espacio permgen es el área de almacenamiento dynamic que contiene todos los datos reflejantes de la máquina virtual en sí, como objetos de clase y método.

El espacio de Permgen siempre se conoce como área de método. Cuando el subsistema de cargador de clases carga el archivo de clase (código de bytes) en el área de método (permGen). Contiene todos los metadatos de la clase, p. Ej .: nombre completo de su clase, nombre totalmente calificado de la clase principal inmediata, información variable, información del constructor, información constante del grupo, etc.

Tiene cosas como definiciones de clase, grupo de cadenas, etc. Supongo que podría llamarlo metadatos.

Lo que existe en PremGen: Class Area viene bajo el área de PremGen. Los campos estáticos también se desarrollan en el tiempo de carga de clases, por lo que también existen en PremGen. El área de Pool constante que tiene todos los campos inmutables que se agrupan como String se guardan aquí. Además de eso, también se encuentran los datos de clase cargados por cargadores de clases, matrices de objetos, objetos internos utilizados por jvm.

PermGen Space significa asignación de memoria para la generación permanente. Todos los objetos inmutables de Java se incluyen en esta categoría, como String que se crea con literales o con los métodos String.intern() y para cargar las clases en la memoria. PermGen Space acelera nuestra búsqueda de igualdad de cadenas.