154 votes

Comment définir l'utilisation maximale de la mémoire pour la JVM ?

Je veux limiter la mémoire maximale utilisée par la JVM. Attention, il ne s'agit pas seulement du tas, je veux limiter la mémoire totale utilisée par ce processus.

100voto

Ram Points 4616

Utiliser les arguments -Xms<memory> -Xmx<memory> . Utilisez M o G après les chiffres pour indiquer les mégas et les gigas d'octets respectivement. -Xms indique le minimum et -Xmx le maximum.

1 votes

Vous pouvez également consulter MaxPermSize.

105 votes

Il s'agit de la mémoire de la JVM. Ce que vous avez dit concerne la taille du tas. Les deux sont différents

10 votes

Pour réitérer ce que les autres commentaires mentionnent, Xms et Xmx ne configurent que le tas. Bien que la configuration de ces variables ait un effet indirect sur l'espace hors du tas, la personne qui pose la question essaie d'établir s'il existe un moyen de configurer l'utilisation totale de la mémoire (tas+hors du tas).

40voto

jjnguy Points 62123

Vous ne devriez pas avoir à vous soucier de la fuite de mémoire de la pile (c'est très rare). Le seul cas où la pile peut devenir incontrôlable est celui de la récursion infinie (ou vraiment profonde).

C'est juste le tas. Désolé, je n'ai pas lu entièrement votre question au début.

Vous devez exécuter la JVM avec l'argument de ligne de commande suivant.

-Xmx<ammount of memory>

Ejemplo:

-Xmx1024m

Cela permettra à la JVM de disposer d'un maximum de 1 Go de mémoire.

1 votes

Ce n'est pas vrai, selon ce fil de discussion, il y a plusieurs façons de fuir en dehors du tas. stackoverflow.com/questions/1475290/

0 votes

Vous avez raison, il existe de nombreuses façons d'avoir des problèmes de mémoire qui ne sont pas liés à la pile. Cependant, elles ne sont pas très courantes.

10 votes

Je suis sûr que vous ne pouvez pas contrôler la taille de la mémoire non-heap, n'est-ce pas ?

18voto

vsingh Points 1099

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

Pour avoir une idée de la différence entre la mémoire jvm et la mémoire heap, jetez un coup d'oeil à cet excellent article http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the-java-process.html

8 votes

Est ulimit une commande Linux ? J'ai fait une recherche rapide sur Google et je n'ai trouvé aucune relation entre ulimit et la JVM. Y

0 votes

1 votes

La JVM ne gère pas bien le dépassement de la limite fixée de cette façon.

11voto

SmoothieMonster Points 21

La réponse ci-dessus est plus ou moins correcte, vous ne pouvez pas contrôler de manière gracieuse la quantité de mémoire native allouée par un processus Java. Cela dépend de ce que fait votre application.

Cela dit, en fonction de la plate-forme, vous pourrez peut-être utiliser un mécanisme, ulimit par exemple, pour limiter la taille d'un processus java ou de tout autre processus.

Mais 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 tas de Java. Il y a de fortes chances que l'application se plante, mais en fonction de l'importance pour le système de maintenir la taille du processus à un niveau bas, cela peut encore vous convenir.

1voto

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X