Класс 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 объекта, созданного в проигравшем потоке, без его включения в цепочку, что может привести к повторному подключению для одних и тех же аргументов.Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
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, 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/support/ChainedCallSite.html