On Tue, 16 Nov 2021 05:24:38 GMT, Vicente Romero <vrom...@openjdk.org> wrote:

> 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

By the way, considering the fact that the limit of `StringConcatFactory` (i.e. 
`200` arguments) is explicitly specified (at least, it is mentioned in its 
Javadoc) can we request to have it available to code (e.g. as a `public static 
final` constant) so that other code in JDK (like this PR) and foreign code can 
rely on it?

For example, I have to duplicate this value based on Javadoc 
[here](https://github.com/JarvisCraft/padla/blob/118c89e078cfc8e54faf154f2f4e658604159ab0/ultimate-messenger/src/main/java/ru/progrm_jarvis/ultimatemessenger/format/model/AsmTextModelFactory.java#L366)
 while there could have been something similar to 
`StringConcatFactory#MAX_ARGUMENTS`.

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

PR: https://git.openjdk.java.net/jdk/pull/6403

Reply via email to