この例では、staticField データ項目および StaticInitializer プローブ・フラグメントの使用方法を示します。
この例のプローブは、クラスのインスタンス作成のタイミングを追跡します。あるインスタンスが、そのクラスの前のインスタンスが作成されてから 1 秒を過ぎた後に作成されると、プローブはログ・メッセージを書き込みます。
このプローブは staticField を使用して、プローブ済みの各クラスに新しい静的フィールドを作成します。 これと比較して、fragmentAtClassScope を使用して Date フィールドを宣言すると、プローブが適用されたクラスがいくつあっても、プローブ・フラグメントを保持する生成済みクラスに、Date のインスタンスが 1 つ現れます。 各プローブ済みクラスのインスタンス作成間の遅延を追跡するのではなく、任意のプローブ済みクラスのインスタンス作成間の遅延を追跡したい場合に、この方法を実行できます。
このコード例を使用するには、ターゲット・オブジェクトの 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>