280 likes | 491 Views
Fonctionnement MÉMOIRE de la JVM. Julien Herr IR3 – 22/02/2008. Objectifs de l’exposé. Faire comprendre le fonctionnement de la mémoire en Java Initier à l'optimisation mémoire. Sommaire. Garbage Collecting Généralités Buts et principe de fonctionnement général Fonctionnement JVM
E N D
Fonctionnement MÉMOIRE de la JVM Julien Herr IR3 – 22/02/2008
Objectifs de l’exposé • Faire comprendre le fonctionnement de la mémoire en Java • Initier à l'optimisation mémoire
Sommaire • Garbage Collecting • Généralités • Buts et principe de fonctionnement général • Fonctionnement JVM • Différentes zones mémoires • Différents algo de collection • Optimisation de la gestion mémoire • Le principe • Mauvaises pratiques • Les outils • Bibliographie • Questions ?
GarbageCollecting : Généralités • Différence du C • Rappel 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
GarbageCollecting : Buts et fonctionnement général • 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érents algorithmes : Serial Collector New Object Region Old Object Region Eden SS1 SS2 Old PremierGC Eden SS1 SS2 Old Eden SS2 SS1 Old SecondGC Eden SS2 SS1 Old Eden SS2 SS1 Old X GC
Fonctionnement JVM : Différents algorithmes : Mark & Sweep Compact Début FullGC Old Fin FullGC Old
Fonctionnement JVM : Différents algorithmes : ParallelCollector
Fonctionnement JVM : Différents algorithmes : Concurent Mark & Sweep
Optimisation : Le principe • 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 : Le principe • 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 du GC • Temps de GC proportionnel au nombre d'objet
Optimisation : Le principe • 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 : Mauvaises pratiques • System.gc() • Doubler la quantité de mémoire
Outils : Sortie GC • 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 • Vieux : 2004 • JVM 1.4 • Lourdeur d'installation (scripts perl + sql) • http://java.sun.com/developer/technicalArticles/Programming/GCPortal/
Outils : Visual GC • http://management.netbeans.org/visualgc/index.html
Outils : JConsole • Disponible dans le jdk • Répertoire bin • Depuis JDK1.5 • http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html
Optimisation : Le principe • Laisser faire la machine • Attendre la stabilité • Ajouter 15 % environ • Tester
Optimisation : Difficulté • Il faut de l'expérience • Changements • D'une version à l'autre • D'un constructeur à l'autre
Bibliographie • http://www.javaperformancetuning.com/ • http://java.sun.com/docs/performance/ • http://java.sun.com/performance/reference/whitepapers/tuning.html • http://java.sun.com/performance/reference/whitepapers/6_performance.html