Could it be because of how the DirectDocValuesProducer populates the entire bytes array for each request? i.e. for each call of getNumericDocValues(), it reads all the bytes into an array first. The get() method itself seems to be a simple array lookup.
Link to the loadNumeric() of DirectDocValuesProducer: http://grepcode.com/file/repo1.maven.org/maven2/org.apache.lucene/lucene-codecs/4.9.1/org/apache/lucene/codecs/memory/DirectDocValuesProducer.java#DirectDocValuesProducer.loadNumeric%28org.apache.lucene.codecs.memory.DirectDocValuesProducer.NumericEntry%29 -- View this message in context: http://lucene.472066.n3.nabble.com/In-memory-docValues-speedup-tp4283783p4283827.html Sent from the Solr - User mailing list archive at Nabble.com.