ナビゲーションをスキップ

モニタおよび管理 API の使い方

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

JMAPI の使い方

このドキュメントでは BEA JRockit Monitoring and Management API (JMAPI) を簡単に紹介します。この API は BEA JRockit JVM をモニタおよび管理する手段を提供します。

この節の内容は以下のとおりです。

 


Javadoc の使い方

このドキュメントでは JMAPI について簡単に紹介します。このインタフェースの実装方法の基本的な手順を示し、機能の一部を簡単に説明しますが、ドキュメントとして最適なソースは以下の Javadoc です。

http://edocs.bea.com/jrockit/docs50/jmapi/javadoc/Management API/index.html

 


はじめに

JMAPI を実装するには、最初に JVMFactory を使用して JVM の実際のインスタンスの参照を取得する必要があります。

JVM のインスタンスを取得するには、次のようなコードを追加する必要があります。

com.bea.jvm.JVM myJVM = com.bea.jvm.JVMFactory.getJVM();

JVM インスタンスから、メモリ システムなどのさまざまなサブシステムにアクセスできます。特に、メモリ システムからはヒープ サイズの情報を要求したり、GarbageCollector にアクセスしたりできます。現在使用されているヒープ サイズ (バイト単位) の読み込みは次のようになります。

コード リスト 1 現在のヒープ サイズの読み込み

com.bea.jvm.JVM myJVM = com.bea.jvm.JVMFactory.getJVM();
long heapSize = myJVM.getMemorySystem().getUsedHeapSize();

ナーサリと一緒にパラレル ガベージ コレクタを使用しているかどうかを確認するには、次のコード リスト 2 のようなコードを含めます。

コード リスト 2 ガベージ コレクタのタイプの確認

com.bea.jvm.GarbageCollector myGC =	myJVM.getMemorySystem().getGarbageCollector();
boolean isParallelWithNursery = myGC.isParallel() &&
myGC.isGenerational();

 


JMAPI を使用してイベントをサブスクライブする

JMAPI を使用して多数のさまざまなイベントをサブスクライブできます。

コード リスト 3 では、ロードおよびアンロードされたクラスの名前を出力する匿名の ClassLoadListener を追加する方法を示します。

コード リスト 3 匿名の ClassLoadListener の追加

JVM myJVM = JVMFactory.getJVM();
myJVM.getClassLibrary().addClassLoadListener(new
ClassLoadListener()
{
public void onClassLoad(ClassLoadEvent event)
{
String prefix = (event.getEventType() ==
ClassLoadEvent.CLASS_LOADED) ? "Loaded" : "Unloaded";
System.out.println(prefix + " : " +
event.getClassObject().getName());
}
});

コード リスト 4 では、コンパイルされたメソッドおよびコンストラクタと、使用された最適化レベルを出力する匿名の CompilationListener を追加する方法を示します。

コード リスト 4 匿名の CompilationListener の追加

JVM myJVM = JVMFactory.getJVM();
myJVM.getCompilationSystem().addCompilationListener(
new CompilationListener()
{
public void onMethodCompilation(
CompilationEvent event)
{
String prefix = "Compiled " + (event.hasConstructor() ? " constructor " +
event.getConstructor().getClass().getName() : "method " +
event.getMethod().getClass().getName());
System.out.println(prefix + " : Optimization lvl " +
event.getOptimizationLevel().getDescription());
}
});

 


JMAPI を使用して BEA JRockit プロファイラにアクセスする

BEA JRockit JVM には、メソッドの呼び出し回数やメソッドのタイミング情報を取得するために、非常に効率的でオーバーヘッドの低いプロファイラが用意されています。

コード リスト 6 はサンプル クラス (コード リスト 5 を参照) のメソッドを呼び出して、呼び出された回数とそのメソッドにかかった合計時間を出力する方法を示します。

コード リスト 5 サンプル クラス A

public class A
{
public boolean check(Object obj)
{
return this.getClass().isInstance(obj);
}
}

コード リスト 6 サンプル クラスのメソッドの呼び出し

ProfilingSystem profiler =
JVMFactory.getJVM().getProfilingSystem();
A a = new A();
Method [] methods = A.class.getDeclaredMethods();
profiler.setInvocationCountEnabled(methods[0], true);
profiler.setTimingEnabled(methods[0], true);
for (int i = 0; i < 100000; i++) a.check(a);
System.out.println("Profiling system: check method invoked " +
m_jrockit.getProfilingSystem().getInvocationCount(methods[0]) + "
times");
System.out.println("Time spent in method " +
m_jrockit.getProfilingSystem().getTiming(methods[0])
+ " ms");

 


JMAPI を使用して例外カウントにアクセスする

JMAPI を使用して、特定のクラス (必要な場合はその全サブクラス) の例外が送出された回数をカウントする例外カウンタにアクセスすることもできます。コード リスト 7 は、IOException をカウントする例を示します。

コード リスト 7 JMAPI による IOException のカウント

profiler.setExceptionCountEnabled(IOException.class,
true, false);
for (int i = 0; i < 10000; i++)
{
try
{
throw new IOException();
}
catch (Exception e)
{
// 意図的に空白を残す
}
}
System.out.println("Profiling system: exception counts = "
+ m_jrockit.getProfilingSystem().
getExceptionCount(IOException.class));

 


セキュリティ マネージャを備えた BEA JRockit で動作するコードから JMAPI にアクセスする

セキュリティ マネージャを備えた BEA JRockit で動作するコードから JMAPI にアクセスするには、まずそのコードにパーミッション com.bea.jvm.ManagementPermission "createInstance" を付与する必要があります。コードにパーミッションを付与する方法の詳細については、「Permissions in the Java 2 SDK」を参照してください。

コードにパーミッションが付与されていない場合、JMAPI にアクセスしようとしても SecurityException が送出されます。

コード リスト 8 では、すべてのコードに JMAPI へアクセスするパーミッションを付与する簡単なポリシー文を示します。

コード リスト 8 セキュリティ マネージャを備えたコードからの JMAPI へのアクセス

grant{
// JRockit Management API へのアクセスに必要
permission com.bea.jvm.ManagementPermission "createInstance";
};

 

ページの先頭 前 次