null windows - Mögliche Ursachen für Java VM EXCEPTION_ACCESS_VIOLATION?




10 fehlercode (6)

Meistens ist das ein Fehler in der VM. Aber es kann durch jeden nativen Code (zB JNI-Aufrufe) verursacht werden.

Die Datei hs_err_pidXXX.log sollte einige Informationen darüber enthalten, wo das Problem aufgetreten ist.

Sie können auch den Abschnitt "Heap" in der Datei überprüfen. Viele der VM-Fehler werden durch die Speicherbereinigung verursacht (besonders in älteren VMs). Dieser Abschnitt sollte Ihnen anzeigen, ob der Müll zum Zeitpunkt des Absturzes ausgeführt wurde. Auch dieser Abschnitt zeigt, wenn einige Teile des Heaps gefüllt sind (die Prozentzahlen).

Die VM ist auch viel wahrscheinlicher in einer Situation mit wenig Speicher als sonst.

Wenn eine Java-VM mit einer EXCEPTION_ACCESS_VIOLATION abstürzt und eine hs_err_pidXXX.log-Datei erzeugt, was bedeutet das? Der Fehler selbst ist im Grunde eine Nullzeiger-Ausnahme. Wird es immer durch einen Fehler in der JVM verursacht, oder gibt es andere Ursachen wie fehlerhafte Hardware- oder Softwarekonflikte?

Edit: Es gibt eine native Komponente, dies ist eine SWT-Anwendung auf Win32.


Verwenden Sie ein Browser-Widget und führen Sie JavaScript im Browser-Widget aus? Wenn dies der Fall ist, gibt es in einigen Versionen von SWT Fehler, die dazu führen, dass die JVM in nativem Code in verschiedenen Windows-Bibliotheken abstürzt.

Zwei Beispiele (die ich geöffnet habe) sind Bug 217306 und Bug 127960 . Diese beiden Fehlerberichte sind jedoch nicht die einzigen Fehlerberichte der JVM, die in SWT abstürzen.

Wenn Sie das Browser-Widget nicht verwenden, helfen Ihnen diese Vorschläge nicht weiter. In diesem Fall können Sie nach einer Liste von SWT-Fehlern suchen, die einen JVM-Absturz verursachen . Wenn keine dieser Probleme auftreten, empfehle ich dringend, dass Sie einen Fehlerbericht mit SWT öffnen.


Als erstes sollten Sie Ihre JVM auf den neuesten Stand bringen.

Können Sie das Problem wiederholen? Oder scheint es zufällig zu passieren? Wir hatten kürzlich ein Problem, bei dem unsere JVM zu zufälligen Zeiten überall hin zusammenbrach. Es stellte sich heraus, dass es ein Hardwareproblem war. Wir haben die Laufwerke in einen neuen Server gesteckt und es ist komplett verschwunden.

Unterm Strich sollte die JVM niemals abstürzen, wie oben auf dem Poster erwähnt, wenn Sie keine JNI machen, dann ist mein Bauchgefühl, dass Sie ein Hardwareproblem haben.


Antwort gefunden!

Ich hatte den gleichen Fehler und bemerkte, dass andere, die den Inhalt der PID-Protokolldatei zur Verfügung stellten, 64-Bit-Windows verwendeten. Genau wie ich. In der Endprotokolldatei enthielt es die PATH-Anweisung. Dort konnte ich sehen, C: \ Windows \ SysWOW64 wurde falsch vor:% SystemRoot% \ system32 aufgeführt. Sobald ich es korrigiert habe, ist die Ausnahme verschwunden.


Ich habe das gleiche Problem mit einer JNLP-Anwendung, die ich seit langem verwende und ziemlich zuverlässig ist. Das Problem begann unmittelbar nach dem Upgrade von Windows 7 auf Windows 10. Nach meiner Untersuchung handelt es sich höchstwahrscheinlich um einen Fehler in Win 10.

Das Folgende ist keine Lösung, sondern ein hässlicher Workaround. Im Verzeichnis jre / bin befindet sich javaws.exe . Wenn ich mit der rechten Maustaste auf / Eigenschaften / Kompatibilität klickte und dieses Programm als Administrator ausführte, begann die JNLP-App zu arbeiten.

Bitte beachten Sie, dass dieser Ansatz zu Sicherheitsproblemen führen kann und nur verwendet werden kann, wenn Sie keine andere Option haben und 100% wissen, was Sie tun.


Ich verwende diese Art von Prozess gerne, um Befehle als Strings in Aufzählungen zu parsen. Normalerweise habe ich eine der Aufzählungen als "unbekannt", so dass es hilfreich ist, wenn die anderen nicht gefunden werden (selbst wenn die Groß- und Kleinschreibung nicht beachtet wird) und nicht null (dh es gibt keinen Wert). Daher benutze ich diesen Ansatz.

static <E extends Enum<E>> Enum getEnumValue(String what, Class<E> enumClass) {
    Enum<E> unknown=null;
    for (Enum<E> enumVal: enumClass.getEnumConstants()) {  
        if (what.compareToIgnoreCase(enumVal.name()) == 0) {
            return enumVal;
        }
        if (enumVal.name().compareToIgnoreCase("unknown") == 0) {
            unknown=enumVal;
        }
    }  
    return unknown;
}






java null jvm crash swt