Wie gravierend sind die Bugs in JDK7 wirklich?

Hartmut Schlosser

Nach der Warnung von Apache-Committern, das kürzlich veröffentlichte Java 7 könne Abstürze der Java Virtual Machine sowie Berechnungsfehler verursachen, hat Oracle die Priorität der entsprechenden Bugmeldung von „Niedrig“ auf „Hoch“ gesetzt. Eine Maßnahme, die von Community-Vertretern begrüßt wurde, die allerdings die Frage nicht aus der Welt räumt, ob die JDK7-Fehler nicht eigentlich so schwerwiegend sind, dass sie eine Verschiebung des Release-Termins gerechtfertigt hätten.

Sowohl Pro- als auch Contra-Positionen waren in der Community bereits zu hören. So vergleicht etwa Java-Experte Cay Horstmann von der San Jose State University den Bug in seinem Blog mit dem Problem des fehlerhaften Pentium-Chips aus dem Jahre 1994. Besonders schwerwiegend ist der JDK7-Fehler für Horstmann nicht deshalb, weil es durch die neuen Schleifen-Optimierungen des Compilers zu Abstürzen kommen kann. Crashes sind schließlich offensichtlich als Bug zu erkennen. Weitaus gefährlicher seien die Berechnungsfehler, die – anscheinend unter noch nicht ganz geklärten Umständen – gelegentlich auftreten können.

I try not to be a scaredy squirrel about these things, but I must say that „rarely happening“ bugs in a widely used platform bother me. Cay Horstmann

Beim Chip-Desaster von 1994 habe Intel von dem Fehler gewusst, aber entschieden, den Chip trotzdem auszuliefern. Hat Oracle nun dieselbe Entscheidung getroffen?

A rare crash is manageable, but silently getting the wrong result is not. I would have expected this to be a high priority bug. Don’t they have criteria for this that say „Hotspot produces wrong result ⇒ take it seriously“? As it is, it just looks bad. Oracle had promised to ship JDK 7 by the end of July. Was that considered more important than to fix a showstopper bug? Cay Horstmann

Apache Lucene PMC-Mitglied Uwe Schindler hatte mit seiner Warnung an die Apache-Mailinglisten die entdeckten Fehler am vergangenen Freitag in der Öffentlichkeit bekannt gemacht. Nun hat er in einem neuen Blogeintrag die Hintergründe genauer dargestellt.

Demnach seien die Fehler erstmals am 23. Juli beim Versuch aufgefallen, den seit Juni verfügbaren JDK 7 Release Candidate (Build 147) gegen die Apache Lucene/Solr-Projekte zu testen. In der Default-Einstellung der Hotspot-VM kam es dabei zu Abstürzen im Zusammenhang mit dem PorterStemmer-Algorithmus, der von Lucene für das Erstellen von Suchindexen genutzt wird (das sogennante Suffix Stripping: verschiedene morphologische Varianten eines Wortes werden auf ihren gemeinsamen Wortstamm zurückgeführt).

Der Bug wurde unter der Nummer 7070134 gemeldet, am darauffolgenden Montag dann von Oracle mit der Priorität „Niedrig“ akzeptiert. Am Veröffentlichungstermin des JDK 7, am 28. Juli, war der Bug nicht behoben. Schindler wundert sich in seinem Blog, dass seit der Verfügbarmachung des Release Candidates offensichtlich überhaupt keine gemeldeten Bugs mehr bearbeitet wurden.

So Oracle ignored all bugs (not only ours) in the preview release and simply released a one month old package! So what was the sense of the preview release? They could have released it one month before! It was for sure not intended for public review and bug hunting! Uwe Schindler

Doch wie steht es nun um die Schwere der JDK7-Fehler?

Lucene-Committer Robert Muir bemerkt in einer Antwort auf die Frage How serious is the Java7 „Solr/Lucene“ bug?, dass der Bug durchaus gravierender ausfalle, als bei früher aufgetretenen Fehlern bei der Schleifenoptimierung.

I’d say this bug is much sneakier than previous loop optimizer hotspot bugs we have hit (e.g. sign-flip stuff, https://issues.apache.org/jira/browse/LUCENE-2975). In that case we got wacky negative document deltas, which make it easy to catch. We also only had to manually unroll a single method to dodge it. On the other hand, the only „test“ we had initially for that was a huge 10GB index of http://www.pangaea.de/, so it was painful to narrow it down to this bug. Robert Muir

In this case, I spent a good amount of time (e.g. every night last week) trying to manually unroll/inline various things, trying to create some workaround so we could dodge the bug and not have the possibility of corrupt indexes being created. I could dodge some cases, but there were many more cases I couldn’t… and I’m sure if we can trigger this stuff in our tests there are more cases out there… Robert Muir

Sind deshalb Berichte gerechtfertigt, die vor einer generellen Verwendung des JDK7 warnen und mit Titeln wie „Don’t Use Java 7, For Anything“ daherkommen?

Software-Architekt Markus Eisele relativiert in seinem Blog: Zunächst einmal betreffen die beschriebenen Probleme nicht Java 7 als ganzes, sondern die Hotspot Java Virtual Machine. Warnungen für das gesamte JDK7 auszusprechen, ist für Eisele deshalb kaum angebracht – schon gar nicht, wenn die Community fast fünf Jahre auf ein neues JDK hat warten müssen.

Eisele geht die drei relevanten Bugmeldungen (7070134, 7044738, 7068051) Stück für Stück durch und kommt zu dem Schluss: Es ist zwar nicht auszuschließen, als JDK7-Anwender von den Bugs betroffen zu sein. Zurzeit aber nur, wenn die eigene Software über Teile verfügt, die von den Hotspot-Optimierungen Gebrauch machen – und das auch in Java 6, wenn die Optimierungs-Einstellungen -XX:+OptimizeStringConcat oder -XX:+AggressiveOpts, die bei Java 7 zu den Default-Einstellungen gehören, aktiviert sind.

Für „durchschnittliche Anwendungsfälle“ seien die Fehler indes unbedeutend.

But for the average use cases this will not affect you. Markus Eisele

Aufgrund der kurzen Zeit seit der Bugmeldung ständen noch keine Fixes zur Verfügung – damit könne man aber in einem der nächsten Service Releases rechnen.

Fazit

Wie soll man diesen Fall abschließend bewerten? Kann man das überhaupt, ohne die immer noch schwelende Apache-Oracle-Rivalität wieder aufflammen zu lassen (die Apache Software Foundation ist bekanntlich aufgrund von Lizenz-Streitigkeiten mit Oracle vom Java-SE-Exekutiv-Komitee zurückgetreten)?

Wir ziehen es an dieser Stelle vor, unserer Hoffnung Ausdruck zu verleihen, dass die JDK7-Fehler in Bälde behoben sein werden – und mit dieser Hoffnung schließt übrigens auch Uwe Schindler seinen Blogeintrag:

I went to sleep and on the following day, the original Oracle Bug report that caused this was upgraded to priority „HIGH“ – yeah. So we will hopefully get a corrected Java 7 release quite soon in Update Pack 1! Uwe Schindler

Geschrieben von
Hartmut Schlosser
Kommentare

Schreibe einen Kommentar

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