Spec-Zone.ru › OpenJDK 27

Класс DynamicLinkerFactory

java.lang.Object
jdk.dynalink.DynamicLinkerFactory
public final class DynamicLinkerFactory extends Object
Фабричный класс для создания объектов DynamicLinker. Динамические компоновщики — это центральные объекты в Dynalink; они состоят из нескольких объектов GuardingDynamicLinker и координируют связывание точек вызова с ними. Обычный динамический компоновщик — это компоновщик, состоящий из всех объектов GuardingDynamicLinker, явно созданных пользователем фабрики и настроенных с помощью setPrioritizedLinkers(List), а также любых объектов, настроенных с помощью automatically discovered, и, наконец, объектов, настроенных с помощью setFallbackLinkers(List); к последней категории обычно относится BeansLinker.
С версии:
9

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

Конструктор Описание
DynamicLinkerFactory()
Создает фабрику динамических компоновщиков с конфигурацией по умолчанию.

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

Модификатор и тип Метод Описание
DynamicLinker createLinker()
Создает динамический компоновщик на основе текущей конфигурации.
List<ServiceConfigurationError> getAutoLoadingErrors()
Возвращает список объектов ServiceConfigurationError, обнаруженных при загрузке автоматически обнаруженных компоновщиков во время последнего вызова createLinker().
void setAutoConversionStrategy(MethodTypeConversionStrategy autoConversionStrategy)
Задает объект, представляющий стратегию преобразования для автоматических преобразований типов.
void setClassLoader(ClassLoader classLoader)
Задает загрузчик классов для автоматического обнаружения доступных динамических компоновщиков с защитой.
void setFallbackLinkers(List<? extends GuardingDynamicLinker> fallbackLinkers)
Задает резервные динамические компоновщики с защитой.
void setFallbackLinkers(GuardingDynamicLinker... fallbackLinkers)
Задает резервные динамические компоновщики с защитой.
void setInternalObjectsFilter(MethodHandleTransformer internalObjectsFilter)
Задает преобразователь дескрипторов методов, который должен служить реализацией LinkerServices.filterInternalObjects(MethodHandle) для служб компоновщика динамических компоновщиков, создаваемых этой фабрикой.
void setPrelinkTransformer(GuardedInvocationTransformer prelinkTransformer)
Задает преобразователь перед связыванием.
void setPrioritizedLinker(GuardingDynamicLinker prioritizedLinker)
Задает один приоритетный компоновщик.
void setPrioritizedLinkers(List<? extends GuardingDynamicLinker> prioritizedLinkers)
Задает приоритетные динамические компоновщики с защитой.
void setPrioritizedLinkers(GuardingDynamicLinker... prioritizedLinkers)
Задает приоритетные динамические компоновщики с защитой.
void setSyncOnRelink(boolean syncOnRelink)
Задает, будет ли созданный этой фабрикой динамический компоновщик вызывать MutableCallSite.syncAll(MutableCallSite[]) после повторного связывания точки вызова.
void setUnstableRelinkThreshold(int unstableRelinkThreshold)
Задает порог нестабильности повторного связывания — число повторных связываний точки вызова, после которого она считается нестабильной и последующие запросы на ее связывание будут указывать на это.

Методы, объявленные в классе 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, либо до истечения заданного промежутка реального времени.

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

DynamicLinkerFactory

public DynamicLinkerFactory()
Создает фабрику динамических компоновщиков с конфигурацией по умолчанию. После создания фабрику можно настроить с помощью различных методов setXxx() и использовать для создания одного или нескольких динамических компоновщиков в соответствии с ее текущей конфигурацией посредством вызова createLinker().

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

setClassLoader

public void setClassLoader(ClassLoader classLoader)
Задает загрузчик классов для автоматического обнаружения доступных динамических компоновщиков с защитой. Реализации GuardingDynamicLinkerExporter, доступные через этот загрузчик классов, будут автоматически созданы с использованием механизма ServiceLoader, а предоставляемые ими компоновщики будут включены в DynamicLinkerы, создаваемые этой фабрикой. Это обеспечивает взаимодействие между языками: точки вызова этой языковой среды выполнения могут связываться компоновщиками из автоматически обнаруженных сред выполнения, если их собственные объекты передаются в эту среду выполнения. Если загрузчик классов явно не задан вызовом этого метода, будет использоваться загрузчик классов контекста потока, вызывающего createLinker(). Если этот метод явно вызван со значением null, для загрузки компоновщиков будет использоваться ServiceLoader.loadInstalled(Class).
Параметры:
classLoader — загрузчик классов, используемый для автоматического обнаружения доступных компоновщиков.

setPrioritizedLinkers

public void setPrioritizedLinkers(List<? extends GuardingDynamicLinker> prioritizedLinkers)
Задает приоритетные динамические компоновщики с защитой. В языковых средах выполнения, использующих Dynalink, обычно имеется как минимум один компоновщик для собственного языка. При связывании точек вызова итоговый динамический компоновщик будет обращаться сначала к этим компоновщикам, прежде чем к автоматически обнаруженным и резервным компоновщикам. Если фабрика также автоматически обнаруживает класс компоновщика, соответствующий одному из приоритетных компоновщиков, автоматически обнаруженный класс будет проигнорирован, а вместо него будет использоваться явно заданный приоритетный экземпляр.
Параметры:
prioritizedLinkers — список приоритетных компоновщиков. Может быть null.
Исключения:
NullPointerException — если какой-либо элемент списка равен null.

setPrioritizedLinkers

public void setPrioritizedLinkers(GuardingDynamicLinker... prioritizedLinkers)
Задает приоритетные динамические компоновщики с защитой. Эквивалентно вызову setPrioritizedLinkers(List) с Arrays.asList(prioritizedLinkers).
Параметры:
prioritizedLinkers — массив приоритетных компоновщиков. Может быть null.
Исключения:
NullPointerException — если какой-либо элемент массива равен null.

setPrioritizedLinker

public void setPrioritizedLinker(GuardingDynamicLinker prioritizedLinker)
Задает один приоритетный компоновщик. Эквивалентно вызову setPrioritizedLinkers(List) со списком из одного элемента.
Параметры:
prioritizedLinker — единственный приоритетный компоновщик. Не должен быть null.
Исключения:
NullPointerException — если передано значение null.

setFallbackLinkers

public void setFallbackLinkers(List<? extends GuardingDynamicLinker> fallbackLinkers)
Задает резервные динамические компоновщики с защитой. При связывании точек вызова итоговый динамический компоновщик будет обращаться к этим компоновщикам последними, после автоматически обнаруженных и приоритетных компоновщиков. Если фабрика также автоматически обнаруживает класс компоновщика, соответствующий одному из резервных компоновщиков, автоматически обнаруженный класс будет проигнорирован, а вместо него будет использоваться явно заданный резервный экземпляр.
Параметры:
fallbackLinkers — список резервных компоновщиков. Может быть пустым, если вызывающий код не хочет задавать резервные компоновщики. Обратите внимание: если этот метод явно не вызывается или ему передается null, фабрика создаст экземпляр BeansLinker, который будет использоваться в качестве резервного компоновщика по умолчанию.
Исключения:
NullPointerException — если какой-либо элемент списка равен null.

setFallbackLinkers

public void setFallbackLinkers(GuardingDynamicLinker... fallbackLinkers)
Задает резервные динамические компоновщики с защитой. Эквивалентно вызову setFallbackLinkers(List) с Arrays.asList(fallbackLinkers).
Параметры:
fallbackLinkers — массив резервных компоновщиков. Может быть пустым, если вызывающий код не хочет задавать резервные компоновщики. Обратите внимание: если этот метод явно не вызывается или ему передается null, фабрика создаст экземпляр BeansLinker, который будет использоваться в качестве резервного компоновщика по умолчанию.
Исключения:
NullPointerException — если какой-либо элемент массива равен null.

setSyncOnRelink

public void setSyncOnRelink(boolean syncOnRelink)
Задает, будет ли созданный этой фабрикой динамический компоновщик вызывать MutableCallSite.syncAll(MutableCallSite[]) после повторного связывания точки вызова. По умолчанию имеет значение false. Вероятно, следует установить значение true, если ваша среда выполнения поддерживает многопоточное выполнение динамически связанного кода.
Параметры:
syncOnRelink — true для вызова sync при повторном связывании, иначе false.

setUnstableRelinkThreshold

public void setUnstableRelinkThreshold(int unstableRelinkThreshold)
Задает порог нестабильности повторного связывания — число повторных связываний точки вызова, после которого она считается нестабильной и последующие запросы на ее связывание будут указывать на это. Если значение не задано явно, по умолчанию используется 8.
Параметры:
unstableRelinkThreshold — новое пороговое значение. Не должно быть меньше нуля. Значение 0 означает, что точки вызова никогда не будут считаться нестабильными.
См. также:
  • LinkRequest.isCallSiteUnstable()

setPrelinkTransformer

public void setPrelinkTransformer(GuardedInvocationTransformer prelinkTransformer)
Задает преобразователь перед связыванием. Это GuardedInvocationTransformer, которому предоставляется последняя возможность изменить защищенный вызов после его создания компонентным компоновщиком и до того, как динамический компоновщик привяжет его к точке вызова. Обычно он используется для приведения типа возвращаемого значения вызова к типу точки вызова. Если преобразователь не задан явно, будет использоваться преобразователь перед связыванием по умолчанию, который просто вызывает GuardedInvocation.asType(LinkerServices, MethodType). Пользовательские преобразователи перед связыванием требуются редко; в основном они используются как строительные блоки для реализации расширенных методов, например стратегий деоптимизации кода.
Параметры:
prelinkTransformer — преобразователь перед связыванием для динамического компоновщика. Может быть null, чтобы фабрика использовала преобразователь по умолчанию.

setAutoConversionStrategy

public void setAutoConversionStrategy(MethodTypeConversionStrategy autoConversionStrategy)
Задает объект, представляющий стратегию преобразования для автоматических преобразований типов. После того как LinkerServices.asType(MethodHandle, MethodType) применит все пользовательские преобразования к дескриптору метода, ему все еще необходимо выполнить method invocation conversions, которые обычно можно применить автоматически в соответствии с MethodHandle.asType(MethodType). Однако иногда средам выполнения языков требуется настраивать и эти преобразования для собственных точек вызова. Типичный пример — разрешение распаковки возвращаемых значений null, которая по умолчанию запрещена обычными MethodHandles.asType(). В этом случае языковая среда выполнения может установить собственную стратегию автоматического преобразования, способную обрабатывать значения null. Обратите внимание: при вызове MethodTypeConversionStrategy.asType(MethodHandle, MethodType) этой стратегии пользовательские языковые преобразования уже будут применены к дескриптору метода, поэтому по замыслу разница между текущим типом метода дескриптора и требуемым конечным типом всегда будет ограничиваться преобразованиями при вызове метода. Стратегии также не требуется вызывать завершающий MethodHandle.asType(), поскольку это будет выполнено внутри системы в качестве последнего шага.
Параметры:
autoConversionStrategy — стратегия применения преобразований при вызове метода для компоновщика, созданного этой фабрикой. Может быть null, если пользовательская стратегия не требуется.

setInternalObjectsFilter

public void setInternalObjectsFilter(MethodHandleTransformer internalObjectsFilter)
Задает преобразователь дескрипторов методов, предназначенный для реализации LinkerServices.filterInternalObjects(MethodHandle) в службах компоновщика динамических компоновщиков, создаваемых этой фабрикой. В некоторых языковых средах выполнения могут быть внутренние объекты, которые не должны покидать их область видимости. Здесь можно добавить преобразователь, который изменит дескриптор метода так, чтобы к параметрам, способным принимать потенциально внутренние объекты языковой среды выполнения, применялся фильтр, предотвращающий их утечку, например путем оборачивания. Преобразователь также может добавить фильтр снятия обертки для возвращаемого значения. Для удобного создания таких фильтрующих преобразователей предоставляется DefaultInternalObjectFilter.
Параметры:
internalObjectsFilter — преобразователь дескрипторов методов, фильтрующий внутренние объекты, или null.

createLinker

public DynamicLinker createLinker()
Создает динамический компоновщик на основе текущей конфигурации. Этот метод можно вызвать несколько раз для создания нескольких динамических компоновщиков. Автоматически обнаруженные компоновщики создаются заново при каждом вызове этого метода. Конфигурацию фабрики разрешается изменять между вызовами. Метод не является потокобезопасным. После его вызова можно вызвать getAutoLoadingErrors(), чтобы получить список объектов ServiceConfigurationError, возникших при попытке загрузить автоматически обнаруженные компоновщики. Эти исключения никогда не выбрасываются при вызове данного метода, поскольку он прилагает все усилия для восстановления после них и игнорирования компоновщиков, загрузка которых завершилась с ошибкой.
Возвращает:
новый динамический компоновщик

getAutoLoadingErrors

public List<ServiceConfigurationError> getAutoLoadingErrors()
Возвращает список объектов ServiceConfigurationError, обнаруженных при загрузке автоматически обнаруженных компоновщиков во время последнего вызова createLinker(). Это могут быть любые проблемы конфигурации служб, не относящиеся к Dynalink, а также некоторые специфичные для Dynalink ошибки, возникающие, если экспортер, который фабрика пыталась загрузить автоматически:
  • вернул null из Supplier.get(); или
  • список, возвращенный из Supplier.get(), содержал элемент null.
Возвращает:
неизменяемый список обнаруженных объектов ServiceConfigurationError. Может быть пустым.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по 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