RFR: [6904367]: (coll) IdentityHashMap is resized before exceeding the expected maximum size

Martin Buchholz martinrb at google.com
Wed Jul 9 00:46:23 UTC 2014


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.


On Tue, Jul 8, 2014 at 5:25 PM, Ivan Gerasimov <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