Åtgärd: Fel inträffade under initialisering av VM kunde inte reservera tillräckligt med utrymme för objekthögen

Även om Java-appletar inte är en populär webbteknik idag finns det otaliga skäl att distribuera en Java-virtuell maskin direkt på en Linux-server. Om du försöker köra Linux java-kommandot direkt antingen på diskret hårdvara eller inuti sin egen virtuella dator, kan du få ett "fel inträffade under initialisering av VM kunde inte reservera tillräckligt med utrymme för objekthögen".

Detta ser förmodligen ganska udda ut eftersom du mer än troligtvis har tillräckligt med RAM för att köra kommandot, men det beror till stor del på en specifik karaktär i hur fysiska och virtuella minnessidor blir vana. Om du anger vissa relativt stora storlekar bör du helt kunna kringgå detta meddelande och köra java-kommandot som du skulle ha gjort med något annat.

Metod 1: Använda kommandoradsalternativ

Om du har försökt köra java och fått det här meddelandet, har du förmodligen redan kört kommandot gratis för att se till att det finns gott om minne att köra programmet i.

java & gratis kommandon

Lägg märke till att vi på vår testmaskin hade 2,3 GB fysiskt RAM-minne och att inte en enda sida virtuellt minne hade blivit använt ännu. Om du märker att du har en minneskrama vill du stänga andra saker som du kör innan du försöker igen. Å andra sidan kan de som upptäckte att de har gott om ledigt minne försöka ange en storlek direkt.

På vår maskin kunde vi till exempel köra kommandot som java -Xms256m -Xmx512M och det fungerade som det annars hade förväntats. Detta begränsar stapelstorleken som den virtuella Java-maskinen försöker reservera vid start. Eftersom en obegränsad virtuell maskin hypotetiskt kan göra ovanliga saker kan det kasta felmeddelanden på ett annars gratis system. Du kanske också vill leka med dessa två värden innan du hittar rätt kombination.

Detta kan vara ett problem oavsett vad du kör den på eftersom JVM inte har något att göra med den typ av virtuell dator som du kan använda för att köra GNU / Linux.

Metod 2: Exportera variablerna för att göra ändringen permanent

När du hittar ett värde som fungerar kan du exportera det för att göra det permanent för den sessionen. Till exempel använde vi export _JAVA_OPTIONS = '- Xms256M -Xmx512M' från kommandotolken bash och det gjorde att vi kunde köra java-kommandot själv utan några andra alternativ tills vi loggade ut från vår server.

Det behövde köras igen när vi loggade in på en annan session, så du kanske vill lägga till den i relevanta startskript om du planerar att använda java-kommandot ganska ofta. Vi lade till raden i vår .bash_login-fil och det verkade fungera varje gång vi använde en inloggningsprompt utan att behöva köra den igen, men du kan behöva hitta en annan plats för den om du arbetar med ett annat skal.

Du kanske har märkt att endast vissa hårdvarukonfigurationer utlöser detta felmeddelande. Det beror på att det vanligtvis händer på maskiner med mycket fysiskt RAM-minne men lägre ulimiter för hur man använder det. Java kommer att försöka tilldela ett stort block bara för att få veta att det inte kan, vilket det tolkar som att det tar slut på minne.

Metod 3: Skriva ut nuvarande Java-alternativ

Om du har arbetat på kommandoraden och vill ha en snabb hänvisning till vad du för närvarande har ställt in _JAVA_OPTIONS-värdet till, kör bara echo $ _JAVA_OPTIONS och det kommer omedelbart att skriva ut de aktuella värdena. Detta är användbart för felsökning när du försöker räkna ut rätt siffror att prova.

Tänk på att även om den här lösningen inte kräver någon annan spelning kommer Java att kasta ut meddelandet "kunde inte reservera tillräckligt med utrymme för objekthögen" om du någonsin befinner dig i den korta änden av det virtuella minnet. Om så är fallet vill du dubbelkolla vilka processer som för närvarande körs och eventuellt starta om servern om det är ett alternativ. Du kan också skapa mer växlingsutrymme, men om det här är ett problem är det i allmänhet bättre att försöka rätta till det på något annat sätt.

I sällsynta fall att dina inställningar verkar vara korrekta men det fortfarande inte fungerar, se till att du har installerat 64-bitars Java-paketet eftersom det borde vara immun mot detta problem. Angränsande minneskrav gäller endast 32-bitarsversionen av Java. Vi hittade i en handfull fall 64-bitarsversionen försökte skapa en 32-bitars virtuell maskin, så att specificera alternativet -d64 på kommandoraden fixade det åt oss.

Rekommenderas

Fix: Minecraft svarar inte
Vad är en ansökan om registrering av digital-TV-mottagare och bör den tas bort?
Vad är FileRepMalware och ska du ta bort det