On Sun, 16 Nov 2025 14:50:39 GMT, Igor Rudenko <[email protected]> wrote:
>> Logic for creating IndexOutOfBoundsException in MemorySegment is reworked: >> - separate logic of checking bounds and constructing exception messages for >> both `access` and `slice` cases >> - idea presented in >> [JDK-8288534](https://bugs.openjdk.org/browse/JDK-8288534) slightly reworked >> with preservation of the original approach > > Igor Rudenko has updated the pull request incrementally with one additional > commit since the last revision: > > Adjust to TestMergeStoresMemorySegment.java requirements src/java.base/share/classes/jdk/internal/foreign/AbstractMemorySegmentImpl.java line 535: > 533: } > 534: > 535: abstract String format(AbstractMemorySegmentImpl segment, long > offset, long size, long length); Even though this does look better, but abstract method in enum means extra classes, which become some extra burden for startup. If you can write this method to have a body like: String formatString = switch (this) { case SLICE -> ... case ACCESS -> ... }; return formatString.formatted(segment, size, offset, length); This would be less costly. src/java.base/share/classes/jdk/internal/foreign/AbstractMemorySegmentImpl.java line 540: > 538: private static final class BoundsCheckHandler implements > BiFunction<String, List<Number>, IndexOutOfBoundsException> { > 539: final AbstractMemorySegmentImpl segment; > 540: final BoundPolicy policy; I recommend turning this into a private record. In addition, we should add a comment that we anticipate this record instance creation to be eliminated by escape analysis when segment access is compiled. I wonder if you have run benchmarks to verify this. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/28124#discussion_r2532054398 PR Review Comment: https://git.openjdk.org/jdk/pull/28124#discussion_r2532055796
