|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
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 つ以上のメモリマネージャを持つことができます。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()
gc()
の呼び出しの動作は、実際には次の呼び出しと同じです。System.gc()
System.gc()
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。