Aumenta le dimensioni dell'heap in Java


276

Sto lavorando su un server Windows 2003 (64 bit) con 8 GB di RAM. Come posso aumentare al massimo la memoria dell'heap? Sto usando la -Xmx1500mbandiera per aumentare la dimensione dell'heap a 1500 Mb. Posso aumentare la memoria dell'heap al 75% della memoria fisica (heap da 6 GB)?


2
Ci hai provato -Xmx6g? Questo non ha funzionato? Che cosa hai osservato?
oxbow_lakes,

2
Presumo tu abbia provato ad aumentare l'heap ma non ci sei riuscito? Stai usando una JVM a 64 bit?
Bart Kiers,

Grazie per il commento, ma questo non funziona
Sunil,

Bene - come fai a sapere che non funziona? La JVM non si avvia?
oxbow_lakes,

Risposte:


327

È possibile aumentare a 4 GB su un sistema a 32 bit. Se utilizzi un sistema a 64 bit puoi andare più in alto. Non devi preoccuparti se hai scelto in modo errato, se chiedi 5g su un sistema a 32 bit java si lamenterà di un valore non valido e si chiuderà.

Come altri hanno pubblicato, usa i flag della cmd line - ad es

java -Xmx6g myprogram

Puoi ottenere un elenco completo (o un elenco quasi completo, comunque) digitando java -X.


16
È stata la mia esperienza che l'heap di dimensioni reali che Java accetterà utilizzando una VM 32b (su un sistema 32b o 64b - la VM è la parte importante, qui), è di circa 2G. Inoltre, richiedente ha sorpreso non prima cercare e trovare: stackoverflow.com/questions/1596009/... e: stackoverflow.com/questions/37335/...
wsorenson

2
ah, hai ragione ovviamente - su un sistema a 32 bit puoi indirizzare solo 2 GB di memoria.
Steve B.

È necessario che l'heap massimo e la dimensione minima dell'heap siano uguali?
user1747935,

1
No. Ma la gente lo fa comunemente perché la JVM non può mai perdere tempo a ridimensionare. Dubbio che conta molto, TBH.
Steve B.,

1
@PhilipRego lo imposti su quello che vuoi, fino ai limiti che la JVM può affrontare. -Xmx2G imposta la memoria su 2G (guarda anche -Xms). Questo non dice nulla di quanta memoria avrai bisogno.
Steve B.

155

È possibile aumentare le dimensioni dell'heap allocate dalla JVM utilizzando le opzioni della riga di comando Qui abbiamo 3 opzioni

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size

java -Xms16m -Xmx64m ClassName

Nella riga sopra possiamo impostare un heap minimo a 16mb e un heap massimo a 64mb


28

Su una JVM a 32 bit, la dimensione dell'heap più grande che puoi teoricamente impostare è di 4 GB. Per utilizzare una dimensione heap maggiore, è necessario utilizzare una JVM a 64 bit. Prova quanto segue:

java -Xmx6144M -d64

Il flag -d64 è importante in quanto indica alla JVM di funzionare in modalità 64 bit.


Grazie capo ma non funziona nel mio sistema c'è qualcos'altro che mi manca
Sunil

4
Definire "non funzionante". Non si avvia e ti dà un errore? Si avvia ma utilizza una dimensione heap diversa?
Kevin,

11

È possibile aumentare le dimensioni dell'heap allocate dalla JVM direttamente in eclipse In eclipse IDE goto

Esegui ----> Esegui configurazioni ----> Argomenti

Immettere -Xmx1g (viene utilizzato per impostare la dimensione massima come Xmx256m o Xmx1g ...... m -> mb g ---> gb)


3
Solo per aggiungere questo dovrebbe essere un argomento VM (eclipse ti offre due opzioni).
Matt Boyle,

11

java -d64 -Xms512m -Xmx4g HelloWorld

dove -d64: abiliterà JVM a 64 bit -Xms512m: imposterà la dimensione iniziale dell'heap su 512 MB -Xmx4g: imposterà la dimensione massima dell'heap su 4 GB (qui il nome del file java è: HelloWorld.java)


9

Puoi aumentare le dimensioni dell'heap passando i parametri JVM -Xms e -Xmx come di seguito:

Per file Jar:

java -jar -Xms4096M -Xmx6144M jarFilePath.jar

Per i file Java:

 java -Xms4096M -Xmx6144M ClassName

I parametri sopra riportati aumentano InitialHeapSize (-Xms) a 4 GB (4096 MB) e MaxHeapSize (-Xmx) a 6 GB (6144 MB).

Tuttavia, la dimensione heap della generazione giovane rimarrà la stessa e la dimensione heap aggiuntiva verrà aggiunta alla dimensione heap della generazione precedente . Per equalizzare la dimensione di Young Gen Heap e Old Gen Heap , usa -XX: NewRatio = 1 -XX: -UseAdaptiveSizePolicy params.

java -jar -Xms4096M -Xmx6144M -XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy pathToJarFile.jar

-XX: NewRatio = Dimensione heap della vecchia generazione: Dimensione heap della giovane generazione (puoi giocare con questo rapporto per ottenere il rapporto desiderato).


7

Posso aumentare la memoria dell'heap al 75% della memoria fisica (heap da 6 GB).

Si, puoi. In effetti, se lo desideri, puoi aumentare di più della quantità di memoria fisica.

Se è una buona idea farlo dipende da quanto altro è in esecuzione sul tuo sistema. In particolare, se il "working set" delle applicazioni e dei servizi attualmente in esecuzione supera in modo significativo la memoria fisica disponibile, il sistema è soggetto a "thrash", impiegando molto tempo a spostare pagine di memoria virtuale da e verso il disco. L'effetto netto è che il sistema diventa orribilmente lento.


Grazie per il tuo commento Ma come posso aumentare.Plz puoi dare il comando.
Sunil,

Prova -Xmx6000m. Dovrebbe funzionare se stai usando una versione a 64 bit di Java.
Stephen C,

3
Sei sicuro di eseguire una versione a 64 bit di Java? Su un sistema operativo a 64 bit?
Stephen C

4

Utilizzare il comando seguente per modificare la dimensione dell'heap a 6 GB

export JAVA_OPTS="-Xms6144m -Xmx6144m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"

Se ho memoria 8G nel mio sistema e posso vedere dal task manager che è sempre in uso il 70%; è possibile allocare memoria 6G alla dimensione heap java?
Reihan_amn,

1
@Reihan_amn Sì e no, se superi la memoria andrà al paging, che è sul disco e incredibilmente lento. Se si superano i file di paging, ci si trova in un brutto momento.
CodeMonkey,

2

Diverse persone hanno indicato le risposte specifiche per la dimensione dell'heap con le opzioni jvm di -Xmse -Xms. Voglio sottolineare che questo non è l'unico tipo di opzioni di memoria per jvm. In particolare, se si ottiene lo stack su flussi, è necessario aumentare le dimensioni dello stack aggiungendo un'opzione aggiuntiva come-Xss8m .

Per questo problema, le opzioni jvm di qualcosa del genere -Xms2g -Xmx6g -Xss8m sarebbero una soluzione.

Sto condividendo queste informazioni mentre le mie ricerche su Google su come aumentare la memoria jvm mi hanno portato a questa soluzione e le soluzioni non hanno funzionato con elevate quantità di allocazione della memoria. Una volta capito a cosa servivano le impostazioni specifiche, sono stato in grado di google come aumentare le dimensioni dello stack e ho trovato il parametro mancante. :) Spero che questo faccia risparmiare tempo agli altri, come mi farebbe risparmiare un sacco di tempo. :)


2

Funziona solo con la versione a 64 bit di Java. Vai al Pannello di controllo e fai clic sull'icona Java. Nella piccola finestra del pannello di controllo Java, fare clic sulla barra dei menu Java e quindi fare clic sul viewpulsante.

Se si dispone di due piattaforme Java, disabilitare la versione precedente di Java, quindi fare clic sul campo di testo Parametri di runtime e scrivere -Xmx1024mo inferiore alla dimensione della RAM. Non aumentare le dimensioni dell'heap pari alla RAM, altrimenti il ​​sistema si arresterà in modo anomalo.


Se la dimensione dell'heap è uguale alla RAM, il sistema non si arresta in modo anomalo. Invece, il sistema inizierà il paging e diventerà bello e lento.
DaveTheMinion,

0

Sì. Puoi.

Puoi aumentare la memoria del tuo heap al 75% della memoria fisica (heap da 6 GB) o superiore.

Poiché stai utilizzando 64 bit, puoi aumentare le dimensioni dell'heap fino all'importo desiderato. Nel caso in cui stai usando 32 bit è limitato a 4 GB.

$ java -Xms512m -Xmx6144m JavaApplication

Imposta la dimensione iniziale dell'heap su 512 MB e il massimo heap su 6 GB.

Spero che sia d'aiuto.. :)


Questo sembra molto simile alle due risposte più votate pubblicate alcuni anni prima.
Bernhard Barker,

0

Ho problemi con l'esecuzione dei file PY nel mio codice Java usando eclipse / STS, ottenendo PyException a causa di memoria heap jvm insufficiente. Ho apportato le modifiche come indicato di seguito e sono in grado di risolvere questo problema. Di seguito è la mia configurazione del sistema.

inserisci qui la descrizione dell'immagine

E questi sono i cambiamenti che ho fatto nel mio spazio di lavoro e voilà ora funziona perfettamente.

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

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.