Интерфейс SegmentAllocator
- Все известные подинтерфейсы:
Arena
- Функциональный интерфейс:
- Это функциональный интерфейс и, следовательно, может использоваться в качестве целевого назначения для лямбда-выражения или ссылки на метод.
@FunctionalInterface public interface SegmentAllocator
allocate(long, long). Сегментный аллокатор определяет несколько методов, которые могут быть полезны для создания сегментов из различных типов значений Java, таких как примитивы и массивы. SegmentAllocator является функциональным интерфейсом. Клиенты могут легко получить новый сегментный аллокатор, используя лямбда-выражение или ссылку на метод:
SegmentAllocator autoAllocator = (byteSize, byteAlignment) -> Arena.ofAuto().allocate(byteSize, byteAlignment);
Этот интерфейс определяет фабрики для часто используемых аллокаторов:
-
slicingAllocator(MemorySegment)получает эффективный аллокатор срезов, где память выделяется путем многократного среза предоставленного сегмента памяти; -
prefixAllocator(MemorySegment)получает аллокатор, который оборачивает сегмент и переиспользует его содержимое при каждом новом запросе на выделение.
Передача сегментного аллокатора в API может быть особенно полезна в ситуациях, когда клиент хочет указать, где должны храниться результаты определённой операции (выполненной API) в виде сегмента памяти. Например, обработчики вызововОГРАНИЧЕННО могут принимать дополнительный параметр SegmentAllocator, если известно, что основополагающая внешняя функция возвращает структуру по значению. Параметр аллокатора фактически сообщает линковщику, где сохранить возвращаемое значение внешней функции.
- Примечание API:
- Если не указано иное, метод
allocate(long, long)не является потокобезопасным. Кроме того, сегменты памяти, выделенные сегментным аллокатором, могут быть связаны с различными жизненными циклами и даже могут быть основаны на перекрывающихся областях памяти. По этим причинам клиенты обычно должны взаимодействовать только с сегментным аллокатором, которым они владеют.Клиенты должны рассмотреть возможность использования арени вместо этого, которая обеспечивает жёсткую потокобезопасность, гарантии жизненного цикла и неперекрывающихся регионов.
- С:
- 22
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
default MemorySegment |
allocate |
Возвращает новый сегмент памяти с заданным byteSize. |
MemorySegment |
allocate |
Возвращает новый сегмент памяти с заданным byteSize и byteAlignment. |
default MemorySegment |
allocate |
Возвращает новый сегмент памяти с заданной структурой. |
default MemorySegment |
allocate |
Возвращает новый сегмент памяти с заданным elementLayout и count. |
default MemorySegment |
allocateFrom |
Возвращает новый сегмент памяти, инициализированный адресом предоставленного сегмента памяти. |
default MemorySegment |
allocateFrom |
Возвращает новый сегмент памяти, инициализированный заданным байтовым значением. |
default MemorySegment |
allocateFrom |
Возвращает новый сегмент памяти, инициализированный элементами в предоставленном массиве байтов. |
default MemorySegment |
allocateFrom |
Возвращает новый сегмент памяти, инициализированный заданным символом. |
default MemorySegment |
allocateFrom |
Возвращает новый сегмент памяти, инициализированный элементами в предоставленном массиве символов. |
default MemorySegment |
allocateFrom |
Возвращает новый сегмент памяти, инициализированный заданным двойным значением. |
default MemorySegment |
allocateFrom |
Возвращает новый сегмент памяти, инициализированный элементами в предоставленном массиве двойных значений. |
default MemorySegment |
allocateFrom |
Возвращает новый сегмент памяти, инициализированный заданным плавающим значением. |
default MemorySegment |
allocateFrom |
Возвращает новый сегмент памяти, инициализированный элементами в предоставленном массиве плавающих значений. |
default MemorySegment |
allocateFrom |
Возвращает новый сегмент памяти, инициализированный заданным целочисленным значением. |
default MemorySegment |
allocateFrom |
Возвращает новый сегмент памяти, инициализированный элементами в предоставленном целочисленном массиве. |
default MemorySegment |
allocateFrom |
Возвращает новый сегмент памяти, инициализированный заданным длинным значением. |
default MemorySegment |
allocateFrom |
Возвращает новый сегмент памяти, инициализированный элементами в предоставленном массиве длинных значений. |
default MemorySegment |
allocateFrom |
Возвращает новый сегмент памяти, инициализированный заданным коротким значением. |
default MemorySegment |
allocateFrom |
Возвращает новый сегмент памяти, инициализированный элементами в предоставленном массиве коротких значений. |
default MemorySegment |
allocateFrom |
Возвращает новый сегмент памяти, инициализированный содержимым предоставленного сегмента. |
default MemorySegment |
allocateFrom |
Преобразует строку Java в строку C с нулевым завершением, используя кодировку UTF-8, сохраняя результат в сегменте памяти. |
default MemorySegment |
allocateFrom |
Преобразует строку Java в строку C с нулевым завершением, используя предоставленную кодировку, и сохраняет результат в сегменте памяти. |
static SegmentAllocator |
prefixAllocator |
Возвращает сегментный аллокатор, который обрабатывает запросы на выделение, переиспользуя единственный сегмент. |
static SegmentAllocator |
slicingAllocator |
Возвращает сегментный аллокатор, который обрабатывает запросы на выделение, возвращая последовательные срезы, полученные из предоставленного сегмента. |
Краткое описание методов
allocateFrom
default MemorySegment allocateFrom(String str)
Вызов этого метода эквивалентен следующему коду:
allocateFrom(str, StandardCharsets.UTF_8);
- Параметры:
-
str- строка Java, которая должна быть преобразована в строку C - Возвращает:
- новый собственный сегмент, содержащий преобразованную строку C
allocateFrom
default MemorySegment allocateFrom(String str, Charset charset)
Этот метод всегда заменяет поврежденные входные данные и неотображаемые последовательности символов на массив байтов замены по умолчанию для этой кодировки. Класс CharsetEncoder следует использовать, когда требуется больший контроль над процессом кодирования.
Если предоставленная строка содержит любые символы '\0', они также будут скопированы. Это означает, что в зависимости от метода, используемого для чтения строки, например, MemorySegment.getString(long), строка будет выглядеть усечённой при повторном чтении.
- Требования к реализации:
- Реализация по умолчанию для этого метода копирует содержимое предоставленной строки Java в новый сегмент памяти, полученный вызовом
this.allocate(B + N), где:-
B- размер в байтах строки, закодированной с использованием предоставленной кодировки (например,str.getBytes(charset).length); -
N- размер (в байтах) символа-завершителя в соответствии с предоставленной кодировкой. Например, это 1 дляStandardCharsets.US_ASCIIи 2 дляStandardCharsets.UTF_16.
-
- Параметры:
-
str- строка Java, которая должна быть преобразована в строку C -
charset- кодировка, используемая для кодирования байтов строки - Возвращает:
- новый собственный сегмент, содержащий преобразованную строку C
- Исключения:
-
IllegalArgumentException- еслиcharsetне является стандартной кодировкой
allocateFrom
default MemorySegment allocateFrom(ValueLayout.OfByte layout, byte value)
Размер выделенного сегмента памяти равен размеру предоставленного макета. Предоставленное значение записывается в сегмент в соответствии с порядком байтов и ограничением выравнивания предоставленного макета.
- Требования к реализации:
- Реализация по умолчанию эквивалентна:
MemorySegment seg = allocate(Objects.requireNonNull(layout)); seg.set(layout, 0, value); return seg; - Параметры:
-
layout- макет блока памяти, который должен быть выделен -
value- значение, которое должно быть установлено в вновь выделенном сегменте памяти - Возвращает:
- новый сегмент памяти, инициализированный предоставленным значением байта
allocateFrom
default MemorySegment allocateFrom(ValueLayout.OfChar layout, char value)
Размер выделенного сегмента памяти равен размеру предоставленного макета. Предоставленное значение записывается в сегмент в соответствии с порядком байтов и ограничением выравнивания предоставленного макета.
- Требования к реализации:
- Реализация по умолчанию эквивалентна:
MemorySegment seg = allocate(Objects.requireNonNull(layout)); seg.set(layout, 0, value); return seg; - Параметры:
-
layout- макет блока памяти, который должен быть выделен -
value- значение, которое должно быть установлено в вновь выделенном сегменте памяти - Возвращает:
- новый сегмент памяти, инициализированный предоставленным значением char
allocateFrom
default MemorySegment allocateFrom(ValueLayout.OfShort layout, short value)
Размер выделенного сегмента памяти равен размеру предоставленного макета. Предоставленное значение записывается в сегмент в соответствии с порядком байтов и ограничением выравнивания предоставленного макета.
- Требования к реализации:
- Реализация по умолчанию эквивалентна:
MemorySegment seg = allocate(Objects.requireNonNull(layout)); seg.set(layout, 0, value); return seg; - Параметры:
-
layout- макет блока памяти, который должен быть выделен -
value- значение, которое должно быть установлено в вновь выделенном сегменте памяти - Возвращает:
- новый сегмент памяти, инициализированный предоставленным значением short
allocateFrom
default MemorySegment allocateFrom(ValueLayout.OfInt layout, int value)
Размер выделенного сегмента памяти равен размеру предоставленного макета. Предоставленное значение записывается в сегмент в соответствии с порядком байтов и ограничением выравнивания предоставленного макета.
- Требования к реализации:
- Реализация по умолчанию эквивалентна:
MemorySegment seg = allocate(Objects.requireNonNull(layout)); seg.set(layout, 0, value); return seg; - Параметры:
-
layout- макет блока памяти, который должен быть выделен -
value- значение, которое должно быть установлено в вновь выделенном сегменте памяти - Возвращает:
- новый сегмент памяти, инициализированный предоставленным значением int
allocateFrom
default MemorySegment allocateFrom(ValueLayout.OfFloat layout, float value)
Размер выделенного сегмента памяти равен размеру предоставленного макета. Предоставленное значение записывается в сегмент в соответствии с порядком байтов и ограничением выравнивания предоставленного макета.
- Требования к реализации:
- Реализация по умолчанию эквивалентна:
MemorySegment seg = allocate(Objects.requireNonNull(layout)); seg.set(layout, 0, value); return seg; - Параметры:
-
layout- макет блока памяти, который должен быть выделен -
value- значение, которое должно быть установлено в вновь выделенном сегменте памяти - Возвращает:
- новый сегмент памяти, инициализированный предоставленным значением float
allocateFrom
default MemorySegment allocateFrom(ValueLayout.OfLong layout, long value)
Размер выделенного сегмента памяти равен размеру предоставленного макета. Предоставленное значение записывается в сегмент в соответствии с порядком байтов и ограничением выравнивания предоставленного макета.
- Требования к реализации:
- Реализация по умолчанию эквивалентна:
MemorySegment seg = allocate(Objects.requireNonNull(layout)); seg.set(layout, 0, value); return seg; - Параметры:
-
layout- макет блока памяти, который должен быть выделен -
value- значение, которое должно быть установлено в вновь выделенном сегменте памяти - Возвращает:
- новый сегмент памяти, инициализированный предоставленным значением long
allocateFrom
default MemorySegment allocateFrom(ValueLayout.OfDouble layout, double value)
Размер выделенного сегмента памяти равен размеру предоставленного макета. Предоставленное значение записывается в сегмент в соответствии с порядком байтов и ограничением выравнивания предоставленного макета.
- Требования к реализации:
- Реализация по умолчанию эквивалентна:
MemorySegment seg = allocate(Objects.requireNonNull(layout)); seg.set(layout, 0, value); return seg; - Параметры:
-
layout- макет блока памяти, который должен быть выделен -
value- значение, которое должно быть установлено в вновь выделенном сегменте памяти - Возвращает:
- новый сегмент памяти, инициализированный предоставленным значением double
allocateFrom
default MemorySegment allocateFrom(AddressLayout layout, MemorySegment value)
Значение адреса может быть сужено в соответствии с размером адреса платформы (см. ValueLayout.ADDRESS).
Размер выделенного сегмента памяти равен размеру предоставленного макета. Предоставленное значение записывается в сегмент в соответствии с порядком байтов и ограничением выравнивания предоставленного макета.
- Требования к реализации:
- Реализация по умолчанию эквивалентна:
Objects.requireNonNull(value); MemorySegment seg = allocate(Objects.requireNonNull(layout)); seg.set(layout, 0, value); return seg; - Параметры:
-
layout- макет блока памяти, который должен быть выделен -
value- значение, которое должно быть установлено в вновь выделенном сегменте памяти - Возвращает:
- новый сегмент памяти, инициализированный адресом предоставленного сегмента памяти
- Исключения:
-
IllegalArgumentException- еслиvalueне является собственным сегментом
allocateFrom
default MemorySegment allocateFrom(ValueLayout elementLayout, MemorySegment source, ValueLayout sourceElementLayout, long sourceOffset, long elementCount)
Размер выделяемого сегмента памяти равен elementLayout.byteSize() * elementCount. Содержимое исходного сегмента копируется в результирующий сегмент поэлементно, в соответствии с порядком байтов и ограничениями выравнивания заданного макета элемента.
- Требования к реализации:
- Реализация по умолчанию для этого метода эквивалентна следующему коду:
MemorySegment dest = this.allocate(elementLayout, elementCount); MemorySegment.copy(source, sourceElementLayout, sourceOffset, dest, elementLayout, 0, elementCount); return dest; - Параметры:
-
elementLayout- макет элемента выделяемого массива -
source- исходный сегмент -
sourceElementLayout- макет элемента исходного сегмента -
sourceOffset- начальный смещение, в байтах, исходного сегмента -
elementCount- количество элементов в исходном сегменте, которые нужно скопировать - Возвращает:
- новый сегмент памяти, инициализированный содержимым предоставленного сегмента
- Исключения:
-
IllegalArgumentException- еслиelementLayout.byteSize() != sourceElementLayout.byteSize() -
IllegalArgumentException- если исходный сегмент/смещение несовместимы с ограничением выравнивания в макете исходного элемента -
IllegalArgumentException- еслиelementLayout.byteAlignment() > elementLayout.byteSize() -
IllegalArgumentException- еслиsourceElementLayout.byteAlignment() > sourceElementLayout.byteSize() -
IllegalStateException- если область видимости, связанная сsource, не активна -
WrongThreadException- если этот метод вызывается из потокаT, так чтоsource.isAccessibleBy(T) == false -
IllegalArgumentException- еслиelementCount * sourceElementLayout.byteSize()переполняется -
IllegalArgumentException- еслиelementCount < 0 -
IndexOutOfBoundsException- еслиsourceOffset > source.byteSize() - (elementCount * sourceElementLayout.byteSize()) -
IndexOutOfBoundsException- еслиsourceOffset < 0
allocateFrom
default MemorySegment allocateFrom(ValueLayout.OfByte elementLayout, byte... elements)
Размер выделяемого сегмента памяти равен elementLayout.byteSize() * elements.length. Содержимое исходного массива копируется в результирующий сегмент поэлементно, в соответствии с порядком байтов и ограничениями выравнивания заданного макета элемента.
- Требования к реализации:
- Реализация по умолчанию для этого метода эквивалентна следующему коду:
this.allocateFrom(layout, MemorySegment.ofArray(array), ValueLayout.JAVA_BYTE, 0, array.length) - Параметры:
-
elementLayout- макет элемента массива, который нужно выделить -
elements- байтовые элементы, которые нужно скопировать в новый выделенный блок памяти - Возвращает:
- новый сегмент памяти, инициализированный элементами предоставленного массива байтов
- Исключения:
-
IllegalArgumentException- еслиelementLayout.byteAlignment() > elementLayout.byteSize()
allocateFrom
default MemorySegment allocateFrom(ValueLayout.OfShort elementLayout, short... elements)
Размер выделяемого сегмента памяти равен elementLayout.byteSize() * elements.length. Содержимое исходного массива копируется в результирующий сегмент поэлементно, в соответствии с порядком байтов и ограничениями выравнивания заданного макета элемента.
- Требования к реализации:
- Реализация по умолчанию для этого метода эквивалентна следующему коду:
this.allocateFrom(layout, MemorySegment.ofArray(array), ValueLayout.JAVA_SHORT, 0, array.length) - Параметры:
-
elementLayout- макет элемента массива, который нужно выделить -
elements- элементы short, которые нужно скопировать в новый выделенный блок памяти - Возвращает:
- новый сегмент памяти, инициализированный элементами предоставленного массива short
- Исключения:
-
IllegalArgumentException- еслиelementLayout.byteAlignment() > elementLayout.byteSize()
allocateFrom
default MemorySegment allocateFrom(ValueLayout.OfChar elementLayout, char... elements)
Размер выделяемого сегмента памяти равен elementLayout.byteSize() * elements.length. Содержимое исходного массива копируется в результирующий сегмент поэлементно, в соответствии с порядком байтов и ограничениями выравнивания заданного макета элемента.
- Требования к реализации:
- Реализация по умолчанию для этого метода эквивалентна следующему коду:
this.allocateFrom(layout, MemorySegment.ofArray(array), ValueLayout.JAVA_CHAR, 0, array.length) - Параметры:
-
elementLayout- макет элемента массива, который нужно выделить -
elements- элементы char, которые нужно скопировать в новый выделенный блок памяти - Возвращает:
- новый сегмент памяти, инициализированный элементами предоставленного массива char
- Исключения:
-
IllegalArgumentException- еслиelementLayout.byteAlignment() > elementLayout.byteSize()
allocateFrom
default MemorySegment allocateFrom(ValueLayout.OfInt elementLayout, int... elements)
Размер выделяемого сегмента памяти равен elementLayout.byteSize() * elements.length. Содержимое исходного массива копируется в результирующий сегмент поэлементно, в соответствии с порядком байтов и ограничениями выравнивания заданного макета элемента.
- Требования к реализации:
- Реализация по умолчанию для этого метода эквивалентна следующему коду:
this.allocateFrom(layout, MemorySegment.ofArray(array), ValueLayout.JAVA_INT, 0, array.length) - Параметры:
-
elementLayout- макет элемента массива, который нужно выделить -
elements- элементы int, которые нужно скопировать в новый выделенный блок памяти - Возвращает:
- новый сегмент памяти, инициализированный элементами предоставленного массива int
- Исключения:
-
IllegalArgumentException- еслиelementLayout.byteAlignment() > elementLayout.byteSize()
allocateFrom
default MemorySegment allocateFrom(ValueLayout.OfFloat elementLayout, float... elements)
Размер выделяемого сегмента памяти равен elementLayout.byteSize() * elements.length. Содержимое исходного массива копируется в результирующий сегмент поэлементно, в соответствии с порядком байтов и ограничениями выравнивания заданного макета элемента.
- Требования к реализации:
- Реализация по умолчанию для этого метода эквивалентна следующему коду:
this.allocateFrom(layout, MemorySegment.ofArray(array), ValueLayout.JAVA_FLOAT, 0, array.length) - Параметры:
-
elementLayout- макет элемента массива, который нужно выделить -
elements- элементы float, которые нужно скопировать в новый выделенный блок памяти - Возвращает:
- новый сегмент памяти, инициализированный элементами предоставленного массива float
- Исключения:
-
IllegalArgumentException- еслиelementLayout.byteAlignment() > elementLayout.byteSize()
allocateFrom
default MemorySegment allocateFrom(ValueLayout.OfLong elementLayout, long... elements)
Размер выделяемого сегмента памяти равен elementLayout.byteSize() * elements.length. Содержимое исходного массива копируется в результирующий сегмент поэлементно, в соответствии с порядком байтов и ограничениями выравнивания заданного макета элемента.
- Требования к реализации:
- Реализация по умолчанию для этого метода эквивалентна следующему коду:
this.allocateFrom(layout, MemorySegment.ofArray(array), ValueLayout.JAVA_LONG, 0, array.length) - Параметры:
-
elementLayout- макет элемента массива, который нужно выделить -
elements- элементы long, которые нужно скопировать в новый выделенный блок памяти - Возвращает:
- новый сегмент памяти, инициализированный элементами предоставленного массива long
- Исключения:
-
IllegalArgumentException- еслиelementLayout.byteAlignment() > elementLayout.byteSize()
allocateFrom
default MemorySegment allocateFrom(ValueLayout.OfDouble elementLayout, double... elements)
Размер выделяемого сегмента памяти равен elementLayout.byteSize() * elements.length. Содержимое исходного массива копируется в результирующий сегмент поэлементно, в соответствии с порядком байтов и ограничениями выравнивания заданного макета элемента.
- Требования к реализации:
- Реализация по умолчанию для этого метода эквивалентна следующему коду:
this.allocateFrom(layout, MemorySegment.ofArray(array), ValueLayout.JAVA_DOUBLE, 0, array.length) - Параметры:
-
elementLayout- макет элемента массива, который нужно выделить -
elements- элементы double, которые нужно скопировать в новый выделенный блок памяти - Возвращает:
- новый сегмент памяти, инициализированный элементами предоставленного массива double
- Исключения:
-
IllegalArgumentException- еслиelementLayout.byteAlignment() > elementLayout.byteSize()
allocate
default MemorySegment allocate(MemoryLayout layout)
- Требования к реализации:
- Реализация по умолчанию для этого метода вызывает
this.allocate(layout.byteSize(), layout.byteAlignment()). - Параметры:
-
layout- макет блока памяти, который нужно выделить - Возвращает:
- новый сегмент памяти с заданным макетом
allocate
default MemorySegment allocate(MemoryLayout elementLayout, long count)
elementLayout и count.- Требования к реализации:
- По умолчанию этот метод вызывает
this.allocate(MemoryLayout.sequenceLayout(count, elementLayout)). - Параметры:
-
elementLayout- макет элемента массива -
count- количество элементов массива - Возвращает:
- новый сегмент памяти с заданной
elementLayoutиcount - Исключения:
-
IllegalArgumentException- еслиelementLayout.byteSize() * countпереполняется -
IllegalArgumentException- еслиcount < 0
allocate
default MemorySegment allocate(long byteSize)
byteSize.- Требования к реализации:
- По умолчанию этот метод вызывает
this.allocate(byteSize, 1). - Параметры:
-
byteSize- размер (в байтах) блока памяти, который необходимо выделить - Возвращает:
- новый сегмент памяти с заданным
byteSize - Исключения:
-
IllegalArgumentException- еслиbyteSize < 0
allocate
MemorySegment allocate(long byteSize, long byteAlignment)
byteSize и byteAlignment.- Параметры:
-
byteSize- размер (в байтах) блока памяти, который необходимо выделить -
byteAlignment- выравнивание (в байтах) блока памяти, который необходимо выделить - Возвращает:
- новый сегмент памяти с заданным
byteSizeиbyteAlignment - Исключения:
-
IllegalArgumentException- еслиbyteSize < 0,byteAlignment <= 0или еслиbyteAlignmentне является степенью двойки
slicingAllocator
static SegmentAllocator slicingAllocator(MemorySegment segment)
Возвращаемый аллокатор выбрасывает IndexOutOfBoundsException, когда срез предоставленного сегмента с запрошенным размером и выравниванием не может быть найден.
- Примечание по реализации:
- Аллокатор срезов не является потокобезопасным.
- Параметры:
-
segment- сегмент, из которого возвращаемый аллокатор должен извлекать срезы - Возвращает:
- новый аллокатор срезов
- Исключения:
-
IllegalArgumentException- еслиsegmentявляется только для чтения
prefixAllocator
static SegmentAllocator prefixAllocator(MemorySegment segment)
0, отсюда и название аллокатор префиксов. Эквивалентно (но, вероятно, более эффективно, чем) следующему коду:
MemorySegment segment = ...
SegmentAllocator prefixAllocator = (size, align) -> segment.asSlice(0, size, align);
IndexOutOfBoundsException, когда срез предоставленного сегмента с запрошенным размером и выравниванием не может быть найден.- Примечание API:
- Аллокатор префиксов может быть полезен для ограничения запросов на выделение, если клиент знает, что он полностью обработает содержимое выделенного сегмента до того, как произойдет следующий запрос на выделение.
- Примечание по реализации:
- Хотя аллокатор префиксов является потокобезопасным, одновременный доступ к одному и тому же аллокатору повторного использования может привести к тому, что поток перезапишет содержимое, записанное в базовый сегмент другим потоком.
- Параметры:
-
segment- сегмент памяти, который будет повторно использоваться возвращаемым аллокатором - Возвращает:
- аллокатор, который повторно использует существующий сегмент при каждом новом запросе на выделение
- Исключения:
-
IllegalArgumentException- еслиsegmentявляется только для чтения
© 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/SegmentAllocator.html