Qu’est-ce que l’espace perm?

Tout en apprenant le profilage de la mémoire Java, je continue à voir le terme “espace perm” en plus de “tas”. Je sais ce qu’est le tas – qu’est-ce que l’espace perm?

Il représente la génération permanente :

La génération permanente est spéciale car elle contient des métadonnées décrivant les classes d’utilisateurs (classes ne faisant pas partie du langage Java). Des exemples de telles méta-données sont des objects décrivant des classes et des méthodes et ils sont stockés dans la génération permanente. Les applications avec une base de code volumineuse peuvent rapidement remplir ce segment du tas, ce qui provoquera java.lang.OutOfMemoryError : PermGen, quel que soit le niveau de -Xmx et la quantité de mémoire disponible sur la machine.

Perm space est utilisé pour conserver des informations sur les classes chargées et quelques autres fonctionnalités avancées telles que Ssortingng Pool (pour des tests d’égalité de chaînes hautement optimisés), qui sont généralement créées par les méthodes Ssortingng.intern() . Au fur et à mesure que votre application (nombre de classes) augmentera, cet espace sera rapidement rempli, car la récupération de place sur cet Espace n’est pas très efficace pour nettoyer, vous obtenez rapidement Out of Memory: Après cela, aucune application ne fonctionnera efficacement sur cette machine même après une énorme JVM vide.

Avant de commencer votre application, vous devez java -XX:MaxPermSize pour vous débarrasser de cette erreur.

Réponse simple (et simplifiée): c’est là que JVM stocke ses propres données de comptabilité, par opposition à vos données.

Perm Gen est synonyme de génération permanente qui contient les informations de métadonnées sur les classes.

  1. Supposons que si vous créez un nom de classe A, sa variable d’instance sera stockée dans la mémoire du tas et la classe A avec les chargeurs de classe statiques seront stockés dans la génération permanente.
  2. Les éboueurs auront du mal à effacer ou libérer l’espace mémoire stocké dans la mémoire de génération permanente. Par conséquent, il est toujours recommandé de garder les parameters de mémoire permgen à la limite recommandée.
  3. JAVA8 a introduit le concept appelé génération de méta-espace, donc le permgen n’est plus nécessaire lorsque vous utilisez les versions jdk 1.8.

L’espace de permgen est la zone du tas qui contient toutes les données de reflection de la machine virtuelle elle-même, telles que les objects de classe et de méthode.

L’espace Permgen est toujours appelé zone de méthode. Lorsque le sous-système classloader charge le fichier de classe (code d’octet) dans la zone de méthode (permGen). Il contient toutes les métadonnées de la classe, par exemple: Nom complet de votre classe, Nom complet de la classe parente immédiate, Informations sur la variable, Informations sur le constructeur, Infor de pool constant, etc.

Il contient des éléments tels que les définitions de classe, le pool de chaînes, etc. Je suppose que vous pouvez l’appeler méta-données.

Qu’est-ce qui existe sous PremGen: Class Area est dans la zone PremGen. Les champs statiques sont également développés au moment du chargement de la classe, ils existent donc également dans PremGen. La zone du pool constant contenant tous les champs immuables regroupés comme Ssortingng est conservée ici. En plus de cela, les données de classe chargées par les chargeurs de classes, les tableaux Object, les objects internes utilisés par jvm sont également situés.

PermGen Space signifie allocation de mémoire pour la génération permanente Tous les objects Java immuables appartiennent à cette catégorie, comme Ssortingng qui est créé avec des méthodes littérales ou Ssortingng.intern() et pour charger les classes en mémoire. PermGen Space accélère notre recherche d’égalité de chaînes.