On Wed, 6 Jul 2022 14:11:39 GMT, Roger Riggs <rri...@openjdk.org> wrote:
>> @RogerRiggs in my view, it's not about performance per se… I'll sometimes >> help along these kinds of small fix PRs (that are more likely than not >> driven by IntelliJ code refactoring suggestions) if I think they lead to >> more idiomatic code in the JDK with no drawbacks. I think there's value in >> periodically revisiting existing code and improve it to use new language and >> library construct that have become available since – people study JDK source >> code, and I think it's important they see as good examples in there as >> possible. I do like seeing an old example of hand-rolled compute-if-absent >> being replaced by an actual `computeIfAbsent` call. Similarly, I think using >> records as composite keys is in general a better practice over simulating a >> composite key by creating a string representation of it. >> >> Yeah, it'll load additional code at runtime for that record's class, and >> yes, I'm aware records' `hashCode`/`equals`/`toString` are implemented by >> delegating to factory methods that heavily use method handle combinators. If >> records are meant as lightweight value-semantics composites, it should be >> okay to use them like this and if there are performance concerns with their >> use, then those concerns should be addressed by improving their performance. >> OTOH, MH combinators installed into constant call sites are well optimized >> by HotSpot these days… anyhow, a discussion for another day. >> >> In this specific instance, the value domain of the keys is limited, but the >> number of method calls to `WeekFields.of` isn't. It could be benchmarked but >> if there's concerns, it's also okay to de-scope the record-as-key from this >> PR. I don't have strong feelings either way. > > The comment was about WeekFields.of(), I misplaced the comment. > > @szegedi All good points about modernizing code... > One of the reasons to ask about specific performance data is to validate the > general performance impact of using lambdas. In the case of WeekFields.of(), > the lambda is passed on every call to `computeIfAbsent` even if the key is > present and the lambda won't be used. `WeekFields` is way-way down the long > tail of frequency of use and I expect that 99% of calls are for the same one > or two combinations. I agree with @RogerRiggs that performance of JDK is very important. It was one of main motivation for removing `.get` call. I'm not an expert in microbenchmarking, and it would require significant time/resources for me to investigate which is better. So I decided to revert back to original proposal (without lambda and `computeIfAbsent`) in `WeekFields`. If you think that it's better to improve code, I think we can always fill a separate issue for it. ------------- PR: https://git.openjdk.org/jdk/pull/9208