Класс 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 |
getAutoLoadingErrors() |
Возвращает список объектов ServiceConfigurationError, обнаруженных при загрузке автоматически обнаруженных компоновщиков во время последнего вызова createLinker(). |
void |
setAutoConversionStrategy |
Задает объект, представляющий стратегию преобразования для автоматических преобразований типов. |
void |
setClassLoader |
Задает загрузчик классов для автоматического обнаружения доступных динамических компоновщиков с защитой. |
void |
setFallbackLinkers |
Задает резервные динамические компоновщики с защитой. |
void |
setFallbackLinkers |
Задает резервные динамические компоновщики с защитой. |
void |
setInternalObjectsFilter |
Задает преобразователь дескрипторов методов, который должен служить реализацией LinkerServices.filterInternalObjects(MethodHandle) для служб компоновщика динамических компоновщиков, создаваемых этой фабрикой. |
void |
setPrelinkTransformer |
Задает преобразователь перед связыванием. |
void |
setPrioritizedLinker |
Задает один приоритетный компоновщик. |
void |
setPrioritizedLinkers |
Задает приоритетные динамические компоновщики с защитой. |
void |
setPrioritizedLinkers |
Задает приоритетные динамические компоновщики с защитой. |
void |
setSyncOnRelink |
Задает, будет ли созданный этой фабрикой динамический компоновщик вызывать MutableCallSite.syncAll(MutableCallSite[]) после повторного связывания точки вызова. |
void |
setUnstableRelinkThreshold |
Задает порог нестабильности повторного связывания — число повторных связываний точки вызова, после которого она считается нестабильной и последующие запросы на ее связывание будут указывать на это. |
Методы, объявленные в классе 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, либо до истечения заданного промежутка реального времени. |
Подробное описание конструкторов
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 означает, что точки вызова никогда не будут считаться нестабильными. - См. также:
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. Может быть пустым.
© 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.