On Sat, 18 Feb 2023 23:26:08 GMT, Claes Redestad <redes...@openjdk.org> wrote:

> When encoding Strings to US-ASCII we can speed up the happy path 
> significantly by using `StringCoding.countPositives` as a speculative check 
> for whether there are any chars that needs to be replaced by `'?'`. Once a 
> non-ASCII char is encountered we fall back to the slow loop and replace as 
> needed.
> 
> An alternative could be unrolling or using a byte array VarHandle, as 
> show-cased by Brett Okken here: 
> https://mail.openjdk.org/pipermail/core-libs-dev/2023-February/100573.html 
> Having to replace chars with `?` is essentially an encoding error so it might 
> be safe to assume this case is exceptional in practice.

Baseline:

Benchmark                      (charsetName)  Mode  Cnt      Score     Error  
Units
StringEncode.encodeAsciiLong        US-ASCII  avgt    5  26626,025 ± 448,307  
ns/op
StringEncode.encodeAsciiShort       US-ASCII  avgt    5     33,336 ±   2,032  
ns/op


Patch:

Benchmark                      (charsetName)  Mode  Cnt     Score    Error  
Units
StringEncode.encodeAsciiLong        US-ASCII  avgt    5  5492,985 ± 40,066  
ns/op
StringEncode.encodeAsciiShort       US-ASCII  avgt    5    28,545 ±  4,883  
ns/op

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

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

Reply via email to