public interface RelinkableCallSite
由
DynamicLinker
管理的调用站点的接口。Dynalink的用户必须使用实现了此接口的CallSite
的子类作为其调用站点实现。有一个可直接使用的SimpleRelinkableCallSite
子类,实现了单态内联缓存策略,以及一个实现了多态内联缓存策略并保留先前链接的方法句柄链的ChainedCallSite
。重新链接的调用站点将在与其关联的DynamicLinker
对象管理之后,使用其DynamicLinker.link(RelinkableCallSite)
方法进行关联。
-
Method Summary
Modifier and TypeMethodDescription返回此调用站点的描述符。void
initialize
(MethodHandle relinkAndInvoke) 动态链接器调用此方法,通过设置重新链接和调用方法句柄来初始化可重新链接的调用站点。void
relink
(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) 每次重新链接调用站点时,动态链接器都会调用此方法(但有一个例外,请参见resetAndRelink(GuardedInvocation, MethodHandle)
)。void
resetAndRelink
(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) 每次重新链接调用站点时,动态链接器都会调用此方法,并且链接器希望调用站点放弃任何先前的链接状态(这与relink(GuardedInvocation, MethodHandle)
的区别在于)。
-
Method Details
-
initialize
动态链接器调用此方法,通过设置重新链接和调用方法句柄来初始化可重新链接的调用站点。调用站点实现应该使用CallSite.setTarget(MethodHandle)
方法将此方法句柄设置为其目标。重新链接和调用是由DynamicLinker.link(RelinkableCallSite)
设置的初始方法句柄,将导致调用站点在首次调用时基于其参数重新链接到适当的目标,并且然后将调用链接的目标(因此得名)。此链接协议有效地延迟了链接,直到调用站点使用实际参数调用,并因此确保链接器可以根据这些参数而不仅仅是根据调用站点的静态方法类型做出微妙的链接决策。- 参数:
-
relinkAndInvoke
- Dynalink提供的重新链接和调用方法句柄。
-
getDescriptor
CallSiteDescriptor getDescriptor()返回此调用站点的描述符。- 返回:
- 此调用站点的描述符。
-
relink
每次重新链接调用站点时,动态链接器都会调用此方法(但有一个例外,请参见resetAndRelink(GuardedInvocation, MethodHandle)
)。它将传递一个GuardedInvocation
,调用站点应该将其合并到其目标方法句柄中。调用此方法时,允许调用站点保留其他未失效的调用以实现多态内联缓存,并将其与此调用组合以形成其最终目标。- 参数:
-
guardedInvocation
- 调用站点应该合并到其目标方法句柄中的受保护调用。 -
relinkAndInvoke
- 重新链接和调用方法句柄。这是一个与调用站点的方法类型匹配的方法句柄,由DynamicLinker
作为回调提供。当调用此方法时,应该将其用作调用站点无法使用传递的参数调用其目标时的最终回退。回退方法是这样的,当调用它时,它将尝试为调用获取一个适当的目标GuardedInvocation
,然后调用relink(GuardedInvocation, MethodHandle)
或resetAndRelink(GuardedInvocation, MethodHandle)
,最后调用目标。
-
resetAndRelink
每次重新链接调用站点时,动态链接器都会调用此方法,并且链接器希望调用站点放弃任何先前的链接状态(这与relink(GuardedInvocation, MethodHandle)
的区别在于)。它将传递一个GuardedInvocation
,调用站点应该使用它来构建其新的目标方法句柄。调用此方法时,建议调用站点不保留任何先前的状态,应该只链接当前调用。- 参数:
-
guardedInvocation
- 调用站点应该使用它来构建其目标方法句柄的受保护调用。 -
relinkAndInvoke
- 重新链接和调用方法句柄。这是一个与调用站点的方法类型匹配的方法句柄,由DynamicLinker
作为回调提供。当调用此方法时,应该将其用作调用站点无法使用传递的参数调用其目标时的最终回退。回退方法是这样的,当调用它时,它将尝试为调用获取一个适当的目标GuardedInvocation
,然后调用relink(GuardedInvocation, MethodHandle)
或resetAndRelink(GuardedInvocation, MethodHandle)
,最后调用目标。
-