Java.lang.VirtualMachineError wordt gegooid wanneer een Java virtuele machine tegenkomt een interne fout of resource beperking die voorkomt dat het functioneren. Het is een zelfverdedigingsmechanisme gebruikt door de JVM om te voorkomen dat de hele toepassing crasht. In dit artikel zal ik de vele verschillende soorten VirtualMachineError bespreken, hun kenmerken, verschillende redenen waarom ze worden geactiveerd, en verschillende potentiële oplossingen om ze op te lossen.
typen VirtualMachineError
er zijn vier verschillende typen VirtualMachineError:
- OutOfMemoryError
- StackOverflowError
- InternalError
- Onbekenderror
laten we deze types in detail bekijken in deze sectie.
NEXT GENERATION DevOps: VALUE STREAM MANAGEMENT
Helen Beal (DevOps Institute.)
HOE om TE GROEIEN UW SERVERLOZE TEAM
Sheen Brisals (De LEGO Groep)
MLOPS: CONTINUE LEVERING VAN MACHINE LEARNING SYSTEMEN
Hauke Brammer (finpair GmbH)
Afb: Java throwable class hierarchy
OutOfMemoryError
net als de OMG (Oh mijn God) acroniem, OOM (OutOfMemoryError) is vrij populair onder DevOps-gemeenschap. Terwijl de meeste DevOps ingenieurs kunnen denken dat er slechts één OutOfMemoryError, er zijn eigenlijk acht verschillende smaken van OutOfMemoryError:
- java.lang.OutOfMemoryError: Java heap space
- java.lang.OutOfMemoryError: GC Overhead limiet overschreden
- java.lang.OutOfMemoryError: Requested array size overschrijdt VM limiet
- java.lang.OutOfMemoryError: Permgen space
- java.lang.OutOfMemoryError: metaspace
- java.lang.OutOfMemoryError: kan geen nieuwe native thread
- java aanmaken.lang.OutOfMemoryError: Kill process or offerande child
- java.lang.OutOfMemoryError: reason stack_trace_with_native_method
elke fout wordt veroorzaakt door verschillende redenen. Evenzo, oplossingen voor deze fouten verschillen op basis van welk soort smaak van OutOfMemoryError probleem het is. Hier is een mooi document van één pagina dat alle verschillende soorten van Uitsmemoryerror, hun oorzaken en oplossingen samenvat.
in het algemeen kan een fout worden vastgesteld en vastgesteld door het analyseren van afvalverzamellogs en stortplaatsen. Aangezien het handmatig analyseren van Garbage Collection logs vervelend kan zijn, kunt u overwegen om gratis tools zoals GCeasy, HP Jmeter of IBM GC analyzer te gebruiken. Evenzo, kunt u overwegen met behulp van gratis tools zoals HeapHero of Eclipse MAT te analyseren heap dumps.
zie ook: StackOverFlowError: Oorzaken & oplossingen
StackOverflowError
de stack van een thread stack slaat informatie op over de methoden die het uitvoert, primitieve datatype-waarden, lokale variabelen, objectaanwijzers en retourwaarden. Al deze dingen verbruiken geheugen. Als de stackgroottes van een thread groter worden dan de toegewezen geheugenlimiet, dan is de java.lang.StackOverflowError wordt gegooid. Dit probleem doet zich meestal voor wanneer een thread recursief dezelfde functie opnieuw en opnieuw aanroept vanwege een bug in het uitvoerende programma. Meer details over het debuggen van StackOverflowError en alle mogelijke oplossingen om itc een be here op te lossen.
InternalError
java.lang.InternalError wordt gegooid door JVM om drie redenen. Als er een fout is in de software die de virtuele machine implementeert, een fout in de onderliggende hostsysteemsoftware of een fout in de hardware.
het is echter zeldzaam om dit soort interne fouten tegen te komen. Om te begrijpen welke specifieke scenario ’s InternalError kunnen veroorzaken, zoek naar de’ InternalError ‘string in Oracle’ s Java Bug database. Op het moment van schrijven van dit artikel (20 December 2018), zijn er slechts 200 defecten gemeld voor deze fout in Oracle ‘ s Java Bug database. De meeste zijn gemaakt. Dus, maak je niet te veel zorgen over deze!
Onbekenderror
java.lang.UnknownError wordt gegooid wanneer een uitzondering of fout is opgetreden, maar de Java virtuele machine is niet in staat om de werkelijke uitzondering of fout te melden. De onbekendheid komt zelden voor. In feite, bij het zoeken naar ‘UnknownError’ in Oracle Java Bug database, waren er slechts 2 defecten gemeld.
ZIE OOK: Foutopsporing op afstand voor Java-toepassingen
kenmerken
VirtualMachineError heeft enkele primaire kenmerken:
- ongecontroleerde uitzonderingen
- synchrone & asynchrone levering
laten we deze twee kenmerken in deze sectie bespreken.
ongecontroleerde uitzonderingen
er zijn twee soorten uitzonderingen: aangevinkt en niet aangevinkt.
uitzonderingen die tijdens het compileren worden gecontroleerd, worden Checked Exception genoemd. Als sommige methoden in je code een aangevinkte uitzondering gooien, dan moet de methode ofwel de uitzondering afhandelen of de uitzondering specificeren met behulp van het sleutelwoord ‘gooit’. Voorbeelden van de gecontroleerde uitzonderingen zijn: IOException, SQLException, DataAccessException, ClassNotFoundException, en meer.
ongecontroleerde uitzonderingen hebben deze vereiste niet. Ze hoeven niet te worden gevangen of verklaard gegooid. Alle soorten VirtualMachineError zijn ongecontroleerde uitzonderingen.
synchrone& asynchrone levering
uitzonderingen kunnen in twee modi worden weergegeven: synchrone en asynchrone.
synchrone uitzonderingen vinden plaats bij een specifiek programma statement, ongeacht het aantal keren dat het programma in een vergelijkbare omgeving is uitgevoerd. Voorbeelden van synchrone uitzonderingen zijn zaken als Nullpointerexceptie, Arrayindexoutofboundexceptie, enz.
asynchrone uitzonderingen kunnen op elk moment en in elk deel van het programma statement voorkomen. Er is geen consistentie waar het kan worden gegooid. Alle Virtualmachinefouten worden asynchroon gegooid, maar soms kunnen ze ook synchroon worden gegooid. StackOverflowError kan synchroon worden gegooid door methode aanroep, evenals asynchroon als gevolg van native methode uitvoering of Java Virtual Machine resource beperkingen. Op dezelfde manier kan OutOfMemoryError synchroon worden gegooid tijdens het maken van objecten, array creatie, klasse initialisatie, en boksen conversie, evenals asynchroon.