Java.lang.VirtualMachineError heitetään, kun Java-virtuaalikone kohtaa sisäisen virheen tai resurssirajoituksen, joka estää sen toiminnan. Se on JVM: n käyttämä itsepuolustusmekanismi, joka estää koko sovelluksen kaatumisen. Tässä artikkelissa, aion keskustella monia erilaisia VirtualMachineError, niiden ominaisuudet, eri syistä, miksi ne käynnistyvät, ja useita mahdollisuuksia ratkaisuja korjata niitä.
tyypit VirtualMachineError
Virtualmachineerroreja on neljää eri tyyppiä:
- Virheilmoitus
- StackOverflowError
- Sisäinen virhe
- Tuntematon virhe
käydään nämä tyypit yksityiskohtaisesti läpi tässä osiossa.
seuraavan sukupolven DEVOPS: VALUE STREAM MANAGEMENT
Helen Beal (DevOps-instituutti.)
HOW TO GROW your SERVERLESS TEAM
Sheen Brisals (the LEGO Group)
MLOPS: KONEOPPIMISJÄRJESTELMIEN jatkuva toimitus
Hauke Brammer (finpair GmbH)
Fig: Java throwable class hierarchy
OutOfMemoryError
aivan kuten OMG (Oh My God) – lyhenne, OOM (OutOfMemoryError) on melko suosittu DevOps-yhteisön keskuudessa. Vaikka useimmat DevOps insinöörit saattavat ajatella, että on vain yksi OutOfMemoryError, on itse asiassa kahdeksan eri makuja OutOfMemoryError:
- java.lang.Outofmoryerror: Java heap space
- java.lang.Virhe: GC: n Ylitysraja ylitetty
- java.lang.Virheilmoitus: pyydetty array size exceeds vm limit
- java.lang.Virheilmoitus: permgenavaruus
- Jaava.lang.Virhe: Metaspace
- java.lang.Virheilmoitus: ei voitu luoda uutta alkuperäistä säiettä
- java.lang.Outofmoryerror: Kill process or sacrifice child
- java.lang.Virheen outofmoryerror: reason stack_race_with_native_method
jokainen virhe johtuu eri syistä. Samoin ratkaisut näihin virheisiin eroavat sen perusteella, millainen maku OutOfMemoryError kysymys se on. Tässä on kaunis yhden sivun dokumentti, joka tiivistää kaikki erilaiset virheet, niiden syyt ja ratkaisut.
yleensäkin virhe voidaan diagnosoida ja korjata analysoimalla Jätteenkeräyslokit ja kaatopaikat. Koska roskien Keräyslokien analysointi manuaalisesti voi olla työlästä, voit harkita ilmaisia työkaluja, kuten GCeasy, HP Jmeter tai IBM GC analyzer. Samoin, voit harkita käyttää ilmaisia työkaluja, kuten HeapHero tai Eclipse matto analysoida kaatopaikat.
Katso myös: StackOverFlowError: Causes & solutions
StackOverflowError
a thread ’ s stack stack stores information about the methods it executes, primitive datatype values, local variabilities, object pointers, and return values. Kaikki nämä asiat kuluttavat muistia. Jos langan pinokoot kasvavat yli varatun muistirajan, niin java.lang.StackOverflowError on heitetty. Tämä ongelma tapahtuu tyypillisesti, kun säie rekursiivisesti vetoaa samaan funktioon uudelleen ja uudelleen suoritusohjelmassa olevan vian vuoksi. Lisätietoja siitä, miten debug StackOverflowError ja kaikki mahdolliset ratkaisut korjata itc olla täällä.
Sisäinen virhe
Jaava.lang.Internalerroria JVM heittää kolmesta syystä. Jos virtuaalikoneen toteuttavassa ohjelmistossa on vika, taustalla olevassa isäntäjärjestelmäohjelmistossa tai laitteistossa on vika.
on kuitenkin harvinaista kohdata tällainen Sisävirhe. Ymmärtääksesi, mitä erityisiä skenaarioita voi aiheuttaa sisäisen virheen, etsi ’Sisäinen virhe’ merkkijono Oraclen Java Bug-tietokannasta. Tätä artikkelia kirjoitettaessa (20. joulukuuta 2018) Oraclen Java Bug-tietokannassa on vain 200 virhettä, jotka on ilmoitettu tästä virheestä. Useimmat niistä on korjattu. Joten älä murehdi liikaa tästä!
Tuntematon virhe
java.lang.UnknownError heitetään, kun poikkeus tai virhe on tapahtunut, mutta Java-virtuaalikone ei pysty raportoimaan todellista poikkeusta tai virhettä. Tuntematonta virhettä esiintyy harvoin. Itse asiassa, kun etsit ’UnknownError’ Oracle Java Bug-tietokannassa, oli vain 2 vikoja todettu raportoitu.
KATSO MYÖS: Java-sovellusten etävianetsintä
ominaisuudet
Virtualmachineerrorilla on pari ensisijaista ominaisuutta:
- tarkistamattomat poikkeukset
- synkroninen & asynkroninen toimitus
tarkastellaan näitä kahta ominaisuutta tässä jaksossa.
tarkistamattomat poikkeukset
poikkeuksia on kahdenlaisia: tarkistetut ja tarkistamattomat.
poikkeuksia, jotka tarkistetaan käännösaikaan, kutsutaan tarkistetuiksi poikkeuksiksi. Jos jotkut menetelmät koodin heittää tarkistettu poikkeus, niin menetelmä on joko käsitellä poikkeus tai se on määriteltävä poikkeus käyttäen ’heittää’ avainsanaa. Esimerkkejä tarkastetuista poikkeuksista ovat: IOException, SQLException, Dataccessexception, Classnotfound Exception, ja enemmän.
Tarkistamattomilla poikkeuksilla ei ole tätä vaatimusta. Niitä ei tarvitse ottaa kiinni tai julistaa heitetyiksi. Kaikenlaiset VirtualMachineError ovat tarkistamattomia poikkeuksia.
synkroninen & asynkroninen toimitus
poikkeukset voidaan heittää kahdessa tilassa: synkroninen ja asynkroninen.
synkroniset poikkeukset tapahtuvat tietyssä ohjelmalausekkeessa riippumatta siitä, kuinka monta kertaa ohjelma on suoritettu vastaavassa ympäristössä. Esimerkkejä synkronisista poikkeuksista ovat sellaiset asiat kuin NullPointerException, Arrayindexoutoufbound Exception jne.
asynkronisia poikkeuksia voi tapahtua missä tahansa vaiheessa ja missä tahansa ohjelmalauseen osassa. Ei ole johdonmukaisuutta, jossa se voidaan heittää. Kaikki Virtualmachineerrilit heitetään asynkronisesti, mutta joskus ne voidaan heittää myös synkronisesti. StackOverflowError voidaan heittää synkronisesti menetelmällä kutsuminen, sekä asynkronisesti johtuen natiivin menetelmän suorittamisen tai Java virtuaalikoneen resurssien rajoituksia. Samoin, Outofmoryerror voidaan heittää synkronisesti aikana objektin luominen, array luominen, luokan alustus, ja nyrkkeily muuntaminen, sekä asynkronisesti.