web-dev-qa-db-fra.com

Comment définir l'utilisation de mémoire maximale pour la machine virtuelle Java?

Je souhaite limiter la mémoire maximale utilisée par la machine virtuelle Java. Notez que ce n'est pas juste le tas, je veux limiter la mémoire totale utilisée par ce processus.

118
erotsppa

utilisez les arguments -Xms<memory>-Xmx<memory>. Utilisez M ou G après les chiffres indiquant respectivement les Megs et les Go d'octets. -Xms indique le minimum et -Xmx le maximum.

93
Prabhu R

Vous ne devriez pas avoir à vous soucier de la fuite de mémoire dans la pile (c'est très rare). Le seul moment où la pile devient incontrôlable est avec une récursion infinie (ou très profonde).

Ceci est juste le tas. Désolé, je n'ai pas lu votre question complètement au début.

Vous devez exécuter la machine virtuelle Java avec l'argument de ligne de commande suivant.

-Xmx<ammount of memory>

Exemple:

-Xmx1024m

Cela permettra un maximum de 1 Go de mémoire pour la machine virtuelle Java.

28
jjnguy

Si vous souhaitez limiter la mémoire pour jvm (pas la taille du tas), ulimit -v

Pour vous faire une idée de la différence entre jvm et heap memory, jetez un oeil à cet excellent article http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at- dimensionnement-the-Java-process.html

15
vsingh

La réponse ci-dessus est correcte, vous ne pouvez pas contrôler avec précision la quantité de mémoire native allouée par un processus Java. Cela dépend de ce que fait votre application.

Cela dit, selon la plate-forme utilisée, vous pouvez utiliser un mécanisme, par exemple ulimit, pour limiter la taille d’un Java ou de tout autre processus.

Ne vous attendez pas à ce qu'il échoue gracieusement s'il atteint cette limite. Les échecs d'allocation de mémoire native sont beaucoup plus difficiles à gérer que les échecs d'allocation sur le segment de mémoire Java. Il y a de bonnes chances que l'application se bloque, mais cela dépend toujours de la nécessité pour le système de réduire la taille du processus.

10
SmoothieMonster

Le NativeHeap peut être augmenté de -XX: MaxDirectMemorySize = 256M (la valeur par défaut est 128)

Je ne l'ai jamais utilisé. Peut-être que vous le trouverez utile.

0
AfisBoy