public interface MemoryMXBean extends PlatformManagedObject
Java仮想マシンは、このインタフェースの実装クラスの単一インスタンスを持ちます。このインタフェースを実装したこのインスタンスはMXBeanですが、これを取得するには、ManagementFactory.getMemoryMXBean()
メソッドを呼び出すか、platform MBeanServer
のメソッドを使用します。
MBeanServer内でメモリー・システムのMXBeanを一意に識別するためのObjectNameは次のとおりです。
java.lang:type=Memory
これを取得するには、PlatformManagedObject.getObjectName()
メソッドを呼び出します。
ヒープは、固定サイズとすることも、拡張または縮小することもできます。ヒープのメモリーは連続している必要はありません。
Java仮想マシンには、すべてのスレッド間で共有されるメソッド領域があります。メソッド領域は、ヒープ以外のメモリーに属します。非ヒープ・メモリーには、実行定数プール、フィールドおよびメソッド・データ、メソッドおよびコンストラクタのコードなど、クラス単位の構造体が格納されます。メソッド領域は、Java仮想マシンの起動時に作成されます。
メソッド領域は、論理的にはヒープの一部ですが、仮想マシンの実装では、ガベージ・コレクトしないようにしたり、コンパクト化したりすることを選択できます。ヒープと同様に、メソッド領域は固定サイズとしたり、拡張または縮小したりすることができます。メソッド領域のメモリーは連続している必要はありません。
メソッド領域のほかに、Java仮想マシンの実装では、内部処理や最適化のためのメモリーを必要としますが、このメモリーもヒープ以外のメモリーに属します。たとえば、JITコンパイラでは、高性能を実現するうえでJava仮想マシン・コードから変換されたネイティブ機械コードのメモリーが必要です。
メモリー・プール
とメモリー・マネージャ
は、Java仮想マシンのメモリー・システムを監視および管理する抽象エンティティです。
メモリー・プールは、Java仮想マシンが管理するメモリー領域を表します。Java仮想マシンは、少なくとも1つのメモリー・プールを持ち、実行中にメモリー・プールを作成または削除できます。メモリー・プールは、ヒープまたはヒープ以外のメモリーに属することができます。
メモリー・マネージャは、1つ以上のメモリー・プールの管理を担当します。ガベージ・コレクタは、到達できないオブジェクトにより占有されたメモリーの再生を担当するメモリー・マネージャの1種です。Java仮想マシンは、1つ以上のメモリー・マネージャを持つことができます。実行中にメモリー・マネージャを追加または削除できます。メモリー・プールは、複数のメモリー・マネージャによって管理できます。
メモリー使用量は、次の3つの方法で監視できます。
MemoryPoolMXBean
インタフェースで指定されます。
メモリー使用量監視メカニズムは、ロード・バランシングまたは作業負荷分散に使用することを目的としています。たとえば、アプリケーションは、メモリー使用が一定のしきい値を超えたときに、新しい作業負荷の受け入れを停止します。メモリー使用量監視メカニズムは、アプリケーションのためにメモリー不足条件を検出したり、メモリー不足条件から回復したりするためのものではありません。
MemoryPoolMXBean.isUsageThresholdSupported()
メソッドおよびMemoryPoolMXBean.isCollectionUsageThresholdSupported()
メソッドを呼び出して判定できる使用量しきい値またはコレクション使用量しきい値をメモリー・プールの1つがサポートする場合、このMemoryMXBeanは、2種類のメモリー通知
を発行するNotificationEmitter
です。
使用量しきい値超過通知
- メモリー・プールのメモリー使用量が増加し、使用量しきい値に達したか、超えたことを通知します。
コレクション使用しきい値超過通知
- Java仮想マシンがメモリー・プールで使用しないオブジェクトのリサイクルに最善を尽くしたあと、メモリー・プールのメモリー使用量がコレクション使用量しきい値以上であることを通知します。
発行される通知はNotification
インスタンスです。このインスタンスのユーザー・データ
は、通知が構築されたときのメモリー・プールに関する情報を含むMemoryNotificationInfo
オブジェクトを表すCompositeData
に設定されています。CompositeDataは、MemoryNotificationInfo
に記述された属性を格納します。
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);
ManagementFactory.getPlatformMXBeans(Class)
, JMX仕様, MXBeanにアクセスする方法修飾子と型 | メソッドと説明 |
---|---|
void |
gc()
ガベージ・コレクタを実行します。
|
MemoryUsage |
getHeapMemoryUsage()
オブジェクトの割当てに使用されるヒープの現在のメモリー使用量を返します。
|
MemoryUsage |
getNonHeapMemoryUsage()
Java仮想マシンによって使用されるヒープ以外の現在のメモリー使用量を返します。
|
int |
getObjectPendingFinalizationCount()
ファイナライズを中断しているオブジェクトのおよその数を返します。
|
boolean |
isVerbose()
メモリー・システムの詳細出力が有効かどうかをテストします。
|
void |
setVerbose(boolean value)
メモリー・システムの詳細出力を有効または無効にします。
|
getObjectName
int getObjectPendingFinalizationCount()
MemoryUsage getHeapMemoryUsage()
返されたメモリー使用量における使用されたメモリーの量は、ライブ・オブジェクトと収集されなかったガベージ・オブジェクト(存在する場合)の両方により占有されたメモリーの量です。
MBeanServerアクセス:
MemoryUsageのマップ型は、MemoryUsage
で指定された属性を含むCompositeDataです。
MemoryUsage
オブジェクト。MemoryUsage getNonHeapMemoryUsage()
MBeanServerアクセス:
MemoryUsageのマップ型は、MemoryUsage
で指定された属性を含むCompositeDataです。
MemoryUsage
オブジェクト。boolean isVerbose()
void setVerbose(boolean value)
このメソッドの呼出しのたびに、詳細出力は大域的に有効または無効になります。
value
- 詳細出力を有効にする場合はtrue、無効にする場合はfalse。SecurityException
- セキュリティ・マネージャが存在する場合で、呼出し元がManagementPermission("control")を持たない場合。void gc()
gc()
の呼出しの動作は、実際には次の呼び出しと同じです。
System.gc()
System.gc()
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.