3 Stimmen

Java-Absturz außerhalb der JVM - funktioniert unter Windows, nicht unter Linux

Ich verwende OpenNLP und mein englischer NameFinder auf Linux (CentOS 5.3,Java 1.6.0_13) gibt mir immer wieder diesen Fehler:

An unexpected error has been detected by Java Runtime Environment:

SIGSEGV (0xb) at pc=0x0657e436, pid=3484, tid=2291964816

Java VM: Java HotSpot(TM) Server VM (11.3-b02 mixed mode linux-x86)
Problematic frame:
V  [libjvm.so+0x57e436]

An error report file with more information is saved as:
/home/continuum/workspace/entity-extraction-data-service/hs_err_pid3484.log

If you would like to submit a bug report, please visit:
  http://java.sun.com/webapps/bugreport/crash.jsp
The crash happened outside the Java Virtual Machine in native code.
See problematic frame for where to report the bug.

Unter Windows funktioniert es jedoch problemlos. Ich denke, dass vielleicht ein Problem mit der Zeichenkodierung mein Problem sein könnte, aber ich würde gerne sehen, ob jemand anderes irgendwelche Gedanken zu diesem Thema hat oder schon einmal damit konfrontiert wurde. Danke!


Aktualisierung: Andere Java-Anwendungen laufen problemlos.

0voto

Michael Punkte 8416

Ein bisschen Nekromantie hier, aber ich habe genau den gleichen Fehler erhalten. Dieselbe JVM-Version, dieselbe Codezeile, die er zu kompilieren versuchte (verrückter "Zufall", was?). Andere Distribution, aber immer noch Linux.

Es scheint sich um einen Fehler im HotSpot-Compiler zu handeln, der in Version 1.6.0_17 enthalten ist.

Die gute Nachricht ist, dass Update 18 das Problem angeblich behebt (es ist noch nicht verfügbar):

http://java.sun.com/javase/6/webnotes/6u18.html

Der dokumentierte Fehler ist für "SIGSEGV während der Kompilierung einer Methode, die eine Schleife über CharSequence beinhaltet":

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6855164

Lustigerweise ist es genau das, was diese Methode von OpenNLP tut, nämlich Ausschneiden und Einfügen:

private static final int previousSpaceIndex(CharSequence sb, int seek) {
  seek--;
  while (seek > 0) {
    if (sb.charAt(seek) == ' ') {
      while (seek > 0 && sb.charAt(seek - 1) == ' ')
        seek--;
      return seek;
    }
    seek--;
  }
  return 0;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X