Ce n'est pas si sur…
L'option -Xmx de java ne configure la limite que de la partie heap, c'est à dire celle qui contient les instances des objets.
Mais il y a aussi la partie non-heap, qui contient les classes chargées par la jvm. Dans la jvm d'oracle et openjdk ça se configure avec une option en -XX. La valeur par défaut du maximum du non-heap est 128Mo en 32bits et 160Mo en 64 bits.
D'autres jvm peuvent géré ça de façon complètement différente (exemple extrême avec gcj/gij où les classes sont compilées sous forme de bibliothèques natives).
Et ce n'est pas tout, il y a par exemple la classe java.nio.MappedByteBuffer qui permet de travailler sur un fichier mappé en mémoire, qui va donc prendre de la RAM supplémentaire en dehors (et sans les limitations) de celle contrôlée par la jvm (donc fuite de mémoire potentielle).
Tu peux voir la mémoire effectivement utilisée par le processus java via les tichiers stat* dans son répertoire de /proc (man proc pour les détails des champs), ça peut surprendre.
[^] # Re: POO
Posté par wismerhill . En réponse au journal Du code propre, c'est quoi ?. Évalué à 4.
Ce n'est pas si sur…
L'option -Xmx de java ne configure la limite que de la partie heap, c'est à dire celle qui contient les instances des objets.
Mais il y a aussi la partie non-heap, qui contient les classes chargées par la jvm. Dans la jvm d'oracle et openjdk ça se configure avec une option en -XX. La valeur par défaut du maximum du non-heap est 128Mo en 32bits et 160Mo en 64 bits.
D'autres jvm peuvent géré ça de façon complètement différente (exemple extrême avec gcj/gij où les classes sont compilées sous forme de bibliothèques natives).
Et ce n'est pas tout, il y a par exemple la classe java.nio.MappedByteBuffer qui permet de travailler sur un fichier mappé en mémoire, qui va donc prendre de la RAM supplémentaire en dehors (et sans les limitations) de celle contrôlée par la jvm (donc fuite de mémoire potentielle).
Tu peux voir la mémoire effectivement utilisée par le processus java via les tichiers stat* dans son répertoire de /proc (man proc pour les détails des champs), ça peut surprendre.