# System Requirements 

Apache Lucene runs of Java 7 or greater, Java 8 is verified to be
compatible and may bring some performance improvements. When using
Oracle Java 7 or OpenJDK 7, be sure to not use the GA build 147 or
update versions u40, u45 and u51! We recommend using u55 or later.

It is also recommended to always use the latest update version of your
Java VM, because bugs may affect Lucene. An overview of known JVM bugs
can be found on http://wiki.apache.org/lucene-java/JavaBugs

With all Java versions it is strongly recommended to not use experimental
`-XX` JVM options.

CPU, disk and memory requirements are based on the many choices made in 
implementing Lucene (document size, number of documents, and number of 
hits retrieved to name a few). The benchmarks page has some information 
related to performance on particular platforms. 

*To build Apache Lucene from source, refer to the `BUILD.txt` file in 
the distribution directory.*
