Hi Mike,

Have you considered the possibility to re-constitute the initial capacity from threshold and loadFactor?

Regards, Peter

On 03/27/2013 05:28 PM, Mike Duigou wrote:
I started looking at crafty reuse of size but found too many direct references 
to size to attempt getting this right in the current iteration. Reusing size is 
definitely still available to someone who wants to dive in and prepare an 
implementation.

Mike

On Mar 27 2013, at 09:17 , Martin Buchholz wrote:

But you can support any requested initial size if stored in the size field when 
list is empty.


On Wed, Mar 27, 2013 at 8:02 AM, Mike Duigou <mike.dui...@oracle.com> wrote:
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


Reply via email to