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