Hi Remi, Thank you for the prompt response!!
Consider the following query: SELECT transform(arr, x->x + value) FROM test_table The underlying table is arr | value -------------------------------- [1, 2] | 1 [7, 8, 9] | 2 The expected output is [2, 3] [9, 10, 11] Now our implementation is first to generate a MethodHandle mh that takes two argument and output the sum. During the query processing, for each row, we first call capturedMh = mh.bindTo(value) And then use capturedMh for each value in the array. That's why we are having a different method handle for each row. Best, Wenlei On Tue, May 2, 2017 at 1:02 PM, Remi Forax <fo...@univ-mlv.fr> wrote: > 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....@gmail.com> > *À: *mlvm-dev@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@openjdk.java.net > http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev > > > _______________________________________________ > mlvm-dev mailing list > mlvm-dev@openjdk.java.net > http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev > > -- Best Regards, Wenlei Xie (谢文磊) Email: wenlei....@gmail.com
_______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev