@defaultMessage spawns threads with vague names; use a custom thread factory and name threads so that you can tell (by its name) which executor it is associated with java.util.concurrent.Executors#newFixedThreadPool(int) java.util.concurrent.Executors#newSingleThreadExecutor() java.util.concurrent.Executors#newCachedThreadPool() java.util.concurrent.Executors#newSingleThreadScheduledExecutor() java.util.concurrent.Executors#newScheduledThreadPool(int) java.util.concurrent.Executors#defaultThreadFactory() java.util.concurrent.Executors#privilegedThreadFactory() java.lang.Character#codePointBefore(char[],int) @ Implicit start offset is error-prone when the char[] is a buffer and the first chars are random chars java.lang.Character#codePointAt(char[],int) @ Implicit end offset is error-prone when the char[] is a buffer and the last chars are random chars @defaultMessage Collections.sort dumps data into an array, sorts the array and reinserts data into the list, one should rather use Lucene's CollectionUtil sort methods which sort in place java.util.Collections#sort(java.util.List) java.util.Collections#sort(java.util.List,java.util.Comparator) java.io.StringReader#(java.lang.String) @ Use FastStringReader instead org.apache.lucene.util.RamUsageEstimator#sizeOf(java.lang.Object) @ This can be a perfromance trap @defaultMessage Reference management is tricky, leave it to SearcherManager org.apache.lucene.index.IndexReader#decRef() org.apache.lucene.index.IndexReader#incRef() org.apache.lucene.index.IndexReader#tryIncRef() org.apache.lucene.index.IndexWriter#maybeMerge() @ use Merges#maybeMerge org.apache.lucene.index.IndexWriter#forceMerge(int) @ use Merges#forceMerge org.apache.lucene.index.IndexWriter#forceMerge(int,boolean) @ use Merges#forceMerge org.apache.lucene.index.IndexWriter#forceMergeDeletes() @ use Merges#forceMergeDeletes org.apache.lucene.index.IndexWriter#forceMergeDeletes(boolean) @ use Merges#forceMergeDeletes @defaultMessage QueryWrapperFilter is cachable by default - use Queries#wrap instead org.apache.lucene.search.QueryWrapperFilter#(org.apache.lucene.search.Query) @defaultMessage Only use wait / notify when really needed try to use concurrency primitives, latches or callbacks instead. java.lang.Object#wait() java.lang.Object#wait(long) java.lang.Object#wait(long,int) java.lang.Object#notify() java.lang.Object#notifyAll() @defaultMessage Beware of the behavior of this method on MIN_VALUE java.lang.Math#abs(int) java.lang.Math#abs(long) @defaultMessage Use Long.compare instead we are on Java7 com.google.common.primitives.Longs#compare(long,long)