another question about megamorphic call sites in combination with MethodHandles

Krystal Mo krystal.mo at oracle.com
Thu Mar 21 12:31:04 PDT 2013


Hi Jochen,

At least with the current tip version of HotSpot, the 
mh.invokeWithArguments() callsite is not likely to get its actual target 
inlined into the caller; we depended a lot on being able to prove that 
the MethodHandle is a (JIT-)compiled-time constant to be able to do 
inlining across the MethodHandle.invoke/invokeExact boundary.

I'm working on adding profiling support for 
MethodHandle.invoke/invokeExact (which invokeWithArguments() will call), 
and it looks at what MethodHandles get passed in.
When that work lands in HotSpot, your example will be a source of 
profile pollution just like the well-known megamorphic callsites in the 
old days, so I wouldn't suggest doing that.

More details on my work-in-progress will be send to this list later.

- Kris

On 2013/3/21 1:23, Jochen Theodorou wrote:
> Hi all,
>
> assuming I have in Java a method:
>
> public static Object invoke(MethodHandle mh, Object[] args) {
>     try {
>       return mv.invokeWithArguments(args);
>     } catch (Throwable th) {
>       ExceptionUtils.sneakyThrow(th);
>     }
> }
>
> (sneakyThrow is to work around checked exceptions and does basically
> just throw the throwable again without declaring it)
>
> I am wondering if the call site in this method can become megamorphic or
> not. And assuming it does not, I further assume the call to this method
> cannot become megamorphic as well... so my next question is if that can
> be always be potentially inlined then.
>
> bye blackdrag
>



More information about the mlvm-dev mailing list