Java.lang.VirtualMachineError kastas när en virtuell Java-maskin stöter på något internt fel eller resursbegränsning som hindrar den från att fungera. Det är en självförsvarsmekanism som används av JVM för att förhindra att hela applikationen kraschar. I den här artikeln kommer jag att diskutera de många olika typerna av VirtualMachineError, deras egenskaper, olika anledningar till varför de utlöses och flera potentiallösningar för att fixa dem.
typer av VirtualMachineError
det finns fyra olika typer av VirtualMachineError:
- OutOfMemoryError
- StackOverflowError
- InternalError
- UnknownError
låt oss granska dessa typer i detalj i det här avsnittet.
nästa generations DevOps: hantering av VÄRDESTRÖM
Helen Beal (DevOps Institute.)
hur du odlar ditt serverlösa TEAM
Sheen Brisals (LEGO Group)
MLOPS: kontinuerlig leverans av maskininlärningssystem
Hauke Brammer (finpair GmbH)
Fig: Java throwable class hierarchy
OutOfMemoryError
precis som omg (Oh My God) akronym, OOM (OutOfMemoryError) är ganska populär bland DevOps gemenskap. Medan de flesta DevOps-ingenjörer kanske tror att det bara finns en OutOfMemoryError, finns det faktiskt åtta olika smaker av OutOfMemoryError:
- java.lang.OutOfMemoryError: Java heap space
- java.lang.OutOfMemoryError: GC Overhead gräns överskrids
- java.lang.OutOfMemoryError: begärd array storlek överskrider VM gräns
- java.lang.OutOfMemoryError: Permgen utrymme
- java.lang.OutOfMemoryError: Metaspace
- java.lang.OutOfMemoryError: det gick inte att skapa en ny inbyggd tråd
- java.lang.OutOfMemoryError: döda process eller offra barn
- java.lang.OutOfMemoryError: orsak stack_trace_with_native_method
varje fel utlöses av olika skäl. På samma sätt skiljer sig lösningarna för dessa fel beroende på vilken typ av smak av OutOfMemoryError-problem det är. Här är ett vackert dokument på en sida som sammanfattar alla olika typer av OutOfMemoryError, deras orsaker och lösningar.
i allmänhet kan OutOfMemoryError diagnostiseras och fixas genom att analysera Sophämtningsloggar och Högdumpar. Eftersom det kan vara tråkigt att analysera Sophämtningsloggar manuellt kan du överväga att använda gratis verktyg som GCeasy, HP Jmeter eller IBM GC analyzer. På samma sätt kan du överväga att använda gratis verktyg som HeapHero eller Eclipse MAT för att analysera högdumpar.
se även: StackOverFlowError: Orsaker & lösningar
StackOverflowError
en tråds stack stack lagrar information om de metoder den utför, primitiva datatypvärden, lokala variabler, objektpekare och returvärden. Alla dessa saker förbrukar minne. Om en tråds stackstorlekar växer utöver den tilldelade minnesgränsen, då java.lang.StackOverflowError kastas. Det här problemet händer vanligtvis när en tråd rekursivt åberopar samma funktion om och om igen på grund av ett fel i det exekverande programmet. Mer information om hur du felsöker StackOverflowError och alla möjliga lösningar för att fixa itc an Be här.
InternalError
java.lang.InternalError kastas av JVM av tre skäl. Om det finns ett fel i programvaran som implementerar den virtuella maskinen, ett fel i den underliggande värdsystemprogramvaran eller ett fel i hårdvaran.
det är dock sällsynt att stöta på denna typ av Internerror. För att förstå vilka specifika scenarier som kan orsaka InternalError, Sök efter’ InternalError ’ – strängen i Oracles Java-Feldatabas. Vid skrivandet av denna artikel (20 December 2018) rapporteras endast 200 fel för detta fel i Oracles Java-Feldatabas. De flesta av dem är fasta. Så oroa dig inte för mycket om den här!
okänt fel
java.lang.UnknownError kastas när ett undantag eller fel har inträffat, men Java virtual machine kan inte rapportera det faktiska undantaget eller felet. Det Okändafel uppstår sällan. Faktum är att när du söker efter ’UnknownError’ i Oracle Java Bug database, fanns det bara 2 fel som hittades rapporterade.
SE ÄVEN: Fjärrfelsökning för Java-applikationer
egenskaper
VirtualMachineError har några primära egenskaper:
- okontrollerade undantag
- synkron & asynkron leverans
låt oss diskutera dessa två egenskaper i det här avsnittet.
omarkerade undantag
det finns två typer av undantag: markerad och omarkerad.
undantag som kontrolleras vid kompileringstiden kallas kontrollerat undantag. Om vissa metoder i din kod kastar ett kontrollerat undantag, måste metoden antingen hantera undantaget eller det måste ange undantaget med hjälp av nyckelordet ’kast’. Exempel på de kontrollerade undantagen är: IOException, SQLException, DataAccessException, ClassNotFoundException och mer.
okontrollerade undantag har inte detta krav. De behöver inte fångas eller förklaras kastade. Alla typer av VirtualMachineError är okontrollerade undantag.
synkron & asynkron leverans
undantag kan kastas i två lägen: synkron och asynkron.
synkrona undantag inträffar vid ett specifikt programuttalande, oavsett hur många gånger programmet har körts i liknande miljö. Exempel på synkrona undantag är saker som NullPointerException, ArrayIndexOutOfBoundException, etc.
asynkrona undantag kan inträffa när som helst och i någon del av programförklaringen. Det finns ingen konsistens där den kan kastas. Alla Virtuellamachineerfel kastas asynkront, men ibland kan de också kastas synkront. StackOverflowError kan kastas synkront genom metod åkallan, samt asynkront på grund av native method execution eller Java virtuell maskin resursbegränsningar. På samma sätt kan OutOfMemoryError kastas synkront under skapande av objekt, skapande av array, klassinitiering och boxningskonvertering, såväl som asynkront.