Hi Jean-Claude,

> We have a NetBeans RCP application using Lucene 4.7 for indexing and
> searching.
> 
> When indexing, the following message is displayed:
> 
> Dangerous reflection access to sun.misc.Cleaner by class
> org.apache.lucene.store.MMapDirectory$MMapIndexInput$1 detected!

This message is not created by Apache Lucene, it must be some 
instrumentation/safety library in your classpath. Lucene's fast disk i/o layer 
uses memory mapping and needs to call sun.misc.Cleaner to unmap memory mapped 
byte buffers "in time" when index files are closed. This is implemented in a 
safe way in Lucene, so there is no real risk in it (unless you get unlucky and 
access an already closed IndexReader from many threads - in most cases this is 
detected, but may cause a SIGSEGV of the JVM). If the client code is 
implemented in a correct way, this is no problem at all (otherwise servers like 
Apache Solr or Elasticsearch would not use it :-)

In conclusion: The warning is correct - its risky, but only if you don't know 
what you do - but Lucene knows :-) So you can safely ignore the warning - or 
better: disable this safety instrumentation kit - it may kill performance.

If this is a client application (RCP = Rich Client?), the use of MMAP may not 
be wanted at all. By default, Lucene chooses the "optimal" disk IO 
implementation for the platform (and this is mmap on 64 bits), if you use 
FSDirectory.open(...) to open index files (this is a static factory method). If 
you don't want to use MMap, use new NIOFSDirectory or new SimpleFSDirectory 
instead by directly instantiating, so automatism is not used. MMap is intended 
to be used for huge indexes on server-side machines, that have high concurrency 
and need to access the index in a very fast way. For client applications, this 
is in most cases not needed.

If you want to use MMapDirectory as implementation, you can disable it's use of 
sun.misc.Cleaner by calling MMapDirectory.setUseUnmap(false) [this is also only 
possible if you instantiate directly, not through static factory). But this 
will cause it to sit on file buffers for possibly very long time and this may 
be a problem on windows (where files cannot be deleted while memory mapped) or 
can block disk space. The reason is delayed byte buffer deallocation by the 
garbage collector.

For more information about MMapDirectory, read the javadocs and this blog post: 
http://blog.thetaphi.de/2012/07/use-lucenes-mmapdirectory-on-64bit.html

> It does not stop indexing but it is quite annoying. Any idea on how to get rid
> of this message or should we ignore it ??

See above!

Uwe


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-user-h...@lucene.apache.org

Reply via email to