- 所有超级接口:
-
MemoryLayout预览
,ValueLayout预览
AddressLayout
是Java平台的预览API。
预览功能可能会在将来的版本中被移除,或升级为Java平台的永久功能。
用于模拟某个内存区域地址的值布局。与地址布局相关联的载体是
MemorySegment.class
。地址布局的大小和对齐方式取决于平台(例如,在64位平台上,地址布局的大小和对齐方式设置为8字节)。
地址布局可以选择包含一个目标布局。具有目标布局T
的地址布局可用于模拟布局为T
的内存区域的地址。例如,具有目标布局ValueLayout.JAVA_INT
预览的地址布局可用于模拟长度为4字节的内存区域的地址。在以下情况下指定目标布局可能很有用:
- 当访问通过从另一个内存段读取地址获得的内存段时,例如使用
MemorySegment.getAtIndex(AddressLayout, long)
预览; - 当创建downcall方法句柄时,使用
Linker.downcallHandle(FunctionDescriptor, Option...)
预览; - 当创建upcall存根时,使用
Linker.upcallStub(MethodHandle, FunctionDescriptor, Arena, Option...)
预览。
- 自:
- 19
- 参见:
-
Nested Class Summary
Nested classes/interfaces declared in interface java.lang.foreign.MemoryLayoutPREVIEW
MemoryLayout.PathElementPREVIEW
Nested classes/interfaces declared in interface java.lang.foreign.ValueLayoutPREVIEW
ValueLayout.OfBooleanPREVIEW, ValueLayout.OfBytePREVIEW, ValueLayout.OfCharPREVIEW, ValueLayout.OfDoublePREVIEW, ValueLayout.OfFloatPREVIEW, ValueLayout.OfIntPREVIEW, ValueLayout.OfLongPREVIEW, ValueLayout.OfShortPREVIEW
-
Field Summary
Fields declared in interface java.lang.foreign.ValueLayoutPREVIEW
ADDRESS, ADDRESS_UNALIGNED, JAVA_BOOLEAN, JAVA_BYTE, JAVA_CHAR, JAVA_CHAR_UNALIGNED, JAVA_DOUBLE, JAVA_DOUBLE_UNALIGNED, JAVA_FLOAT, JAVA_FLOAT_UNALIGNED, JAVA_INT, JAVA_INT_UNALIGNED, JAVA_LONG, JAVA_LONG_UNALIGNED, JAVA_SHORT, JAVA_SHORT_UNALIGNED
-
Method Summary
Modifier and TypeMethodDescription返回与此地址布局关联的目标布局(如果有)。withByteAlignment
(long byteAlignment) 返回具有与此布局相同特征的内存布局,但具有给定的对齐约束(以字节为单位)。返回具有与此布局相同特征的内存布局,但具有给定的名称。返回具有与此布局相同特征的值布局,但具有给定的字节顺序。返回具有与此布局相同特征的内存布局,但没有名称。返回具有与此地址布局相同的载体、对齐约束、名称和顺序,但没有目标布局的地址布局。withTargetLayout
(MemoryLayoutPREVIEW layout) 返回具有与此地址布局相同的载体、对齐约束、名称和顺序,但与指定目标布局相关联的地址布局。Methods declared in interface java.lang.foreign.MemoryLayoutPREVIEW
byteAlignment, byteOffset, byteOffsetHandle, byteSize, equals, hashCode, name, select, sliceHandle, toString, varHandle
Methods declared in interface java.lang.foreign.ValueLayoutPREVIEW
arrayElementVarHandle, carrier, order
-
Method Details
-
withName
返回具有与此布局相同特征的内存布局,但具有给定的名称。- 指定者:
-
withName
在接口MemoryLayout预览
中 - 指定者:
-
withName
在接口ValueLayout预览
中 - 参数:
-
name
- 布局名称。 - 返回:
- 具有与此布局相同特征但具有给定名称的内存布局
- 参见:
-
withoutName
AddressLayoutPREVIEW withoutName()返回具有与此布局相同特征但没有名称的内存布局。- 指定者:
-
withoutName
在接口MemoryLayout预览
中 - 指定者:
-
withoutName
在接口ValueLayout预览
中 - 返回:
- 具有与此布局相同特征但没有名称的内存布局
- 参见:
-
withByteAlignment
返回具有与此布局相同特征但具有给定对齐约束(以字节为单位)的内存布局。- 指定者:
-
withByteAlignment
在接口MemoryLayout预览
中 - 指定者:
-
withByteAlignment
在接口ValueLayout预览
中 - 参数:
-
byteAlignment
- 布局对齐约束,以字节表示。 - 返回:
- 具有与此布局相同特征但具有给定对齐约束(以字节为单位)的内存布局
-
withOrder
返回具有与此布局相同特征但具有给定字节顺序的值布局。- 指定者:
-
withOrder
在接口ValueLayout预览
中 - 参数:
-
order
- 所需的字节顺序。 - 返回:
- 具有与此布局相同特征但具有给定字节顺序的值布局
-
withTargetLayout
返回具有与此地址布局相同的载体、对齐约束、名称和顺序,但与指定目标布局相关联的地址布局。返回的地址布局允许将原始地址作为内存段预览访问,其大小设置为指定布局的大小。此外,如果访问的原始地址与提供的布局中的对齐约束不兼容,则将抛出IllegalArgumentException。- API注释:
-
此方法还可用于创建一个地址布局,当使用时,会创建具有最大大小的本机内存段(例如Long.MAX_VALUE)。可以通过使用未指定大小的目标序列布局来实现:
AddressLayout addressLayout = ... AddressLayout unboundedLayout = addressLayout.withTargetLayout( MemoryLayout.sequenceLayout(ValueLayout.JAVA_BYTE));
此方法是受限制的。受限制的方法是不安全的,如果使用不正确,可能会导致JVM崩溃,甚至更糟的是导致内存损坏。因此,客户端应避免依赖受限制的方法,并在可能的情况下使用安全且受支持的功能。
- 参数:
-
layout
- 目标布局。 - 返回:
- 具有与此布局相同特征但具有提供的目标布局的地址布局。
- 抛出:
-
IllegalCallerException
- 如果调用者所在的模块未启用本机访问。 - 参见:
-
withoutTargetLayout
AddressLayoutPREVIEW withoutTargetLayout()返回具有与此地址布局相同的载体、对齐约束、名称和顺序,但没有目标布局的地址布局。- API注释:
- 这对于比较具有不同目标布局但其他方面相同的两个地址布局很有用。
- 返回:
- 具有与此布局相同特征但没有目标布局的地址布局。
- 参见:
-
targetLayout
Optional<MemoryLayoutPREVIEW> targetLayout()返回与此地址布局关联的目标布局(如果有)。- 返回:
- 与此地址布局关联的目标布局(如果有)。
-
AddressLayout
。