模块 jdk.dynalink

接口 RelinkableCallSite

所有已知的实现类:
AbstractRelinkableCallSite , ChainedCallSite , SimpleRelinkableCallSite

public interface RelinkableCallSite
DynamicLinker 管理的调用站点的接口。 Dynalink 的用户必须使用 CallSite 的子类,这些子类也将此接口作为他们的调用站点实现。有一个易于使用的 SimpleRelinkableCallSite 子类实现单态内联缓存策略以及 ChainedCallSite 实现多态内联缓存策略并保留先前链接的方法句柄链。可重新链接的呼叫站点在使用其 DynamicLinker.link(RelinkableCallSite) 方法与其关联后将由 DynamicLinker 对象管理。
  • 方法详情

    • initialize

      void initialize(MethodHandle  relinkAndInvoke)
      由动态链接器调用以通过设置重新链接和调用方法句柄来初始化可重新链接的调用站点。调用站点实现应该使用 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)
      每次重新链接调用站点时,动态链接器都会调用此方法and链接器希望调用站点丢弃任何先前的链接状态(这就是它与 relink(GuardedInvocation, MethodHandle) 的不同之处)。它将传递一个 GuardedInvocation,调用站点应该使用它来构建其新的目标方法句柄。调用此方法时,不鼓励调用站点保留任何先前的状态,并且应该只链接当前调用。
      参数:
      guardedInvocation - 调用站点应该用来构建其目标方法句柄的受保护调用。
      relinkAndInvoke - 重新链接和调用方法句柄。这是一个方法句柄,与 DynamicLinker 作为回调提供的调用站点的方法类型相匹配。当它不能用传递的参数调用它的目标时,它应该被这个调用站点用作最终的回退。回退方法是这样的,当它被调用时,它会尝试为调用获取足够的目标 GuardedInvocation ,然后调用 relink(GuardedInvocation, MethodHandle) resetAndRelink(GuardedInvocation, MethodHandle) ,最后调用目标。