On Thu, 30 May 2024 12:50:36 GMT, Claes Redestad <redes...@openjdk.org> wrote:
> Extracting duplicate method references to static field reduce proxy class > spinning and loading. In this case 2 less classes loaded when using > `findAny()` on each type of stream. The intermediate `Predicate`s and `Supplier`s don’t need to be fields, and it’s probably better for them to be locals: src/java.base/share/classes/java/util/stream/FindOps.java line 204: > 202: > 203: static final FindOp<?, ?> OP_FIND_ANY = new FindOp<>(false, > 204: StreamShape.REFERENCE, Optional.empty(), IS_PRESENT, > NEW); Suggestion: static final TerminalOp<?, ?> OP_FIND_FIRST, OP_FIND_ANY; static { Predicate<Optional<Object>> isPresent = Optional::isPresent; Supplier<TerminalSink<Object, Optional<Object>>> newSink = FindSink.OfRef::new; OP_FIND_FIRST = new FindOp<>(true, StreamShape.REFERENCE, Optional.empty(), isPresent, newSink); OP_FIND_ANY = new FindOp<>(false, StreamShape.REFERENCE, Optional.empty(), isPresent, newSink); } src/java.base/share/classes/java/util/stream/FindOps.java line 227: > 225: StreamShape.INT_VALUE, OptionalInt.empty(), > IS_PRESENT, NEW); > 226: static final TerminalOp<Integer, OptionalInt> OP_FIND_ANY = > new FindOp<>(false, > 227: StreamShape.INT_VALUE, OptionalInt.empty(), > IS_PRESENT, NEW); Suggestion: static final TerminalOp<Integer, OptionalInt> OP_FIND_FIRST, OP_FIND_ANY; static { Predicate<OptionalInt> isPresent = OptionalInt::isPresent; Supplier<TerminalSink<Integer, OptionalInt> newSink = FindSink.OfInt::new; OP_FIND_FIRST = new FindOp<>(true, StreamShape.INT_VALUE, OptionalInt.empty(), isPresent, newSink); OP_FIND_ANY = new FindOp<>(false, StreamShape.INT_VALUE, OptionalInt.empty(), isPresent, newSink); } src/java.base/share/classes/java/util/stream/FindOps.java line 250: > 248: StreamShape.LONG_VALUE, OptionalLong.empty(), > IS_PRESENT, NEW); > 249: static final TerminalOp<Long, OptionalLong> OP_FIND_ANY = > new FindOp<>(false, > 250: StreamShape.LONG_VALUE, OptionalLong.empty(), > IS_PRESENT, NEW); Suggestion: static final TerminalOp<Long, OptionalLong> OP_FIND_FIRST, OP_FIND_ANY; static { Predicate<OptionalLong> isPresent = OptionalLong::isPresent; Supplier<TerminalSink<Long, OptionalLong> newSink = FindSink.OfLong::new; OP_FIND_FIRST = new FindOp<>(true, StreamShape.LONG_VALUE, OptionalLong.empty(), isPresent, newSink); OP_FIND_ANY = new FindOp<>(false, StreamShape.LONG_VALUE, OptionalLong.empty(), isPresent, newSink); } src/java.base/share/classes/java/util/stream/FindOps.java line 273: > 271: StreamShape.DOUBLE_VALUE, OptionalDouble.empty(), > IS_PRESENT, NEW); > 272: static final TerminalOp<Double, OptionalDouble> OP_FIND_ANY > = new FindOp<>(false, > 273: StreamShape.DOUBLE_VALUE, OptionalDouble.empty(), > IS_PRESENT, NEW); Suggestion: static final TerminalOp<Double, OptionalDouble> OP_FIND_FIRST, OP_FIND_ANY; static { Predicate<OptionalDouble> isPresent = OptionalDouble::isPresent; Supplier<TerminalSink<Double, OptionalLong> newSink = FindSink.OfDouble::new; OP_FIND_FIRST = new FindOp<>(true, StreamShape.DOUBLE_VALUE, OptionalDouble.empty(), isPresent, newSink); OP_FIND_ANY = new FindOp<>(false, StreamShape.DOUBLE_VALUE, OptionalDouble.empty(), isPresent, newSink); } ------------- PR Review: https://git.openjdk.org/jdk/pull/19477#pullrequestreview-2101252355 PR Review Comment: https://git.openjdk.org/jdk/pull/19477#discussion_r1629032905 PR Review Comment: https://git.openjdk.org/jdk/pull/19477#discussion_r1629035242 PR Review Comment: https://git.openjdk.org/jdk/pull/19477#discussion_r1629040800 PR Review Comment: https://git.openjdk.org/jdk/pull/19477#discussion_r1629043309