Spec-Zone.ru › OpenJDK 27

Класс 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
Модификатор и тип Метод Описание
CallSiteDescriptor getDescriptor()
Возвращает дескриптор этой точки вызова.
void initialize(MethodHandle relinkAndInvoke)
Вызывается динамическим компоновщиком для инициализации перелинковываемой точки вызова путём установки дескриптора метода для перелинковки и вызова.

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

dynamicInvoker, getTarget, setTarget, syncAll
Модификатор и тип Метод Описание
final MethodHandle dynamicInvoker()
Создаёт дескриптор метода, эквивалентный инструкции invokedynamic, связанной с этой точкой вызова.
final MethodHandle getTarget()
Возвращает целевой метод точки вызова, который ведёт себя как обычное поле MutableCallSite.
void setTarget(MethodHandle newTarget)
Обновляет целевой метод этой точки вызова как обычную переменную.
static void syncAll(MutableCallSite[] sites)
Выполняет операцию синхронизации для каждой точки вызова в указанном массиве, заставляя все остальные потоки отбросить ранее загруженные кэшированные значения, полученные из целевого метода любой из этих точек вызова.

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

type
Модификатор и тип Метод Описание
MethodType type()
Возвращает тип целевого метода этой точки вызова.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект какому-либо другому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии.
Финализация объявлена устаревшей и подлежит удалению в одном из следующих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Приостанавливает текущий поток до пробуждения, обычно в результате вызова notify или interrupt.
final void wait(long timeoutMillis)
Приостанавливает текущий поток до пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного времени.
final void wait(long timeoutMillis, int nanos)
Приостанавливает текущий поток до пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного времени.

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

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, 2026, 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.

Spec-Zone.ru

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