Répartition de la mémoire Java
Bonjour,
Je suis en train d'essayer de comprendre comment est constitueé la mémoire d'un processus Java.
Ce que j'avais compris, c'est qu'il y a la heap (commandée par -Xmx et -Xms), le perm space (commandé par -XX:MaxPermSize et -XX:PermSize ), le code cache (commandé par -XX:ReservedCodeCacheSize et -XX:InitialCodeCacheSize) et le stack par thread (commandé par -Xss et -XX:ThreadStackSize).
A partir de là, je m'étais imaginer qu'en additionnant tout cela, je devais obtenir à peu de chose près la taille mémoire allouée au processus. Et bien non ! J'ai deux exemples, tous deux des applications Web, sous Tomcat 6, avec un JDK 6. Autant dans le premier cas, ça ne m'a jamais alerté, autant dans le deuxième cas, la différence est importante et peut me poser des problèmes.
Premier cas :
Sous Linux 32bits : heap=512Mo, Perm=256Mo, CodeCache=48Mo, StackSize=1Mo avec 21 threads
Si j'additionne tout ça, j'obtiens 837Mo, alors que mon process utilise 873Mo.
Deuxième cas :
Sous Linux 64bits : heap + perm + code cache=4096 Mo, StackSize=1Mo avec 250 threads => 4350 Mo, et mon process utilise 1500 Mo de plus !
De quel coté dois-je regarder pour trouver ce qui occupe mes 1500 Mo ? Si vous avez des pistes, merci...