Impossibile riservare spazio sufficiente per l'heap di oggetti


277

Ricevo ripetutamente la seguente eccezione ogni volta che provo a eseguire il programma.

Si è verificato un errore durante l'inizializzazione della VM

Impossibile riservare spazio sufficiente per l'heap di oggetti

Impossibile creare la macchina virtuale Java.

Ho provato ad aumentare la mia memoria virtuale (dimensione della pagina) e la dimensione della RAM, ma senza risultati.

Come posso eliminare questo errore?



2
Ottengo anche questo errore quando utilizzo jdk / jre 1.6 sulla mia macchina virtuale, ho provato a cambiare i valori di configurazione forniti nei commenti ma questo non è stato d'aiuto, dopo l'aggiornamento a jdk 1.7 l'errore è sparito e sono stati applicati parametri Xmx più grandi. Sembra che ci siano molti cambiamenti nell'uso dell'heap da java 1.6.
Alexander.Iljushkin,

Risposte:


214

Esegui JVM con -XX:MaxHeapSize=512m(o qualsiasi numero grande di cui hai bisogno) (o -Xmx512min breve)


42
O il più corto, -mx256m o -mx512m;)
Peter Lawrey

8
-Mx è uguale a -Xmx e -XX: MaxHeapSize?
Erty Seidohl,

19
Grazie .. risulta troppo grande un numero potrebbe anche essere un problema e può dare lo stesso errore!
Dinesh Rajan,

17
Qualcuno ha trovato una soluzione che funziona davvero al 100% delle volte? Questa soluzione risolve temporaneamente il problema, ma poi improvvisamente ritorna. Ho 16 GB di RAM e sono stanco di questo sh * t. Tutto andava meglio ai vecchi tempi: [
Nilzor,

6
Non funziona per me su Windows 8 con Java x86 o x64.
AndrewSmiley,

128

Ciò può anche essere causato impostando qualcosa di troppo grande su un vm HotSpot a 32 bit, ad esempio:

-Xms1536m -Xmx1536m

dove questo potrebbe / funzionerebbe:

-Xms1336m -Xmx1336m

5
Ho dimenticato di menzionare che questo problema dovrebbe verificarsi durante l'avvio in una shell dei comandi a 32 bit. Una shell dei comandi a 64 bit potrebbe non presentare questo problema.
Djangofan,

Per me ha fallito con il valore predefinito e con un valore troppo grande, quindi assicurati di provare più valori. Grazie per la risposta!
Trax,

47

ecco come risolverlo:

  • Vai su Start-> Pannello di controllo-> Sistema-> Avanzate (scheda) -> Variabili d'ambiente-> Sistema

    Variabili-> Novità: nome della _JAVA_OPTIONS variabile: valore della -Xmx512M variabile: nome della Path
    variabile: valore della variabile:%PATH%;C:\Program Files\Java\jre6\bin;F:\JDK\bin;

Cambia questo nel tuo percorso appropriato.


1
Abbastanza simile a questa risposta , direi ...
That1Guy

Buona Insieme a quanto sopra riportato anche questo. stackoverflow.com/a/9350506/967638
Amarnath il

46

Mi sono imbattuto in questo quando ho usato javac e non sembra prendere le opzioni della riga di comando,

-bash-3.2$ javac -Xmx256M HelloWorldApp.java 
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

così la soluzione qui così imposta _JAVA_OPTIONS

-bash-3.2$ export _JAVA_OPTIONS="-Xmx256M"
-bash-3.2$ javac HelloWorldApp.java 
Picked up _JAVA_OPTIONS: -Xmx256M

E questo si compila bene.

Questo succede a me su macchine con molta RAM, ma con ulime di memoria inferiori. Java decide di allocare un grosso heap perché rileva il ram nella macchina, ma non è consentito allocarlo a causa di ulimits.


1
+1 per indicare _JAVA_OPTIONS - nel mio caso java viene chiamato da qualche parte in profondità all'interno di uno script shell a cui non ho accesso in scrittura, quindi questa opzione è preferibile.
Gerrit,

Anch'io. Sto usando i computer universitari, quindi non sono un amministratore (non posso cambiare le variabili ambientali) e l'opzione della riga di comando non funzionava affatto. Grazie mille!
Kimbluey,

38

Java a 32 bit richiede spazio libero contiguo in memoria per l'esecuzione. Se si specifica una dimensione heap di grandi dimensioni, potrebbe non esserci così tanto spazio libero contiguo in memoria anche se si dispone di più spazio libero disponibile del necessario.

L'installazione di una versione a 64 bit di Java aiuta in questi casi, i requisiti di memoria contigui si applicano solo a Java a 32 bit.


1
Penso che questa sia la risposta migliore nel caso in cui continui a ricevere l'errore dopo aver usato l'opzione -Xmx [bignumber] m. Mi ha aiutato a eseguire correttamente Apache jMeter.
RuudvK,

Ho creato un progetto nuovo di zecca, senza codice diverso dall'attività principale generata automaticamente, e ha prodotto questo errore
behelit

1
Io secondo @RuudvK. L'installazione a 64 bit mi ha permesso di aumentare la memoria massima eliminando l'errore di allocazione della memoria. Questa dovrebbe essere la risposta accettata.
J Weezy,

28

In combinazione con -Xmx512M usa -d64 per assicurarti di eseguire VM a 64 bit. Su una macchina a 64 bit pensavo per certo che stavo eseguendo una macchina virtuale a 64 bit, ma no. Dopo aver installato Java a 64 bit, l'opzione -d64 funziona e -Xmx consente dimensioni di memoria molto maggiori.

java -d64 -Xmx512M mypackage.Test

4
Questa risposta dovrebbe essere al top. Ho trascorso due mesi a combattere questo problema, solo per rendermi conto che l'installazione di Java a 64 bit ha risolto il problema (l'opzione -d64 non era necessaria nel mio caso)
Nilzor,

Raccolto _JAVA_OPTIONS: -d64 -Xmx1024M Opzione non riconosciuta: -d64 Impossibile avviare JVM. La dimensione massima dell'heap (-Xmx) potrebbe essere troppo grande o uno strumento antivirus o firewall potrebbe bloccare l'esecuzione.
Alexander,

14

Ho avuto lo stesso errore e l'ho risolto configurandolo in run.conf.bat

Esegui JVM con run.conf.bat di configurazione in Jboss5x

Se la memoria libera non è disponibile come si sta passando nell'istruzione, apportare le modifiche in run.conf.bat

set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m"

7

So che ci sono già molte risposte qui, ma nessuna mi ha aiutato. Alla fine ho aperto il file /etc/elasticsearch/jvm.optionse modificato:

-Xms2G
-Xmx2G

per

-Xms256M
-Xmx256M

Questo mi ha risolto. Spero che questo aiuti qualcun altro qui.


7

Ho avuto problemi simili. Avevo installato la versione a 32 bit di Java su una macchina a 64 bit.

Disinstallando quella versione e installando la versione a 64 bit di Java. Sono stato in grado di risolvere il problema.


6

Supponiamo che la tua classe sia chiamata Testnel pacchetto mypackage. Esegui il tuo codice in questo modo:

java -Xmx1024m mypackage.Test

Ciò riserverà 1024 MB di spazio heap per il tuo codice. Se vuoi 512 MB, puoi usare:

java -Xmx512m mypackage.Test

Usare poco m 1024m, 512mecc


6

A volte, questo errore indica che la memoria fisica e lo scambio sul server sono effettivamente completamente utilizzati!

Recentemente ho riscontrato questo problema su un server che esegue RedHat Enterprise Linux 5.7 con 48 GB di RAM. Ho scoperto che anche solo correndo

java -version

ha causato lo stesso errore, che ha stabilito che il problema non era specifico della mia applicazione.

In esecuzione

cat /proc/meminfo

ha riferito che MemFree e SwapFree erano entrambi ben al di sotto dell'1% dei valori MemTotal e SwapTotal, rispettivamente:

MemTotal:     49300620 kB
MemFree:        146376 kB
...
SwapTotal:     4192956 kB
SwapFree:         1364 kB

L'arresto di alcune altre applicazioni in esecuzione sulla macchina ha in qualche modo aumentato la memoria libera:

MemTotal:     49300620 kB
MemFree:       2908664 kB
...
SwapTotal:     4192956 kB
SwapFree:      1016052 kB

A questo punto, una nuova istanza di Java si avviava correttamente e sono stato in grado di eseguire la mia applicazione.

(Ovviamente, per me, questa era solo una soluzione temporanea; ho ancora un compito eccezionale per fare un esame più approfondito dei processi in esecuzione su quella macchina per vedere se c'è qualcosa che può essere fatto per ridurre i livelli di utilizzo della memoria nominale, senza dover ricorrere all'arresto delle applicazioni.)


Lo stesso qui, java -versionnon riuscendo, anche se la parte superiore ha mostrato ancora qualche immagine libera: | (inoltre, si è verificato un errore durante l'inizializzazione della macchina virtuale che a volte non poteva riservare spazio sufficiente per l'array di marcatura delle carte). La correzione sembrava essere quella di funzionare al top, cercare quali processi utilizzavano più RAM (colonna VIRT), ucciderli [postgres, appdynamics per me]: |
rogerdpack,

Ciò potrebbe essere dovuto alla frammentazione della memoria? Una risposta sopra menziona lo spazio libero contiguo.
Rick Moritz,

6

Errore:

Per l'errore "si è verificato un errore durante l'inizializzazione di vm non è stato possibile riservare spazio sufficiente per jboss heap oggetto"

Causa ultima :

  • Allocazione della memoria errata / insufficiente alla nostra JVM come indicato di seguito.

  • es. JAVA_OPTS = "- Xms1303m -Xmx1303m -XX: MaxPermSize = 256m" in jboss-eap-6.2 \ bin \ standalone.conf o "JAVA_OPTS = -Xms1G -Xmx1G -XX: MaxPermSize = 256M" in jboss-eap \ bin \ standalone.conf.bat che non è altro che parametri del pool di allocazione della memoria JVM.

Risoluzione:

  • Aumenta le dimensioni dell'heap. Per aumentare la dimensione dell'heap,
  • vai a -> jboss-eap-6.2 \ bin \ standalone.conf.bat o jboss-eap-6.2 \ bin \ standalone.conf
  • modifica -> JAVA_OPTS = "- Xms256m -Xmx512m -XX: MaxPermSize = 256m" dove -Xms è la dimensione minima dell'heap e -Xmx è la dimensione massima dell'heap.
  • Di solito non è consigliato avere le stesse dimensioni per min e max.

  • Se stai eseguendo la tua applicazione da eclipse,

  • Fare doppio clic sul server
  • seleziona "apri configurazione di avvio" verrai reindirizzato alla finestra "Modifica proprietà di configurazione di avvio".
  • In questo windown vai alla scheda '(x) = Arguments'.
  • In Argomenti VM, definire le dimensioni dell'heap come indicato di seguito
  • "-Dprogram.name = JBossTools: JBoss EAP 6.1+ Runtime Server" -server -Xms256m -Xmx512m -XX: MaxPermSize = 256m -Dorg.jboss.resolver.warning = true

Una citazione da Oracle Command Line Reference : " Per prestazioni ottimali, imposta -Xms alla stessa dimensione della dimensione massima dell'heap, ad esempio:java -Xgcprio:throughput -Xmx:64m -Xms:64m myApp "
user1438038

3

Di recente ho affrontato questo problema. Ho 3 applicazioni Java che iniziano con dimensioni heap di 1024 mo 1280 m. Java sta esaminando lo spazio disponibile in swap e, se non c'è abbastanza memoria disponibile, jvm esce.

Per risolvere il problema, ho dovuto terminare diversi programmi con una grande quantità di memoria virtuale allocata.

Stavo correndo su Linux x86-64 con un jvm a 64 bit.


3

Avevo la giusta quantità di impostazioni di memoria, ma per me stava usando un Intellij a 64 bit con jvm a 32 bit. Una volta passato a VM a 64 bit, l'errore era scomparso.



2

Se stai eseguendo JVM a 32 bit, cambiare la dimensione dell'heap in più piccolo probabilmente aiuterebbe. Puoi farlo passando args direttamente a java o attraverso variabili d'ambiente come seguire,

java -Xms128M -Xmx512M
JAVA_OPTS="-Xms128M -Xmx512M"

Per JVM a 64 bit, dimensioni dell'heap più grandi come -Xms512M -Xmx1536Mdovrebbero funzionare.

Esegui java -versiono java -d32, java--d64per Java7 per verificare quale versione stai utilizzando.


1

Comunque, ecco come risolverlo: Vai su Start-> Pannello di controllo-> Sistema-> Avanzate (scheda) -> Variabili d'ambiente-> Variabili di sistema-> Nuovo: Nome variabile: _JAVA_OPTIONS Valore variabile: -Xmx512M

O

Modifica la chiamata della formica come mostrato di seguito.

   <exec
        **<arg value="-J-Xmx512m" />**
    </exec>

Ha funzionato per me.


1

Si è verificato un errore durante l'inizializzazione della macchina virtuale Impossibile riservare spazio sufficiente per l'heap di oggetti 1572864 KB

Ho modificato il valore della memoria nel file settings.grade da 1536 a 512 e mi ha aiutato


1

Vai su Start-> Pannello di controllo-> Sistema-> Avanzate (scheda) -> Variabili d'ambiente-> Variabili di sistema-> Novità:

Variable name: _JAVA_OPTIONS
Variable value: -Xmx512M

L'impostazione globale limita le dimensioni dell'heap che è possibile assegnare a IntelliJ.
user3056052

0

Nel caso in cui si stia eseguendo un programma java: - eseguire il programma in un terminale usando il comando corretto per linux sarebbe 'java -jar myprogram.jar' e aggiungere -Xms256m -Xmx512m, ad esempio: 'java -jar myprogram.jar Xms256m -Xmx512m '

Nel caso in cui tu stia eseguendo uno script .sh (linux, mac?) O uno script .bat (windows) apri lo script e cerca le opzioni java se sono presenti e aumenta la memoria.

Se tutto quanto sopra non funziona, controlla i tuoi processi (ctrl + alt + cancella su windows) (ps aux su linux / mac) e uccidi i processi che usano un sacco di memoria e non sono necessari per il tuo sistema operativo! => Prova a rieseguire il programma.


0

In CASSANDRA_HOME / bin / cassandra.bat troverai la seguente configurazione

REM JVM Opts we'll use in legacy run or installation
set JAVA_OPTS=-ea^
 -javaagent:"%CASSANDRA_HOME%\lib\jamm-0.3.0.jar"^
 -Xms**2G**^
 -Xmx**2G**^

Puoi ridurre il 2G a un numero più piccolo, ad esempio 1G o anche meno, e dovrebbe funzionare.

Lo stesso se si esegue su unix box, modificare il file .sh in modo appropriato.


0

Ho avuto lo stesso errore e si è risolto quando ho eliminato i file temporanei usando% temp% e riavviato eclipse.


0

A volte si riferisce come

$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2

Se lo imposti su:

$ sysctl vm.overcommit_memory=0

Dovrebbe funzionare.


0

Sostituire -Xmx2Gcon -Xms512Mo con dimensioni di memoria maggiori nel file cassandra.bat nella directory bin cassandra.


0

Apri il file gradle.properties nella cartella Android.

Sostituisci questa riga:

org.gradle.jvmargs=-Xmx1536M

con:

org.gradle.jvmargs=-Xmx512m

Spiegazione: Limite massimo dal documento Gradle:

Se l'ambiente di compilazione richiesto non specifica una dimensione heap massima, il Daemon utilizzerà fino a 512 MB di heap.


-2

Non c'è bisogno di fare nulla solo chnage nel file POM come sotto

<configuration>
    <maxmemory>1024M</maxmemory>
</configuration>

2
Chi ha detto qualcosa su un file POM?
Henley Chiu,
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.