JavaTM Platform
Standard Ed. 6

java.lang.management
인터페이스 MemoryMXBean



public interface MemoryMXBean

Java 가상 머신의 메모리 시스템의 관리 인터페이스입니다.

Java 가상 머신은, 이 인터페이스의 구현 클래스의 단일 인스턴스를 가집니다. 이 인터페이스를 구현하고 있는 인스턴스는,ManagementFactory.getMemoryMXBean() 메소드를 호출해 취득할 수 있다, 혹은 platform MBeanServer 메소드로부터 취득할 수 있는 MXBean 입니다.

MBeanServer 내에서 메모리 시스템의 MXBean 를 일의에 식별하기 위한 ObjectName 는 이하대로입니다.

java.lang:type=Memory

메모리

Java 가상 머신의 메모리 시스템은, 이하의 종류의 메모리를 관리합니다.

1. heap

heap는 실행시 데이터 영역이며, 여기로부터 모든 클래스 인스턴스와 배열의 메모리를 할당할 수 있습니다. 메소드 영역은, Java 가상 머신의 기동시에 작성됩니다. 객체의 heap 메모리는, 「가비지 컬렉터」라고 하는 자동 메모리 관리 시스템에 의해 재생됩니다.

heap는, 고정 사이즈로 하는 일도, 확장 또는 축소할 수도 있습니다. heap의 메모리는 연속하고 있을 필요는 없습니다.

2. heap 이외의 메모리

Java 가상 머신은, 「heap 이외의 메모리」(비heap 메모리로 불린다)을 관리합니다.

Java 가상 머신에는, 모든 thread간에 공유되는 「메소드 영역」이 있습니다. 메소드 영역은, heap 이외의 메모리에 속합니다. heap 이외의 메모리에는, 실행 완화시간 풀, field data나 메소드 데이터, 메소드와 생성자 의 코드 등, 클래스마다의 구조가 포함됩니다. 메소드 영역은, Java 가상 머신의 기동시에 작성됩니다.

메소드 영역은, 논리적이게는 heap의 일부입니다만, 가상 머신의 구현에서는, 가베지 컬렉트하지 않게 하거나 컴팩트화하거나 하는 것을 선택할 수 있습니다. heap와 같게, 메소드 영역은 고정 사이즈로 하거나 확장 또는 축소하거나 할 수가 있습니다. 메소드 영역의 메모리는 연속하고 있을 필요는 없습니다.

메소드 영역 외에, Java 가상 머신의 구현에서는, 내부 처리나 최적화를 위한 메모리를 필요로 합니다만, 이 메모리도 heap 이외의 메모리에 속합니다. 예를 들어, JIT 컴파일러에서는, 고성능을 실현하는데 Java 가상 머신 코드로부터 변환된 네이티브 기계 코드의 메모리가 필요합니다.

메모리 풀과 메모리 매니저

메모리 풀메모리 매니저 는, Java 가상 머신의 메모리 시스템을 감시 및 관리하는 추상 엔티티입니다.

메모리 풀은, Java 가상 머신이 관리하는 메모리 영역을 나타냅니다. Java 가상 머신은, 적어도 1 개의 메모리 풀을 가져, 실행중에 메모리 풀을 작성 또는 삭제할 수 있습니다. 메모리 풀은, heap 또는 heap 이외의 메모리에 속할 수가 있습니다.

메모리 매니저는, 1 개(살) 이상의 메모리 풀의 관리를 담당합니다. 가비지 컬렉터는, 도달할 수 없는 객체에 의해 점유 된 메모리의 재생을 담당하는 메모리 매니저의 1 종입니다. Java 가상 머신은, 1 개(살) 이상의 메모리 매니저를 가질 수가 있습니다. Java 가상 머신은, 실행중에 메모리 매니저를 추가 또는 삭제할 수 있습니다. 복수의 메모리 매니저로 1 개의 메모리 풀을 관리할 수 있습니다.

메모리 사용량의 감시

메모리 사용량은, 메모리 시스템에 있어 극히 중요한 감시 속성입니다. 예를 들어, 메모리 사용량은 이하를 나타냅니다.

메모리 사용량은, 다음의 3 개의 방법으로 감시할 수 있습니다.

자세한 것은,MemoryPoolMXBean 인터페이스로 지정됩니다.

메모리 사용량 감시 메카니즘은, load balancing 또는 작업 load sharing에 사용하는 것을 목적으로 하고 있습니다. 예를 들어, 어플리케이션은, 메모리 사용이 일정한 임계치를 넘었을 때에, 새로운 작업 부하의 수락을 정지합니다. 메모리 사용량 감시 메카니즘은, 어플리케이션을 위해서(때문에) 메모리 부족 조건을 검출하거나 메모리 부족 조건으로부터 회복하거나하기 위한의 것이 아닙니다.

통지

MemoryPoolMXBean.isUsageThresholdSupported() 메소드와 MemoryPoolMXBean.isCollectionUsageThresholdSupported() 메소드를 호출해 판정할 수 있는사용량 임계치컬렉션 사용량 임계치를 메모리 풀의 1 개가 지원하는 경우, 이 MemoryMXBean 는, 2 종류의 메모리통지 를 발행하는 NotificationEmitter 입니다.

이 인스턴스의사용자 데이터 는, 통지가 구축되었을 때의 메모리 풀에 관한 정보를 포함한 MemoryNotificationInfo 객체를 나타내는 CompositeData 로 설정되어 있습니다. CompositeData 은,MemoryNotificationInfo 에 기술된 속성을 포함합니다.


NotificationEmitter

ManagementFactory.getMemoryMXBean() 에 의해 반환되는 MemoryMXBean 객체는, 청취자를 통지 청취자로서 MemoryMXBean 내에서 등록할 수 있도록(듯이) 하는 NotificationEmitter 인터페이스를 구현합니다. 이하는,MemoryMXBean 에 의해 발행된 통지를 처리하기 위한 MyListener 를 등록하는 샘플 코드입니다.
 class MyListener implements javax.management.NotificationListener {
     public void handleNotification(Notification notif, Object handback) {
         // handle notification
         ....
     }
 }

 MemoryMXBean mbean = ManagementFactory.getMemoryMXBean();
 NotificationEmitter emitter = (NotificationEmitter) mbean;
 MyListener listener = new MyListener();
 emitter.addNotificationListener(listener, null, null);
 

도입된 버젼:
1.5
관련 항목:
JMX 스펙. , MXBean 에 액세스 하는 방법

메소드의 개요
 void gc ()
          가비지 컬렉터를 실행합니다.
 MemoryUsage getHeapMemoryUsage ()
          객체의 할당에 사용되는 heap의 현재의 메모리 사용량을 돌려줍니다.
 MemoryUsage getNonHeapMemoryUsage ()
          Java 가상 머신에 의해 사용되는 heap 이외의 현재의 메모리 사용량을 돌려줍니다.
 int getObjectPendingFinalizationCount ()
          finalize를 중단하고 있는 객체의 대략의 수를 돌려줍니다.
 boolean isVerbose ()
          메모리 시스템의 상세 출력이 유효한가 어떤가를 테스트합니다.
 void setVerbose (boolean value)
          메모리 시스템의 상세 출력을 유효 또는 무효로 합니다.
 

메소드의 상세

getObjectPendingFinalizationCount

int getObjectPendingFinalizationCount()
finalize를 중단하고 있는 객체의 대략의 수를 돌려줍니다.

반환값:
finalize를 중단하고 있는 객체의 대략의 수

getHeapMemoryUsage

MemoryUsage  getHeapMemoryUsage()
객체의 할당에 사용되는 heap의 현재의 메모리 사용량을 돌려줍니다. heap는, 1 개(살) 이상의 메모리 풀로 구성되어 있습니다. 반환된 메모리 사용량의 usedcommitted 의 사이즈는 모든 heap 메모리 풀의 메모리 사용량의 합계,initmax 의 사이즈는 heap 메모리의 설정 (모든 heap 메모리 풀의 합계와 같다고는 할 수 없다)을 나타냅니다.

반환된 메모리 사용량에 있어서의 사용된 메모리의 양은, 라이브 객체와 수집되지 않았던 가베지 객체 (존재하는 경우)의 양쪽 모두에 의해 점유 된 메모리의 양입니다.

MBeanServer 액세스:
MemoryUsage 의 맵형은,MemoryUsage 로 지정된 속성을 가지는 CompositeData 입니다.

반환값:
heap 메모리 사용량을 나타낸다 MemoryUsage 객체

getNonHeapMemoryUsage

MemoryUsage  getNonHeapMemoryUsage()
Java 가상 머신에 의해 사용되는 heap 이외의 현재의 메모리 사용량을 돌려줍니다. heap 이외의 메모리는, 1 개(살) 이상의 메모리 풀로 구성되어 있습니다. 반환된 메모리 사용량의 usedcommitted 사이즈는 heap 이외의 메모리 풀 모든 메모리 사용량의 합계,initmax 의 사이즈는 heap 이외의 메모리의 설정 (heap 이외의 메모리 풀 모든 합계와 같다고는 할 수 없다)을 나타냅니다.

MBeanServer 액세스:
MemoryUsage 의 맵형은,MemoryUsage 로 지정된 속성을 가지는 CompositeData 입니다.

반환값:
heap 이외의 메모리 사용량을 나타낸다 MemoryUsage 객체

isVerbose

boolean isVerbose()
메모리 시스템의 상세 출력이 유효한가 어떤가를 테스트합니다.

반환값:
메모리 시스템의 상세 출력이 유효한 경우는 true. 그렇지 않은 경우는 false

setVerbose

void setVerbose(boolean value)
메모리 시스템의 상세 출력을 유효 또는 무효로 합니다. 상세 출력 정보와 상세 정보의 출력처의 출력 스트림은 구현에 응해 다릅니다. 일반적으로, Java 가상 머신의 구현은 가베지 컬렉션으로 메모리를 해제할 때마다 메세지를 출력합니다.

이 메소드의 호출마다, 상세 출력은 포괄적으로 유효 또는 무효가 됩니다.

파라미터:
value - 상세 출력을 유효하게 하는 경우는 true, 무효로 하는 경우는 false
예외:
SecurityException - 시큐리티 매니저가 존재해, 호출원이 ManagementPermission("control")를 가지지 않는 경우

gc

void gc()
가비지 컬렉터를 실행합니다. gc() 의 호출의 동작은, 실제로는 다음의 호출과 같습니다.
 System.gc()
 

관련 항목:
System.gc()

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.