2009-09-29 23 views

risposta

82

utilizzare gli argomenti -Xms<memory>-Xmx<memory>. Utilizzare M o G dopo i numeri per indicare rispettivamente Megs e Gigs of bytes. -Xms indica il minimo e -Xmx il massimo.

+1

potresti voler guardare anche MaxPermSize. – pmu

+54

chiede informazioni sulla memoria JVM. Quello che hai detto è la dimensione dell'heap. Entrambi sono diversi – vsingh

+6

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

26

Non dovresti preoccuparti della perdita di memoria dello stack (è molto raro). L'unica volta in cui puoi avere lo stack fuori controllo è con una ricorsione infinita (o molto profonda).

Questo è solo l'heap. Scusa, non ho letto completamente la tua domanda all'inizio.

È necessario eseguire la JVM con il seguente argomento della riga di comando.

-Xmx<ammount of memory> 

Esempio:

-Xmx1024m 

che consentirà un massimo di 1 GB di memoria per la JVM.

+0

Questo non è vero, in base a questa discussione, ci sono molti modi in cui è possibile filtrare all'esterno dello heap http://stackoverflow.com/questions/1475290/java-memory-mystery-do-i-have-a-leak – erotsppa

+0

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

+5

Assicurati che non puoi controllare le dimensioni della memoria non heap, vero? –

9

La risposta sopra è abbastanza corretta, non è possibile controllare con garbo la quantità di memoria nativa allocata da un processo Java. Dipende da cosa sta facendo la tua applicazione.

Detto questo, in base alla piattaforma, è possibile utilizzare alcuni meccanismi, ad esempio, per limitare le dimensioni di un java o qualsiasi altro processo.

Non aspettatevi che fallisca con grazia se raggiunge il limite. Gli errori di allocazione della memoria nativa sono molto più difficili da gestire rispetto agli errori di allocazione nell'heap java. Ci sono buone probabilità che l'applicazione si arresti in modo anomalo ma dipende da quanto è critico per il sistema mantenere le dimensioni del processo che potrebbero ancora adattarsi.

2

Il NativeHeap può essere increasded dal XX: MaxDirectMemorySize = 256M (di default è 128)

ho l'ho mai usato. Forse lo troverai utile

+1

Dubito che op abbia voluto questo: la memoria nativa viene usata quando si effettua una chiamata al codice C/C++ da java. –

+4

La memoria nativa viene anche utilizzata quando si effettuano chiamate nio se si allocano i buffer con memoria diretta. (... e classloaders e informazioni sui thread ....) – stu

10

Se si desidera limitare la memoria per JVM (non la dimensione heap) ulimit -v

Per avere un'idea della differenza tra JVM e memoria heap, dare un'occhiata a questo eccellente articolo http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the-java-process.html

+6

È 'ulimit' un comando di Linux? Ho fatto una rapida ricerca su Google e non ho visto alcuna relazione tra 'ulimit' e JVM. Y – Sam

+0

Sì, è un comando linux. http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/x4733.html – vsingh

Problemi correlati