ChainedCallSite
ChainedCallSite (체인형 콜 사이트)
폴리모픽(다형) 인라인 캐싱 전략을 구현하는 재연결 가능 콜 사이트입니다. 연결한 GuardedInvocation을 최대 8개까지 기억하고, 재연결 요청이 있을 때마다 하나의 호출이 다음 호출로 폴백하는 메서드 핸들 체인을 만들어요.
본문
기억하는 호출 개수는 하위 클래스에서 getMaxChainLength()를 오버라이드해 바꿀 수 있습니다. 새 호출로 재연결할 때 체인 길이가 이미 최대라면 가장 오래된 호출을 버려요. 무효화된 스위치 포인트가 있는 호출과 무효화 예외가 발동한 호출은 체인에서 즉시 제거됩니다.
호출들은 절대 재정렬되지 않습니다. 가장 최근에 연결한 메서드 핸들이 항상 체인의 시작에, 가장 오래된 것이 끝에 위치해요. 이 콜 사이트는 여러 스레드에서 동시에 재연결되어도 안전하며, 연결 경합이 생기면 진 스레드에서 생성된 GuardedInvocation은 체인에 넣지 않고 버려서 같은 인자에 대해 반복 연결이 발생할 수 있습니다.
생성자
ChainedCallSite(CallSiteDescriptor descriptor)— 새 체인형 콜 사이트를 만듭니다.
주요 메서드
getMaxChainLength()— 체인의 최대 메서드 핸들 개수를 반환합니다. 기본값은 8이에요.relink(GuardedInvocation, MethodHandle)— 재연결될 때마다 동적 링커가 호출합니다.resetAndRelink(GuardedInvocation, MethodHandle)— 이전 연결 상태를 버리고 재연결할 때 호출됩니다.getDescriptor(),initialize(...)—AbstractRelinkableCallSite에서 상속받습니다.