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?
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.
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.
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.
Perm Gen signifie génération permanente qui contient les informations de métadonnées sur les classes.
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.
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.
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.
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.
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.