“onvoldoende geheugen voor de Java Runtime Environment”-bericht in eclipse

Als ik mijn Java-code in Eclipse uitvoer, krijg ik het volgende bericht:

There is insufficient memory for the Java Runtime Environment to continue.
Native memory allocation (malloc) failed to allocate 4088 bytes for AllocateHeap
An error report file with more information is saved as:
E:\Eclipse_Workspace\BTest\hs_err_pid1888.log

Ik heb 4 GB RAM in mijn computer. Ik heb mijn JRE ook veranderd van 1.7 naar 1.8. Maar het probleem lijkt niet opgelost. Ik gebruik een Win 8-systeem met i3-processor en heb ongeveer 20 GB vrije schijfruimte in mijn C-schijf.

Eclipse-versie: Eclipse Juno Service-release 2

Ik krijg deze melding ook bij het starten van Eclipse. Ik heb de schermafbeelding van de foutmelding bijgevoegd.

Wat veroorzaakt dit probleem?

Geheugenparameters in bestand “eclipse.ini”:

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20120913-144807
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Dhelp.lucene.tokenizer=standard
-Xms40m
-Xmx512m

Oplossing:
Het opnieuw installeren van Eclipse loste het probleem op.


Antwoord 1, autoriteit 100%

Het bericht hierboven betekent dat u zoveel programma’s op uw pc uitvoert die er geen geheugen is om nog een te rennen. Dit is geen Java-probleem en er is geen Java-optie dit veranderen.

Gebruik de taakbeheerder van Windows om te zien hoeveel van uw 4GB RAM is eigenlijk gratis . Mijn gok is dat je ergens een programma hebt dat al het geheugen eet. Vind het en dood het.

Bewerken Je moet begrijpen dat er twee soorten fouten ‘geheugen’ zijn.

De eerste is de OutofMemoryException die u krijgt wanneer Java-code loopt en de Java Heap niet groot genoeg is. Dit betekent Java -code vraagt ​​de Java Runtime voor het geheugen. U kunt mensen repareren met -Xmx...

De andere fout is wanneer de Java Runtime Out Of Memory heeft. Dit is helemaal niet gerelateerd aan de Java Heap helemaal . Dit is een fout wanneer Java het besturingssysteem vraagt ​​voor meer geheugen en het OS zegt: “Sorry, ik heb er geen.”

Om de laatste te verhelpen, sluit u applicaties of opnieuw op (om geheugenfragmentatie op te ruimen).


2, Autoriteit 18%

Hoe deze fout diagnosticeert, zelfs bij het uitvoeren van de eenvoudige opdracht:

java -version
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create GC thread. Out of system resources.
# An error report file with more information is saved as:
# /home2/ericlesc/code/java/c2/hs_err_pid23944.log

Controleer de hoeveelheid gratis geheugen die u heeft:

free -m
             total       used       free     shared    buffers     cached
Mem:         28119      26643       1475        189       2391      15368
-/+ buffers/cache:       8884      19235
Swap:         5117         34       5083

Controleer het maximale aantal gebruikersprocessen, zorg ervoor dat u de limiet niet overschrijdt:

ulimit -a
ps -ef | wc -l

Voor mij was de reden dat dit gebeurde, omdat PHP te veel geheugen had verbruikt dat aan mij was toegewezen op bluehost, en de manier waarop ik het kon repareren, zonder PHP of de server opnieuw op te starten ( ik kan het niet ) was om de public_htmlmap en hernoem deze. En geef het even de tijd voor PHP om de verandering te zien, en hernoem het dan terug.

Een bug in de php-engine zelf. Ik heb een slimme manier gevonden om de PHP-engine een snelle kick te geven.

(update februari 2016)(Ik krijg een piek van stemmen hierover omdat PHP-engines van Bluehost-instanties al het geheugen reserveren en niets overlaten voor de JVM. Ter verdediging, PHP evolueert naar een onheilige Rube Goldberg-machine. Bluehost as a service neemt af.


Antwoord 3, autoriteit 4%

Als je een virtuele machine (VM) gebruikt, wijs dan meer RAM toe aan je VMen je probleem wordt opgelost.


Antwoord 4, autoriteit 3%

Probeer je eclipse.ini aan te passen met hieronder

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20120913-144807
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
512M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
512m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Dhelp.lucene.tokenizer=standard
-Xms2G
-Xmx3G
-XX:MaxPermSize=2G
-XX:+UseCompressedOops
-XX:+UseParallelGC

Zodra je je eclips hebt geopend, kun je het hieronder proberen

Het lijkt erop dat uw toepassing meer geheugen verbruikt dan toegewezen (standaard). Ik zal twee dingen proberen

  1. Zoals voorgesteld door Harmlezz, verhoog uw geheugentoewijzing aan JVM naar -Xms2g -Xmx2g (Verhoog indien nodig meer en probeer het uit)

  2. Download Eclipse Memory Analyzer en controleer wat het geheugenlek veroorzaakt OF zelfs u kunt JConsole gebruiken om het JVM-geheugengebruik te zien om het probleem met het geheugenlek van de applicatie te achterhalen.


Antwoord 5, autoriteit 3%

Als je ec2 gebruikt en mvn build wilt doen, gebruik dan de -T optie die maven vertelt om het aantal threads te gebruiken tijdens het bouwen

bijvoorbeeld:mvn -T 10 clean package


Antwoord 6

In uw Eclipseinstallatiemap zou u het bestand eclipse.inimoeten kunnen vinden. Open het en zoek de sectie -vmargs. Pas de waarde aan van:

-Xmx1024m

In dit voorbeeld is dit ingesteld op 1 GB.


Antwoord 7

Uw toepassing (Eclipse) heeft meer geheugen nodig en JVM wijst niet genoeg toe. U kunt de hoeveelheid geheugen die JVM toewijst vergroten door de antwoorden hier


Antwoord 8

U moet een diagnose stellen van het jvm-gebruik, zoals hoeveel processen er lopen en hoe zit het met heaptoewijzing. er zijn veel manieren om dat bijvoorbeeld te doen

  • je kunt java jcmd gebruiken om het aantal objecten en de grootte van het geheugen te controleren (voor linux kun je bijvoorbeeld “/usr/jdk1.8.0_25/bin/jcmd 19628 GC.class_histogram > /tmp/19628_ClassHistogram_1.txt” gebruiken , hier is 19628 de lopende aanvraagproces-id). U kunt eenvoudig controleren of er een sterke verwijzing in uw code of anders bestaat.

Antwoord 9

Ik weet de vraag die over Eclipse spreekt, maar ik kreeg het soortgelijke kwestie vele malen met Intellij ook en de oplossing voor het was gemakkelijk .. Voer gewoon de 64 bit exe uit, niet de 32-één die altijd de standaard één is.


10

In mijn geval was het dat de C: Drive was uit de ruimte. Zorg ervoor dat u voldoende ruimte beschikbaar hebt.


11

In mijn geval was het dat ik het Windows-virtuele geheugen te laag handmatig instel om ruimte in het systeem SSD te besparen.

Other episodes