Jak opravit VirtualMachineError v Javě

Java.lang.VirtualMachineError je vyvolán, když virtuální stroj Java narazí na jakoukoli vnitřní chybu nebo omezení zdrojů, které mu brání ve fungování. Je to sebeobranný mechanismus používaný JVM, aby se zabránilo zhroucení celé aplikace. V tomto článku se budu diskutovat o mnoha různých typů VirtualMachineError, jejich vlastnosti, různé důvody, proč jsou spuštěny, a několik možností řešení je opravit.

Typy VirtualMachineError

k Dispozici jsou čtyři různé typy VirtualMachineError:

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

podívejme se na tyto typy podrobněji v této části.

    JAX Londýně
    JAX Londýně 2019

    Emily Lannon

    PŘÍŠTÍ GENERACE DEVOPS: VALUE STREAM MANAGEMENT

    Helen Beal (DevOps Ústavu.)

    Emily Lannon

    JAK ROSTOU VAŠE SERVERLESS TÝM

    Lesk Brisals (The LEGO Group)

    Emily Lannon

    MLOPS: PRŮBĚŽNÉ DODÁVKY STROJOVÉHO UČENÍ SYSTÉMŮ

    Houk Brammerová (finpair GmbH)

VirtualMachineError

Obr: Java třídy throwable hierarchie

OutOfMemoryError

Stejně jako OMG (Oh Můj Bože) zkratka, OOM (OutOfMemoryError) je velmi populární mezi DevOps komunitu. Zatímco většina inženýrů DevOps si může myslet, že existuje pouze jeden OutOfMemoryError, ve skutečnosti existuje osm různých příchutí OutOfMemoryError:

  • Jáva.lang.OutOfMemoryError: Java heap space
  • java.lang.OutOfMemoryError: GC horní limit překročen
  • java.lang.OutOfMemoryError: požadovaná velikost pole přesahuje limit VM
  • java.lang.OutOfMemoryError: Permgenový prostor
  • java.lang.OutOfMemoryError: Metaspace
  • java.lang.OutOfMemoryError: nelze vytvořit nové nativní vlákno
  • java.lang.OutOfMemoryError: zabít proces nebo obětovat dítě
  • java.lang.OutOfMemoryError: reason stack_trace_with_native_method

každá chyba je vyvolána různými důvody. Podobně, řešení těchto chyb se liší podle toho, jaký druh chuti problému OutOfMemoryError je. Zde je krásný jednostránkový dokument, který shrnuje všechny různé druhy OutOfMemoryError, jejich příčiny a řešení.

obecně lze OutOfMemoryError diagnostikovat a opravit analýzou protokolů sběru odpadu a skládek haldy. Protože ruční analýza protokolů sběru odpadků může být únavná,můžete zvážit použití bezplatných nástrojů, jako je GCeasy, HP Jmeter nebo IBM GC analyzer. Podobně můžete zvážit použití bezplatných nástrojů, jako je HeapHero nebo Eclipse MAT, k analýze skládek haldy.

viz také: StackOverFlowError: Způsobuje & řešení

StackOverflowError

vlákno je stack stack ukládá informace o metody to provádí, primitivní datový typ hodnoty, lokální proměnné, objekt ukazatele, a návratové hodnoty. Všechny tyto věci spotřebovávají paměť. Pokud velikost zásobníku vlákna roste nad limit přidělené paměti, pak java.lang.StackOverflowError je hozen. K tomuto problému obvykle dochází, když vlákno rekurzivně vyvolá stejnou funkci znovu a znovu kvůli chybě ve spouštěcím programu. Další podrobnosti o tom, jak ladit StackOverflowError a všechna možná řešení pro opravu itc zde.

InternalError

java.lang.InternalError je hozen JVM ze tří důvodů. Pokud je chyba v softwaru, provádění virtuální stroj, chyba v hlubších hostitelský systém software, nebo chyba v hardwaru.

je však vzácné setkat se s tímto druhem vnitřní chyby. Chcete-li pochopit, jaké konkrétní scénáře mohou způsobit InternalError, vyhledejte řetězec „InternalError“ v databázi chyb Java společnosti Oracle. V době psaní tohoto článku (20. prosince 2018) je pro tuto chybu v databázi chyb Oracle Java hlášeno pouze 200 závad. Většina z nich je pevná. Tak, nedělejte si s tím příliš starosti!

Neznámá chyba

java.lang.UnknownError je vyvolán, když došlo k výjimce nebo chybě, ale virtuální stroj Java nemůže nahlásit skutečnou výjimku nebo chybu. Neznámá chyba se vyskytuje jen zřídka. Ve skutečnosti, při hledání ‚UnknownError‘ v databázi chyb Oracle Java, tam byly jen 2 zjištěné závady hlášeny.

VIZ TAKÉ: Vzdálené ladění pro aplikace Java

Vlastnosti

VirtualMachineError má několik základních charakteristik:

  • Nekontrolované výjimky
  • Synchronní & asynchronní doručení

Pojďme diskutovat o tom, tyto dvě vlastnosti v tomto oddíle.

nezaškrtnuté výjimky

existují dva typy výjimek: zaškrtnuté a nezaškrtnuté.

výjimky, které jsou kontrolovány v době kompilace, se nazývají kontrolovaná výjimka. Pokud některé metody ve vašem kódu hodí zaškrtnutou výjimku, musí metoda buď zpracovat výjimku, nebo musí určit výjimku pomocí klíčového slova „hodí“. Příklady kontrolovaných výjimek jsou: IOException, SQLException, DataAccessException, ClassNotFoundException a další.

nezaškrtnuté výjimky tento požadavek nemají. Nemusí být chyceni ani prohlášeni za hozené. Všechny typy VirtualMachineError jsou nekontrolované výjimky.

Synchronní & asynchronní doručení

Výjimky může být vyvolána ve dvou režimech: synchronní a asynchronní.

synchronní výjimky se dějí v určitém programovém prohlášení, bez ohledu na to, kolikrát byl program spuštěn v podobném prostředí. Příklady synchronních výjimek jsou věci jako NullPointerException, ArrayIndexOutOfBoundException atd.

asynchronní výjimky se mohou vyskytnout kdykoli a v jakékoli části programového prohlášení. Neexistuje konzistence, kde by mohla být hozena. Všechny Virtuálnístroje jsou hozeny asynchronně, ale někdy mohou být také hozeny synchronně. StackOverflowError může být vyvolána synchronně pomocí volání metod, jakož i asynchronně vzhledem k nativní metodu exekuce nebo Java Virtual Machine omezení zdrojů. Podobně může být OutOfMemoryError vyvolán synchronně během vytváření objektů, vytváření polí, inicializace třídy a konverze boxu, stejně jako asynchronně.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.

Previous post Afroamerické poradenství
Next post Jsou Schizofrenici Nebezpeční?