RFR 8005698 : Handle Frequent HashMap Collisions with Balanced Trees
Brent Christian
brent.christian at oracle.com
Mon Jun 3 23:34:17 UTC 2013
Hi, Paul
If a HashMap is created via serialization or clone(), we don't check if
the table needs resizing when adding entries, but still need to check if
a bin should be converted to a TreeBin. In this case, putForCreate()
calls createEntry() directly, instead of addEntry().
Thanks,
-Brent
On 6/3/13 12:56 AM, Paul Sandoz wrote:
> Hi Brent,
>
> A minor thing: take it or leave it :-)
>
> In HashMap:
>
> 2207 void addEntry(int hash, K key, V value, int bucketIndex, boolean checkIfNeedTree) {
> 2208 // assert key != null;
> 2209 if ((size >= threshold) && (null != table[bucketIndex])) {
> 2210 resize(2 * table.length);
> 2211 hash = hash(key);
> 2212 bucketIndex = indexFor(hash, table.length);
> 2213 }
> 2214 createEntry(hash, key, value, bucketIndex, checkIfNeedTree);
> 2215 }
>
> You could re-verify the bucket size if the table is resized rather
than in createEntry, since that AFAICT is the only case where conditions
after the call to addEntry might change.
>
> Pau.
>
More information about the core-libs-dev
mailing list