FONCTIONNEMENT MÉMOIRE DE LA JVMJulien HerrIR3 – 22/02/2008
1
Objectifs de l’exposé
Faire comprendre le fonctionnement de la mémoire en Java
Initier à l'optimisation mémoire
2
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 ?
3
Garbage Collecting : 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
4
Garbage Collecting : 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
5
Fonctionnement JVM : Différentes zones mémoires
6
Fonctionnement JVM : Différents algorithmes : Serial Collector7
Eden SS1 SS2 Old
Eden SS1 SS2 Old
Eden SS1SS2 Old
Eden SS1SS2 Old
PremierGC
SecondGC
Eden SS1SS2 Old
New Object Region Old Object Region
X GC
Fonctionnement JVM : Différents algorithmes : Mark & Sweep Compact8
OldDébut FullGC
Fin FullGC
Old
Fonctionnement JVM : Différents algorithmes : Parallel Collector9
Fonctionnement JVM : Différents algorithmes : Concurent Mark & Sweep10
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
11
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
12
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
13
Optimisation : Mauvaises pratiques System.gc() Doubler la quantité de mémoire
14
Outils : Sortie GC15
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/
16
Outils : GC Portal17
Outils : Visual GC
http://management.netbeans.org/visualgc/index.html
18
Outils : Visual GC19
Outils : JConsole
Disponible dans le jdk Répertoire bin Depuis JDK1.5
http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html
20
Outils : JConsole21
Optimisation : Le principe
Laisser faire la machine Attendre la stabilité Ajouter 15 % environ Tester
22
Optimisation : Difficulté
Il faut de l'expérience Changements
D'une version à l'autre D'un constructeur à l'autre
23
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
24
Questions ?25