以下の例では、staticField データ項目と StaticInitializer プローブ・フラグメントの使用方法について示しています。
この例では、プローブが、クラスのインスタンスがいつ作成されるかを追跡します。そのクラスの直前のインスタンス作成のあと 2 秒後以降にインスタンスが作成された場合、プローブはログ・メッセージを書き込みます。
このプローブは、staticField を使用して、すべてのプローブ実行済みクラス内に新しい静的フィールドを作成します。これと比較して、fragmentAtClassScope を使用して Date フィールドを宣言した場合、プローブが適用されるクラスの数に関係なく、プローブ・フラグメントを格納する生成済みクラス内に Date の単一インスタンスが現れます。各プローブ実行済みクラスのインスタンス作成の間の時間遅延ではなく、任意のプローブ実行済みクラスのインスタンス作成の間の時間遅延を追跡する場合、この方法を使用することができます。
このサンプル・コードを使用するには、ターゲット・オブジェクトの package="com.sample*" で、実際のパッケージ名を参照するように変更してください。
XML で & と < の文字を使用するには、文字エンティティー & と < をこの例に示すように指定する必要があります。
<?xml version="1.0" encoding="ASCII"?> <probekit> <probe> <target type="include" package="com.sample*" method="<init>" /> <target type="exclude" package="*" /> <staticField type="java.util.Date"/> <fragment type="entry"> <data name="lastInstanceDate" type="staticField"/> <data name="clname"/> <code> java.util.Date d = new java.util.Date(); long now = d.getTime(); long prev = lastInstanceDate.getTime(); if (prev != 0 && prev + 1000 < now) { System.out.println("[" + clname + " instance after > 1 second]"); } lastInstanceDate.setTime(now); </code> </fragment> <fragment type="staticInitializer"> <data name="lastInstanceDate" type="staticField"/> <data name="clname"/> <code> lastInstanceDate.setTime(0); System.out.println("[" + clname + " class loaded]"); </code> </fragment> </probe> </probekit>