On Sat, 13 Jul 2024 00:50:18 GMT, Shaojin Wen <d...@openjdk.org> wrote:

>> Currently, about 25% of the time spent by the Integer.parseInt and 
>> Long.parseLong methods is spent on the Character.digit method.
>> 
>> The Character.digit method is common to all radixes. We can use a digit 
>> method optimized for Latin1 encoding radix 10 to improve the performance of 
>> Integer.parseInt and Long.parseLong methods.
>
> Shaojin Wen has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Reduce changes

> A straightforward guess would be converting the `Character.digit()` call to a 
> utility method like:
> 
> ```java
> private static int digit(char ch/*, int radix*/) {
>     if (ch >= '0' && ch <= '9') // or replace it with something like 
> Math.min('9', '0' + radix)
>         return ch - '0'; // ascii base-10 fast path
>     return digit(ch/*, radix*/);
> }
> ```
> 
> Inspired by this:
> 
> https://github.com/openjdk/jdk/blob/ae9f318fc35eeab497e546ebab9faed6ec774ec5/src/java.base/share/classes/jdk/internal/constant/ConstantUtils.java#L236
> 
> However I don't know how JIT has compiled the code, so not sure how my 
> speculative approach works compared to yours. But it is definitely somewhat 
> less invasive, without the new table and latin1 requirements.

In the parse scenario, I made many attempts and found no method faster than 
table lookup, because the input length will be greater than 1 and the table 
will be looked up multiple times. In this scenario, I think it is correct to 
use table lookup.

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

PR Comment: https://git.openjdk.org/jdk/pull/20168#issuecomment-2226754795

Reply via email to