1 FONCTIONNEMENT MÉMOIRE DE LA JVM Julien Herr IR3 – 22/02/2008 Objectifs de l’exposé 2 Faire comprendre le fonctionnement de la mémoire en Java Initier à l'optimisation mémoire Sommaire 3 Garbage Collecting Garbage Collecting Différentes zones mémoires Différents algo de collection Optimisation de la gestion mémoire Généralités Buts et principe de fonctionnement général Fonctionnement JVM Fonctionnement JVM Le principe Mauvaises pratiques Les outils Bibliographie Questions ? Optimisation Garbage Collecting : Généralités 4 Garbage Collecting Différence du C Rappel Fonctionnement JVM sur malloc / free 2 fonctions principales pour la VM Exécuter le code Gérer la mémoire Objet collecté Un objet qui n'est plus référencé Vocabulaire : Ramasse miette, GC Optimisation Garbage Collecting : Buts et fonctionnement général 5 Garbage Collecting Fonctionnement JVM Optimisation 2 types d’objets Objets jeunes Objets vieux Plusieurs algorithmes de nettoyage Entres les 2 types d'objets Pour un même type d'objets Coupe tous les threads pendant le GC Déclanchement du GC lors du dépacement du seuil de mémoire utilisée Fonctionnement JVM : Différentes zones mémoires 6 Garbage Collecting Fonctionnement JVM Optimisation Fonctionnement JVM : Différents algorithmes : Serial Collector 7 Garbage Collecting Fonctionnement JVM Optimisation New Object Region Old Object Region Eden SS1 SS2 Old Eden SS1 SS2 Old Eden SS2 SS1 Old Second GC Eden SS2 SS1 Old X GC Eden SS2 SS1 Old Premier GC Fonctionnement JVM : Différents algorithmes : Mark & Sweep Compact 8 Garbage Collecting Fonctionnement JVM Début Full GC Old Fin Full GC Old Optimisation Fonctionnement JVM : Différents algorithmes : Parallel Collector 9 Garbage Collecting Fonctionnement JVM Optimisation Fonctionnement JVM : Différents algorithmes : Concurent Mark & Sweep 10 Garbage Collecting Fonctionnement JVM Optimisation Optimisation : Le principe 11 Garbage Collecting Fonctionnement JVM Stratégie par défaut de la JVM Algorithme de Garbage Collector Taille des zones mémoires Runtime Compiler (JIT) Dépendant de la machine et de l’OS Changeant suivant les versions Optimisation Optimisation : Le principe 12 Garbage Collecting Optimisation Pourquoi optimiser ? Ne plus rencontrer l'erreur "Out of Memory Error" Défaut du perm size pour le code statique (ex : JSP) Throughput % Goal de temps passé à faire du GC Pause Goal Durée Fonctionnement JVM du GC Temps de GC proportionnel au nombre d'objet Optimisation : Le principe 13 Garbage Collecting Fonctionnement JVM 3 types d'optimisations possibles Taille des zones mémoires Gérer l'intervalle de mémoire libre Type d'algorithme Evaluer ses besoins Faire des tests Empiriques Pas de recette magique Optimisation Optimisation : Mauvaises pratiques 14 Garbage Collecting Fonctionnement JVM System.gc() Doubler la quantité de mémoire Optimisation Outils : Sortie GC 15 Garbage Collecting Fonctionnement JVM Optimisation Commande JVM -verbosegc : [GC 1667K->1295K(1984K), 0.0101756 secs] [GC 1807K->1434K(1984K), 0.0223998 secs] [GC 1946K->1574K(2112K), 0.0116185 secs] [Full GC 1574K->1574K(2112K), 0.0830561 secs] [GC 3454K->2081K(4672K), 0.0495951 secs] [GC 4001K->2599K(4672K), 0.0274256 secs] [GC 4519K->3101K(5056K), 0.0308995 secs] [Full GC 3101K->3101K(5056K), 0.1452472 secs] [GC 7039K->4131K(9452K), 0.0777414 secs] [GC 8227K->5174K(9452K), 0.0627538 secs] [GC 9270K->6209K(10348K), 0.1125570 secs] Outils : GC Portal 16 Garbage Collecting Fonctionnement JVM Optimisation Vieux : 2004 JVM 1.4 Lourdeur d'installation (scripts perl + sql) http://java.sun.com/developer/technicalArticles/Pr ogramming/GCPortal/ Outils : GC Portal 17 Outils : Visual GC 18 Garbage Collecting Fonctionnement JVM Optimisation http://management.netbeans.org/visualgc/index.ht ml Outils : Visual GC 19 Outils : JConsole 20 Garbage Collecting Fonctionnement JVM Optimisation Disponible dans le jdk Répertoire bin Depuis JDK1.5 http://java.sun.com/developer/technicalArticles/J2 SE/jconsole.html Outils : JConsole 21 Garbage Collecting Fonctionnement JVM Optimisation Optimisation : Le principe 22 Garbage Collecting Fonctionnement JVM Laisser faire la machine Attendre la stabilité Ajouter 15 % environ Tester Optimisation Optimisation : Difficulté 23 Garbage Collecting Fonctionnement JVM Il faut de l'expérience Changements D'une version à l'autre D'un constructeur à l'autre Optimisation Bibliographie 24 http://www.javaperformancetuning.com/ http://java.sun.com/docs/performance/ http://java.sun.com/performance/reference/whitep apers/tuning.html http://java.sun.com/performance/reference/whitep apers/6_performance.html Questions ? 25