Spec-Zone.ru › OpenJDK 17

Интерфейс RelinkableCallSite

Все известные реализующие классы:
AbstractRelinkableCallSite, ChainedCallSite, SimpleRelinkableCallSite
public interface RelinkableCallSite
Интерфейс для сайтов вызовов, управляемых DynamicLinker. Пользователи Dynalink должны использовать подклассы CallSite, которые также реализуют этот интерфейс, как свои реализации сайтов вызовов. Существует готовый в использовании подкласс SimpleRelinkableCallSite, который реализует мономорфную стратегию кэширования вызовов, а также ChainedCallSite, который реализует полиморфную стратегию кэширования вызовов и сохраняет цепочку ранее связанных обработчиков методов. Сайт вызова relinkable будет управляться объектом DynamicLinker после его ассоциации с ним с помощью метода DynamicLinker.link(RelinkableCallSite).

Краткое описание методов

Модификатор и тип Метод Описание
CallSiteDescriptor getDescriptor()
Возвращает дескриптор для данного сайта вызова.
void initialize(MethodHandle relinkAndInvoke)
Вызывается динамическим линкером для инициализации сайта вызова relinkable, установив обработчик метода для relink и вызова.
void relink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
Этот метод будет вызываться динамическим линкером каждый раз, когда сайт вызова пересвязывается (но см. resetAndRelink(GuardedInvocation, MethodHandle) для исключения).
void resetAndRelink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
Этот метод будет вызываться динамическим линкером каждый раз, когда сайт вызова пересвязывается и линкер хочет, чтобы сайт вызова отбросил любое предыдущее состояние связи (вот в чем его отличие от relink(GuardedInvocation, MethodHandle)).

Подробное описание методов

initialize

void initialize(MethodHandle relinkAndInvoke)
Вызывается динамическим линкером для инициализации сайта вызова relinkable, установив обработчик метода для relink и вызова. Реализация сайта вызова должна установить этот обработчик метода как свой целевой обработчик с помощью CallSite.setTarget(MethodHandle). Relink-and-invoke - это начальный обработчик метода, установленный DynamicLinker.link(RelinkableCallSite), который приведет к перевязке сайта вызова к соответствующему целевому обработчику на первом вызове, основанном на его аргументах, а затем этот связанный целевой обработчик будет вызван (отсюда и название). Этот протокол связывания фактически откладывает связывание до вызова сайта вызова с фактическими аргументами и, таким образом, гарантирует, что линтеры могут принимать обоснованные решения о связывании, основанные на этих аргументах, а не только на статическом типе метода сайта вызова.
Параметры:
relinkAndInvoke - обработчик метода relink-and-invoke, предоставленный Dynalink.

getDescriptor

CallSiteDescriptor getDescriptor()
Возвращает дескриптор для данного сайта вызова.
Возвращает:
дескриптор для данного сайта вызова.

relink

void relink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
Этот метод будет вызываться динамическим линкером каждый раз, когда сайт вызова пересвязывается (но см. resetAndRelink(GuardedInvocation, MethodHandle) для исключения). Он получит GuardedInvocation, который сайт вызова должен включить в свой целевой обработчик метода. Когда этот метод вызывается, сайту вызова разрешается сохранять другие неотменённые вызовы для реализации полиморфных кэшей вызовов и объединять их с этим вызовом, чтобы сформировать его конечный целевой обработчик.
Параметры:
guardedInvocation - защищенный вызов, который сайт вызова должен включить в свой целевой обработчик метода.
relinkAndInvoke - обработчик метода relink-and-invoke. Это обработчик метода, соответствующий типу метода сайта вызова, предоставляемый 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), а затем вызвать целевой обработчик.

© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/jdk.dynalink/jdk/dynalink/RelinkableCallSite.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API