|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
public interface MemoryMXBean
Java 仮想マシンのメモリーシステムの管理インタフェースです。
Java 仮想マシンは、このインタフェースの実装クラスの単一インスタンスを持ちます。このインタフェースを実装しているインスタンスは、ManagementFactory.getMemoryMXBean()
メソッドを呼び出して取得できる、あるいは platform MBeanServer
メソッドから取得できる MXBean です。
MBeanServer 内でメモリーシステムの MXBean を一意に識別するための ObjectName は次のとおりです。
java.lang:type=Memory
ヒープは、固定サイズとすることも、拡張または縮小することもできます。ヒープのメモリーは連続している必要はありません。
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);
メソッドの概要 | |
---|---|
void |
gc()
ガベージコレクタを実行します。 |
MemoryUsage |
getHeapMemoryUsage()
オブジェクトの割り当てに使用されるヒープの現在のメモリー使用量を返します。 |
MemoryUsage |
getNonHeapMemoryUsage()
Java 仮想マシンによって使用されるヒープ以外の現在のメモリー使用量を返します。 |
int |
getObjectPendingFinalizationCount()
ファイナライズを中断しているオブジェクトのおよその数を返します。 |
boolean |
isVerbose()
メモリーシステムの詳細出力が有効かどうかをテストします。 |
void |
setVerbose(boolean value)
メモリーシステムの詳細出力を有効または無効にします。 |
メソッドの詳細 |
---|
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()
System.gc()
System.gc()
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。