Ci dessous un résumé de ce que j'ai glané sur les mécanismes d'allocation mémoire des applications Java. Une des difficulté est d'intégrer les variations du vocabulaire. Ce n'est pas la seule ...
Le Heap
C'est le
"tas" de mémoire alloué à chaque processus Java (Dans le cas de HR Access on trouvera un processus Java pour OpenHR, un pour HRQuery, un pour Tomcat). La taille maximale allouable est fonction du système (Sun, Red Hat, Windows ... / 32, 64 bits). Des paramètres de la ligne de commande permettent notamment de préciser pour chaque instance Java une taille de Heap au démarrage et un maximum à ne pas dépasser.
Le Heap est
segmenté en plusieurs zones, dites "
Générations". Ceci permet de gérer les objets éphémères (iterateurs, variables locales) et de pérenniser des objets persistants :
- Zone dite "New" ou "
Young Generation" ou "nursery", sous divisée en :
- Eden (le paradis, là ou sont placés les objets nouvellement créés)
- Survivor 1 & 2 (les objets survivant aux premiers passages du Garbage Collector - cf plus bas)
- Virtually reserved (espace libre)
- Zone dite "
Old Generation" ou "Tenured", sous divisée en :
- Tenured (les objets "titularisés")
- Virtually reserved (espace libre)
Pour être complet, s'ajoute au Heap une zone mémoire dite
"Permanent Génération" pour les
données de la machine virtuelle elle-même (classes et méthodes).
http://www.jmdoudoux.fr/java/dej/chap-gestion_memoire.htm
Le Garbage Collector
Ou
"ramasse miette". C'est le mécanisme de
récupération de mémoire. Les "Garbage Collections" (déclenchements du Garbage Collector) partielles ("
partial" ou "minor") ne traitent que la zone "New Generation". Les "GC" complètes ("
full") traitent toutes les zones dès que la "Old" ou la "Permanent" sont remplies.
Par défaut, la machine virtuelle Java
augmente ou diminue le "Heap" à chaque "GC" pour essayer de garder dans chaque zone la
proportion prévue d'espace libre.
Le passage trop fréquent des "GC" (sous-dimensionnement mémoire ou
mauvaise répartition)
peu coûter cher en terme de performances.