RFR: 8267844: Replace Integer/Long.valueOf() with Integer/Long.parse*() where applicable
Сергей Цыпанов
github.com+10835776+stsypanov at openjdk.java.net
Tue Aug 10 21:01:27 UTC 2021
On Tue, 10 Aug 2021 17:39:01 GMT, Сергей Цыпанов <github.com+10835776+stsypanov at openjdk.org> wrote:
>> src/java.base/share/classes/java/lang/Integer.java line 1450:
>>
>>> 1448:
>>> 1449: try {
>>> 1450: result = parseInt(nm.substring(index), radix);
>>
>> Possibly a follow-up, but I think using `parseInt/-Long(nm, index, nm.length(), radix)` could give an additional speed-up in these cases (by avoiding a substring allocation).
>
> Good point! Let me check this.
Indeed, looks like getting rid of `substring()` call makes things faster:
before
Benchmark (size) Mode Cnt Score Error Units
Integers.decode 500 avgt 15 11.444 ? 0.949 us/op
Integers.parseInt 500 avgt 15 8.669 ? 0.152 us/op
Integers.toStringBig 500 avgt 15 10.295 ? 0.612 us/op
Integers.toStringSmall 500 avgt 15 7.020 ? 0.581 us/op
Benchmark (size) Mode Cnt Score Error Units
Longs.decode 500 avgt 15 29.568 ? 9.785 us/op
Longs.repetitiveSubtraction 500 avgt 15 0.820 ? 0.153 us/op
Longs.toStringBig 500 avgt 15 13.418 ? 0.744 us/op
Longs.toStringSmall 500 avgt 15 8.180 ? 0.780 us/op
after
Benchmark (size) Mode Cnt Score Error Units
Integers.decode 500 avgt 15 7.377 ? 0.040 us/op
Integers.parseInt 500 avgt 15 8.720 ? 0.230 us/op
Integers.toStringBig 500 avgt 15 10.328 ? 0.266 us/op
Integers.toStringSmall 500 avgt 15 6.913 ? 0.178 us/op
Benchmark (size) Mode Cnt Score Error Units
Longs.decode 500 avgt 15 8.373 ? 0.708 us/op
Longs.repetitiveSubtraction 500 avgt 15 0.771 ? 0.003 us/op
Longs.toStringBig 500 avgt 15 13.126 ? 0.079 us/op
Longs.toStringSmall 500 avgt 15 6.915 ? 0.259 us/op
-------------
PR: https://git.openjdk.java.net/jdk/pull/5068
More information about the core-libs-dev
mailing list