So beheben Sie einen VirtualMachineError in Java

Java.lang.VirtualMachineError wird ausgelöst, wenn eine Java Virtual Machine auf einen internen Fehler oder eine Ressourcenbeschränkung stößt, die die Funktion verhindert. Es ist ein Selbstverteidigungsmechanismus, der von der JVM verwendet wird, um zu verhindern, dass die gesamte Anwendung abstürzt. In diesem Artikel werde ich die vielen verschiedenen Arten von VirtualMachineError, ihre Eigenschaften, verschiedene Gründe, warum sie ausgelöst werden, und verschiedene mögliche Lösungen, um sie zu beheben, diskutieren.

Arten von VirtualMachineError

Es gibt vier verschiedene Arten von VirtualMachineError:

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

Lassen Sie uns diese Typen in diesem Abschnitt im Detail überprüfen.

     JAX London
     JAX London 2019

     Emily Lannon

    DEVOPS DER NÄCHSTEN GENERATION: WERTSTROMMANAGEMENT

    Helen Beal (DevOps Institute.)

     Emily Lannon

    SO ERWEITERN SIE IHR SERVERLOSES TEAM

    Sheen Brisals (Die LEGO Gruppe)

     Emily Lannon

    MLOPS: CONTINUOUS DELIVERY VON MACHINE LEARNING SYSTEMEN

    Hauke Brammer (finpair GmbH)

 VirtualMachineError

Abb: Java throwable class hierarchy

OutOfMemoryError

Genau wie das Akronym OMG (Oh My God) ist OOM (OutOfMemoryError) in der DevOps-Community sehr beliebt. Während die meisten DevOps-Ingenieure denken, dass es nur einen OutOfMemoryError gibt, gibt es tatsächlich acht verschiedene Varianten von OutOfMemoryError:

  • java.lang.OutOfMemoryError: Java-Heap-Speicherplatz
  • java.lang.OutOfMemoryError: GC-Overhead-Grenze überschritten
  • java.lang.OutOfMemoryError: Die angeforderte Array-Größe überschreitet das VM-Limit
  • java.lang.OutOfMemoryError: Permgen Raum
  • java.lang.OutOfMemoryError: Metaspace
  • java.lang.OutOfMemoryError: Neuer nativer Thread kann nicht erstellt werden
  • java.lang.OutOfMemoryError: Prozess beenden oder Kind opfern
  • java.lang.OutOfMemoryError: Grund stack_trace_with_native_method

Jeder Fehler wird aus verschiedenen Gründen ausgelöst. In ähnlicher Weise unterscheiden sich die Lösungen für diese Fehler je nach Art des OutOfMemoryError-Problems. Hier ist ein schönes einseitiges Dokument, das alle verschiedenen Arten von OutOfMemoryError, ihre Ursachen und Lösungen zusammenfasst.

Im Allgemeinen kann OutOfMemoryError durch Analysieren von Speicherbereinigungsprotokollen und Heap-Dumps diagnostiziert und behoben werden. Da die manuelle Analyse von Garbage Collection-Protokollen mühsam sein kann, können Sie kostenlose Tools wie GCeasy, HP Jmeter oder IBM GC Analyzer verwenden. Ebenso können Sie kostenlose Tools wie HeapHero oder Eclipse MAT verwenden, um Heap-Dumps zu analysieren.

SIEHE AUCH: StackOverflowError: Ursachen & Lösungen

StackOverflowError

Der Stack-Stack eines Threads speichert Informationen zu den ausgeführten Methoden, primitiven Datentypwerten, lokalen Variablen, Objektzeigern und Rückgabewerten. All diese Dinge verbrauchen Speicher. Wenn die Stapelgrößen eines Threads über das zugewiesene Speicherlimit hinausgehen, wird Java.lang.StackOverflowError wird ausgelöst. Dieses Problem tritt normalerweise auf, wenn ein Thread dieselbe Funktion aufgrund eines Fehlers im ausführenden Programm immer wieder rekursiv aufruft. Weitere Details zum Debuggen von StackOverflowError und alle möglichen Lösungen zur Behebung finden Sie hier.

Interner Fehler

java.lang.InternalError wird von JVM aus drei Gründen ausgelöst. Wenn ein Fehler in der Software vorliegt, die die virtuelle Maschine implementiert, ein Fehler in der zugrunde liegenden Hostsystemsoftware oder ein Fehler in der Hardware.

Es ist jedoch selten, dass diese Art von InternalError auftritt. Um zu verstehen, welche spezifischen Szenarien InternalError verursachen können, suchen Sie in der Java-Fehlerdatenbank von Oracle nach der Zeichenfolge ‚InternalError‘. Zum Zeitpunkt des Schreibens dieses Artikels (20. Dezember 2018) wurden nur 200 Fehler für diesen Fehler in der Java-Fehlerdatenbank von Oracle gemeldet. Die meisten von ihnen sind fixiert. Also, mach dir nicht zu viele Sorgen um diesen!

Unbekannter Fehler

java.lang.UnknownError wird ausgelöst, wenn eine Ausnahme oder ein Fehler aufgetreten ist, die Java Virtual Machine jedoch die tatsächliche Ausnahme oder den tatsächlichen Fehler nicht melden kann. Der unbekannte Fehler tritt selten auf. Tatsächlich wurden bei der Suche nach ‚UnknownError‘ in der Oracle Java Bug-Datenbank nur 2 Fehler gemeldet.

SIEHE AUCH: Remote-Debugging für Java-Anwendungen

Eigenschaften

VirtualMachineError hat einige Hauptmerkmale:

  • Ungeprüfte Ausnahmen
  • Synchron & asynchrone Zustellung

Lassen Sie uns diese beiden Merkmale in diesem Abschnitt besprechen.

Ungeprüfte Ausnahmen

Es gibt zwei Arten von Ausnahmen: aktiviert und deaktiviert.

Ausnahmen, die zur Kompilierungszeit geprüft werden, werden als geprüfte Ausnahme bezeichnet. Wenn einige Methoden in Ihrem Code eine geprüfte Ausnahme auslösen, muss die Methode entweder die Ausnahme behandeln oder die Ausnahme mit dem Schlüsselwort ‚throws‘ angeben. Beispiele für die überprüften Ausnahmen sind: IOException, SQLException, DataAccessException, ClassNotFoundException und mehr.

Ungeprüfte Ausnahmen haben diese Anforderung nicht. Sie müssen nicht gefangen oder als geworfen deklariert werden. Alle Arten von VirtualMachineError sind ungeprüfte Ausnahmen.

Synchron & asynchrone Zustellung

Ausnahmen können in zwei Modi ausgelöst werden: synchron und asynchron.

Synchrone Ausnahmen treten bei einer bestimmten Programmanweisung auf, unabhängig davon, wie oft das Programm in einer ähnlichen Umgebung ausgeführt wurde. Beispiele für synchrone Ausnahmen sind Dinge wie NullPointerException, ArrayIndexOutOfBoundException usw.

Asynchrone Ausnahmen können zu jedem Zeitpunkt und in jedem Teil der Programmanweisung auftreten. Es gibt keine Konsistenz, wo es geworfen werden kann. Alle VirtualMachineErrors werden asynchron ausgelöst, manchmal können sie aber auch synchron ausgelöst werden. StackOverflowError kann sowohl synchron durch Methodenaufruf als auch asynchron aufgrund nativer Methodenausführung oder Ressourcenbeschränkungen für Java Virtual Machine ausgelöst werden. In ähnlicher Weise kann OutOfMemoryError synchron während der Objekterstellung, Array-Erstellung, Klasseninitialisierung und Boxing-Konvertierung sowie asynchron ausgelöst werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Previous post Afroamerikanische Beratung
Next post Sind Schizophrene gefährlich?