|
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 つ以上のメモリーマネージャーを持つことができます。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 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。