Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
Reported by Remi: http://mail.openjdk.java.net/pipermail/mlvm-dev/2014-December/006192.html If a MemberName is constant, direct call is faster than linkTo* call. Consider simple recursive call: static void rec(int depth) throws Throwable { if (depth > 0) { recMH.invokeExact(depth-1); } else { return; } } C2 -XX:+PrintCompilation: jsr292.RecursiveCall::rec (18 bytes) @ 10 java.lang.invoke.LambdaForm$MH/537548559::invokeExact_MT (16 bytes) force inline by annotation @ 2 java.lang.invoke.Invokers::checkExactType (30 bytes) force inline by annotation @ 11 java.lang.invoke.MethodHandle::type (5 bytes) accessor @ 12 java.lang.invoke.LambdaForm$DMH/1617791695::invokeStatic_I_V (14 bytes) force inline by annotation @ 1 java.lang.invoke.DirectMethodHandle::internalMemberName (8 bytes) force inline by annotation @ 10 jsr292.RecursiveCall::rec (18 bytes) inline (hot) @ 10 java.lang.invoke.LambdaForm$MH/537548559::invokeExact_MT (16 bytes) force inline by annotation @ 2 java.lang.invoke.Invokers::checkExactType (30 bytes) force inline by annotation @ 11 java.lang.invoke.MethodHandle::type (5 bytes) accessor @ 12 java.lang.invoke.LambdaForm$DMH/1617791695::invokeStatic_I_V (14 bytes) force inline by annotation @ 1 java.lang.invoke.DirectMethodHandle::internalMemberName (8 bytes) force inline by annotation @ 10 jsr292.RecursiveCall::rec (18 bytes) recursive inlining is too deep Non-inlined recursive call can be a direct call, but it is a ::linkToStatic call: [...] 0x000000010feeabfe: movabs $0x79561d2a0,%rdx ; {oop(a 'java/lang/invoke/MemberName' = {method} {0x00000001180a3528} 'rec' '(I)V' in 'jsr292/RecursiveCall')} 0x000000010feeac08: nop 0x000000010feeac09: nop 0x000000010feeac0a: nop 0x000000010feeac0b: callq 0x000000010fe49900 ; OopMap{off=48} ;*invokestatic linkToStatic ; - java.lang.invoke.LambdaForm$DMH/1617791695::invokeStatic_I_V@10 ; - java.lang.invoke.LambdaForm$MH/537548559::invokeExact_MT@12 ; - jsr292.RecursiveCall::rec@10 (line 28) ; - java.lang.invoke.LambdaForm$DMH/1617791695::invokeStatic_I_V@10 ; - java.lang.invoke.LambdaForm$MH/537548559::invokeExact_MT@12 ; - jsr292.RecursiveCall::rec@10 (line 28) ; {static_call} [...]