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