-
public interface RelinkableCallSite
由DynamicLinker
管理的呼叫站点接口。 Dynalink的用户必须使用CallSite
的子类,也可以实现这个接口作为其调用站点实现。 有一个易于使用的SimpleRelinkableCallSite
子类实现单态内联缓存策略以及实现多态内联缓存策略的ChainedCallSite
,并保留了先前链接的方法句柄。 使用其DynamicLinker.link(RelinkableCallSite)
方法与DynamicLinker
对象关联后,可重新链接的呼叫站点将由DynamicLinker
对象进行管理。
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 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提供的重新链接和调用方法句柄。
-
getDescriptor
CallSiteDescriptor getDescriptor()
返回此调用站点的描述符。- 结果
- 该呼叫站点的描述符。
-
relink
void relink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
每次调用站点重新链接时,动态链接器都会调用此方法(但是有关异常,请参阅resetAndRelink(GuardedInvocation, MethodHandle)
)。 它将通过一个GuardedInvocation
,呼叫站点应该合并到其目标方法句柄中。 当调用此方法时,允许调用站点保持其他无效的调用,以实现多态内联缓存,并通过此调用组合它们以形成其最终目标。- 参数
-
guardedInvocation
- 呼叫站点应该合并到其目标方法句柄中的守卫调用。 -
relinkAndInvoke
- 一个重新链接和调用方法句柄。 这是一个匹配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)
,最后调用目标。
-
-