Please review this PR which aims to optimize the implementation of the
`toString` method we provide for records. A benchmark comparing the
implementation we are providing for records with lombok found out that lombok
is much faster mainly because our implementation uses `String::format`. This
fix is basically delegating on StringConcatFactory::makeConcatWithConstants
which is faster.
TIA
This is the result of the benchmark comparing records to lombok with vanilla
JDK:
Benchmark Mode Cnt Score Error Units
MyBenchmark.base avgt 4 0.849 ± 0.111 ns/op
MyBenchmark.equals_record avgt 4 7.343 ± 2.740 ns/op
MyBenchmark.equals_value avgt 4 6.644 ± 1.920 ns/op
MyBenchmark.record_hash_code avgt 4 5.763 ± 3.882 ns/op
MyBenchmark.record_to_string avgt 4 262.626 ± 12.574 ns/op
<------ Before
MyBenchmark.value_class_to_string avgt 4 30.325 ± 21.389 ns/op
MyBenchmark.value_hash_code avgt 4 5.048 ± 3.936 ns/op
after this patch:
Benchmark Mode Cnt Score Error Units
MyBenchmark.base avgt 4 0.680 ± 0.185 ns/op
MyBenchmark.equals_record avgt 4 5.599 ± 1.348 ns/op
MyBenchmark.equals_value avgt 4 5.718 ± 4.633 ns/op
MyBenchmark.record_hash_code avgt 4 4.628 ± 4.368 ns/op
MyBenchmark.record_to_string avgt 4 26.791 ± 1.817 ns/op
<------- After
MyBenchmark.value_class_to_string avgt 4 35.473 ± 2.626 ns/op
MyBenchmark.value_hash_code avgt 4 6.152 ± 5.101 ns/op
-------------
Commit messages:
- 8261847: Suboptimal java.lang.record's methods generation
Changes: https://git.openjdk.java.net/jdk/pull/6403/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=6403&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8261847
Stats: 56 lines in 1 file changed: 20 ins; 15 del; 21 mod
Patch: https://git.openjdk.java.net/jdk/pull/6403.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/6403/head:pull/6403
PR: https://git.openjdk.java.net/jdk/pull/6403