Hogyan lehet javítani a VirtualMachineError Java

Java.lang.A VirtualMachineError akkor kerül dobásra, amikor egy Java virtuális gép bármilyen belső hibával vagy erőforrás-korlátozással találkozik, amely megakadályozza annak működését. Ez egy önvédelmi mechanizmus, amelyet a JVM alkalmaz, hogy megakadályozza a teljes alkalmazás összeomlását. Ebben a cikkben megvitatom a VirtualMachineError sokféle típusát, jellemzőit, különböző okait, amelyek kiváltják őket, valamint számos potenciális megoldást a javításukra.

a VirtualMachineError típusai

a VirtualMachineError négy különböző típusa létezik:

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

nézzük át részletesen ezeket a típusokat ebben a szakaszban.

    Danubius Gellert
    Danubius Gellert 2019

    Emily Lannon

    következő generációs DEVOPS: VALUE STREAM MANAGEMENT

    Helen Beal (DevOps Intézet.)

    Emily Lannon

    hogyan növeld a szerver nélküli csapatod

    Sheen Brisals (a LEGO Csoport)

    Emily Lannon

    MLOPS: gépi tanulási rendszerek folyamatos szállítása

    Hauke Brammer (finpair GmbH)

VirtualMachineError

ábra: Java dobható osztályhierarchia

OutOfMemoryError

csakúgy, mint az OMG (Istenem) betűszó, az OOM (OutOfMemoryError) meglehetősen népszerű a DevOps közösség körében. Míg a legtöbb DevOps mérnök azt gondolhatja, hogy csak egy OutOfMemoryError van, valójában nyolc különböző íz van az Outofmemoryerrornak:

  • java.lang.OutOfMemoryError: Java heap space
  • java.lang.OutOfMemoryError: a GC felső határa meghaladta a
  • java értéket.lang.OutOfMemoryError: a kért tömb mérete meghaladja a virtuális gép korlátját
  • java.lang.OutOfMemoryError: Permgen space
  • java.lang.OutOfMemoryError: Metaspace
  • java.lang.OutOfMemoryError: nem sikerült új natív szálat létrehozni
  • java.lang.OutOfMemoryError: Kill folyamat vagy áldozat gyermek
  • java.lang.OutOfMemoryError: reason stack_trace_with_native_method

minden hibát különböző okok váltanak ki. Hasonlóképpen, ezeknek a hibáknak a megoldásai különböznek attól függően, hogy az OutOfMemoryError kérdés milyen ízű. Itt van egy szép egyoldalas dokumentum, amely összefoglalja az összes különböző OutOfMemoryError, azok okait és megoldásait.

általában az OutOfMemoryError diagnosztizálható és javítható a szemétgyűjtési naplók és a Kupaclerakók elemzésével. Mivel a szemétgyűjtési naplók kézi elemzése unalmas lehet, fontolóra veheti olyan ingyenes eszközök használatát, mint a GCeasy, a HP Jmeter vagy az IBM GC analyzer. Hasonlóképpen fontolóra veheti az olyan ingyenes eszközök használatát, mint a HeapHero vagy az Eclipse MAT a kupaclerakók elemzéséhez.

Lásd még: StackOverFlowError: Okoz & megoldások

StackOverflowError

a szál verem verem információkat tárol a végrehajtott módszerekről, primitív adattípus értékekről, helyi változókról, objektummutatókról és visszatérési értékekről. Mindezek a dolgok felemésztik a memóriát. Ha egy szál veremmérete meghaladja a lefoglalt memória korlátot, akkor a java.lang.StackOverflowError dobásra kerül. Ez a probléma általában akkor fordul elő, amikor egy szál rekurzívan meghívja ugyanazt a funkciót újra és újra a végrehajtó program hibája miatt. További részletek A StackOverflowError hibakereséséről és az itc an javításának minden lehetséges megoldásáról itt.

Belső hiba

java.lang.A belső hibát a JVM három okból dobja el. Ha hiba van a virtuális gépet megvalósító szoftverben,az alapul szolgáló gazdarendszer szoftverében vagy a hardverben.

azonban ritkán találkozunk ilyen belső hibával. Annak megértéséhez, hogy milyen konkrét forgatókönyvek okozhatnak belső hibát, keresse meg a ‘belső hiba’ karakterláncot az Oracle Java Bug adatbázisában. A cikk írásakor (December 20, 2018) Az Oracle Java Bug adatbázisában csak 200 hibát jelentettek erre a hibára. A legtöbbjük rögzített. Tehát ne aggódj túl sokat ez miatt!

UnknownError

java.lang.UnknownError dob, ha egy kivétel vagy hiba történt, de a Java virtuális gép nem tudja jelenteni a tényleges kivétel vagy hiba. Az Ismeretlen hiba ritkán fordul elő. Valójában, amikor az ‘UnknownError’ – t kereste az Oracle Java Bug database-ben, csak 2 hibát találtak.

LÁSD MÉG: Távoli hibakeresés Java alkalmazásokhoz

jellemzők

VirtualMachineError néhány elsődleges jellemzővel rendelkezik:

  • nem ellenőrzött kivételek
  • szinkron & aszinkron szállítás

beszéljük meg ezt a két jellemzőt ebben a szakaszban.

nem ellenőrzött kivételek

kétféle kivétel létezik: ellenőrzött és nem ellenőrzött.

a fordításkor ellenőrzött kivételeket ellenőrzött kivételnek nevezzük. Ha a kód egyes metódusai ellenőrzött kivételt dobnak, akkor a metódusnak vagy kezelnie kell a kivételt, vagy meg kell adnia a kivételt a ‘dobások’ kulcsszóval. Példák az ellenőrzött kivételekre: IOException, SQLException, DataAccessException, ClassNotFoundException stb.

a nem ellenőrzött kivételek nem tartalmazzák ezt a követelményt. Nem kell őket elkapni vagy dobni. A VirtualMachineError minden típusa nem ellenőrzött kivétel.

szinkron & aszinkron szállítás

kivételek két módban dobhatók: szinkron és aszinkron.

szinkron kivételek egy adott programutasításnál történnek, függetlenül attól, hogy a programot hányszor hajtották végre hasonló környezetben. A szinkron kivételek példái például a NullPointerException, az ArrayIndexOutOfBoundException stb.

aszinkron kivételek bármikor és a programnyilatkozat bármely részében előfordulhatnak. Nincs konzisztencia, ahol el lehet dobni. Az összes Virtuálisgéphibákat aszinkron módon dobják, de néha szinkronban is dobhatók. A StackOverflowError szinkronban dobható módszerhívással, valamint aszinkron módon a natív módszer végrehajtása vagy a Java virtuális gép erőforrás-korlátai miatt. Hasonlóképpen, OutOfMemoryError dobható szinkron során objektum létrehozása, tömb létrehozása, osztály inicializálása, boksz átalakítás, valamint aszinkron.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.

Previous post Afro-amerikai tanácsadás
Next post A Skizofrén Betegek Veszélyesek?