RFR: 8270160: Remove redundant bounds check from AbstractStringBuilder.charAt() [v3]

Claes Redestad redestad at openjdk.java.net
Mon Aug 2 10:56:34 UTC 2021


On Thu, 15 Jul 2021 11:56:31 GMT, Сергей Цыпанов <github.com+10835776+stsypanov at openjdk.org> wrote:

>> `AbstractStringBuilder.charAt(int)` does bounds check before calling `charAt()` (for non-latin Strings):
>> 
>> @Override
>> public char charAt(int index) {
>>     checkIndex(index, count);
>>     if (isLatin1()) {
>>         return (char)(value[index] & 0xff);
>>     }
>>     return StringUTF16.charAt(value, index);
>> }
>> 
>> This can be improved by removing bounds check from ASB.charAt() in favour of one in String*.charAt(). This gives slight improvement:
>> 
>> before
>> Benchmark                           Mode  Cnt  Score   Error  Units
>> StringBuilderCharAtBenchmark.latin  avgt   50  2,827 ± 0,024  ns/op
>> StringBuilderCharAtBenchmark.utf    avgt   50  2,985 ± 0,020  ns/op
>> 
>> after
>> Benchmark                           Mode  Cnt  Score   Error  Units
>> StringBuilderCharAtBenchmark.latin  avgt   50  2,434 ± 0,004  ns/op
>> StringBuilderCharAtBenchmark.utf    avgt   50  2,631 ± 0,004  ns/op
>
> Сергей Цыпанов has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR.

Changes requested by redestad (Reviewer).

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

PR: https://git.openjdk.java.net/jdk/pull/4738


More information about the core-libs-dev mailing list