Spec-Zone.ru › OpenJDK 24

Класс 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)
Устанавливает преобразователь метода 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 предоставляется как удобный класс для создания таких фильтрующих преобразователей.
Parameters:
internalObjectsFilter - преобразователь обработчика методов, отфильтровывающий внутренние объекты, или null.

createLinker

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

getAutoLoadingErrors

public List<ServiceConfigurationError> getAutoLoadingErrors()
Возвращает список ServiceConfigurationError, которые были встречены во время загрузки автоматически обнаруженных линков во время последнего вызова createLinker(). Они могут быть любыми проблемами конфигурации сервисов, не связанными с Dynalink, а также некоторыми проблемами, специфичными для Dynalink, когда экспортер, который фабрика пыталась загрузить автоматически:
  • вернул null из Supplier.get(), или
  • список, возвращаемый из Supplier.get(), имел нулевой элемент.
Returns:
неизменяемый список встреченных 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.
https://download.java.net/java/early_access/jdk24/docs/api/jdk.dynalink/jdk/dynalink/DynamicLinkerFactory.html

Spec-Zone.ru

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