level 12
在LambdaForm中会调用Invokers.checkExactType去检查参数类型,然后调用Invokes.CheckCustomized方法。最后,调用方法句柄的invokeBasic方法。invokeBasic同样会被jvm特殊对待,执行时,会调用到方法句柄本身所持有的适配器里,也是一个LambdaForm。这个LambdaForm会获取方法句柄里的MemberName字段,作为参数调用linkToStatic方法。当然,linkToStatic也会做特殊处理,会根据传入的参数 储存的索引 直接跳转到目标方法。 在这些方法里 Invokes.CheckCustomized在超过 一个阈值时就会进行优化 阈值可用参数 -Djava.lang.invoke.MethodHandle.CUSTOMIZE_THRESHOLD进行设置,默认是127.当调用次数大于这个阈值的时候,Invokes.CheckCustomized会为该方法句柄生成一个特有的适配器,这个适配器就会将方法句柄作为常量 直接获取MemberName类型的字段 供linkToStatic调用。
2023年02月15日 05点02分