Condy for LambdaMetafactory?
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Tue Oct 24 10:41:25 UTC 2023
On 24/10/2023 11:22, Tagir Valeev wrote:
> With -g the measured time is about 1800ms, while without -g it's about
> 6ms. That's because when lambdas are deduplicated, type profile for
> map() method is clean, and the whole stream can be inlined, and even
> the loop could be likely replaced with a constant. When lambdas are
> not deduplicated, this is not the case: type profile is polluted, and
> the whole stream cannot be inlined. So, deduplication can actually
> improve the performance, at least in such extreme cases.
Very interesting results - thanks! I believe it works well because when
deduplication kicks in, the body is _really_ identical, so there's no
value in keeping separate profiling info for the three lambdas. Well,
maybe, maybe not. If your lambda has some conditional code (`if (cond)
...`) and one lambda is always used where cond = true and the other
lambda is always used where cond = false, this might be a problem as the
profile of the deduplicate lambda might get polluted. So I'm not sure
how reliably this technique would actually work out in practice as a way
to improve performance.
> By the way, while experimenting with this sample, I've noticed that
> deduplication of this particular code is broken since Java 18 (the
> code performs slowly both with and without -g, and reading the
> bytecode confirms that no deduplication is done). Should I report, or
> probably there's no interest in supporting this feature?
Oh - I wasn't aware of this issue - regardless of what we wanna do with
this feature moving forward, filing a bug is always the right thing to
do, to make sure it doesn't fall off the radar.
Thanks
Maurizio
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-dev/attachments/20231024/bc652c6c/attachment.htm>
More information about the amber-dev
mailing list