Интерфейс RelinkableCallSite
- Все известные реализующие классы:
-
AbstractRelinkableCallSite,ChainedCallSite,SimpleRelinkableCallSite
public interface RelinkableCallSite
Интерфейс для узлов вызова, управляемых
DynamicLinker. Пользователи Dynalink должны использовать подклассы CallSite, которые также реализуют этот интерфейс, в качестве своих реализаций узлов вызова. Существует готовый к использованию подкласс SimpleRelinkableCallSite, реализующий мономорфную стратегию кэширования встраивания, а также ChainedCallSite, реализующий полиморфную стратегию кэширования встраивания и сохраняющий цепочку ранее связанных обработчиков методов. Связываемый узел вызова будет управляться объектом DynamicLinker после его ассоциации с ним с помощью метода DynamicLinker.link(RelinkableCallSite).- С:
- 9
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
CallSiteDescriptor |
getDescriptor() |
Возвращает дескриптор для данного узла вызова. |
void |
initialize |
Вызывается динамическим связующим элементом для инициализации связываемого узла вызова путем задания обработчика метода для пересвязывания и вызова. |
void |
relink |
Этот метод будет вызываться динамическим связующим элементом каждый раз, когда узел вызова пересвязывается (но см. resetAndRelink(GuardedInvocation, MethodHandle) для исключения). |
void |
resetAndRelink |
Этот метод будет вызываться динамическим связующим элементом каждый раз, когда узел вызова пересвязывается и связующий элемент хочет, чтобы узел вызова отбросил любое предыдущее состояние связи (в этом его отличие от relink(GuardedInvocation, MethodHandle)). |
Подробное описание методов
initialize
void initialize(MethodHandle relinkAndInvoke)
Вызывается динамическим связующим элементом для инициализации связываемого узла вызова путем задания обработчика метода для пересвязывания и вызова. Реализация узла вызова должна установить этот обработчик метода в качестве своей цели, используя
CallSite.setTarget(MethodHandle). Пересвязывание и вызов — это начальный обработчик метода, установленный методом 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)
Этот метод будет вызываться динамическим связующим элементом каждый раз, когда узел вызова пересвязывается и связующий элемент хочет, чтобы узел вызова отбросил любое предыдущее состояние связи (в этом его отличие от
relink(GuardedInvocation, MethodHandle)). Ему будет передан GuardedInvocation, который узел вызова должен использовать для построения своего нового целевого обработчика метода. При вызове этого метода узел вызова должен избегать сохранения любого предыдущего состояния и должен связать только текущее обращение.- Параметры:
-
guardedInvocation- защищенное обращение, которое узел вызова должен использовать для построения своего целевого обработчика метода. -
relinkAndInvoke- обработчик метода для пересвязывания и вызова. Это обработчик метода, соответствующий типу метода узла вызова, который предоставляетсяDynamicLinkerв качестве обратного вызова. Он должен использоваться этим узлом вызова в качестве окончательного резервного варианта, когда он не может вызвать свою цель с переданными аргументами. Резервный метод такой, что при его вызове он попытается получить соответствующее целевоеGuardedInvocationдля вызова и после этого вызватьrelink(GuardedInvocation, MethodHandle)илиresetAndRelink(GuardedInvocation, MethodHandle), а затем вызвать цель.
© 1993, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/jdk.dynalink/jdk/dynalink/RelinkableCallSite.html