RFR: 8302818: Optimize wrapper sets and immutable sets of Enums [v5]

Chen Liang liach at openjdk.org
Tue Mar 21 22:57:44 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

Also, in JEP 441, there is pattern matching support for different enums implementing one interface in one switch, see the enum constants section there. I wonder how useful this is, and how often do we have interfaces with more than one enum implementations (e.g. StandardOptions/ExtendedOptions)

src/java.base/share/classes/java/util/ImmutableCollections.java line 1110:

> 1108:         static final JavaLangAccess JLA = SharedSecrets.getJavaLangAccess();
> 1109: 
> 1110:         @Stable

Useless

src/java.base/share/classes/java/util/ImmutableCollections.java line 1174:

> 1172:     static final class ImmutableRegularEnumSet<E extends Enum<E>> extends AbstractImmutableEnumSet<E>
> 1173:             implements RegularEnumSetCompatible<E>, Serializable {
> 1174:         @Stable

Useless

src/java.base/share/classes/java/util/ImmutableCollections.java line 1267:

> 1265:         final long[] elements;
> 1266: 
> 1267:         @Stable

Useless

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

PR Review: https://git.openjdk.org/jdk/pull/12498#pullrequestreview-1351490416
PR Review Comment: https://git.openjdk.org/jdk/pull/12498#discussion_r1144062917
PR Review Comment: https://git.openjdk.org/jdk/pull/12498#discussion_r1144064197
PR Review Comment: https://git.openjdk.org/jdk/pull/12498#discussion_r1144062709


More information about the core-libs-dev mailing list