AbstractRelinkableCallSite

AbstractRelinkableCallSite (재연결 가능 콜 사이트 기본 구현)

RelinkableCallSiteMutableCallSite로 구현한 기본 클래스입니다. 생성자에서 받은 CallSiteDescriptor를 지니고 initialize(MethodHandle) 메서드의 올바른 구현을 제공해요.

출처: Java API Reference

본문

하위 클래스가 relink(GuardedInvocation, MethodHandle)resetAndRelink(GuardedInvocation, MethodHandle) 메서드를 제공해야 비로소 완성됩니다. MutableCallSite를 상속하므로 getTarget, setTarget, syncAll, dynamicInvoker 같은 가변 콜 사이트 기능을 그대로 쓸 수 있어요. 이 클래스의 하위 클래스로는 SimpleRelinkableCallSiteChainedCallSite가 있습니다.

콜 사이트를 가변으로 만들면 런타임에 타깃 메서드 핸들을 교체할 수 있어, 링크가 달라짐에 따라 콜 사이트가 재연결되는 Dynalink의 동작을 자연스럽게 담아낼 수 있어요. 하위 클래스가 구현할 relink/resetAndRelink가 바로 그 재연결 로직을 담당하며, initialize가 설정한 초기 핸들로부터 시작됩니다.

생성자

  • AbstractRelinkableCallSite(CallSiteDescriptor descriptor) — 새 추상 재연결 가능 콜 사이트를 만듭니다. getDescriptor()가 반환할 설명자를 받으며, 콜 사이트의 CallSite.type()은 설명자의 getMethodType()과 같아요. descriptornull이면 NullPointerException이 발생합니다.

메서드

  • getDescriptor() — 이 콜 사이트의 설명자를 반환합니다.
  • initialize(MethodHandle relinkAndInvoke) — 동적 링커가 초기화할 때 호출해 재연결-및-호출 메서드 핸들을 설정합니다.

더 알아보기

Java 공식 API