We can skip bounds check and null check for Charset in case we use the array 
entirely and the Charset is either default one or proven to be non-null.

Benchmark results:

before

Benchmark                                                  Mode  Cnt  Score   
Error  Units
StringConstructor.newStringFromArray                       avgt   50  4,815 ± 
0,154  ns/op
StringConstructor.newStringFromArrayWithCharset            avgt   50  4,462 ± 
0,068  ns/op
StringConstructor.newStringFromArrayWithCharsetName        avgt   50  8,653 ± 
0,040  ns/op
StringConstructor.newStringFromRangedArray                 avgt   50  5,090 ± 
0,066  ns/op
StringConstructor.newStringFromRangedArrayWithCharset      avgt   50  4,550 ± 
0,041  ns/op
StringConstructor.newStringFromRangedArrayWithCharsetName  avgt   50  8,080 ± 
0,055  ns/op

after

Benchmark                                                  Mode  Cnt  Score   
Error  Units
StringConstructor.newStringFromArray                       avgt   50  4,595 ± 
0,053  ns/op
StringConstructor.newStringFromArrayWithCharset            avgt   50  4,038 ± 
0,062  ns/op
StringConstructor.newStringFromArrayWithCharsetName        avgt   50  8,035 ± 
0,031  ns/op
StringConstructor.newStringFromRangedArray                 avgt   50  4,084 ± 
0,007  ns/op
StringConstructor.newStringFromRangedArrayWithCharset      avgt   50  4,014 ± 
0,008  ns/op
StringConstructor.newStringFromRangedArrayWithCharsetName  avgt   50  7,466 ± 
0,071  ns/op

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

Commit messages:
 - 8289908: Skip bounds check for cases when String is constructed from 
entirely used byte[]

Changes: https://git.openjdk.org/jdk/pull/9407/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=9407&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8289908
  Stats: 90 lines in 5 files changed: 77 ins; 1 del; 12 mod
  Patch: https://git.openjdk.org/jdk/pull/9407.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/9407/head:pull/9407

PR: https://git.openjdk.org/jdk/pull/9407

Reply via email to