Integrated: 8270160: Remove redundant bounds check from AbstractStringBuilder.charAt()

Сергей Цыпанов github.com+10835776+stsypanov at openjdk.java.net
Mon Aug 2 12:51:39 UTC 2021


On Fri, 9 Jul 2021 11:50:38 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

This pull request has now been integrated.

Changeset: 2536e434
Author:    Sergey Tsypanov <sergei.tsypanov at yandex.ru>
Committer: Claes Redestad <redestad at openjdk.org>
URL:       https://git.openjdk.java.net/jdk/commit/2536e4342e6c33c16685c9983b09f83a9c7ea869
Stats:     4 lines in 2 files changed: 0 ins; 3 del; 1 mod

8270160: Remove redundant bounds check from AbstractStringBuilder.charAt()

Reviewed-by: redestad

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

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


More information about the core-libs-dev mailing list