Класс 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)). |
Методы, объявленные в классе AbstractRelinkableCallSite
getDescriptor, initialize | Модификатор и тип | Метод | Описание |
|---|---|---|
CallSiteDescriptor |
getDescriptor() |
Возвращает дескриптор этой точки вызова. |
void |
initialize |
Вызывается динамическим компоновщиком для инициализации перелинковываемой точки вызова путём установки дескриптора метода для перелинковки и вызова. |
Методы, объявленные в классе MutableCallSite
dynamicInvoker, getTarget, setTarget, syncAll | Модификатор и тип | Метод | Описание |
|---|---|---|
final MethodHandle |
dynamicInvoker() |
Создаёт дескриптор метода, эквивалентный инструкции invokedynamic, связанной с этой точкой вызова. |
final MethodHandle |
getTarget() |
Возвращает целевой метод точки вызова, который ведёт себя как обычное поле MutableCallSite. |
void |
setTarget |
Обновляет целевой метод этой точки вызова как обычную переменную. |
static void |
syncAll |
Выполняет операцию синхронизации для каждой точки вызова в указанном массиве, заставляя все остальные потоки отбросить ранее загруженные кэшированные значения, полученные из целевого метода любой из этих точек вызова. |
Методы, объявленные в классе CallSite
type | Модификатор и тип | Метод | Описание |
|---|---|---|
MethodType |
type() |
Возвращает тип целевого метода этой точки вызова. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект какому-либо другому объекту. |
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 |
Приостанавливает текущий поток до пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного времени. |
final void |
wait |
Приостанавливает текущий поток до пробуждения, обычно в результате вызова 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)и, наконец, вызвать цель.
© 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.