Comment est la java pool de mémoire divisée?
Je suis actuellement à la surveillance d'une application Java avec jconsole. La mémoire onglet vous permet de choisir entre:
Heap Memory Usage
Non-Heap Memory Usage
Memory Pool “Eden Space”
Memory Pool “Survivor Space”
Memory Pool “Tenured Gen”
Memory Pool “Code Cache”
Memory Pool “Perm Gen”
Quelle est la différence entre eux ?
- En supposant que vous utilisez le JDK Sun, la meilleure réponse sera trouvée dans la documentation: Accord de Collecte des Ordures (JDK 1.5) et la Collecte des Ordures FAQ (JDK 1.4)
Vous devez vous connecter pour publier un commentaire.
De segment de mémoire
La mémoire de masse est le moteur d'exécution zone de données à partir de laquelle la machine virtuelle Java alloue de la mémoire pour toutes les instances de classe et les tableaux. Le tas peut être fixe ou variable taille. Le garbage collector est une gestion automatique de la mémoire système qui libère de la mémoire dans la mémoire pour les objets.
Eden Espace: La piscine à partir de laquelle la mémoire est initialement allouée pour la plupart des objets.
Survivant de l'Espace: La piscine contenant des objets qui ont survécu à la collecte des ordures de l'Eden de l'espace.
Permanent de la Génération ou Old Gen: La piscine contenant des objets qui ont existé pendant un certain temps dans le survivant de l'espace.
Non-mémoire de tas
Non-segment de mémoire comprend une méthode de la zone partagée entre tous les threads et la mémoire nécessaire pour le traitement interne ou d'optimisation pour la machine virtuelle Java. Il enregistre par la structure de classe comme une constante d'exécution de la piscine, le terrain et les données de la méthode, et le code pour les méthodes et les constructeurs. La méthode de la zone est logiquement partie du tas, mais, en fonction de la mise en œuvre, une machine virtuelle Java peut ne pas collecter les ordures ou compact. Comme la mémoire de masse, la méthode de la zone peut être fixe ou variable taille. La mémoire de la méthode ne doit pas être contigus.
Génération permanente: La piscine contenant toutes les réflexions sur les données de la machine virtuelle elle-même, telles que la classe et de la méthode des objets. Avec les machines virtuelles Java qui utilise la classe de partage de données, cette génération est divisé en lecture seule et en lecture-écriture domaines.
Cache de Code: Le point de connexion de la machine virtuelle Java comprend également un cache de code, contenant de la mémoire qui est utilisée pour la compilation et le stockage du code natif.
Voici de la documentation sur la façon d'utiliser Jconsole.
Le mot clé new alloue de la mémoire sur le tas Java. Le tas est la piscine principale de mémoire,accessible à l'ensemble de la demande. Si il n'y a pas assez de mémoire disponible pour l'allouer à cet objet, la JVM tente de libérer un peu de mémoire dans le tas avec un garbage collection. Si elle ne peut toujours pas obtenir assez de mémoire, un OutOfMemoryError est levée, et la JVM sorties.
Le segment est divisé en plusieurs sections, appelées générations. Comme les objets de survivre plus de la collecte des poubelles, ils sont promus à des générations différentes. Les générations plus âgées ne sont pas nettoyés aussi souvent. Parce que ces objets ont déjà prouvé être plus longue durée, ils sont moins susceptibles d'être nettoyée.
Lorsque les objets sont d'abord construites, ils sont attribués dans l'Eden de l'Espace. S'ils survivent à la collecte des ordures, ils sont promus à la Survivante de l'Espace, et, s'ils vivent assez longtemps là-bas, ils sont attribués aux Titulaires de Génération. Cette génération est des ordures collectées beaucoup moins fréquemment.
Il y a aussi une quatrième génération, appelée la Génération Permanente, ou PermGen. Les objets qui se trouvent ici ne sont pas admissibles à ordures, et contiennent généralement un état immuable nécessaire pour la JVM à la course, tels que les définitions de classe et de la constante de Chaîne de la piscine. Notez que le PermGen space est prévu pour être retiré de Java 8, et sera remplacé par un nouvel espace appelé Metaspace, qui aura lieu en mémoire natif.
référence:http://www.programcreek.com/2013/04/jvm-run-time-data-areas/
-XX:PermSize
et pas-XX:MaxPermSize
, comme déjà précisé ci-avant.Avec Java8, non tas région pas plus contient PermGen mais Metaspace, qui est un changement majeur dans Java8, censé se débarrasser des erreurs de mémoire à java comme metaspace la taille peut être augmentée en fonction de l'espace requis par la jvm pour les données de la classe.
Java Heap Mémoire est la partie de mémoire de la JVM par le Système d'Exploitation.
Objets de résider dans une région appelée le tas. Le tas est créé lorsque la machine démarre et peut augmenter ou diminuer la taille tandis que l'application s'exécute. Lorsque le segment est pleine, les ordures sont collectées.
Vous pouvez trouver plus de détails sur Eden de l'Espace, Survivant de l'Espace, maître de l'Espace et de Génération Permanente ci-dessous SE question:
Les jeunes , la permanence et Perm génération
PermGen a été remplacé par Metaspace depuis Java 8 release.
Sujet de votre question:
Codecache: La Machine Virtuelle Java (JVM) génère du code natif et la stocke dans une zone de mémoire appelée la codecache. La JVM génère du code natif pour une variété de raisons, y compris pour les générées dynamiquement interprète boucle, Java Native Interface (JNI) les talons, et pour les méthodes de Java sont compilés en code natif par le juste-à-temps (JIT) compilateur. Le JIT est de loin le plus gros utilisateur de la codecache.