On Wed, 20 Sep 2023 04:52:31 GMT, Chen Liang <li...@openjdk.org> wrote:
> Please review this patch that: > 1. Implemented `forEach` to optimize for 1 or 2 element collections. > 2. Implemented `spliterator` to optimize for a single element. > > The default implementations for multiple-element immutable collections are > fine as-is, specializing implementation doesn't provide much benefit. Benchmark results of Oracle JDK 21 vs the initial revision: https://jmh.morethan.io/?gists=c7a8398f291bedb2e1ad6d07c1d5cd97,8ef1c0826e0ae4e3e9a5e43df3dda230 It might be worth experimenting if manually unrolling the loop to be: `for (int i = startIndex(); i > 0; i--)` and `for (int i = n; i > startIndex; i--)` will be faster than the current index fetching. Baseline results: Benchmark Mode Cnt Score Error Units ImmutableColls.forEachOverList thrpt 15 351.497 ± 2.108 ops/us ImmutableColls.forEachOverSet thrpt 15 71.954 ± 3.732 ops/us ImmutableColls.getOrDefault thrpt 15 243.968 ± 0.823 ops/us ImmutableColls.iterateOverList thrpt 15 150.105 ± 3.371 ops/us ImmutableColls.iterateOverSet thrpt 15 62.071 ± 4.239 ops/us Current version 8036e9e: Benchmark Mode Cnt Score Error Units ImmutableColls.forEachOverList thrpt 15 364.515 ± 8.076 ops/us ImmutableColls.forEachOverSet thrpt 15 86.012 ± 2.420 ops/us ImmutableColls.getOrDefault thrpt 15 243.723 ± 1.071 ops/us ImmutableColls.iterateOverList thrpt 15 149.392 ± 5.328 ops/us ImmutableColls.iterateOverSet thrpt 15 63.579 ± 4.671 ops/us Improvements can be seen in the `forEachOver(Set|List)` benchmarks. ------------- PR Comment: https://git.openjdk.org/jdk/pull/15834#issuecomment-1727000156 PR Comment: https://git.openjdk.org/jdk/pull/15834#issuecomment-1811960742 PR Comment: https://git.openjdk.org/jdk/pull/15834#issuecomment-1989671088