On Fri, 2 Feb 2024 13:54:46 GMT, Claes Redestad <redes...@openjdk.org> wrote:

> This patch streamlines and specializes various `String::indexOf` methods. 
> Mainly avoids the need for clamping and doing checks that are redundant in 
> almost all cases, moving the checks to the API boundary where they are 
> needed. 
> 
> This improves performance both at peak and during startup/warmup. Since 
> indexOf is heavily used in bootstrapping code it makes sense to slightly dial 
> back abstraction and delegation, which in this case also brought some benefit 
> to peak performance.
> 
> Testing: tier1-3

src/java.base/share/classes/java/lang/String.java line 2506:

> 2504:         fromIndex = Math.max(0, fromIndex);
> 2505:         return isLatin1() ? StringLatin1.indexOf(value, ch, fromIndex, 
> value.length)
> 2506:                 : StringUTF16.indexOf(value, ch, fromIndex, 
> value.length >> 1);

This needs to include the check for `fromIndex >= this.length()`:
Suggestion:

        fromIndex = Math.max(0, fromIndex);
        int toIndex = length();
        if (fromIndex >= toIndex) {
            return -1;
        }
        return isLatin1()
                ? StringLatin1.indexOf(value, ch, fromIndex, toIndex)
                : StringUTF16.indexOf(value, ch, fromIndex, toIndex);

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/17685#discussion_r1476268336

Reply via email to