On Fri, 27 Jun 2025 07:22:48 GMT, Tobias Hartmann <[email protected]> wrote:
>> src/java.base/share/classes/java/lang/StringCoding.java line 93:
>>
>>> 91: public static int countPositives(byte[] ba, int off, int len) {
>>> 92: Objects.requireNonNull(ba, "ba");
>>> 93: Objects.checkFromIndexSize(off, len, ba.length);
>>
>> I recall core libraries intentionally avoided this because of performance
>> problems. Is it possible for us to say trust the `len` argument to be
>> non-negative? That allows us to simplify this to `Objects.checkIndex(off,
>> ba.length - len)`. See this usage in perf-sensitive FFM API:
>> https://github.com/openjdk/jdk/blob/149882416a956dec728a964c150b826dd589908f/src/java.base/share/classes/jdk/internal/foreign/AbstractMemorySegmentImpl.java#L401
>
> But the original code already checks for `len >= 0`, right? See
> `LibraryCallKit::inline_countPositives` -> `generate_string_range_check` ->
> `// Offset and count must not be negative`
>
> This PR is about moving the range checks from the intrinsics into the Java
> wrappers. Removing range checks is out of the scope and should be carefully
> evaluated on a case-by-case basis separately.
My point is this is a performance-sensitive API. We are using a known-slow
check method `checkFromIndexSize` which may introduce a performance regression.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/25998#discussion_r2172044145