Risposte:
usa gli argomenti -Xms<memory>
-Xmx<memory>
. Utilizzare M
o G
dopo i numeri per indicare rispettivamente Meg e Gig di byte. -Xms
indica il minimo e -Xmx
il massimo.
-Xmx524M
e il processo occupa 1,2 GB di RAM. (?)
Non dovresti preoccuparti della perdita di memoria dello stack (è molto raro). L'unica volta in cui è possibile avere lo stack fuori controllo è con ricorsione infinita (o davvero profonda).
Questo è solo il mucchio. Spiacenti, all'inizio non hai letto completamente la tua domanda.
È necessario eseguire JVM con il seguente argomento della riga di comando.
-Xmx<ammount of memory>
Esempio:
-Xmx1024m
Ciò consentirà un massimo di 1 GB di memoria per la JVM.
-XX:MaxDirectMemorySize
. Non che io abbia profilato pesantemente per essere sicuro ma ancora;)
MaxDirectMemorySize
unico effetto riguarda i buffer NIO. JVM utilizza tutti i tipi di altra memoria nativa.
Se si desidera limitare la memoria per jvm (non la dimensione dell'heap) ulimit -v
Per avere un'idea della differenza tra jvm e memoria heap, dai un'occhiata a questo eccellente articolo http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the- java-process.html
ulimit
un comando Linux? Ho fatto una rapida ricerca su Google e non ho visto alcuna relazione tra ulimit
e JVM. Y
La risposta sopra è abbastanza corretta, non puoi controllare con garbo quanta memoria nativa assegna un processo java. Dipende da cosa sta facendo l'applicazione.
Detto questo, a seconda della piattaforma, potresti essere in grado di utilizzare un meccanismo, ad esempio ulimit, per limitare le dimensioni di un java o di qualsiasi altro processo.
Non aspettarti che fallisca con grazia se raggiunge quel limite. Gli errori di allocazione della memoria nativa sono molto più difficili da gestire rispetto agli errori di allocazione sull'heap java. C'è una buona probabilità che l'applicazione si blocchi in modo anomalo, ma a seconda di quanto sia importante per il sistema mantenere basse le dimensioni del processo che potrebbero comunque adattarti.
NativeHeap può essere aumentato di -XX: MaxDirectMemorySize = 256M (il valore predefinito è 128)
Non l'ho mai usato. Forse lo troverai utile.