java.lang.Object | +--oracle.jdeveloper.profiler.ProfilerAPI
java.lang.Object
プロファイリング機能のコード・レベル・サポートを提供するユーティリティ・クラス。
このクラスには、プロファイリングのコード・インストルメンテーションを可能にするstaticメソッドのセットが含まれます。インストルメント・コードは任意のVMまたは任意のモードのOJVMで実行可能ですが、インストルメンテーションはプロファイリング・モードのOJVMでプログラムを実行した場合のみ有効です。それ以外の場合には、実装は透過的になるよう設計されており、またインストルメンテーションが適切に行われているかぎり、実行に問題が生じないよう設計されています。
現在このクラスは、実行プロファイリングおよびイベント・プロファイリングの2つのJDeveloperプロファイリング・モードをサポートしています。
startSampling()
とstopSampling()
を参照してください。
典型的なサンプリング・コードの実装は次のとおりです。
public void foo()
{
ProfilerAPI.startSampling(); // Starts the sampler
// execute some code
ProfilerAPI.stopSampling(); // Stops the sampler
}
サンプリングの開始および停止のコールはネストできます。
VMおよびいくつかのライブラリがイベントを生成する場合でも、有用なイベント・プロファイリングにはコード・インストルメントが必要です。ProfilerAPIクラスでこれを行うことができます。
イベントには次の属性があります。
static final int CSTXXX
を使用することを強くお薦めします。OJVMは0から99のイベントIDを生成しますが、APIではイベントIDの単一性は保証されません。 推奨されるイベント・インストルメンテーションは次のとおりです。
class foo
{
private static final int EVENT_ID = 500;
private static final boolean EVENT_ON =
ProfilerAPI.isActive && ProfilerAPI.isEventActive(EVENT_ID);
// some code
String getInfo(String request)
{
int eventHandler = -1; // default value
if (EVENT_ON)
{
eventHandler = ProfilerAPI.startEvent(EVENT_ID, "Getting info for " + request + "\n");
}
try
{
// some code
if (simpleRequest)
{
if (EVENT_ON)
{ // might be useful for the user
ProfilerAPI.addComment(eventHandler, " Simple request\n");
}
// actual code of the simple request
}
else
{
if (EVENT_ON)
{ // might be useful for the user
ProfilerAPI.addComment(eventHandler, " Complex request\n");
}
// actual code of the complex request
}
}
catch (Throwable e)
{
if (EVENT_ON)
{
ProfilerAPI.addComment(eventHandler, " Interrupted with exception " + e);
}
throw(e);
}
finally
{
if (EVENT_ON)
{
ProfilerAPI.endEvent(eventHandler, " Result = " + res);
}
}
return res;
}
// other methods
}
この実装は複雑に見えますが、これはすべてのケースに対処するようにしたためです。イベント・プロファイリング以外では、パフォーマンスにほとんど問題はありません。コードが例外をスローしないことがわかっている場合、try
/catch
/finally
構造はすべて不要です。1回だけ評価されるstatic booleanを使用すると、プロファイリング時のパフォーマンスの問題を最小限に抑えることができます。ProfilerAPI関数は即時に戻りますが、メソッド引数はすべて評価されるため、この方法を使用しなくても正しく動作します。
フィールドの概要 | |
---|---|
static boolean |
isActive |
メソッドの概要 | |
---|---|
static void |
addComment(int handle, boolean o) イベントにコメントを追加します。 |
static void |
addComment(int handle, char o) イベントにコメントを追加します。 |
static void |
addComment(int handle, char[] o) イベントにコメントを追加します。 |
static void |
addComment(int handle, char[] o, int offset, int count) イベントにコメントを追加します。 |
static void |
addComment(int handle, double o) イベントにコメントを追加します。 |
static void |
addComment(int handle, float o) イベントにコメントを追加します。 |
static void |
addComment(int handle, int o) イベントにコメントを追加します。 |
static void |
addComment(int handle, long o) イベントにコメントを追加します。 |
static void |
addComment(int handle, java.lang.Object o) イベントにコメントを追加します。 |
static void |
addComment(int handle, java.lang.String o) イベントにStringコメントを追加します。 |
static void |
addStackToComment(int handle) コメントに現在のスタックを追加します。 |
static void |
clearEventHistory() 終了していないイベントを除くすべてのイベントを消去します。 |
static void |
dumpEventHistory() 現在のストアド・イベントを stderr に出力します。 |
static void |
endEvent(int handle) イベントを終了します。 |
static void |
endEvent(int handle, java.lang.String comment) イベントを終了します。 |
static boolean |
isEventActive(int event) このイベントIDがこの実行中にアクティブかどうかをチェックします。 |
static void |
pulseEvent(int event, java.lang.String comment) パルス・イベントを作成します。 |
static int |
startEvent(int event) このイベントの参照に使用するハンドルを返します。 |
static int |
startEvent(int event, java.lang.String comment) このイベントの参照に使用するハンドルを返します。 |
static void |
startSampling() サンプリングを開始します。このコールは、stopSampling()とペアになっている必要があります。 |
static void |
stopSampling() サンプリングを停止します。このコールは、startSampling()とペアになっている必要があります。 |
クラス java.lang.Objectから継承したメソッド |
---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
フィールドの詳細 |
---|
public static boolean isActive
メソッドの詳細 |
public static void startSampling()
stopSampling()
とペアになっている必要があります。
サンプリングは、stopSampling
に対する最も外側のコールが実行されるまで行われます。
stopSampling()
public static void stopSampling()
startSampling()
とペアになっている必要があります。
startSampling()
public static int startEvent(int event, java.lang.String comment)
このコールは、endEvent
へのコールとペアになっている必要があります。
同じIDを持つ複数のイベントは、個別に開始および停止できます。
開始時刻およびコード位置はこのコール中に評価されます。
コメントString
引数は、VM内に格納されます。コメントがさらに追加されます。
イベント・プロファイラまたはイベントがアクティブでない場合、戻り値は-1です。イベント関数へのすべてのコールは即時に戻ります。このため、ハンドルは-1に初期化することをお薦めします。
event
- イベントID
comment
- コメント
endEvent(int)
, endEvent(int, String)
public static int startEvent(int event)
このコールは、endEvent
へのコールとペアになっている必要があります。
同じIDを持つ複数のイベントは、個別に開始および停止できます。
このコールはstartEvent(event, null);
と等価です。
event
- イベントID
startEvent(int, String)
, endEvent(int)
, endEvent(int, String)
public static void endEvent(int handle, java.lang.String comment)
このコールは、startEvent
へのコールとペアになっている必要があります。ハンドラは、startEvent
関数により提供されるか、または-1である必要があります。その他の値は無視され、警告メッセージがstderr
に出力されます。
同じIDを持つ複数のイベントは、個別に開始および停止できます。
終了時刻はこのコール中に評価されます。
コメントString
引数は、現在のコメントに追加されます。
イベントIDの終了後は、このハンドルを使用してコールを行わないでください。endEvent
を、このイベントを生成する最後のコールとする必要があります。
handle
- イベント・ハンドル
comment
- コメント
endEvent(int)
, startEvent(int, String)
, startEvent(int)
public static void endEvent(int handle)
このコールは、startEvent
へのコールとペアになっている必要があります。ハンドラは、startEvent
関数により提供されるか、または-1である必要があります。その他の値は無視され、警告メッセージがstderr
に出力されます。
同じIDを持つ複数のイベントは、個別に開始および停止できます。
endEvent(handle, null);
と等価です。終了時刻はこのコール中に評価されます。
イベントIDの終了後は、このハンドルを使用してコールを行わないでください。endEvent
を、このイベントを生成する最後のコールとする必要があります。
handle
- イベント・ハンドル
comment
- コメント
endEvent(int, String)
, startEvent(int, String)
, startEvent(int)
public static void pulseEvent(int event, java.lang.String comment)
位置、開始時刻および終了時刻はこのコール中に評価されます。
この関数では、継続時間の長くないイベントを作成できます。
event
- イベントID
comment
- コメント
public static boolean isEventActive(int event)
この実行でイベントが不要な場合に余分なオーバーヘッドを回避するには、この関数を使用する必要があります。
event
- イベントID
public static void addComment(int handle, java.lang.String o)
String
コメントを追加します。
ハンドラは、startEvent
関数により提供されるか、または-1である必要があります。その他の値は無視され、警告メッセージがstderr
に出力されます。
コメントは、現在のコメントの最後に追加されます。
handle
- イベント・ハンドル
Comment
- コメント
startEvent(int, String)
, startEvent(int)
public static void addStackToComment(int handle)
ハンドラは、startEvent
関数により提供されるか、または-1である必要があります。その他の値は無視され、警告メッセージがstderr
に出力されます。
現在のスタックは、現在のコメントの最後に追加されます。
handle
- イベント・ハンドル
Comment
- コメント
startEvent(int, String)
, startEvent(int)
public static void clearEventHistory()
public static void dumpEventHistory()
stderr
に出力します。
public static void addComment(int handle, java.lang.Object o)
ハンドラは、startEvent
関数により提供されるか、または-1である必要があります。その他の値は無視され、警告メッセージがstderr
に出力されます。
コメントは、現在のコメントの最後に追加されます。
addComment(handle, String.valueOf(o))
と等価です。
handle
- イベント・ハンドル
o
- コメント
startEvent(int, String)
, startEvent(int)
public static void addComment(int handle, int o)
ハンドラは、startEvent
関数により提供されるか、または-1である必要があります。その他の値は無視され、警告メッセージがstderr
に出力されます。
コメントは、現在のコメントの最後に追加されます。
addComment(handle, String.valueOf(o))
と等価です。
handle
- イベント・ハンドル
o
- コメント
startEvent(int, String)
, startEvent(int)
public static void addComment(int handle, char o)
ハンドラは、startEvent
関数により提供されるか、または-1である必要があります。その他の値は無視され、警告メッセージがstderr
に出力されます。
コメントは、現在のコメントの最後に追加されます。
addComment(handle, String.valueOf(o))
と等価です。
handle
- イベント・ハンドル
o
- コメント
startEvent(int, String)
, startEvent(int)
public static void addComment(int handle, Boolean o)
ハンドラは、startEvent
関数により提供されるか、または-1である必要があります。その他の値は無視され、警告メッセージがstderr
に出力されます。
コメントは、現在のコメントの最後に追加されます。
addComment(handle, String.valueOf(o))
と等価です。
handle
- イベント・ハンドル
o
- コメント
startEvent(int, String)
, startEvent(int)
public static void addComment(int handle, float o)
ハンドラは、startEvent
関数により提供されるか、または-1である必要があります。その他の値は無視され、警告メッセージがstderr
に出力されます。
コメントは、現在のコメントの最後に追加されます。
addComment(handle, String.valueOf(o))
と等価です。
handle
- イベント・ハンドル
o
- コメント
startEvent(int, String)
, startEvent(int)
public static void addComment(int handle, double o)
ハンドラは、startEvent
関数により提供されるか、または-1である必要があります。その他の値は無視され、警告メッセージがstderr
に出力されます。
コメントは、現在のコメントの最後に追加されます。
addComment(handle, String.valueOf(o))
と等価です。
handle
- イベント・ハンドル
o
- コメント
startEvent(int, String)
, startEvent(int)
public static void addComment(int handle, long o)
ハンドラは、startEvent
関数により提供されるか、または-1である必要があります。その他の値は無視され、警告メッセージがstderr
に出力されます。
コメントは、現在のコメントの最後に追加されます。
addComment(handle, String.valueOf(o))
と等価です。
handle
- イベント・ハンドル
o
- コメント
startEvent(int, String)
, startEvent(int)
public static void addComment(int handle, char[] o)
ハンドラは、startEvent
関数により提供されるか、または-1である必要があります。その他の値は無視され、警告メッセージがstderr
に出力されます。
コメントは、現在のコメントの最後に追加されます。
addComment(handle, String.valueOf(o))
と等価です。
handle
- イベント・ハンドル
o
- コメント
startEvent(int, String)
, startEvent(int)
public static void addComment(int handle, char[] o, int offset, int count)
ハンドラは、startEvent
関数により提供されるか、または-1である必要があります。その他の値は無視され、警告メッセージがstderr
に出力されます。
コメントは、現在のコメントの最後に追加されます。
addComment(handle, String.valueOf(o))
と等価です。
handle
- イベント・ハンドル
o
- コメント
startEvent(int, String)
, startEvent(int)