On Thu, 12 Oct 2023 09:55:15 GMT, Shaojin Wen <d...@openjdk.org> wrote:

>> CharacterDataLatin1.digit is for multi-radix, and the performance when radix 
>> = 10 is not good enough.
>
> If we reuse CharacterDataLatin1#DIGITS, the performance will be slower, the 
> performance numbers are as follows
> 
> 
> class CharacterDataLatin1 {
>     static int digit(int ch) {
>         int value = DIGITS[ch & 0xFF];
>         return (value >= 0 && value < 10) ? value : -1;
>     }
> }
> 
> 
> 
> Benchmark          (size)  Mode  Cnt  Score   Error  Units (baseline)
> Integers.parseInt     500  avgt   15  2.614 ? 0.003  us/op
> 
> Benchmark          (size)  Mode  Cnt  Score   Error  Units (use 
> CharacterDataLatin1#digit)
> Integers.parseInt     500  avgt   15  2.399 ? 0.008  us/op
> 
> Benchmark          (size)  Mode  Cnt  Score   Error  Units (c3e878a)
> Integers.parseInt     500  avgt   15  2.251 ? 0.010  us/op

Maybe there's something wrong with the `value < radix` check that JIT cannot 
efficiently optimize it (so `digit <= 9` has a similar performance to `value < 
10` in loops). We might have to check the hotspot assembly to find out the 
reason.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/16112#discussion_r1356591852

Reply via email to