モジュール java.management
パッケージ java.lang.management

インタフェースMemoryMXBean

すべてのスーパー・インタフェース:
PlatformManagedObject

public interface MemoryMXBean extends PlatformManagedObject
Java仮想マシンのメモリー・システムの管理インタフェースです。

Java仮想マシンは、このインタフェースの実装クラスの単一インスタンスを持ちます。 このインタフェースを実装するこのインスタンスは、ManagementFactory.getMemoryMXBean()メソッドをコールするか、platform MBeanServerメソッドから取得できるMXBeanです。

MBeanServer内のメモリー・システムのMXBeanを一意に識別するためのObjectNameは、次のとおりです:

java.lang:type=Memory
これを取得するには、PlatformManagedObject.getObjectName()メソッドを呼び出します。

メモリー

Java仮想マシンのメモリー・システムは、次の種類のメモリーを管理します。

1. ヒープ

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

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

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

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

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

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

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

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

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

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

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

メモリー使用量の監視

メモリー使用量は、メモリー・システムにとってきわめて重要な監視属性です。 たとえば、メモリー使用量は次を示します。
  • アプリケーションのメモリー使用量
  • 自動メモリー管理システムにかかっている作業負荷
  • 可能性のあるメモリー・リーク

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

  • ポーリング
  • 使用量しきい値通知
  • コレクション使用量しきい値通知
詳細は、MemoryPoolMXBeanインタフェースで指定されます。

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

通知

このMemoryMXBeanは、メモリー・プールのいずれかの1つが「使用しきい値」または「コレクションの使用しきい値」をサポートしている場合に2つのタイプのメモリーnotificationsを発行するNotificationEmitterです。これは、MemoryPoolMXBean.isUsageThresholdSupported()およびMemoryPoolMXBean.isCollectionUsageThresholdSupported()メソッドをコールして決定できます。

発行される通知はNotificationインスタンスです。このインスタンスのユーザー・データは、通知が構築されたときのメモリー・プールに関する情報を含む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
関連項目: