JavaTM Platform
Standard Ed. 6

java.lang.management
인터페이스 MemoryPoolMXBean



public interface MemoryPoolMXBean

메모리 풀의 관리 인터페이스입니다. 메모리 풀은, Java 가상 머신에 의해 관리되는 메모리 자원을 나타내, 1 개(살) 이상 메모리 매니저 에 의해 관리됩니다.

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

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

java.lang:type=MemoryPool , name=pool's name

메모리의 형태

Java 가상 머신은, 객체 할당용의 heap를 가져, 메소드 영역과 Java 가상 머신의 실행용의 heap 이외의 메모리도 보관 유지하고 있습니다. Java 가상 머신은, 1 개(살) 이상의 메모리 풀을 보유할 수 있습니다. 각 메모리 풀은 이하의 형태의 어느 쪽인가의 메모리 영역을 나타냅니다.

메모리 사용량의 감시

메모리 풀에는, 이하의 속성이 있습니다.

1. 메모리 사용량

getUsage() 메소드는, 메모리 풀의 현재의 사용량의 견적을 제공합니다. 가베지 컬렉트된 메모리 풀의 경우는, used 메모리의 양에 풀내의 모든 객체 (도달할 수 있는 객체 및 도달할 수 없는 객체의 양쪽 모두를 포함한다)에 의해 점유 되는 메모리가 포함됩니다.

일반적으로, 이 메소드는 부하의 적은 조작으로 대략의 메모리 사용량을 가져옵니다. 객체가 연속해 팩 되지 않는 경우 등, 일부의 메모리 풀에서는, 이 메소드는 현재의 메모리 사용량을 판정하는데 얼마인가의 계산을 필요로 하는 부하의 큰 조작이 될 가능성이 있습니다. 구현은, 해당하는 상황을 문서화할 필요가 있습니다.

2. 피크 메모리 사용량

Java 가상 머신은, Java 가상 머신이 기동되거나 피크 메모리 사용량이 리셋 되거나 하고 나서의 메모리 풀의 피크 메모리 사용량을 보관 유지합니다. 피크 메모리 사용량은,getPeakUsage() 메소드에 의해 돌려주어져resetPeakUsage() 메소드를 호출해 리셋 됩니다.

3. 사용량 임계치

각 메모리 풀은, 「사용량 임계치」라고 하는 관리 가능한 속성을 가져, 이 임계치는 Java 가상 머신이 지정한 디폴트 값를 가집니다. 디폴트 값는 플랫폼에 응해 다릅니다. 사용량 임계치는,setUsageThreshold 메소드를 사용해 설정할 수 있습니다. 임계치가 정의 값으로 설정되면(자), 이 메모리 풀에서 사용량 임계치의 초과 체크가 유효하게 됩니다. 사용량 임계치가 제로로 설정되면(자), 이 메모리 풀에서 사용량 임계치의 초과 체크가 무효가 됩니다. MemoryPoolMBean#isUsageThresholdSupported 메소드를 사용해, 이 기능이 지원되고 있는지 어떤지를 판정할 수 있습니다.

Java 가상 머신은, 최적인 시기 (일반적으로은 가베지 컬렉션시)에, 사용량 임계치 초과 체크를 메모리 풀 마다 실행합니다. 각 메모리 풀은, 메모리 풀 사용량이 임계치를 초과하고 있는 것을 Java 가상 머신이 검출할 때마다 증가하는 usage threshold count 를 보관 유지하고 있습니다.

이 관리 가능한 사용량 임계치 속성은, 메모리 사용량의 증가 경향을 낮은 오버헤드로 감시하도록(듯이) 설계되고 있습니다. 사용량 임계치는, 일부의 메모리 풀에 적합하지 않는 경우가 있습니다. 예를 들어, 많은 Java 가상 머신 구현으로 사용되는 공통의 가비지 컬렉터인 세대별 가비지 컬렉터는, 연령으로 객체를 구분해, 2 세대 이상을 관리합니다. 대부분의 객체는, 「가장 젊은 세대」(젊은 메모리 풀)에 할당할 수 있습니다. 젊은 메모리 풀은, 가득 되도록(듯이) 설계되고 있습니다. 또, 가베지 컬렉션시에 대부분의 경우 도달 불가능한 단기간 가동의 객체가 수용되기 (위해)때문에, 젊은 메모리 풀을 수집하면(자), 메모리 공간의 대부분이 해제됩니다. 이 케이스에서는, 젊은 메모리 풀이 사용량 임계치를 지원하지 않는 편이 적절합니다. 더해, 사용량의 임계치와 비교할 때의 오버헤드는, 객체 할당의 코스트보다 비싸게 들므로, 1 개의 메모리 풀에의 객체의 할당의 코스트가 극히 낮은 경우 (예, 원자 포인터 교환 등), Java 가상 머신은 메모리 풀의 사용량 임계치를 지원하지 않습니다.

시스템의 메모리 사용량은,폴링이나임계치 통지의 메카니즘을 사용해 감시할 수 있습니다.

  1. 폴링

    어플리케이션에서는, 모든 메모리 풀에 대해서 getUsage() 메소드를 호출하는지, 사용량 임계치를 지원하는 메모리 풀에 대해서 isUsageThresholdExceeded() 메소드를 호출해 연속적으로 어플리케이션의 메모리 사용량을 감시할 수 있습니다. 이하는, 태스크의 배분과 처리에 특화한 thread를 가지는 샘플 코드의 예입니다. 이 샘플 코드는, 어느 구간에서도 메모리 사용량에 근거해 새로운 태스크를 받아들여 처리할지 어떨지를 판정합니다. 메모리 사용량이 사용량 임계치를 넘었을 경우, 이 샘플 코드는 모든 미처리의 태스크를 다른 가상 머신에 재배분해, 메모리 사용량이 사용량 임계치 이하에 돌아올 때까지 새로운 태스크의 수락을 정지합니다.

      
           // Assume the usage threshold is supported for this pool.
           // Set the threshold to myThreshold above which no new tasks
           // should be taken.
           pool.setUsageThreshold(myThreshold);
           ....
    
           boolean lowMemory = false;
           while (true) {
              if (pool.isUsageThresholdExceeded()) {
                  // potential low memory, so redistribute tasks to other VMs
                  lowMemory = true;
                  redistributeTasks();
                  // stop receiving new tasks
                  stopReceivingTasks();
              } else {
                  if (lowMemory) {
                      // resume receiving tasks
                      lowMemory = false;
                      resumeReceivingTasks();
                  } 
                  // processing outstanding task
                  ...
              }
              // sleep for sometime
              try {
                  Thread.sleep(sometime);
              } catch (InterruptedException e) {
                  ...
              }
           }
           

    상기 샘플 코드는, 메모리 사용량이 일시적으로 사용량 임계치 이하로 저하한 케이스를, 2 개의 반복간에 메모리 사용량이 임계치를 넘은채로 있는 케이스로부터 구별하고 있습니다. getUsageThresholdCount() 메소드에 의해 반환된 사용량 임계치 카운트를 사용해, 반환된 메모리 사용량이 2 개의 getUsageThresholdCount() 폴간에 임계치 이하일지 어떨지를 판정할 수 있습니다.

    이하는, 메모리 풀이 메모리 부족의 경우에 어떠한 액션을 실행해, 액션 처리중에 메모리 사용량의 변화를 무시하는 샘플 코드입니다.

           // Assume the usage threshold is supported for this pool.
           // Set the threshold to myThreshold which determines if 
           // the application will take some action under low memory condition.
           pool.setUsageThreshold(myThreshold);
    
           int prevCrossingCount = 0;
           while (true) {
               // A busy loop to detect when the memory usage  
               // has exceeded the threshold.
               while (! pool.isUsageThresholdExceeded() || 
                      pool.getUsageThresholdCount() == prevCrossingCount) {
                   try {
                       Thread.sleep(sometime)
                   } catch (InterruptException e) {
                       ....
                   }
               }
    
               // Do some processing such as check for memory usage
               // and issue a warning
               ....
    
               // Gets the current threshold count.The busy loop will then
               // ignore any crossing of threshold happens during the processing.
               prevCrossingCount = pool.getUsageThresholdCount();
           }
           

  2. 사용량 임계치 통지

    사용량 임계치 통지는,MemoryMXBean 에 의해 발행됩니다. 메모리 풀의 메모리 사용량이 사용량 임계치에 이르렀는지 넘은 것을 Java 가상 머신이 검출하면(자), 가상 머신은 MemoryMXBean 를 트리거해사용량 임계치 초과 통지 를 발행합니다. 사용량이 임계치 미만이 되어, 다시 초과할 때까지, 다른 사용량 임계치 초과 통지는 생성되지 않습니다.

    이하의 샘플 코드는, 전술의 최초의 샘플 코드와 같은 논리를 구현하고 있습니다만, 폴링은 아니고, 사용량 임계치 통지 메카니즘을 사용해 메모리 부족 조건을 검출하고 있습니다. 이 샘플 코드에서는, 통지의 수취에 의해, 통지 청취자는 미처리 태스크의 재배분, 태스크의 수취의 정지, 혹은 받아 태스크의 재개등의 실제의 액션을 실행하도록(듯이) 다른 thread에 통지합니다. handleNotification 메소드는, 극히 소량의 작업을 실행해 지연없이 값을 돌려주어, 이후의 통지의 배포로 지연이 생기지 않도록 설계될 필요가 있습니다. 시간이 걸리는 액션은 다른 thread에 의해 실행될 필요가 있습니다. 통지 청취자는, 복수의 thread에 의해 불려 갈 수가 있습니다. 따라서, 청취자가 실행하는 태스크는 적절히 동기화 될 필요가 있습니다.

      
           class MyListener implements javax.management.NotificationListener {
                public void handleNotification(Notification notification, Object handback)  {
                    String notifType = notification.getType();
                    if (notifType.equals(MemoryNotificationInfo.MEMORY_THRESHOLD_EXCEEDED)) {
                        // potential low memory, notify another thread
                        // to redistribute outstanding tasks to other VMs
                        // and stop receiving new tasks.
                        lowMemory = true;
                        notifyAnotherThread(lowMemory);
                    }
                }
           }
    
           // Register MyListener with MemoryMXBean  
           MemoryMXBean mbean = ManagementFactory.getMemoryMXBean();
           NotificationEmitter emitter = (NotificationEmitter) mbean;
           MyListener listener = new MyListener();
           emitter.addNotificationListener(listener, null, null);
    
           // Assume this pool supports a usage threshold.  // Set the threshold to myThreshold above which no new tasks // should be taken.  pool.setUsageThreshold(myThreshold);
           // Set the threshold to myThreshold above which no new tasks
           // should be taken.
           pool.setUsageThreshold(myThreshold);
           
           // Usage threshold detection is enabled and notification will be 
           // handled by MyListener.Continue for other processing.
           ....
    
           

    MemoryMXBean 가 임계치 통지를 발행하는 시기나 통지가 배포되는 시기에 대한 보증은 없습니다. 통지 청취자가 불려 가면(자), 메모리 풀의 메모리 사용량이 사용량 임계치를 2 회 이상 넘은 가능성이 있습니다. MemoryNotificationInfo.getCount() 메소드는, 통지가 구축된 시점에서 메모리 사용량이 사용량 임계치를 넘은 회수를 돌려줍니다. 이 회수를,getUsageThresholdCount() 메소드에 의해 반환된 현재의 사용량 임계치 카운트와 비교해, 이러한 상황이 발생했는지의 여부를 판정할 수 있습니다.

4. 컬렉션 사용량 임계치

일부의 가베지 컬렉트된 메모리 풀에만 적용할 수 있는 관리 가능한 속성입니다. Java 가상 머신이, 가베지 컬렉션시에 메모리 풀에 있는 사용하지 않는 객체를 리사이클하는 것으로, 메모리 공간을 재생하는 것에 최선을 다한 뒤, 가베지 컬렉트된 메모리 풀에 있는 일부의 바이트수는 그런데도 사용중입니다. 임계치를 초과했을 경우,컬렉션 사용량 임계치 초과 통지 가 발행되도록(듯이), 컬렉션 사용량 임계치를 사용해, 이 일부의 바이트수에 값을 설정할 수 있습니다. 더해,컬렉션 사용량 임계치 카운트 가 늘려집니다.

Java 가상 머신은, 컬렉션 사용량 임계치 체크를 메모리 풀 마다 실행합니다.

Java 가상 머신은, 컬렉션 사용량 임계치 체크를 메모리 풀 마다 실행합니다. 이 체크는, 컬렉션 사용량 임계치가 정의 값으로 설정되어 있는 경우에 유효하게 됩니다. 컬렉션 사용량 임계치가 제로로 설정되었을 경우, 이 체크는 이 메모리 풀에서 무효가 됩니다. 디폴트 값는 제로입니다. Java 가상 머신은, 가베지 컬렉션시에 컬렉션 사용량 임계치 체크를 실행합니다.

일부의 가베지 컬렉트된 메모리 풀에서는, 컬렉션 사용량 임계치를 지원하지 않게 선택할 수 있습니다. 예를 들어, 메모리 풀은 연속적인 병행 가비지 컬렉터인 만큼 보다 관리됩니다. 사용하지 않는 객체를 병행 가비지 컬렉터가 동시에 재생하고 있는 동안에, 어떠한 thread에 의해, 이 메모리 풀에 객체를 할당할 수가 있습니다. 충분히 정의된 가베지 컬렉션 시간 (메모리 사용량을 체크하는데 최적인 시간)이 없는 한, 컬렉션 사용량 임계치를 지원 해서는 안됩니다.

컬렉션 사용량 임계치는, Java 가상 머신이 메모리 공간의 재생에 최선을 다한 뒤, 메모리 사용량을 감시하도록(듯이) 설계되고 있습니다. 사용량 임계치로 설명한 폴링 및 임계치 통지 메카니즘에 의해, 같은 방법으로 컬렉션 사용량을 감시할 수 있습니다.

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

메소드의 개요
 MemoryUsage getCollectionUsage ()
          Java 가상 머신이 이 메모리 풀에서 사용되지 않는 객체의 리사이클에 마지막에 최선을 다한 뒤의 메모리 사용량을 돌려줍니다.
 long getCollectionUsageThreshold ()
          이 메모리 풀의 컬렉션 사용량 임계치 (바이트 단위)를 돌려줍니다.
 long getCollectionUsageThresholdCount ()
          메모리 사용량이 컬렉션 사용량 임계치를 넘은 것을 Java 가상 머신이 검출한 회수를 돌려줍니다.
 String [] getMemoryManagerNames ()
          이 메모리 풀을 관리하고 있는 메모리 매니저의 이름을 돌려줍니다.
 String getName ()
          이 메모리 풀을 나타내는 이름을 돌려줍니다.
 MemoryUsage getPeakUsage ()
          Java 가상 머신이 기동되고 나서, 또는 피크가 리셋 되고 나서의, 이 메모리 풀의 피크 메모리 사용량을 돌려줍니다.
 MemoryType getType ()
          이 메모리 풀의 형태를 돌려줍니다.
 MemoryUsage getUsage ()
          이 메모리 풀의 메모리 사용량의 평가치를 돌려줍니다.
 long getUsageThreshold ()
          이 메모리 풀의 사용량 임계치를 바이트 단위로 돌려줍니다.
 long getUsageThresholdCount ()
          메모리 사용량이 임계치를 넘은 회수를 돌려줍니다.
 boolean isCollectionUsageThresholdExceeded ()
          Java 가상 머신이 최선을 다한 마지막 컬렉션의 후에, 이 메모리 풀의 메모리 사용량이 컬렉션 사용량 임계치에 이른, 또는 넘었는지를 테스트합니다.
 boolean isCollectionUsageThresholdSupported ()
          이 메모리 풀이 컬렉션 사용량 임계치를 지원할지 어떨지를 테스트합니다.
 boolean isUsageThresholdExceeded ()
          이 메모리 풀의 메모리 사용량이 사용량 임계치에 이른, 또는 넘었는지의 여부를 테스트합니다.
 boolean isUsageThresholdSupported ()
          이 메모리 풀이 사용량 임계치를 지원할지 어떨지를 테스트합니다.
 boolean isValid ()
          이 메모리 풀이 Java 가상 머신으로 유효한가 어떤가를 테스트합니다.
 void resetPeakUsage ()
          이 메모리 풀의 피크 메모리 사용량 통계를 현재의 메모리 사용량에 리셋 합니다.
 void setCollectionUsageThreshold (long threhsold)
          이 메모리 풀의 컬렉션 사용량 임계치가 지정된 threshold 치로 설정합니다.
 void setUsageThreshold (long threshold)
          이 메모리 풀이 사용량 임계치를 지원하고 있는 경우, 이 메모리 풀의 임계치가 지정된 threshold 치로 설정합니다.
 

메소드의 상세

getName

String  getName()
이 메모리 풀을 나타내는 이름을 돌려줍니다.

반환값:
이 메모리 풀의 이름

getType

MemoryType  getType()
이 메모리 풀의 형태를 돌려줍니다.

MBeanServer 액세스:
MemoryType 의 맵형은 String, 값은 MemoryType 의 이름입니다.

반환값:
이 메모리 풀의 형태

getUsage

MemoryUsage  getUsage()
이 메모리 풀의 메모리 사용량의 평가치를 돌려줍니다. 이 메소드는, 메모리 풀이 유효하지 않은 (존재하지 않는다) 경우 null 를 돌려줍니다.

이 메소드는, 이 메모리 풀의 현재의 메모리 사용량의 best effort의 평가를 실시하도록(듯이) Java 가상 머신에 요구합니다. 일부의 메모리 풀에서는, 이 메소드는 평가치의 판정에 얼마인가의 계산을 필요로 하는 부하의 큰 조작이 될 가능성이 있습니다. 구현은, 해당하는 상황을 문서화할 필요가 있습니다.

이 메소드는, 시스템 메모리 사용량의 감시와 메모리 부족 조건의 검출에 사용하기 위해서 설계되고 있습니다.

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

반환값:
MemoryUsage 객체. 이 풀이 무효인 경우는 null

getPeakUsage

MemoryUsage  getPeakUsage()
Java 가상 머신이 기동되고 나서, 또는 피크가 리셋 되고 나서의, 이 메모리 풀의 피크 메모리 사용량을 돌려줍니다. 이 메소드는, 메모리 풀이 유효하지 않은 (존재하지 않는다) 경우 null 를 돌려줍니다.

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

반환값:
피크 메모리 사용량을 나타낸다 MemoryUsage 객체. 이 풀이 무효인 경우는 null

resetPeakUsage

void resetPeakUsage()
이 메모리 풀의 피크 메모리 사용량 통계를 현재의 메모리 사용량에 리셋 합니다.

예외:
SecurityException - 시큐리티 매니저가 존재해, 호출원이 ManagementPermission("control")를 가지지 않는 경우

isValid

boolean isValid()
이 메모리 풀이 Java 가상 머신으로 유효한가 어떤가를 테스트합니다. Java 가상 머신이 메모리 시스템으로부터 메모리 풀을 삭제하면(자), 메모리 풀은 무효가 됩니다.

반환값:
실행되고 있는 Java 가상 머신으로 메모리 풀이 유효한 경우는 true. 그렇지 않은 경우는 false

getMemoryManagerNames

String [] getMemoryManagerNames()
이 메모리 풀을 관리하고 있는 메모리 매니저의 이름을 돌려줍니다. 각 메모리 풀은, 적어도 1 개의 메모리 매니저에 의해 관리됩니다.

반환값:
String 객체의 배열. 각 String 객체는, 이 메모리 풀을 관리하고 있는 메모리 매니저의 이름

getUsageThreshold

long getUsageThreshold()
이 메모리 풀의 사용량 임계치를 바이트 단위로 돌려줍니다. 각 메모리 풀은, 플랫폼에 의존하는 디폴트의 임계치를 가집니다. 현재의 사용량 임계치는,setUsageThreshold 메소드를 사용해 변경할 수 있습니다.

반환값:
이 메모리 풀의 사용량 임계치 (바이트 단위)
예외:
UnsupportedOperationException - 이 메모리 풀이 사용량 임계치를 지원하지 않는 경우
관련 항목:
isUsageThresholdSupported()

setUsageThreshold

void setUsageThreshold(long threshold)
이 메모리 풀이 사용량 임계치를 지원하고 있는 경우, 이 메모리 풀의 임계치가 지정된 threshold 치로 설정합니다. 임계치가 정의 값으로 설정되면(자), 이 메모리 풀에서 사용량 임계치의 초과 체크가 유효하게 됩니다. 임계치가 제로로 설정되면(자), 이 메모리 풀에서 사용량 임계치의 초과 체크가 무효가 됩니다.

파라미터:
threshold - 바이트 단위의 새롭고 임계치(threshold). 부가 아닌 수치
예외:
IllegalArgumentException - threshold 가 0 보다 작은 값의 경우, 또는 이 메모리 풀의 사용 가능 메모리량의 최대치 (정의되고 있는 경우)(을)를 넘는 경우
UnsupportedOperationException - 이 메모리 풀이 사용량 임계치를 지원하지 않는 경우
SecurityException - 시큐리티 매니저가 존재해, 호출원이 ManagementPermission("control")를 가지지 않는 경우
관련 항목:
isUsageThresholdSupported() , Usage threshold

isUsageThresholdExceeded

boolean isUsageThresholdExceeded()
이 메모리 풀의 메모리 사용량이 사용량 임계치에 이른, 또는 넘었는지의 여부를 테스트합니다.

반환값:
이 메모리 풀의 메모리 사용량이 임계치에 이르렀는지, 넘었을 경우는 true. 그렇지 않은 경우는 false
예외:
UnsupportedOperationException - 이 메모리 풀이 사용량 임계치를 지원하지 않는 경우

getUsageThresholdCount

long getUsageThresholdCount()
메모리 사용량이 임계치를 넘은 회수를 돌려줍니다.

반환값:
메모리 사용량이 임계치를 넘은 회수
예외:
UnsupportedOperationException - 이 메모리 풀이 사용량 임계치를 지원하지 않는 경우

isUsageThresholdSupported

boolean isUsageThresholdSupported()
이 메모리 풀이 사용량 임계치를 지원할지 어떨지를 테스트합니다.

반환값:
이 메모리 풀이 사용량 임계치를 지원하는 경우는 true, 그렇지 않은 경우는 false

getCollectionUsageThreshold

long getCollectionUsageThreshold()
이 메모리 풀의 컬렉션 사용량 임계치 (바이트 단위)를 돌려줍니다. 디폴트 값는 제로입니다. 컬렉션 사용량 임계치는,setCollectionUsageThreshold 메소드를 사용해 변경할 수 있습니다.

반환값:
이 메모리 풀의 컬렉션 사용량 임계치 (바이트 단위)
예외:
UnsupportedOperationException - 이 메모리 풀이 컬렉션 사용량 임계치를 지원하지 않는 경우
관련 항목:
isCollectionUsageThresholdSupported()

setCollectionUsageThreshold

void setCollectionUsageThreshold(long threhsold)
이 메모리 풀의 컬렉션 사용량 임계치가 지정된 threshold 치로 설정합니다. 이 임계치를 정의 값으로 설정하면(자), Java 가상 머신은, 이 메모리 풀에서 사용되어 있지 않은 객체의 리사이클에 최선을 다한 뒤, 가장 적합했던 시기에 메모리 사용량을 체크합니다.

임계치가 정의 값으로 설정되면(자), 이 메모리 풀에서 컬렉션 사용량 임계치의 초과 체크가 유효하게 됩니다. 임계치가 제로로 설정되면(자), 이 메모리 풀에서 컬렉션 사용량 임계치의 초과 체크가 무효가 됩니다.

파라미터:
threhsold - 새로운 컬렉션 사용량 임계치 (바이트 단위). 부가 아닌 수치
예외:
IllegalArgumentException - threshold 가 0 보다 작은 값의 경우, 또는 이 메모리 풀의 사용 가능 메모리량의 최대치 (정의되고 있는 경우)(을)를 넘는 경우
UnsupportedOperationException - 이 메모리 풀이 컬렉션 사용량 임계치를 지원하지 않는 경우
SecurityException - 시큐리티 매니저가 존재해, 호출원이 ManagementPermission("control")를 가지지 않는 경우
관련 항목:
isCollectionUsageThresholdSupported() , Collection usage threshold

isCollectionUsageThresholdExceeded

boolean isCollectionUsageThresholdExceeded()
Java 가상 머신이 최선을 다한 마지막 컬렉션의 후에, 이 메모리 풀의 메모리 사용량이 컬렉션 사용량 임계치에 이른, 또는 넘었는지를 테스트합니다. 이 메소드는, Java 가상 머신에, 일반적으로의 자동 메모리 관리 이외의 가베지 컬렉션을 실행하도록(듯이) 요구하지 않습니다.

반환값:
이 메모리 풀의 메모리 사용량이 마지막 컬렉션으로 컬렉션 사용량 임계치에 이르렀는지, 넘었을 경우는 true. 그렇지 않은 경우는 false
예외:
UnsupportedOperationException - 이 메모리 풀이 사용량 임계치를 지원하지 않는 경우

getCollectionUsageThresholdCount

long getCollectionUsageThresholdCount()
메모리 사용량이 컬렉션 사용량 임계치를 넘은 것을 Java 가상 머신이 검출한 회수를 돌려줍니다.

반환값:
메모리 사용량이 컬렉션 임계치에 달한, 또는 넘은 회수
예외:
UnsupportedOperationException - 이 메모리 풀이 컬렉션 사용량 임계치를 지원하지 않는 경우
관련 항목:
isCollectionUsageThresholdSupported()

getCollectionUsage

MemoryUsage  getCollectionUsage()
Java 가상 머신이 이 메모리 풀에서 사용되지 않는 객체의 리사이클에 마지막에 최선을 다한 뒤의 메모리 사용량을 돌려줍니다. 이 메소드는, Java 가상 머신에, 일반적으로의 자동 메모리 관리 이외의 가베지 컬렉션을 실행하도록(듯이) 요구하지 않습니다. 이 메소드는, Java 가상 머신이 이 메소드를 지원하지 않는 경우에 null 를 돌려줍니다.

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

반환값:
Java 가상 머신이 사용되지 않는 객체의 리사이클에 마지막에 최선을 다한 뒤의, 이 메모리 풀의 메모리 사용량을 나타내는 MemoryUsage . 이 메소드가 지원되어 있지 않은 경우는 null

isCollectionUsageThresholdSupported

boolean isCollectionUsageThresholdSupported()
이 메모리 풀이 컬렉션 사용량 임계치를 지원할지 어떨지를 테스트합니다.

반환값:
이 메모리 풀이 컬렉션 사용량 임계치를 지원하는 경우는 true, 그렇지 않은 경우는 false

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 도 참조해 주세요.