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 - quel est l'espace permanent?
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 langage Java). Des exemples de telles méta-données sont des objets décrivant des classes et des méthodes et ils sont stockés dans la génération permanente. 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.
Andrew, je suis juste curieux de savoir quelle pourrait être la taille de PerGen?
gks
Juste curieux de savoir si permgen fait partie de la mémoire de tas (comme indiqué dans cette réponse) ou il est hors tas (comme indiqué dans cette réponse - stackoverflow.com/a/31103100/3061686 ).
akki
25
Perm spaceest utilisé pour conserver les informations des classes chargées et quelques autres fonctionnalités avancées comme String Pool(pour les tests d'égalité de chaîne hautement optimisés), qui sont généralement créées par des String.intern()méthodes. Au fur et à mesure que votre application (nombre de classes) augmentera, cet espace se remplira rapidement, puisque le ramasse-miettes sur cet espace n'est pas très efficace pour nettoyer si nécessaire, vous obtenez rapidement Out of Memory: erreur d'espace perm gen. Après cela, aucune application ne fonctionnera efficacement sur cette machine, même après avoir une énorme machine virtuelle Java vide.
Avant de démarrer votre application, vous devez java -XX:MaxPermSizevous débarrasser de cette erreur.
Perm Gen signifie génération permanente qui contient les informations de méta-données sur les classes.
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 sera stockée dans la génération permanente.
Les garbage collector 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 conserver les paramètres de mémoire permgen à la limite souhaitable.
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.
L'espace permgen est la zone du tas qui contient toutes les données réfléchissantes 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 du chargeur de classe 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: le nom complet de votre classe, le nom complet de la classe parente immédiate, les informations sur les variables, les informations sur le constructeur, les informations sur le pool de constantes, etc.
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 de piscine constante 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 est synonyme d'allocation de mémoire pour la génération permanente Tous les objets immuables Java entrent dans cette catégorie, comme celui Stringqui est créé avec des littéraux ou avec des String.intern()méthodes et pour charger les classes en mémoire. PermGen Space accélère notre recherche d'égalité des chaînes.
JVM a une représentation interne des objets Java et ces représentations internes sont stockées dans le tas (dans la jeune génération ou la génération titulaire).
JVM a également une représentation interne des classes Java et celles-ci sont stockées dans la génération permanente
Réponses:
Il signifie génération permanente :
la source
Perm space
est utilisé pour conserver les informations des classes chargées et quelques autres fonctionnalités avancées commeString Pool
(pour les tests d'égalité de chaîne hautement optimisés), qui sont généralement créées par desString.intern()
méthodes. Au fur et à mesure que votre application (nombre de classes) augmentera, cet espace se remplira rapidement, puisque le ramasse-miettes sur cet espace n'est pas très efficace pour nettoyer si nécessaire, vous obtenez rapidement Out of Memory: erreur d'espace perm gen. Après cela, aucune application ne fonctionnera efficacement sur cette machine, même après avoir une énorme machine virtuelle Java vide.Avant de démarrer votre application, vous devez
java -XX:MaxPermSize
vous débarrasser de cette erreur.la source
Réponse simple (et simplifiée à l'extrême): c'est là que la jvm stocke ses propres données comptables, par opposition à vos données.
la source
Perm Gen signifie génération permanente qui contient les informations de méta-données sur les classes.
la source
L'espace permgen est la zone du tas qui contient toutes les données réfléchissantes de la machine virtuelle elle-même, telles que les objets de classe et de méthode.
la source
Il contient des éléments comme des définitions de classe, un pool de chaînes, etc. Je suppose que vous pourriez l'appeler des méta-données.
la source
L'espace Permgen est toujours appelé zone de méthode. Lorsque le sous-système du chargeur de classe 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: le nom complet de votre classe, le nom complet de la classe parente immédiate, les informations sur les variables, les informations sur le constructeur, les informations sur le pool de constantes, etc.
la source
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 de piscine constante 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.
la source
PermGen Space est synonyme d'allocation de mémoire pour la génération permanente Tous les objets immuables Java entrent dans cette catégorie, comme celui
String
qui est créé avec des littéraux ou avec desString.intern()
méthodes et pour charger les classes en mémoire. PermGen Space accélère notre recherche d'égalité des chaînes.la source
la source