MemoryMXBean
MemoryMXBean (메모리 시스템 관리 인터페이스)
Java 가상 머신의 메모리 시스템을 관리하기 위한 관리 인터페이스예요. ManagementFactory.getMemoryMXBean()으로 얻을 수 있어요.
본문
Java 가상 머신의 메모리 시스템은 두 종류의 메모리를 관리해요:
- Heap — 모든 클래스 인스턴스와 배열의 메모리가 할당되는 런타임 데이터 영역이에요. VM 시작 시 생성되며, 객체의 힙 메모리는 가비지 컬렉터라는 자동 메모리 관리 시스템이 회수해요. 고정 크기일 수도 있고 확장/축소될 수도 있어요.
- Non-Heap 메모리 — 힙 이외의 메모리예요. 모든 스레드가 공유하는 메서드 영역(method area)이 이에 속하며, 런타임 상수 풀, 필드·메서드 데이터, 메서드·생성자의 코드 등을 저장해요. JIT 컴파일러가 네이티브 머신 코드를 저장하는 데 쓰는 메모리도 non-heap에 속해요.
메모리 풀과 메모리 관리자는 VM 메모리 시스템을 모니터링하고 관리하는 추상 엔티티예요. 메모리 풀은 VM이 관리하는 메모리 영역을 나타내고, 메모리 관리자는 하나 이상의 메모리 풀을 관리해요. 가비지 컬렉터는 도달 불가능한 객체가 차지한 메모리를 회수하는 역할을 담당하는 메모리 관리자의 한 종류예요.
MemoryMXBean은 NotificationEmitter로, 어떤 메모리 풀이 사용 임계값(usage threshold)이나 컬렉션 사용 임계값을 지원하면 두 종류의 메모리 알림을 방출해요: 사용 임계값 초과 알림과 컬렉션 사용 임계값 초과 알림이에요. 알림의 userData에는 MemoryNotificationInfo 객체를 나타내는 CompositeData가 담겨요.
ManagementFactory.getMemoryMXBean()이 반환한 객체에 NotificationListener를 등록해 알림을 받을 수 있어요. Java 1.5부터 제공돼요.