web-dev-qa-db-fra.com

Qu'est-ce que l'espace perm?

Tout en apprenant sur le profilage de la mémoire de Java), je continue à voir le terme "perm space" en plus de "heap". Je sais ce que le tas est - qu'est-ce que perm space?

84
skiphoppy

Il représente génération permanente :

La génération permanente est spéciale car elle contient des méta-données décrivant les classes d'utilisateurs (classes qui ne font pas partie du Java). Des exemples de telles méta-données sont des objets décrivant des classes et des méthodes et Les applications avec une grande base de code peuvent rapidement remplir ce segment du tas, ce qui entraînera Java.lang.OutOfMemoryError: PermGen, quelle que soit la hauteur de votre -Xmx et la quantité de mémoire dont vous disposez sur la machine.

99
Andrew Hare

Perm space Est utilisé pour conserver des informations sur les classes chargées et quelques autres fonctionnalités avancées telles que String Pool (Pour le test d'égalité de chaîne hautement optimisé), généralement créées par les méthodes String.intern(). Au fur et à mesure que votre application (nombre de classes) augmentera, cet espace se remplit rapidement, car le nettoyage de la mémoire de cet espace n'est pas très efficace, vous obtenez rapidement Mémoire insuffisante: erreur d'espace permanente. Après cela, aucune application ne doit fonctionner efficacement sur cette machine, même après avoir une JVM énorme et vide.

Avant de commencer votre application, vous devez Java -XX:MaxPermSize Supprimer cette erreur.

25
DKSRathore

Réponse simple (et simplifiée à l'extrême): c'est l'endroit où le JVM stocke ses propres données de comptabilité, par opposition à vos données.

19
Matt

Perm Gen signifie 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 de tas et la classe A ainsi que les chargeurs de classe statiques seront stockés dans une génération permanente.
  2. Les éboueurs trouveront difficile de vider ou de libérer l’espace mémoire stocké dans la mémoire de génération permanente. Par conséquent, il est toujours recommandé de conserver les paramètres de mémoire permgen à la limite recommandée.
  3. Java8 a introduit le concept appelé génération de méta-espace, par conséquent, permgen n'est plus nécessaire lorsque vous utilisez les versions de jdk 1.8.
17

L'espace permgen est la zone de mémoire qui contient toutes les données de réflexion de la machine virtuelle elle-même, telles que les objets de classe et de méthode.

4
Jesse

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

3
Amruta

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

2
Nick

Ce qui existe sous PremGen: La zone de classe relève de 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 Pool constant contenant tous les champs immuables regroupés comme String est conservée ici. En plus de cela, les données de classe chargées par les chargeurs de classe, les tableaux d'objets, les objets internes utilisés par jvm sont également localisés.

2
hi.nitish

PermGen Space signifie allocation de mémoire pour la génération permanente All Java les objets immuables entrent dans cette catégorie, comme String qui est créé avec des littéraux ou avec String.intern() méthodes et PermGen Space accélère notre recherche en égalité de chaînes.

1
Spark-Beginner