What percentage of the empty lists are default-sized?  I suspect it is large, 
in which case we could apply this trick only for the default-sized lists, and 
eliminate the extra field.  

On Mar 26, 2013, at 5:25 PM, Mike Duigou wrote:

> Hello all;
> 
> This is a review for optimization work that came out of internal analysis of 
> Oracle's Java applications. It's based upon analysis that shows that in large 
> applications as much as 10% of maps and lists are initialized but never 
> receive any entries. A smaller number spend a large proportion of their 
> lifetime empty. We've found similar results across other workloads as well. 
> This patch is not a substitute for pre-sizing your collections and 
> maps--doing so will *always* have better results.
> 
> This patch extends HashMap and ArrayList to provide special handling for 
> newly created instances that avoids creating the backing array until needed. 
> There is a very small additional cost for detecting when to inflate the map 
> or list that is measurable in interpreted tests but disappears in JITed code. 
> 
> http://cr.openjdk.java.net/~mduigou/JDK-7143928/0/webrev/
> 
> We expect that should this code prove successful in Java 8 it will be 
> backported to Java 7 updates.
> 
> The unit test may appear to be somewhat unrelated. It was created after 
> resolving a bug in an early version of this patch to detect the issue 
> encountered (LinkedHashMap.init() was not being called in readObject() when 
> the map was empty).
> 
> Mike

Reply via email to