Question : quelle est le rôle de la permanent permanent generation
Ce travail a été réalisé en collaboration avec Hamed KOUBAA, Architect SOA.
Permanent generation ?
Rappelons que la zone permanent generation définit une zone de mémoire qui accueille des objets permanents. Elle contient la définition des classes Java, qui sont chargées au démarrage de la JVM et au cours de l'exécution de l'application.
Il arrive parfois que cette zone soit trop petite et provoque un blocage de votre application. Dans ce cas le message de l'exception
• OutOfMemoryException : PermGen space.
Il n'y a pas de collectes dans cette zone.
introduction
L’objectif de cet atelier est de sensibiliser au choix des espaces mémoires de la JVM, basée sur un GC générationnel. Nous avons appliques au JDK de SUN.
Le principe de l’atelier est simple : utiliser l’application java2D (inclus dans la jdk %java_home%/demo/jfc/Java2D) avec des paramètres différents de la JVM et interpréter les résultats obtenus.
pré requis
Les expérimentations de ce tutorial peuvent être réalisé sous Solaris, Linux et Windows : là où le JDK Hotspot de Sun fonctionne.
Il suffit d’Installer une JDK ultérieure à la version 5.0.
Les tests ont été réalisés avec JDK 1.0.0 build 17.
Noter que le JDK qui inclut des "démos" est nécessaire - la JRE n'est pas suffisante.
Configurer les variables d’environnement JAVA_HOME
- télécharger si besoin visualgc .
Maintenant vous êtes prêt pour démarrer l’atelier.
Une génération permanente trop petite
Pour cet exercice, on réinitialise la taille maximale du Heap à notre standard de 16 MB. Nous gardons la jeune génération à notre optimale 4 MB.
Et maintenant, nous introduisons perm gen tuning en le fixant à 1 Mb.
-XX:PermSize=1m -XX:MaxPermSize=1m -XX:NewSize=4m -XX:MaxNewSize=4m -Xms16m -Xmx16m
- agrandir la fenêtre du java2D et observer le résultat
Le log de l’application montre qu’il y a une exception outOfMemory PerGen
Interprétation
Comment pouvez-vous savoir quand la permanent generation est trop petite?
Si l'application ne démarre pas ou se bloque avec une exception mémoire
Pourquoi une permanent generation qui est trop petit un problème?
Si la génération permanente est trop faible il n'y aura pas assez de place pour la JVM pour charger les bocaux et classfiles qui composent l'application elle-même.
La génération permanente est spéciale parce qu'elle contient des données utilisées par la machine virtuelle pour décrire les objets qui ne disposent pas d'une équivalence au niveau du langage Java. Par exemple, les objets décrivant les classes et les méthodes sont stockées dans la génération permanente.
Une génération permanente ayant la bonne taille
Maintenant nous avons fixé la permanent generation à 17 Mo (au lieu de 1 Mo pour l'exercice précédent). Le Heap d'ensemble et la taille des nouvelle génération reste la même à 16 Mo et 4 Mo, respectivement.
-XX:PermSize=17m -XX:MaxPermSize=17m -XX:NewSize=4m -XX:MaxNewSize=4m -Xms16m -Xmx16m
Interprétation :
Comment connaissez-vous la permanent generation a une taille adéquate?
Lorsque vous trouvez que le programme s'exécute avec une marge confortable de l'espace gen Perm.
Puis-je laisser la JVM déterminer la bonne taille permanent generation?
Bien sûr, en fait, vous pouvez définir les valeurs maximales de la permanent generation et laisser la JVM déterminer la taille adéquate selon le besoin, mais toujours sans dépasser cette taille max.
Pourquoi le tuning de la permanent generation est important?
Le tuning de la permanent generation est important si le contrôle de la consommation mémoire globale est important et que vous voulez obtenir un gain de performances supplémentaires en éliminant le temps de redimensionnement de la permanent generation.