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