Arena — 메모리 아레나

Arena — 메모리 아레나

Arena는 네이티브 메모리 세그먼트의 수명 주기를 제어하며, 유연한 할당과 적시의 할당 해제를 모두 제공합니다. 아레나는 스코프(scope)를 가지며, 아레나에 의해 할당된 모든 세그먼트는 그 아레나 스코프와 연관됩니다. 따라서 아레나는 자신이 할당한 모든 메모리 세그먼트의 시간적 경계를 결정합니다.

출처: Java API Reference

본문

또한 아레나는 자신에게 할당된 메모리 세그먼트에 대한 접근이 특정 스레드로 제한되어야 하는지도 결정합니다. 아레나는 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()는 아레나를 닫고 관련 세그먼트를 할당 해제합니다.

더 알아보기 (Learn more)