调用方法时Java中的call site是什么?
What is call site in Java when calling method?
我想了解什么是 JVM 中的调用站点。引自 https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-5.html#jvms-5.4.3.6
The result of call site specifier resolution is a tuple consisting of:
• the reference to an instance of java.lang.invoke.MethodHandle
,
• the reference to an instance of java.lang.invoke.MethodType
,
• the references to instances of Class
, java.lang.invoke.MethodHandle
,
java.lang.invoke.MethodType
, and String
.
我们还有所谓的调用站点对象https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.invokedynamic:
The result returned by the bootstrap method must be a reference to an
object whose class is java.lang.invoke.CallSite
or a subclass of
java.lang.invoke.CallSite
. This object is known as the call site
object
调用站点对象概念清晰。这只是 CallSite
的一个实例。但是调用站点说明符呢?那是一个 Java 对象吗?那是 String
文字吗?
动态调用站点是一个每次出现的invokedynamic
指令。
Before the JVM can execute a dynamic call site (an invokedynamic
instruction), the call site must first be linked. Linking is
accomplished by calling a bootstrap method which is given the static
information content of the call site, and which must produce a method
handle that gives the behavior of the call site.
Call site specifier是一个描述如何link[=36的项目(从常量池中获得) =] 给定的调用站点。
未指定此项目的真实含义。
JVMS 只告诉常量池中的symbolic reference to the call site specifier looks like如何。
JVM 实现可以自由选择调用站点说明符的内部表示。它可以是堆中的一个对象,也可以是本机内存中的一段元数据。例如,HotSpot JVM 将调用站点说明符缓存为 object array,其中第一个元素是 MethodHandle
的实例,表示 bootstrap 方法,其余元素是调用此 bootstrap方法。
无论 JVM 内部如何实现调用站点说明符,当它被解析时,它应该产生一个永久绑定到动态调用站点的调用站点对象(java.lang.invoke.CallSite
的实例)。
我想了解什么是 JVM 中的调用站点。引自 https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-5.html#jvms-5.4.3.6
The result of call site specifier resolution is a tuple consisting of:
• the reference to an instance of
java.lang.invoke.MethodHandle
,• the reference to an instance of
java.lang.invoke.MethodType
,• the references to instances of
Class
,java.lang.invoke.MethodHandle
,java.lang.invoke.MethodType
, andString
.
我们还有所谓的调用站点对象https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.invokedynamic:
The result returned by the bootstrap method must be a reference to an object whose class is
java.lang.invoke.CallSite
or a subclass ofjava.lang.invoke.CallSite
. This object is known as the call site object
调用站点对象概念清晰。这只是 CallSite
的一个实例。但是调用站点说明符呢?那是一个 Java 对象吗?那是 String
文字吗?
动态调用站点是一个每次出现的
invokedynamic
指令。Before the JVM can execute a dynamic call site (an
invokedynamic
instruction), the call site must first be linked. Linking is accomplished by calling a bootstrap method which is given the static information content of the call site, and which must produce a method handle that gives the behavior of the call site.Call site specifier是一个描述如何link[=36的项目(从常量池中获得) =] 给定的调用站点。
未指定此项目的真实含义。
JVMS 只告诉常量池中的symbolic reference to the call site specifier looks like如何。JVM 实现可以自由选择调用站点说明符的内部表示。它可以是堆中的一个对象,也可以是本机内存中的一段元数据。例如,HotSpot JVM 将调用站点说明符缓存为 object array,其中第一个元素是
MethodHandle
的实例,表示 bootstrap 方法,其余元素是调用此 bootstrap方法。无论 JVM 内部如何实现调用站点说明符,当它被解析时,它应该产生一个永久绑定到动态调用站点的调用站点对象(
java.lang.invoke.CallSite
的实例)。