Come impostare l'utilizzo massimo della memoria per JVM?


Risposte:


94

usa gli argomenti -Xms<memory> -Xmx<memory>. Utilizzare Mo Gdopo i numeri per indicare rispettivamente Meg e Gig di byte. -Xmsindica il minimo e -Xmxil massimo.


1
potresti voler guardare anche MaxPermSize.
Urmalp,

89
sta chiedendo della memoria di JVM. Quello che hai detto è la dimensione dell'heap. Entrambi sono diversi
vsingh

8
Per ripetere ciò che menzionano gli altri commenti, Xms e Xmx configurano solo l'heap. Sebbene la configurazione di queste variabili abbia un effetto indiretto sullo spazio non heap, la persona che sta ponendo la domanda sta cercando di stabilire se esiste un modo per configurare l'utilizzo della memoria totale (heap + non heap)
murungu

2
uhu. così ho impostato -Xmx524Me il processo occupa 1,2 GB di RAM. (?)
phil294

7
Questa non è la risposta corretta, le opzioni -Xms e -Xmx regolano solo la dimensione heap jvm, non l'allocazione di memoria totale.
Peter De Winter,

31

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.


1
Questo non è vero, secondo questa discussione, ci sono diversi modi si può fuoriuscire al di fuori del mucchio stackoverflow.com/questions/1475290/...
erotsppa

Hai ragione, ci sono molti modi per avere problemi di memoria non relativi allo stack. Tuttavia, non sono molto comuni.
jjnguy,

9
Abbastanza sicuro di non poter controllare la dimensione della memoria non heap, vero?
matt b

Abbastanza sicuro che puoi controllarlo tramite -XX:MaxDirectMemorySize. Non che io abbia profilato pesantemente per essere sicuro ma ancora;)
alexandergunnarson,

2
@alexandergunnarson L' MaxDirectMemorySizeunico effetto riguarda i buffer NIO. JVM utilizza tutti i tipi di altra memoria nativa.
Christopher Schultz,

16

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


8
È ulimitun comando Linux? Ho fatto una rapida ricerca su Google e non ho visto alcuna relazione tra ulimite JVM. Y
Sam,


11

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.


1

NativeHeap può essere aumentato di -XX: MaxDirectMemorySize = 256M (il valore predefinito è 128)

Non l'ho mai usato. Forse lo troverai utile.


1
Dubito che op volesse questo: la memoria nativa viene utilizzata quando si effettua una chiamata al codice C / C ++ da Java.
om-nom-nom,

6
la memoria nativa viene utilizzata anche quando si effettuano chiamate nio se si allocano i buffer con memoria diretta. (... e classloader e informazioni sui thread ....)
stu
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.