This seems like a good idea. I will follow up with the performance people to see if their findings include the requested initial size.
Mike On Mar 26 2013, at 22:53 , Brian Goetz wrote: > 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 >