Hoe een VirtualMachineError te repareren in Java

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:

  1. OutOfMemoryError
  2. StackOverflowError
  3. InternalError
  4. Onbekenderror

laten we deze types in detail bekijken in deze sectie.

    JAX London
    JAX London 2019

    Emily Lannon

    NEXT GENERATION DevOps: VALUE STREAM MANAGEMENT

    Helen Beal (DevOps Institute.)

    Emily Lannon

    HOE om TE GROEIEN UW SERVERLOZE TEAM

    Sheen Brisals (De LEGO Groep)

    Emily Lannon

    MLOPS: CONTINUE LEVERING VAN MACHINE LEARNING SYSTEMEN

    Hauke Brammer (finpair GmbH)

VirtualMachineError

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.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.

Previous post Afro-Amerikaanse Counseling
Next post waarom je Vagina soms pijn doet als je super geil bent