Интерфейс Linker.Option
- Охватываемый интерфейс:
Linker
public static sealed interface Linker.Option
- С:
- 22
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static Linker.Option |
captureCallState |
Возвращает опцию линковщика, используемую для сохранения частей состояния выполнения сразу после вызова внешней функции, связанной с обработчиком метода вызова вниз, прежде чем его может перезаписать среда выполнения Java или прочитать обычным способом. |
static StructLayout |
captureStateLayout() |
Возвращает структуру макета, представляющую макет сегмента состояния захвата, передаваемого обработчику вызова вниз, связанному с captureCallState(String...). |
static Linker.Option |
critical |
Возвращает опцию линковщика, используемую для маркировки внешней функции как критической. |
static Linker.Option |
firstVariadicArg |
Возвращает опцию линковщика, используемую для обозначения индекса, указывающего начало переменных аргументов, переданных функции, описанной дескриптором функции, связанной с запросом связи вызова вниз. |
Подробное описание методов
firstVariadicArg
static Linker.Option firstVariadicArg(int index)
Значение index должно соответствовать 0 <= index <= N, где N — количество макетов аргументов дескриптора функции, используемых совместно с этой опцией линковщика. Когда index:
-
0, все аргументы, передаваемые функции, передаются как переменные аргументы -
N, ни один из аргументов, передаваемых функции, не передаётся как переменные аргументы -
n, где0 < m < N, аргументыm..Nпередаются как переменные аргументы
- Примечание к реализации:
- Значение индекса проверяется при выполнении запроса связи, когда доступен дескриптор функции, по которому выполняется проверка индекса.
- Параметры:
-
index— индекс макета первого переменного аргумента в дескрипторе функции, связанной с запросом связи вызова вниз - Возвращает:
- опцию линковщика, используемую для обозначения индекса, указывающего начало переменных аргументов, переданных функции, описанной дескриптором функции, связанной с запросом связи вызова вниз
captureCallState
static Linker.Option captureCallState(String... capturedState)
Состояние выполнения захватывается обработчиком метода вызова вниз при вызове, записывая его в нативный сегмент, предоставленный пользователем обработчику метода вызова вниз. Для этой цели обработчик метода вызова вниз, связанный с этой опцией, будет содержать дополнительный параметр MemorySegment непосредственно после целевого адреса и необязательные параметры SegmentAllocator. Этот параметр, сегмент состояния захвата, представляет собой нативный сегмент, в который записывается захваченное состояние.
Сегмент состояния захвата должен иметь размер и выравнивание, совместимые с макетом, возвращаемым captureStateLayout(). Этот макет — макет структуры, имеющий именованное поле для каждого захваченного значения.
Захваченное состояние можно извлечь из сегмента состояния захвата, создав обработчики переменных из макета состояния захвата.
Следующий пример демонстрирует использование этой опции линковщика:
MemorySegment targetAddress = ...
Linker.Option ccs = Linker.Option.captureCallState("errno");
MethodHandle handle = Linker.nativeLinker().downcallHandle(targetAddress, FunctionDescriptor.ofVoid(), ccs);
StructLayout capturedStateLayout = Linker.Option.captureStateLayout();
VarHandle errnoHandle = capturedStateLayout.varHandle(PathElement.groupElement("errno"));
try (Arena arena = Arena.ofConfined()) {
MemorySegment capturedState = arena.allocate(capturedStateLayout);
handle.invoke(capturedState);
int errno = (int) errnoHandle.get(capturedState, 0L);
// use errno
}
- Параметры:
-
capturedState— имена сохраняемых значений - Возвращает:
- опцию линковщика, используемую для сохранения частей состояния выполнения сразу после вызова внешней функции, связанной с обработчиком метода вызова вниз, прежде чем его может перезаписать среда выполнения Java или прочитать обычным способом
- Исключения:
-
IllegalArgumentException— если хотя бы одно из предоставленныхcapturedStateимён не поддерживается на текущей платформе - См. также:
captureStateLayout
static StructLayout captureStateLayout()
captureCallState(String...). Макет состояния захвата зависит от платформы, но гарантируется, что это макет структуры, содержащий только макеты значений и, возможно, макеты заполнения. Например, в Windows возвращаемый макет может содержать три макета значений с именами:
- GetLastError
- WSAGetLastError
- errno
Клиенты могут получить имена поддерживаемых макетов захваченных значений следующим образом:
List<String> capturedNames = Linker.Option.captureStateLayout().memberLayouts().stream()
.map(MemoryLayout::name)
.flatMap(Optional::stream)
.toList();
- Возвращает:
- макет структуры, представляющий макет сегмента состояния захвата, передаваемого обработчику вызова вниз, связанному с
captureCallState(String...) - См. также:
critical
static Linker.Option critical(boolean allowHeapAccess)
Критическая функция — это функция, время выполнения которой в любом случае чрезвычайно мало (аналогично вызову пустой функции) и не вызывает обратные вызовы в Java (например, с помощью заглушки обратного вызова).
Использование этой опции линковщика является подсказкой, которую некоторые реализации могут использовать для применения оптимизаций, справедливых только для критических функций.
Использование этой опции линковщика при связывании некритических функций, вероятно, приведёт к нежелательным последствиям, таким как потеря производительности или сбои JVM.
Критические функции могут необязательно допускать доступ к куче Java. Это позволяет клиентам передавать сегменты памяти кучи в качестве адресов, где обычно разрешены только сегменты памяти вне кучи. Область памяти внутри кучи Java доступна через временный нативный адрес, действительный в течение времени выполнения функции. Поэтому использование этого механизма рекомендуется только тогда, когда функция нуждается в кратковременном доступе к памяти кучи Java, а копирование соответствующих данных в сегмент памяти вне кучи было бы неприемлемо с точки зрения производительности.
- Параметры:
-
allowHeapAccess— следует ли разрешить связанной функции доступ к куче Java. - Возвращает:
- опцию линковщика, используемую для маркировки внешней функции как критической
© 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/java.base/java/lang/foreign/Linker.Option.html