Live data from Hacker News

Don't use Java 7 for anything, unless you have no loops in your program

lucidimagination.com

11–20 of 29 posts

Re: Don't use Java 7 for anything, unless you have no loops in your program

#11
Text of Uwe's message for anyone who was as annoyed by that text box as I was:

From: Uwe Schindler Date: Thu, 28 Jul 2011 23:13:36 +0200 Subject: [WARNING] Index corruption and crashes in Apache Lucene Core / Apache Solr with Java 7

Hello Apache Lucene & Apache Solr users, Hello users of other Java-based Apache projects,

Oracle released Java 7 today. Unfortunately it contains hotspot compiler optimizations, which miscompile some loops. This can affect code of several Apache projects. Sometimes JVMs only crash, but in several cases, results calculated can be incorrect, leading to bugs in applications (see Hotspot bugs 7070134 [1], 7044738 [2], 7068051 [3]).

Apache Lucene Core and Apache Solr are two Apache projects, which are affected by these bugs, namely all versions released until today. Solr users with the default configuration will have Java crashing with SIGSEGV as soon as they start to index documents, as one affected part is the well-known Porter stemmer (see LUCENE-3335 [4]). Other loops in Lucene may be miscompiled, too, leading to index corruption (especially on Lucene trunk with pulsing codec; other loops may be affected, too - LUCENE-3346 [5]).

These problems were detected only 5 days before the official Java 7 release, so Oracle had no time to fix those bugs, affecting also many more applications. In response to our questions, they proposed to include the fixes into service release u2 (eventually into service release u1, see [6]). This means you cannot use Apache Lucene/Solr with Java 7 releases before Update 2! If you do, please don't open bug reports, it is not the committers' fault! At least disable loop optimizations using the -XX:-UseLoopPredicate JVM option to not risk index corruptions.

Please note: Also Java 6 users are affected, if they use one of those JVM options, which are not enabled by default: -XX:+OptimizeStringConcat or -XX:+AggressiveOpts

It is strongly recommended not to use any hotspot optimization switches in any Java version without extensive testing!

In case you upgrade to Java 7, remember that you may have to reindex, as the unicode version shipped with Java 7 changed and tokenization behaves differently (e.g. lowercasing). For more information, read JRE_VERSION_MIGRATION.txt in your distribution package!

On behalf of the Lucene project, 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

Re: Don't use Java 7 for anything, unless you have no loops in your program

#14
"These problems were detected only 5 days before the official Java 7 release, so Oracle had no time to fix those bugs" -- this is very, very broken. They had time to not release a version of Java with known wrong-code and crashing bugs affecting real code.

Re: Don't use Java 7 for anything, unless you have no loops in your program

#15
post #13

Great way to boost the confidence of the community in Oracle handling Java...

It'll be the way they handle this bug that will make/break my confidence. If they fix this quickly enough (even though they have this bug set to a low priority right now) then I won't mind too much.

Re: Don't use Java 7 for anything, unless you have no loops in your program

#16
post #14

"These problems were detected only 5 days before the official Java 7 release, so Oracle had no time to fix those bugs" -- this is very, very broken. They had time to not release a version of Java with known wrong-code and crashing bugs affecting real code .

Mitigation would just have required to make an optimizer option non-default, like in 6.

Re: Don't use Java 7 for anything, unless you have no loops in your program

#17
post #8
post #6

Good, loops are just gotos in disguise, and gotos are already banned in Java. This just makes the language more consistent.

Gah, I didn't remember that Java programmers have no sense of humor.

Jokes that many members could come up with have no place on Hacker News. That's the road to devolving into a community where everyone tries to out-joke each other and the actual insightful comments get buried under the jokes. Just grin at the thought and enjoy the happiness, but don't post it. It's not that it's not funny; it's just that it is too easy a comment.

Re: Don't use Java 7 for anything, unless you have no loops in your program

#18

Text of Uwe's message for anyone who was as annoyed by that text box as I was: From: Uwe Schindler Date: Thu, 28 Jul 2011 23:13:36 +0200 Subject: [WARNING] Index corruption and crashes in Apache Lucene Core / Apache Solr with Java 7 Hello Apache Lucene & Apache Solr users, Hello users of other Java-based Apache projects, Oracle released Java 7 today. Unfortunately it contains hotspot compiler optimizations, which mis…

Can anyone replicate the Stemmer bug (7070134 / first link)?

I just tried it with Arch Linux and it passes on x86, even when passed -XX:+OptimizeStringConcat and -XX:+AggressiveOpts explicitly.

Re: Don't use Java 7 for anything, unless you have no loops in your program

#20
post #14

"These problems were detected only 5 days before the official Java 7 release, so Oracle had no time to fix those bugs" -- this is very, very broken. They had time to not release a version of Java with known wrong-code and crashing bugs affecting real code .

For sure. Though, I was impressed that he got through every paragraph without even a hint of the snark that this deserves.
Post reply on HN