Класс DynamicLinkerFactory
java.lang.Object
jdk.dynalink.DynamicLinkerFactory
public final class DynamicLinkerFactory extends Object
Класс-фабрика для создания объектов
DynamicLinker. Динамические линкеры являются центральными объектами в Dynalink; они состоят из нескольких объектов GuardingDynamicLinker и координируют связывание точек вызова с ними. Обычный динамический линкер – это линкер, составленный из всех объектов GuardingDynamicLinker, явно предварительно созданных пользователем фабрики и сконфигурированных с помощью setPrioritizedLinkers(List), а также всех объектов automatically discovered, а в конечном итоге – тех, которые сконфигурированы с помощью setFallbackLinkers(List); эта последняя категория обычно включает в себя BeansLinker.Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
DynamicLinkerFactory() |
Создаёт новую фабрику динамического линкера с настройками по умолчанию. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
DynamicLinker |
createLinker() |
Создаёт новый динамический линкер на основе текущей конфигурации. |
List<ServiceConfigurationError> |
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 |
Устанавливает порог нестабильности перелинковки; количество раз, когда точка вызова перелинковывается после которого она считается нестабильной, и последующие запросы на линковку для нее будут указывать на это. |
Подробное описание конструкторов
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 для вызова синхронизации при перелинковке, false в противном случае.
setUnstableRelinkThreshold
public void setUnstableRelinkThreshold(int unstableRelinkThreshold)
Устанавливает порог неустойчивой перелинковки; количество раз, когда место вызова перелинковано после чего оно будет считаться неустойчивым, и последующие запросы на связывание для него будут указывать на это. По умолчанию 8, если не установлено явно.
- Параметры:
-
unstableRelinkThreshold- новый порог. Должен быть не меньше нуля. Значение нуля означает, что места вызовов никогда не будут считаться неустойчивыми. - См. также:
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, возникших во время попытки загрузить автоматически обнаруженные линнеры. Они никогда не выбрасываются из вызова этого метода, так как он делает всё возможное для их восстановления и игнорирования неудачных линкеров.- Returns:
- новый динамический линкер
getAutoLoadingErrors
public List<ServiceConfigurationError> getAutoLoadingErrors()
Возвращает список
ServiceConfigurationError, с которыми столкнулись при загрузке автоматически обнаруженных линкеров во время последнего вызова createLinker(). Они могут быть любыми проблемами конфигурации службы, не связанными с Dynalink, а также некоторыми ошибками, специфичными для Dynalink, когда экспортер, который фабрика пыталась загрузить автоматически: - не имел права выполнения с именем
GuardingDynamicLinkerExporter.AUTOLOAD_PERMISSION_NAMEв системе с менеджером безопасности, или - вернул null из
Supplier.get(), или - список, возвращённый из
Supplier.get(), содержал null-элемент.
- Returns:
- неизменяемый список встреченных
ServiceConfigurationError. Может быть пустым.
© 1993, 2021, 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/17/docs/api/jdk.dynalink/jdk/dynalink/DynamicLinkerFactory.html