Verwenden Sie Java 7 nicht, egal für was
Java 7 GA wurde heute veröffentlicht, aber wie Uwe Schindler bemerkt hat, gibt es einige sehr beängstigende Fehler in den HotSpot Loop-Optimierungen, die standardmäßig aktiviert sind. Im besten Fall führen diese Fehler zu einem Absturz der JVM. Im schlimmsten Fall führen sie zu einer fehlerhaften Ausführung von Schleifen.
Unterm Strich: Verwenden Sie Java 7 nicht für irgendetwas (es sei denn, Sie wissen, dass Sie keine Schleifen in Ihrem Java-Code haben)
UPDATE 28. OKTOBER 2011: Wie in Uwes Blog erwähnt, enthält Java 7u1 nachweislich die Patches zur Behebung dieser Probleme.
Von: Uwe Schindler
Datum: Thu, 28 Jul 2011 23:13:36 +0200
Betreff: [WARNING] Indexbeschädigung und Abstürze in Apache Lucene Core / Apache Solr mit Java 7
Hallo Apache Lucene & Apache Solr Benutzer,
Hallo Benutzer anderer Java-basierter Apache-Projekte,
Oracle hat heute Java 7 veröffentlicht. Leider enthält es Hotspot-Compiler
Optimierungen, die einige Schleifen falsch kompilieren. Dies kann sich auf den Code mehrerer
Apache-Projekte auswirken. Manchmal stürzen JVMs nur ab, aber in mehreren Fällen können die berechneten Ergebnisse
falsch sein, was zu Fehlern in Anwendungen führt (siehe Hotspot
bugs 7070134 [1], 7044738 [2], 7068051 [3]).
Apache Lucene Core und Apache Solr sind zwei Apache-Projekte, die
von diesen Fehlern betroffen sind, und zwar alle bis heute veröffentlichten Versionen. Solr-Benutzer
mit der Standardkonfiguration werden Java mit SIGSEGV zum Absturz bringen, sobald sie
beginnen, Dokumente zu indizieren, da ein betroffener Teil der bekannte
Porter Stemmer ist (siehe LUCENE-3335 [4]). Auch andere Schleifen in Lucene
können falsch kompiliert sein, was zu einer Beschädigung des Index führt (insbesondere auf Lucene trunk
mit pulsierendem Codec; andere Schleifen können ebenfalls betroffen sein – LUCENE-3346 [5]).
Diese Probleme wurden nur 5 Tage vor der offiziellen Veröffentlichung von Java 7 entdeckt,
so dass Oracle keine Zeit hatte, diese Fehler zu beheben, von denen auch viele weitere
Anwendungen betroffen sind. Als Antwort auf unsere Fragen schlug Oracle vor, die
Fehlerbehebungen in das Service-Release u2 (eventuell auch in das Service-Release u1, siehe [6]) aufzunehmen.
Das bedeutet, dass Sie Apache Lucene/Solr nicht mit Java 7 Versionen vor
Update 2 verwenden können! Wenn Sie es doch tun, öffnen Sie bitte keine Fehlerberichte, es ist nicht die Schuld der
Committer! Deaktivieren Sie zumindest die Schleifenoptimierung mit der JVM-Option
-XX:-UseLoopPredicate, um keine Indexbeschädigungen zu riskieren.
Bitte beachten Sie: Auch Java 6-Benutzer sind betroffen, wenn sie eine der folgenden JVM
Optionen verwenden, die standardmäßig nicht aktiviert sind: -XX:+OptimizeStringConcat oder
-XX:+AggressiveOpts
Es wird dringend empfohlen, keine Hotspot-Optimierungsschalter in
irgendeiner Java-Version ohne ausführliche Tests zu verwenden!
Falls Sie auf Java 7 aktualisieren, denken Sie daran, dass Sie möglicherweise neu indizieren müssen, da sich die mit Java 7 ausgelieferte
unicode Version geändert hat und sich die Tokenisierung
anders verhält (z.B. Kleinschreibung). Weitere Informationen finden Sie unter
JRE_VERSION_MIGRATION.txt in Ihrem Distributionspaket!
Im Namen des Lucene-Projekts,
Uwe
[1] http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7070134
[2] http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7044738
[3] http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7068051
[4] https://issues.apache.org/jira/browse/LUCENE-3335
[5] https://issues.apache.org/jira/browse/LUCENE-3346
[6] http://s.apache.org/StQ