> `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 updated the pull request incrementally with one additional commit since the last revision: 8270160 Revert irrelevant changes ------------- Changes: - all: https://git.openjdk.java.net/jdk/pull/4738/files - new: https://git.openjdk.java.net/jdk/pull/4738/files/c8be3be4..529fdcd4 Webrevs: - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=4738&range=04 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=4738&range=03-04 Stats: 2 lines in 2 files changed: 0 ins; 0 del; 2 mod Patch: https://git.openjdk.java.net/jdk/pull/4738.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/4738/head:pull/4738 PR: https://git.openjdk.java.net/jdk/pull/4738