AbstractRelinkableCallSite
AbstractRelinkableCallSite (재연결 가능 콜 사이트 기본 구현)
RelinkableCallSite를 MutableCallSite로 구현한 기본 클래스입니다. 생성자에서 받은 CallSiteDescriptor를 지니고 initialize(MethodHandle) 메서드의 올바른 구현을 제공해요.
본문
하위 클래스가 relink(GuardedInvocation, MethodHandle)과 resetAndRelink(GuardedInvocation, MethodHandle) 메서드를 제공해야 비로소 완성됩니다. MutableCallSite를 상속하므로 getTarget, setTarget, syncAll, dynamicInvoker 같은 가변 콜 사이트 기능을 그대로 쓸 수 있어요. 이 클래스의 하위 클래스로는 SimpleRelinkableCallSite와 ChainedCallSite가 있습니다.
콜 사이트를 가변으로 만들면 런타임에 타깃 메서드 핸들을 교체할 수 있어, 링크가 달라짐에 따라 콜 사이트가 재연결되는 Dynalink의 동작을 자연스럽게 담아낼 수 있어요. 하위 클래스가 구현할 relink/resetAndRelink가 바로 그 재연결 로직을 담당하며, initialize가 설정한 초기 핸들로부터 시작됩니다.
생성자
AbstractRelinkableCallSite(CallSiteDescriptor descriptor)— 새 추상 재연결 가능 콜 사이트를 만듭니다.getDescriptor()가 반환할 설명자를 받으며, 콜 사이트의CallSite.type()은 설명자의getMethodType()과 같아요.descriptor가null이면NullPointerException이 발생합니다.
메서드
getDescriptor()— 이 콜 사이트의 설명자를 반환합니다.initialize(MethodHandle relinkAndInvoke)— 동적 링커가 초기화할 때 호출해 재연결-및-호출 메서드 핸들을 설정합니다.