-
public interface RelinkableCallSite
由DynamicLinker
管理的呼叫站点的接口。 Dynalink的用户必须使用CallSite
的子类,该子类也将此接口实现为其调用站点实现。 有一个易于使用的SimpleRelinkableCallSite
子类实现了单态内联缓存策略以及ChainedCallSite
,它实现了多态内联缓存策略并保留了一系列先前链接的方法句柄。DynamicLinker
对象在使用其DynamicLinker.link(RelinkableCallSite)
方法与其关联后,将对可重新链接的呼叫站点进行管理。
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 CallSiteDescriptor
getDescriptor()
返回此调用站点的描述符。void
initialize(MethodHandle relinkAndInvoke)
由动态链接器调用,通过设置relink-and-invoke方法句柄来初始化可重新链接的调用站点。void
relink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
每次重新链接调用站点时,动态链接器都将调用此方法(但有关异常,请参阅resetAndRelink(GuardedInvocation, MethodHandle)
)。void
resetAndRelink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
每次重新链接调用站点时,动态链接器都会调用此方法 ,并且链接器希望调用站点丢弃任何先前的链接状态(即它与relink(GuardedInvocation, MethodHandle)
的区别 )。
-
-
-
方法详细信息
-
initialize
void initialize(MethodHandle relinkAndInvoke)
由动态链接器调用,通过设置relink-and-invoke方法句柄来初始化可重新链接的调用站点。 调用站点实现应该使用CallSite.setTarget(MethodHandle)
将此方法句柄设置为其目标。 Relink-and-invoke是由DynamicLinker.link(RelinkableCallSite)
设置的初始方法句柄,它将使调用站点在其第一次调用时基于其参数重新链接到适当的目标,然后将调用该链接目标(因此名称)。 此链接协议有效地延迟链接,直到使用实际参数调用调用站点,从而确保链接器可以基于这些参数而不仅仅基于调用站点的静态方法类型做出细微的链接决策。- 参数
-
relinkAndInvoke
- Dynalink提供的relink-and-invoke方法句柄。
-
getDescriptor
CallSiteDescriptor getDescriptor()
返回此调用站点的描述符。- 结果
- 此调用站点的描述符。
-
relink
void relink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
每次重新链接调用站点时,动态链接器都将调用此方法(但有关异常,请参阅resetAndRelink(GuardedInvocation, MethodHandle)
)。 它将传递一个GuardedInvocation
,调用站点应该将其合并到其目标方法句柄中。 调用此方法时,允许调用站点保留其他非无效调用以实现多态内联高速缓存,并使用此调用组合它们以形成其最终目标。- 参数
-
guardedInvocation
- 调用站点应该包含在其目标方法句柄中的受保护调用。 -
relinkAndInvoke
- 一个relink-and-invoke方法句柄。 这是一个方法句柄, 它将DynamicLinker
提供的调用站点的方法类型作为回调进行匹配 。 当它无法使用传递的参数调用其目标时,它应该被此调用站点用作最终回退。 回退方法是这样的,当它被调用时,它将尝试为调用获得足够的目标GuardedInvocation
,然后调用relink(GuardedInvocation, MethodHandle)
或resetAndRelink(GuardedInvocation, MethodHandle)
,最后调用目标。
-
resetAndRelink
void resetAndRelink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
每次重新链接调用站点时,动态链接器都会调用此方法,并且链接器希望调用站点丢弃任何先前的链接状态(即它与relink(GuardedInvocation, MethodHandle)
的不同之处)。 它将通过一个GuardedInvocation
,调用站点应该使用它来构建新的目标方法句柄。 调用此方法时,不鼓励调用站点保留任何先前的状态,并且应该仅链接当前调用。- 参数
-
guardedInvocation
- 调用站点应用于构建其目标方法句柄的受保护调用。 -
relinkAndInvoke
- 一个relink-and-invoke方法句柄。 这是一个方法句柄, 它将DynamicLinker
提供的调用站点的方法类型作为回调进行匹配 。 当它无法使用传递的参数调用其目标时,它应该被此调用站点用作最终回退。 回退方法是这样的,当它被调用时,它将尝试为调用获得足够的目标GuardedInvocation
,然后调用relink(GuardedInvocation, MethodHandle)
或resetAndRelink(GuardedInvocation, MethodHandle)
,最后调用目标。
-
-