Arena — 메모리 아레나
Arena — 메모리 아레나
Arena는 네이티브 메모리 세그먼트의 수명 주기를 제어하며, 유연한 할당과 적시의 할당 해제를 모두 제공합니다. 아레나는 스코프(scope)를 가지며, 아레나에 의해 할당된 모든 세그먼트는 그 아레나 스코프와 연관됩니다. 따라서 아레나는 자신이 할당한 모든 메모리 세그먼트의 시간적 경계를 결정합니다.
본문
또한 아레나는 자신에게 할당된 메모리 세그먼트에 대한 접근이 특정 스레드로 제한되어야 하는지도 결정합니다. 아레나는 SegmentAllocator이며, 클라이언트가 네이티브 세그먼트를 얻는 데 사용할 수 있는 여러 할당 메서드를 갖춥니다.
public interface Arena extends SegmentAllocator, AutoCloseable
가장 단순한 아레나는 전역(global) 아레나입니다. 전역 아레나는 무한한 수명을 가지므로, 전역 아레나로 할당한 네이티브 세그먼트는 항상 접근 가능하며 그 메모리 영역은 결코 할당 해제되지 않습니다.
MemorySegment segment = Arena.global().allocate(100, 1);
// segment는 결코 할당 해제되지 않습니다!
팩토리 메서드
static Arena ofAuto()
static Arena global()
static Arena ofConfined()
static Arena ofShared()
global()— 전역(무한 수명) 아레나를 반환합니다.ofAuto()— 자동 관리 아레나를 반환합니다. 가비지 컬렉션 시 할당이 해제됩니다.ofConfined()— 단일 스레드만 접근할 수 있는 아레나를 반환합니다.ofShared()— 여러 스레드가 접근할 수 있는 공유 아레나를 반환합니다.
주요 메서드
default MemorySegment allocate(long byteSize, long byteAlignment)
MemorySegment.Scope scope()
void close()
allocate는 지정한 크기와 정렬로 세그먼트를 할당합니다.scope()는 아레나 스코프를 반환합니다.close()는 아레나를 닫고 관련 세그먼트를 할당 해제합니다.