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. ヒープ

ヒープは実行時データ領域であり、ここからすべてのクラスインスタンスと配列のメモリーが割り当てられます。メソッド領域は、Java 仮想マシンの起動時に作成されます。オブジェクトのヒープメモリーは、「ガベージコレクタ」という自動メモリー管理システムにより再生されます。  

ヒープは、固定サイズとすることも、拡張または縮小することもできます。ヒープのメモリーは連続している必要はありません。

2. ヒープ以外のメモリー

Java 仮想マシンは、「ヒープ以外のメモリー」(非ヒープメモリーと呼ばれる) を管理します。  

Java 仮想マシンには、すべてのスレッド間で共有される「メソッド領域」があります。メソッド領域は、ヒープ以外のメモリーに属します。非ヒープメモリーには、実行定数プール、フィールドおよびメソッドデータ、メソッドおよびコンストラクタのコードなど、クラス単位の構造体が格納されます。メソッド領域は、Java 仮想マシンの起動時に作成されます。  

メソッド領域は、論理的にはヒープの一部ですが、仮想マシンの実装では、ガベージコレクトしないようにしたり、コンパクト化したりすることを選択できます。ヒープと同様に、メソッド領域は固定サイズとしたり、拡張または縮小したりすることができます。メソッド領域のメモリーは連続している必要はありません。  

メソッド領域のほかに、Java 仮想マシンの実装では、内部処理や最適化のためのメモリーを必要としますが、このメモリーもヒープ以外のメモリーに属します。たとえば、JIT コンパイラでは、高性能を実現するうえで Java 仮想マシンコードから変換されたネイティブ機械コードのメモリーが必要です。

メモリープールとメモリーマネージャー

メモリープールメモリーマネージャーは、Java 仮想マシンのメモリーシステムを監視および管理する抽象エンティティーです。  

メモリープールは、Java 仮想マシンが管理するメモリー領域を表します。Java 仮想マシンは、少なくとも 1 つのメモリープールを持ち、実行中にメモリープールを作成または削除できます。メモリープールは、ヒープまたはヒープ以外のメモリーに属することができます。  

メモリーマネージャーは、1 つ以上のメモリープールの管理を担当します。ガベージコレクタは、到達できないオブジェクトにより占有されたメモリーの再生を担当するメモリーマネージャーの 1 種です。Java 仮想マシンは、1 つ以上のメモリーマネージャーを持つことができます。実行中にメモリーマネージャーを追加または削除できます。メモリープールは、複数のメモリーマネージャーによって管理できます。

メモリー使用量の監視

メモリー使用量は、メモリーシステムにとってきわめて重要な監視属性です。たとえば、メモリー使用量は次を示します。

メモリー使用量は、次の 3 つの方法で監視できます。

詳細は、MemoryPoolMXBean インタフェースで指定されます。  

メモリー使用量監視メカニズムは、ロードバランシングまたは作業負荷分散に使用することを目的としています。たとえば、アプリケーションは、メモリー使用が一定のしきい値を超えたときに、新しい作業負荷の受け入れを停止します。メモリー使用量監視メカニズムは、アプリケーションのためにメモリー不足条件を検出したり、メモリー不足条件から回復したりするためのものではありません。

通知

 

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()
          オブジェクトの割り当てに使用されるヒープの現在のメモリー使用量を返します。
 MemoryUsage getNonHeapMemoryUsage()
          Java 仮想マシンによって使用されるヒープ以外の現在のメモリー使用量を返します。
 int getObjectPendingFinalizationCount()
          ファイナライズを中断しているオブジェクトのおよその数を返します。
 boolean isVerbose()
          メモリーシステムの詳細出力が有効かどうかをテストします。
 void setVerbose(boolean value)
          メモリーシステムの詳細出力を有効または無効にします。
 

メソッドの詳細

getObjectPendingFinalizationCount

int getObjectPendingFinalizationCount()
ファイナライズを中断しているオブジェクトのおよその数を返します。

戻り値:
ファイナライズを中断しているオブジェクトのおよその数

getHeapMemoryUsage

MemoryUsage getHeapMemoryUsage()
オブジェクトの割り当てに使用されるヒープの現在のメモリー使用量を返します。ヒープは、1 つ以上のメモリープールで構成されています。返されたメモリー使用量の usedcommitted のサイズはすべてのヒープメモリープールのメモリー使用量の合計、initmax のサイズはヒープメモリーの設定 (すべてのヒープメモリープールの合計と同じとは限らない) を表します。

返されたメモリー使用量における使用されたメモリーの量は、ライブオブジェクトと収集されなかったガベージオブジェクト (存在する場合) の両方により占有されたメモリーの量です。

MBeanServer アクセス:
MemoryUsage のマップ型は、MemoryUsage で指定された属性を持つ CompositeData です。

戻り値:
ヒープメモリー使用量を表す MemoryUsage オブジェクト

getNonHeapMemoryUsage

MemoryUsage getNonHeapMemoryUsage()
Java 仮想マシンによって使用されるヒープ以外の現在のメモリー使用量を返します。ヒープ以外のメモリーは、1 つ以上のメモリープールで構成されています。返されたメモリー使用量の usedcommitted サイズはヒープ以外のメモリープールすべてのメモリー使用量の合計、initmax のサイズはヒープ以外のメモリーの設定 (ヒープ以外のメモリープールすべての合計と同じとは限らない) を表します。

MBeanServer アクセス:
MemoryUsage のマップ型は、MemoryUsage で指定された属性を持つ CompositeData です。

戻り値:
ヒープ以外のメモリー使用量を表す 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 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。