FONCTIONNEMENT MÉMOIRE DE LA JVM Julien Herr IR3 – 22/02/2008 1

Preview:

Citation preview

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

Recommended