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?
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?
Réponses:
Il signifie 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 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.
Perm space
est 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:MaxPermSize
vous débarrasser de cette erreur.
Perm Gen signifie génération permanente qui contient les informations de méta-données sur les classes.
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 String
qui 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.