RFR: 8302818: Optimize wrapper sets and immutable sets of Enums [v7]
ExE Boss
duke at openjdk.org
Wed Mar 22 14:40:05 UTC 2023
On Wed, 22 Mar 2023 01:22:37 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:
>
> Fix a whitespace error
The `Immutable*ESIterator.lastReturned*` fields can be made into locals of `Immutable*ESIterator::next()`, as the only reason those fields exist in `RegularEnumSet.EnumSetIterator` and `JumboEnumSet.EnumSetIterator` is to support `Iterator::remove()`, which is not a valid operation on immutable enum sets:
src/java.base/share/classes/java/util/ImmutableCollections.java line 1199:
> 1197: private final class ImmutableRESIterator implements Iterator<E> {
> 1198: long unseen = elements;
> 1199: long lastReturned = 0;
Suggestion:
src/java.base/share/classes/java/util/ImmutableCollections.java line 1212:
> 1210: if (unseen == 0)
> 1211: throw new NoSuchElementException();
> 1212: lastReturned = unseen & -unseen;
Suggestion:
long lastReturned = unseen & -unseen;
src/java.base/share/classes/java/util/ImmutableCollections.java line 1299:
> 1297: int unseenIndex = 0;
> 1298: long lastReturned = 0;
> 1299: int lastReturnedIndex = 0;
Suggestion:
src/java.base/share/classes/java/util/ImmutableCollections.java line 1315:
> 1313: throw new NoSuchElementException();
> 1314: lastReturned = unseen & -unseen;
> 1315: lastReturnedIndex = unseenIndex;
Suggestion:
long lastReturned = unseen & -unseen;
int lastReturnedIndex = unseenIndex;
-------------
PR Review: https://git.openjdk.org/jdk/pull/12498#pullrequestreview-1352706671
PR Review Comment: https://git.openjdk.org/jdk/pull/12498#discussion_r1144897096
PR Review Comment: https://git.openjdk.org/jdk/pull/12498#discussion_r1144897486
PR Review Comment: https://git.openjdk.org/jdk/pull/12498#discussion_r1144907088
PR Review Comment: https://git.openjdk.org/jdk/pull/12498#discussion_r1144909930
More information about the core-libs-dev
mailing list