Spec-Zone.ru › OpenJDK 25

Класс 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(CallSiteDescriptor descriptor)
Создаёт новую цепочечную точку вызова.

Краткое описание методов

Модификатор и тип Метод Описание
protected int getMaxChainLength()
Максимальное количество дескрипторов методов в цепочке.
void relink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
Этот метод будет вызываться динамическим компоновщиком каждый раз при перепривязке точки вызова (исключение см. в описании RelinkableCallSite.resetAndRelink(GuardedInvocation, MethodHandle)).
void resetAndRelink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
Этот метод будет вызываться динамическим компоновщиком каждый раз при перепривязке точки вызова, и если компоновщик хочет, чтобы точка вызова отбросила предыдущее состояние связывания (именно этим он отличается от RelinkableCallSite.relink(GuardedInvocation, MethodHandle)).

Методы, объявленные в классе AbstractRelinkableCallSite

getDescriptor, initialize

Методы, объявленные в классе MutableCallSite

dynamicInvoker, getTarget, setTarget, syncAll

Методы, объявленные в классе CallSite

type

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание конструкторов

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), а затем вызовет цель.

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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://docs.oracle.com/en/java/javase/25/docs/api/jdk.dynalink/jdk/dynalink/support/ChainedCallSite.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API