Spec-Zone.ru › OpenJDK 25

Класс 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

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

DynamicLinkerFactory

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

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

setClassLoader

public void setClassLoader(ClassLoader classLoader)
Задает загрузчик классов для автоматического поиска доступных защищающих динамических линкеров. Реализации GuardingDynamicLinkerExporter, доступные через этот загрузчик классов, будут автоматически созданы с помощью механизма ServiceLoader, а предоставляемые ими линкеры будут включены в создаваемые этой фабрикой DynamicLinkers. Это позволяет обеспечить взаимодействие между языками: точки вызова, принадлежащие среде выполнения этого языка, могут связываться линкерами из автоматически обнаруженных сред выполнения, если их собственные объекты передаются в эту среду выполнения. Если загрузчик классов явно не задан вызовом этого метода, будет использоваться загрузчик классов контекста потока, вызывающего 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, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/jdk.dynalink/jdk/dynalink/DynamicLinkerFactory.html

Spec-Zone.ru

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