MemorySegment — 메모리 세그먼트
MemorySegment — 메모리 세그먼트
MemorySegment는 연속적인(contiguous) 메모리 영역에 대한 접근을 제공합니다. 메모리 세그먼트에는 두 종류가 있습니다.
- 힙 세그먼트(heap segment)는 Java 힙 안의 메모리 영역("on-heap" 영역)을 지원하며 그것에 접근합니다.
- 네이티브 세그먼트(native segment)는 Java 힙 밖의 메모리 영역("off-heap" 영역)을 지원하며 그것에 접근합니다.
본문
힙 세그먼트는 ofArray(int[]) 계열 팩토리 메서드 중 하나를 호출해 얻을 수 있습니다. 이 메서드는 지정된 Java 배열을 담는 on-heap 영역이 지원하는 메모리 세그먼트를 반환합니다. 네이티브 세그먼트는 Arena.allocate(long, long) 계열 팩토리 메서드로 얻거나, 파일을 새로운 off-heap 영역에 매핑(mmap)해서 얻을 수 있습니다. 이렇게 얻은 세그먼트를 매핑된 세그먼트(mapped segment)라고 하며, 그 내용은 메모리 매핑 파일에 유지·로드될 수 있습니다.
public sealed interface MemorySegment
주요 필드
static final MemorySegment NULL
팩토리 메서드
static MemorySegment ofBuffer(Buffer buffer)
static MemorySegment ofArray(byte[] byteArray)
static MemorySegment ofArray(int[] intArray)
static MemorySegment ofArray(double[] doubleArray)
static MemorySegment ofAddress(long address)
주요 메서드
long address()
long byteSize()
MemorySegment asSlice(long offset, long newSize)
boolean isReadOnly()
MemorySegment asReadOnly()
boolean isNative()
boolean isMapped()
MemorySegment.Scope scope()
MemorySegment fill(byte value)
ByteBuffer asByteBuffer()
default byte get(ValueLayout.OfByte layout, long offset)
default void set(ValueLayout.OfByte layout, long offset, byte value)
default String getUtf8String(long offset)
default void setUtf8String(long offset, String str)
static void copy(MemorySegment srcSegment, long srcOffset, MemorySegment dstSegment, long dstOffset, long bytes)
get/set계열 메서드는 지정한 레이아웃과 오프셋으로 값을 읽고 씁니다(접근 연산).asSlice는 이 세그먼트의 부분을 새 세그먼트로 반환합니다.ofArray/ofBuffer/ofAddress는 다양한 소스로부터 세그먼트를 만듭니다.