RFR: [6904367]: (coll) IdentityHashMap is resized before exceeding the expected maximum size
Ivan Gerasimov
ivan.gerasimov at oracle.com
Wed Jul 9 00:49:30 UTC 2014
On 09.07.2014 4:46, Martin Buchholz wrote:
> Let me understand - you're worried that when size is MAX_CAPACITY - 1,
> then a call to putAll that does not actually add any elements might
> throw? Well, I'm having a hard time considering that corner case a
> bug, given how unusable the map is at this point.
>
> Your suggested fix of returning immediately in case of no resize would
> cause put to succeed and reach size == MAX_CAPACITY, which you were
> trying to prevent.
>
Ah, yes.
It's almost 5 AM here, I guess I need to have some sleep before trying
to fix anything else :-)
>
> On Tue, Jul 8, 2014 at 5:25 PM, Ivan Gerasimov
> <ivan.gerasimov at oracle.com <mailto:ivan.gerasimov at oracle.com>> wrote:
>
>
> On 09.07.2014 3:20, Martin Buchholz wrote:
>> I agree with Peter that we do not need to increment modCount on
>> resize.
>>
>> My latest webrev is again "done".
>>
>> Ivan, feel free to take over.
>
> Yes, thanks! The fix is much much better now.
>
> I think I see yet another very minor glitch, though.
> If the table is already of size 2 * MAXIMUM_CAPACITY, and we're
> merging in another map, which has more elements with putAll(),
> resize() will be called and it will throw, even though all the
> elements could fit into the map due to the key duplicates.
>
> To avoid this the following check should be done first in resize():
>
> 469 if (oldLength >= newLength)
> 470 return false;
>
>
> Sincerely yours,
> Ivan
>
>
More information about the core-libs-dev
mailing list