Je souhaite limiter la mémoire maximale utilisée par la JVM. Notez que ce n'est pas seulement le tas, je souhaite limiter la mémoire totale utilisée par ce processus.
132
Je souhaite limiter la mémoire maximale utilisée par la JVM. Notez que ce n'est pas seulement le tas, je souhaite limiter la mémoire totale utilisée par ce processus.
utilisez les arguments -Xms<memory>
-Xmx<memory>
. Utilisez M
ou G
après les nombres pour indiquer respectivement Meg et Gigs d'octets. -Xms
indique le minimum et -Xmx
le maximum.
-Xmx524M
et le processus prend 1,2 Go de RAM. (?)Vous ne devriez pas avoir à vous soucier des fuites de mémoire de la pile (c'est très rare). La seule fois où vous pouvez perdre le contrôle de la pile, c'est avec une récursivité infinie (ou vraiment profonde).
Ce n'est que le tas. Désolé, je n'ai pas lu complètement votre question au début.
Vous devez exécuter la JVM avec l'argument de ligne de commande suivant.
Exemple:
Cela permettra un maximum de 1 Go de mémoire pour la JVM.
la source
-XX:MaxDirectMemorySize
. Non pas que j'ai beaucoup profilé pour être sûr mais quand même;)MaxDirectMemorySize
n'affecte que les tampons NIO. Toutes sortes d'autres mémoires natives sont utilisées par la JVM.Si vous souhaitez limiter la mémoire pour jvm (pas la taille du tas) ulimit -v
Pour avoir une idée de la différence entre jvm et la mémoire de tas, jetez un œil à cet excellent article http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the- java-process.html
la source
ulimit
une commande Linux? J'ai fait une recherche rapide sur Google et je n'ai vu aucune relation entreulimit
et la JVM. YLa réponse ci-dessus est assez correcte, vous ne pouvez pas contrôler correctement 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, vous pourrez peut-être utiliser un mécanisme, ulimit par exemple, 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 tas Java. Il y a de bonnes chances que l'application se bloque, mais en fonction de l'importance pour le système de réduire la taille du processus qui pourrait encore vous convenir.
la source
Je ne l'ai jamais utilisé. Peut-être que vous le trouverez utile.
la source