RFR: 8302818: Optimize wrapper sets and immutable sets of Enums [v5]
Claes Redestad
redestad at openjdk.org
Tue Mar 21 15:26:22 UTC 2023
On Tue, 21 Feb 2023 03:39:46 GMT, Tingjun Yuan <duke at openjdk.org> wrote:
>> Currently, the two subclasses of `java.util.EnumSet` optimize bulk operations when the argument is also a `EnumSet`, but there is no such optimization for wrapper sets (returned by `Collections.unmodifiableSet`, `Collections.synchronizedSet`, etc.) and immutable sets (returned by `Set.of` methods) of `Enum`s.
>>
>> This PR introduces optimization classes for these situations. No public APIs are changed.
>
> Tingjun Yuan has updated the pull request incrementally with one additional commit since the last revision:
>
> Set.copyOf: need defensive copy
I'm wary of the impact of adding new wrapper classes. It may make the factory methods slightly slower due additional checks, but also risks increasing the number of classes at various call-sites which might upset call site inlining.
An alternative design which would avoid adding more classes could be to add package-private accessors to the existing `Unmodifiable/Synchronized` wrapper classes so that `EnumSet/-Map` can retrieve the underlying set of an unmodifiable or synchronized `Set` or `Map` and then use it directly for these bulk operations. Then you'd contain the additional overhead to `EnumSet/-Map`.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/12498#issuecomment-1478035549
More information about the core-libs-dev
mailing list