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.
Vous pouvez également consulter MaxPermSize.
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.
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
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).
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.
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/
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.
Je suis sûr que vous ne pouvez pas contrôler la taille de la mémoire non-heap, n'est-ce pas ?
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
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
Oui, c'est une commande linux. tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/
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.
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.