Spec-Zone.ru › OpenJDK 21

Класс 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(MethodTypeConversionStrategy autoConversionStrategy)
Устанавливает объект, представляющий стратегию преобразования для автоматических преобразований типов.
void setClassLoader(ClassLoader classLoader)
Устанавливает загрузчик классов для автоматического обнаружения доступных динамических линков-защитников.
void setFallbackLinkers(List<? extends GuardingDynamicLinker> fallbackLinkers)
Устанавливает резервные динамические линки-защитники.
void setFallbackLinkers(GuardingDynamicLinker... fallbackLinkers)
Устанавливает резервные динамические линки-защитники.
void setInternalObjectsFilter(MethodHandleTransformer internalObjectsFilter)
Устанавливает трансформатор для обработки handle-методов, который должен выступать в качестве реализации 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)
Устанавливает порог нестабильности пересвязывания; количество раз, когда сайт вызова пересвязывается после чего он будет считаться нестабильным, и последующие запросы на пересвязывание для него будут указывать на это.

Методы, унаследованные от класса java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

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

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 - новый порог. Должен быть не меньше нуля. Значение нуля означает, что места вызова никогда не будут считаться неустойчивыми.
См. также:
  • 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, возникших при попытке загрузить автоматически обнаруженные линковщики. Они никогда не выбрасываются из вызова этого метода, так как он прилагает все усилия для восстановления и игнорирования сбоя линковщиков.
Returns:
новый динамический линковщик

getAutoLoadingErrors

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

© 1993, 2023, 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/21/docs/api/jdk.dynalink/jdk/dynalink/DynamicLinkerFactory.html

Spec-Zone.ru

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