Réponses:
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.
-Xmx<ammount of memory>
Exemple:
-Xmx1024m
Cela permettra un maximum de 1 Go de mémoire pour la JVM.
-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
ulimit
une commande Linux? J'ai fait une recherche rapide sur Google et je n'ai vu aucune relation entre ulimit
et la JVM. Y
La 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.
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.