Java Bugs in various JVMs affecting Lucene / Solr

Sometimes Lucene runs amok of bugs in JVM implementations from different vendors. In certain cases we whittle it down to a small test case, open an issue with the vendor, and hopefully it gets fixed. In other cases we know the bug is in the JVM but we haven't narrowed it enough to open a bug with the vendor. Sometimes we can work out a simple workaround in Lucene.

We try to open a Lucene mirror bug to provide details on how Lucene is affected, iterate on a compact test case, etc.

Oracle / Sun / OpenJDK Java Bugs

If you are affected by one of these issues that Oracle's Java has yet to accept or resolve, or simply have some spare votes, please consider adding your vote to the bug (on Oracle's bug page):

Oracle bug

Lucene mirror issue

Impact to Lucene

State, Priority




NIOFSDirectory has very poor performance on Windows

Accepted, Low

Use FSDirectory or MMapDirectory on Windows



You hit a false OutOfMemoryException when loading norms in an index with many docs

Accepted, Low

Locally patch Lucene to load large contiguous byte sequences in chunks



Index corruption

Fixed as of 1.6.0_10, High

Lucene code base has a workaround in it



MMapDirectory won't close files until GC (higher transient disk usage than other FSDir); MMapDirectory returns 0 bytes when used for read/write access in remote (SMB/CIFS) mount

Cause Known, Low

Use a different Directory implementation

(No Oracle bug yet)


SEGV during indexing, with Java 1.6 64 bit

(No compact test case yet)

None known

(No Oracle bug yet)

Discussed here and here

On 64 bit JREs, reading from files may hang (??)

(Still characterizing)

None known



No impact as of 3.1/4.0 -- we now avoid calling new String(int[], int, int)

Fix Delivered, Bug



Fix Delivered, High

xml-query-parser's XSLT transforms fail under some locales

Upgrade to Java 6, use a different JRE vendor, plug in an alternate, more up-to-date XSL engine like Apache XALAN, or set system property telling TransformerFactory to use the non byte-code generating bundled XSL engine in Java 5



readVInt() returns wrong results

not sure

Lucene code base has a workaround in it



readVInt() returns wrong results

8-Fix Available, Medium

use Java 6 or Java 7u1



Porter Stemmer crashes JRE

8-Fix Available, Low

-XX:-UseLoopPredicate or Java 7u1



BreakIterators (e.g. in analyzers) crash on certain inputs

Accepted, Low

Lucene code base has a workaround in it



Concurrent Classes suffer from a race in LockSupport park() arising from weak memory models

Fixed, High

Use -XX:+UseMembar if you are running on a JVM < 1.6u18 see this writeup for details

Oracle JRockit Java Bugs

Oracle JRockit is no longer available for Java 7+, but it is still used in legacy environments (e.g. Oracle/BEA WebLogic application server). Oracle seems to no longer accept bugs / only accepts bugs from customers with a paid support contract, so there is no chance for the Lucene Contributors to report bugs upstream.

As stated by Oracle, it is recommended to upgrade to Oracle Java 7 or OpenJDK 7 (both update 1 or later). JRockit key features were merged into OpenJDK / Oracle Java.

Lucene issue

Impact to Lucene



(No issue yet)

A sign flip occurs when writing offsets (Lucene 4, may also affect Lucene 3)

Serious (index corruption)

Use -XnoOpt JVM parameter

IBM J9 Java Bugs