RFR: 8324573: HashMap::putAll should resize to sum of both map sizes [v3]

jmehrens duke at openjdk.org
Fri Feb 2 04:54:02 UTC 2024


On Sat, 27 Jan 2024 21:58:05 GMT, Joshua Cao <duke at openjdk.org> wrote:

>> src/java.base/share/classes/java/util/HashMap.java line 503:
>> 
>>> 501:      */
>>> 502:     final void putMapEntries(Map<? extends K, ? extends V> m, boolean evict) {
>>> 503:         int s = Math.max(size() + m.size(), m.size());
>> 
>> If we decide this approach is best, shouldn't we do the same for ConcurrentHashMap?
>
> Sure. Created https://bugs.openjdk.org/browse/JDK-8324798. Won't implement that until this gets merged.

Circling back to "the case where many keys exist in both maps".  What are your thoughts on some optimized variant/refactoring of:
`int s = Math.max(m.size() - this.size(), 1);`

This would make it so we aggressively presize when know a large map is being added to a small or empty map.  Obviously, if both maps are large and don't contain the same keys this doesn't help.

Also, are we sure it is wise to actually call m.size() when we don't know the runtime of the size operation on the given map?  The only thing we can reason about is runtime of this.size().

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/17544#discussion_r1475534839


More information about the core-libs-dev mailing list