Implementing Lambda with Capture support makes Metaspace fills LambdaForms$BMH class

Jochen Theodorou blackdrag at gmx.org
Thu May 4 12:39:37 UTC 2017


I think avoiding to create many of them is actually not trivial. The 
indy port of Groovy has a similar problem. And I do have to use a lot of 
insertArguments, exception catching handles and other things. So the 
stress is actually pretty high at times.

example... foo(x,y) is mapped to MyInvokerFallback.handle(receiver, 
"foo", x, y); with the method taking a String and an Object[]. How do I 
get the name in there without insertArguments? Don't I have to create at 
least one handle per name I find?

bye Jochen

On 04.05.2017 08:16, John Rose wrote:
> On May 3, 2017, at 9:37 PM, Wenlei Xie <wenlei.xie at gmail.com
> <mailto:wenlei.xie at gmail.com>> wrote:
>>
>> Thank you Vladimir for the help ! I see the point why MH.bindTo() is
>> not a good fit for implementing lambda capturing.
>
> A simple rule for using MHs is that they are designed to be another form
> of code.
> Creating many of them at a high rate is likely to stress JVM in ways similar
> to loading many small classes at a high rate.
>
> So bindTo is really code customization, which is not the same thing as
> data capture.
> The MH before bindTo is an algorithm with a variable "hole" in it, where
> the MH after
> bindTo is a customized version of the algorithm, with the hole filed by
> a constant.
> It's a little like a C++ template instance.
>
> I'd like high-count bindTo to be cheaper, of course, but it's not the
> design center,
> and it's not where we are investing optimization effort.  Maybe in the
> future.
>
> — John
>
>
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
>


More information about the mlvm-dev mailing list