Implementing Lambda with Capture support makes Metaspace fills LambdaForms$BMH class
Remi Forax
forax at univ-mlv.fr
Tue May 2 20:02:11 UTC 2017
Hi Wenei,
The idea of bindTo()/insertArguments is that you are requesting a partial evaluation, so you are asking the VM/JIT to specialize the method handle if the method handle is used often.
So compiling a method handle to a bytecode snippet in that case is the expected behavior, not a bug.
What i do not understand is why you need to have a different method handle for each row ?
Did you try to use invokeWithArguments instead of bindTo().invokeExact() ?
cheers,
Rémi
> De: "Wenlei Xie" <wenlei.xie at gmail.com>
> À: mlvm-dev at openjdk.java.net
> Envoyé: Mardi 2 Mai 2017 21:29:38
> Objet: Implementing Lambda with Capture support makes Metaspace fills
> LambdaForms$BMH class
> Hi,
> We are implementing Lambda function with capture support in a SQL Engine. We
> currently implement by compiling user-written Lambda Expression into a
> MethodHandle. And use bindTo to captured fields. Thus for each row we will have
> a Bound Method Handle.
> However, we found JVM will generate the byte code Bound Method Handle once it's
> invoked more than 128 times. This cause in some cases (when the table has large
> arrays), the Metaspace fills with generated LambdaForm$BMH class.
> Here is the simple code to reproduce the issue:
> https://github.com/wenleix/BMHTest . It looks we cannot increase
> java.lang.invoke.MethodHandle.CUSTOMIZE_THRESHOLD beyond 128. Any suggestions
> to implement Lambda with Capture Support on JVM?
> Thank you !!
> Best,
> Wenlei
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/mlvm-dev/attachments/20170502/e878232b/attachment-0001.html>
More information about the mlvm-dev
mailing list