On 03/27/2013 06:53 AM, 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.
yes, very good idea indeed.
Rémi
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