Selon l' API
totalMemory()
Renvoie le montant total de la mémoire dans la machine virtuelle Java. La valeur retournée par cette méthode peuvent varier au fil du temps, en fonction de l'environnement d'accueil.
Notez que la quantité de mémoire nécessaire pour tenir un objet d'un type donné peut être dépendant de l'implémentation.
maxMemory()
Retourne la quantité maximale de mémoire que la machine virtuelle Java tente d'utiliser. Si il n'y a pas de limite inhérente alors la valeur de Long.MAX_VALUE sera retourné.
freeMemory()
Retourne la quantité de mémoire libre dans la Machine Virtuelle Java. L'appel de la méthode gc peut entraîner une augmentation de la valeur retournée par freeMemory.
En référence à votre question, maxMemory()
renvoie l' -Xmx
de la valeur.
Vous demandez peut-être pourquoi il y a un totalMemory() ET un maxMemory(). La réponse est que la JVM alloue de la mémoire paresseusement. Disons que vous commencez votre processus Java en tant que tel:
java -Xms64m -Xmx1024m Foo
Votre processus commence avec 64 mo de mémoire, et si et quand elle a besoin de plus (jusqu'à 1024m), il va allouer de la mémoire. totalMemory()
correspond à la quantité de mémoire actuellement disponible à la JVM pour les Foo. Si la JVM a besoin de plus de mémoire, il paresseusement allouer jusqu' à la quantité maximale de mémoire. Si vous exécutez avec -Xms1024m -Xmx1024m
, la valeur que vous obtenez à partir d' totalMemory()
et maxMemory()
seront égaux.
Aussi, si vous voulez calculer avec précision le montant utilisé de la mémoire, vous le faites avec le calcul suivant :
final long usedMem = totalMemory() - freeMemory();