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 !!

mlvm-dev mailing list

Reply via email to