Gestion mémoire de la JVM

Optimisation de la gestion mémoire

Le principe

But de l'optimisation

Les objectifs sont multiples :

Méthode

Une fois ses besoins évalués, la méthode pour optimiser la mémoire d'une JVM est simple :

Il est important de noter qu'il n'existe aucune formule permettant de définir l'optimisation de la JVM. Seul des tests empiriques et l'étude des résultats permettent de déterminer quelle est la meilleure optimisation possible.

De plus, seuls 3 paramètres (modifiable via de nombreuses options) de la JVM permettent d'optimiser cette dernière :

  • La taille des zones mémoires ;
  • Le taux auquel le GC se déclenche ;
  • Le type d'algorithme.

Difficultés

La plus grande difficulté dans l'optimisation de la mémoire Java est qu'il n'existe pas de recette magique et que chaque cas d'optimisation est unique. Seul l'expérience permet de trouver l'optimisation idéale rapidemment.

La seconde difficulté est que les algorithmes de GC ne sont pas spécifiés et dépendent donc de la version de la JVM mais surtout du constructeur de la JVM. Ainsi, on n'optimise pas de la même façon une JVM5 de Sun qu'une JVM5 d'IBM ou même qu'une JVM6 de Sun (le nom des commandes et leur fonction ne sont pas toujours similaires).

Les mauvaises pratiques

Les deux erreurs que l'on retrouve régulièrement sont les suivantes :

Les outils

IL existe plusieurs outils pouvant aider au diagnostique des problèmes mémoires :

Sortie GC

La façon la plus simple pour consulter la mémoire de la JVM est la sortie proposée par la JVM avec l'option -verbosegc dont nous pouvons voir un exemple ci-dessous :

[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]

GC Portal

GC Portal est un outil disponible depuis la version 1.4 de Java.

GC Portal

Le gros défaut de cet outil est son installation fastidieuse.

Plus d'informations sur GC Portal disponble sur : http://java.sun.com/developer/technicalArticles/Programming/GCPortal/.

Visual GC

Visual GC est un pluggin NetBeans (également disponible pour Eclipse) permettant de visualiser l'état des différentes zones mémoires en direct.

Visual GC

Plus d'informations sur GC Portal disponible sur : http://management.netbeans.org/visualgc/.

JConsole

JConsole est une console disponible depuis la version 5 du JDK dans le répertoire bin. Ce logiciel permet de se connecter, via le protocole JMX, à n'importe quelle JVM distante et ainsi de consulter en direct l'était mémoire de cette dernière.

JConsole

Plus d'informations sur JConsole disponble sur : http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html.