On Thu, 7 Jul 2022 10:21:06 GMT, Сергей Цыпанов <d...@openjdk.org> wrote:

> 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

src/java.base/share/classes/java/lang/String.java line 1429:

> 1427:      */
> 1428:     public String(byte[] bytes, int offset, int length) {
> 1429:         this(bytes, offset, length, Charset.defaultCharset(), 
> checkBoundsOffCount(offset, length, bytes.length));

Can you avoid the extra constructor by applying `checkBoundOffCount` to the 
offset argument; it returns the offset.

this(bytes, checkBoundsOffCount(offset, length, bytes.length), length, 
Charset.defaultCharset());

or call `Preconditions.checkFromIndexSize` directly.

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

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

Reply via email to