On Fri, 9 Jul 2021 11:50:38 GMT, Сергей Цыпанов
<[email protected]> 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 <[email protected]>
Committer: Claes Redestad <[email protected]>
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