Класс ChainedCallSite
java.lang.Object
java.lang.invoke.CallSite
java.lang.invoke.MutableCallSite
jdk.dynalink.support.AbstractRelinkableCallSite
jdk.dynalink.support.ChainedCallSite
- Все реализованные интерфейсы:
RelinkableCallSite
public class ChainedCallSite extends AbstractRelinkableCallSite
Объект вызова, поддерживающий переподключение, реализующий полиморфную стратегию кэширования встраиваемых вызовов. Он запоминает до 8 объектов
GuardedInvocation, с которыми он был связан, и при каждом запросе на переподключение строит каскадную цепочку обработчиков методов, где один вызов переходит к следующему. Количество запоминаемых вызовов можно настроить, переопределив getMaxChainLength() в подклассе. Когда этот объект вызова переподключается к новому вызову, а длина цепочки уже достигла максимума, он отбрасывает самый старый вызов. Вызовы с недействительными точками переключения и вызовы, для которых вызывающие исключения стали недействительными, удаляются из цепочки. Вызовы никогда не переупорядочиваются; самый последний связанный обработчик методов всегда находится в начале цепочки, а самый старый — в конце. К объекту вызова можно безопасно переподключаться в нескольких потоках одновременно. Конфликты в процессе связывания решаются путём отбрасывания объекта GuardedInvocation, созданного в проигравшем потоке, без включения его в цепочку, поэтому может происходить повторное связывание для одних и тех же аргументов.- С тех пор:
- 9
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
ChainedCallSite |
Создаёт новый объект вызова в цепочке. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
protected int |
getMaxChainLength() |
Максимальное количество обработчиков методов в цепочке. |
void |
relink |
Этот метод будет вызван динамическим линковщиком каждый раз, когда объект вызова переподключается (но см. RelinkableCallSite.resetAndRelink(GuardedInvocation, MethodHandle) для исключения). |
void |
resetAndRelink |
Этот метод будет вызван динамическим линковщиком каждый раз, когда объект вызова переподключается и линковщик хочет, чтобы объект вызова отбросил любое предыдущее состояние связывания (в этом отличие от RelinkableCallSite.relink(GuardedInvocation, MethodHandle)). |
Методы, объявленные в классе jdk.dynalink.support.AbstractRelinkableCallSite
getDescriptor, initialize
Методы, объявленные в классе java.lang.invoke.MutableCallSite
dynamicInvoker, getTarget, setTarget, syncAll
Подробное описание конструкторов
ChainedCallSite
public ChainedCallSite(CallSiteDescriptor descriptor)
Создаёт новый объект вызова в цепочке.
- Параметры:
-
descriptor- описание объекта вызова.
Подробное описание методов
getMaxChainLength
protected int getMaxChainLength()
Максимальное количество обработчиков методов в цепочке. По умолчанию 8. Можно переопределить в подклассе, если нужно изменить значение.
- Возвращает:
- максимальное количество обработчиков методов в цепочке. Значение проверяется, и если переопределённое значение меньше 1, будет выброшено исключение
RuntimeException.
relink
public void relink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
Описание, скопированное из интерфейса:
RelinkableCallSiteЭтот метод будет вызван динамическим линковщиком каждый раз, когда объект вызова переподключается (но см.
RelinkableCallSite.resetAndRelink(GuardedInvocation, MethodHandle) для исключения). Ему будет передан объект GuardedInvocation, который объект вызова должен включить в свой целевой обработчик методов. Когда этот метод вызывается, объекту вызова разрешено сохранять другие неотменённые вызовы для реализации полиморфного кэширования встраиваемых вызовов и комбинировать их с этим вызовом, чтобы сформировать его окончательный целевой объект.- Параметры:
-
guardedInvocation- объект защищённого вызова, который объект вызова должен включить в свой целевой обработчик методов. -
relinkAndInvoke- обработчик методов переподключения и вызова. Это обработчик методов, соответствующий типу метода объекта вызова, который предоставляетсяDynamicLinkerв качестве обратного вызова. Он должен использоваться этим объектом вызова в качестве окончательного резервного варианта, когда он не может вызвать свой целевой объект с переданными аргументами. Резервный метод таков, что при его вызове он попытается получить подходящий целевойGuardedInvocationдля вызова и впоследствии вызоветRelinkableCallSite.relink(GuardedInvocation, MethodHandle)илиRelinkableCallSite.resetAndRelink(GuardedInvocation, MethodHandle), а затем вызовет целевой объект.
resetAndRelink
public void resetAndRelink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
Описание, скопированное из интерфейса:
RelinkableCallSiteЭтот метод будет вызван динамическим линковщиком каждый раз, когда объект вызова переподключается и линковщик хочет, чтобы объект вызова отбросил любое предыдущее состояние связывания (в этом отличие от
RelinkableCallSite.relink(GuardedInvocation, MethodHandle)). Ему будет передан объект GuardedInvocation, который объект вызова должен использовать для построения своего нового целевого обработчика методов. Когда этот метод вызывается, объекту вызова не рекомендуется сохранять предыдущее состояние, и он должен связать только текущий вызов.- Параметры:
-
guardedInvocation- объект защищённого вызова, который объект вызова должен использовать для построения своего целевого обработчика методов. -
relinkAndInvoke- обработчик методов переподключения и вызова. Это обработчик методов, соответствующий типу метода объекта вызова, который предоставляетсяDynamicLinkerв качестве обратного вызова. Он должен использоваться этим объектом вызова в качестве окончательного резервного варианта, когда он не может вызвать свой целевой объект с переданными аргументами. Резервный метод таков, что при его вызове он попытается получить подходящий целевойGuardedInvocationдля вызова и впоследствии вызоветRelinkableCallSite.relink(GuardedInvocation, MethodHandle)илиRelinkableCallSite.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/support/ChainedCallSite.html