(57)【要約】【課題】プロファイル情報取得のための性能オーバーヘッドを極めて小さくし、実運用のアプリケーションプログラムに近い実行性能値を取得可能とすること。【解決手段】アプリケーションプログラムからプロファイル情報を取得するプロファイラにおいて、プロファイル情報取得対象を指定するプロファイル情報取得対象設定部３９と、プログラム実行基盤に設置のコールスタックを監視する監視部３２と、プログラム実行基盤から通知されるイベントに基づいてプロファイル情報を取得するイベント処理部５０と、を備え、プロファイル情報取得対象設定部は、プロファイル情報取得対象の内でメソッドを設定し、監視部は、コールスタックを一定時間間隔で監視することで設定されたメソッドが実行中か否かを検知し、イベント処理部は、実行中の検知された期間に渡ってメソッドの開始と終了のイベント通知を受け入れてプロファイル情報を取得するプロファイラ。【選択図】図３
2005141392.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションプログラムからプロファイル情報を取得するプロファイラにおいて、
メソッドを一例とするプロファイル情報取得対象を指定し、
前記指定されたプロファイル情報取得対象が実行中か否かを一定時間間隔で監視し、
前記監視によって実行中であると判断したときに前記プロファイル情報取得対象を取得する
ことを特徴とするプロファイラ。
【請求項２】
請求項１に記載のプロファイラにおいて、
前記プロファイル情報取得対象が実行の開始と終了の判断は、前記アプリケーションプログラムの呼び出し関係を示す情報を監視する
ことを特徴とするプロファイラ。
【請求項３】
請求項２に記載のプロファイラにおいて、
前記アプリケーションプログラムの呼び出し関係を示す情報監視は、前記アプリケーションプログラムの実行基盤に設置されたコールスタックを監視する
ことを特徴とするプロファイラ。
【請求項４】
アプリケーションプログラムからプロファイル情報を取得するプロファイラにおいて、
プロファイル情報取得対象を指定するプロファイル情報取得対象設定部と、
前記プロファイラに接続されたアプリケーションプログラム実行基盤に設置のコールスタックを監視する監視部と、
前記アプリケーションプログラム実行基盤から通知されるイベントに基づいてプロファイル情報を取得するイベント処理部と、を備え、
前記プロファイル情報取得対象設定部は、前記プロファイル情報取得対象の内でメソッドを設定し、
前記監視部は、前記コールスタックを一定時間間隔で監視することで前記設定されたメソッドが実行中か否かを検知し、
前記イベント処理部は、前記実行中の検知された期間に渡って前記メソッドの開始と終了のイベント通知を受け入れてプロファイル情報を取得する
ことを特徴とするプロファイラ。
【請求項５】
請求項４に記載のプロファイラにおいて、
前記プロファイル情報取得対象設定部は、複数のメソッドの内で特定のメソッドに限定することを特徴とするプロファイラ。
【請求項６】
アプリケーションプログラムからプロファイル情報を取得するプロファイル情報取得方法において、
メソッドを一例とするプロファイル情報取得対象を指定するステップと、
前記指定されたプロファイル情報取得対象が実行中か否かを一定時間間隔で監視するステップと、
前記監視によって実行中と判断された期間に渡って前記プロファイル情報取得対象を取得するステップと、からなる
ことを特徴とするプロファイル情報取得方法。
【請求項７】
メソッドを一例とするプロファイル情報取得対象を指定し、前記指定されたプロファイル情報取得対象が実行中か否かを一定時間間隔で監視し、前記監視によって実行中であると判断したときに前記プロファイル情報取得対象を取得して、アプリケーションプログラムからプロファイル情報を取得するプロファイラと、
アプリケーションプログラムが実行され、前記指定されたプロファイル情報取得対象のみを有効として前記プロファイラにイベント通知するアプリケーションプログラム実行基盤と、
から構成されるプロファイル情報取得装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションプログラムの性能チューニング技術に関わり、特に、実運用に近い形態でアプリケーションプログラムの性能データ取得のために、アプリケーションプログラムの実行に伴い生成されるデータ（以下、プロファイル情報と称する）の取得装置と方法に関する。
【背景技術】
【０００２】
従来技術におけるプロファイル情報の取得方法においては、アプリケーションプログラムの実行中に出力されるプロファイル情報のデータ量を減らし、プロファイラがプロファイル情報を取得する際のオーバーヘッドを低減することが開示されている（例えば、特許文献１を参照）。この従来技術によれば、プロファイル情報が取得される際のオーバーヘッドを低減させるために、出力可否フラグを使用し、この出力可否フラグが出力することを示す場合には、プロファイル情報を取得することを特徴としている。
【特許文献１】特開２００２−２９７４１６
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、上述した特許文献１によれば、プロファイル情報取得手段は、対応する階層のプログラムが他の階層のプログラムから呼び出されると、判定情報に応じて、プロファイル情報を取得するか否かを判定してプロファイル情報の取得判定を行っているが、例えば、呼び出されるプログラムが多数ある場合、プロファイル情報を取得するか否かの判定が多発することで、プロファイル情報を取得する際のオーバーヘッドが低減できず、実運用時のアプリケーションプログラムの実行性能値と大きな誤差が生じるという課題がある。
【０００４】
本発明の目的は、プロファイル情報取得のための性能オーバーヘッドを極めて小さくし、実運用のアプリケーションプログラム稼働時に近い実行性能値を取得可能とするシステムを提供することにある。
【課題を解決するための手段】
【０００５】
前記課題を解決するために、本発明は主として次のような構成を採用する。  
アプリケーションプログラムからプロファイル情報を取得するプロファイラにおいて、
メソッドを一例とするプロファイル情報取得対象を指定し、
前記指定されたプロファイル情報取得対象が実行中か否かを一定時間間隔で監視し、
前記監視によって実行中であると判断したときに前記プロファイル情報取得対象を取得する構成とする。
【０００６】
また、アプリケーションプログラムからプロファイル情報を取得するプロファイラにおいて、
プロファイル情報取得対象を指定するプロファイル情報取得対象設定部と、
前記プロファイラに接続されたアプリケーションプログラム実行基盤に設置のコールスタックを監視する監視部と、
前記アプリケーションプログラム実行基盤から通知されるイベントに基づいてプロファイル情報を取得するイベント処理部と、を備え、
前記プロファイル情報取得対象設定部は、前記プロファイル情報取得対象の内でメソッドを設定し、
前記監視部は、前記コールスタックを一定時間間隔で監視することで前記設定されたメソッドが実行中か否かを検知し、
前記イベント処理部は、前記実行中の検知された期間に渡って前記メソッドの開始と終了のイベント通知を受け入れてプロファイル情報を取得する構成とする。
【発明の効果】
【０００７】
本発明によれば、プロファイル情報が取得される際のオーバーヘッドを低減し、実運用に近いアプリケーションプログラムの実行性能値を取得することにより、より効果的にアプリケーションプログラムのチューニング作業を実施することが可能となる。
【発明を実施するための最良の形態】
【０００８】
本発明の実施形態に係るプロファイル情報の取得装置及び方法について、図面を参照しながら以下詳細に説明する。図１はＪＡＶＡ（登録商標）アプリケーションプログラムのプロファイラにおける概略的な関連構成を示す図であり、図２は本発明の実施形態に関するプロファイル情報取得における動作原理を示す図であり、図３は本実施形態に関するプロファイラとＪＶＭの具体的構成を示す図であり、図４は本実施形態に係るプロファイラがＪＶＭから特定メソッドのプロファイル情報を取得するフローを示す図である。
【０００９】
本発明の実施形態では、ＪＡＶＡ（登録商標）アプリケーションプログラムのプロファイラについて説明する。一般的に云えば、ＪＡＶＡ（登録商標）言語で書かれたアプリケーションプログラムは、ＪＡＶＡ（登録商標）コンパイラによってバイトコードと呼ばれる中間言語に翻訳される。バイトコードはＪＶＭ（Java （登録商標）Virtual Machine）によって解釈され、実行される。或るプラットフォーム上で動作するＪＶＭが存在すれば、そのＪＶＭの上でＪＡＶＡ（登録商標）アプリケーションプログラムを実行することができる。このように、プラットフォーム間の相違を各プラットフォーム上のＪＶＭが吸収することにより、プラットフォームに依存せずにＪＡＶＡ（登録商標）アプリケーションプログラムを実行することができる。
【００１０】
一般的なＪＡＶＡ（登録商標）アプリケーションプログラムのプロファイラは、ＪＶＭが持つプロファイラ用インタフェースを介してＪＶＭからプロファイル情報を取得する。このプロファイラ用インタフェースはＪＶＭＰＩ（Java （登録商標）Virtual Machine Profiler Interface）と呼ばれる。
【００１１】
図１に、上述したＪＶＭＰＩを用いて、プロファイラ（プロファイル情報の取得プログラムあるいは装置であってアプリケーションプログラムの動作解析を行うツール）がプロファイル情報（例えば、アプリケーションプログラムの或る部分における実行回数や実行時間）を取得する一般的な概要を示している。ＪＶＭ（１１）は、図示されていないＪＡＶＡ（登録商標）コンパイラによってバイトコードに変換されたプロファイル対象アプリケーションプログラム（１６）を読み込み、バイトコードインタプリタ（１７）を用いてバイトコードを解釈し実行する。バイトコードインタプリタ（１７）によりプロファイル対象とする動作が行われるたびに、ＪＶＭ（１１）はＪＶＭＰＩ（１２）を通じてプロファイラ（１３）にイベント（１４）を通知する。
【００１２】
プロファイル対象となるイベントの種類には、（ａ）メソッドの開始および終了、（ｂ）ヒープ割り当ておよび解放、（ｃ）ガーベジコレクションの開始および終了、（ｄ）スレッドの開始および終了などがある。ＪＶＭ（１１）がメソッドの開始および終了、及び／又はヒープ割り当ておよび解放などを実行すると、ＪＶＭ（１１）はＪＶＭＰＩ（１２）を介してプロファイラ（１３）にイベントを送付し、メソッドの開始および終了等の事象が発生したという事実や、割り当てられたり解放されたりしたヒープ領域のサイズなどをプロファイラ（１３）に通知する。ここで、メソッドは、オブジェクト指向プログラミングにおいて各オブジェクトが持っている自身に対する操作のことであるが、端的な例示で云えば、ウインドウズというオブジェクトの動作中においてインターネットエクスプローラ又はメモ帳を動作させることに相当する。
【００１３】
さらに、プロファイラ（１３）はイベントを受け取った時刻やイベントの内容をプロファイル情報（１５）に記録しておき、その記録をもとにプロファイル終了時に「各メソッドの処理時間」や「割り当てられたヒープ領域の合計サイズ」などを算出してユーザに提示する。例えば、或るメソッドの実行時間は、そのメソッドの終了イベント通知を受け取った時刻からそのメソッドの開始イベント通知を受け取った時刻を減じることで算出できる。
【００１４】
また、ＪＶＭがＪＶＭＰＩを介してプロファイラに対して行う各種のイベント通知は、ＪＶＭＰＩの設定により有効および無効を切り替えることができる。例えば、メソッドの開始および終了のイベント通知のみを有効にして、他の事象に関するイベント通知を無効にすることができる。
【００１５】
以上述べたような基本的な動作を行う、ＪＶＭＰＩを用いたＪＡＶＡ（登録商標）アプリケーションプログラムに対する一般的なプロファイラには、処理速度の面で課題が生じていた。具体的には、ＪＶＭが「メソッドの開始および終了」のような頻繁に発生する事象をプロファイラにイベント通知すると、ＪＶＭＰＩのオーバーヘッドが非常に大きくなるという課題である。例えば、メソッドの開始および終了のイベント通知を有効にしておき、メソッドの呼び出しが頻繁に発生するようなアプリケーションをプロファイルする（当該アプリケーションについてプロファイル情報を取得する）と、そのアプリケーションの実行にかかる時間は、非プロファイル時（プロファイル情報を取得しないとき）の数十〜数百倍になることがある（イベント通知などのためにＪＶＭに負荷が掛かり、アプリケーションの実行上で動作速度が低下してその実行時間が格段に長くなる）。
【００１６】
このことにより、次の二つの課題が発生する。一つ目は、プロファイル情報の取得が効率的に行えないことである。ＪＡＶＡ（登録商標）アプリケーションプログラムの修正とプロファイル情報取得のサイクルは頻繁に繰り返されるため、プロファイル情報取得の効率低下は、ＪＡＶＡ（登録商標）アプリケーションプログラム開発作業の効率低下をもたらす。
【００１７】
二つ目は、リアルタイム処理プログラムやマルチスレッド環境下で動作するプログラム等、実行時間の長短およびタイミングに依存して動作が変わるプログラムに対してプロファイルすると、プロファイルによるオーバーヘッドのためにＪＡＶＡ（登録商標）アプリケーションプログラムの実行結果が非プロファイル時の実行結果とかけ離れてしまい、得られたプロファイル情報が非プロファイル時のＪＡＶＡ（登録商標）アプリケーションプログラムの特性を正確に表さないということである。
【００１８】
端的な例示で云えば、プロファイル時にはＪＶＭに負荷が掛かるので、プロファイル時におけるＪＡＶＡ（登録商標）アプリケーションプログラムの実行時間は、非プロファイル時における実行時間に比べて極めて大となり（例えば、１分に比べて６０分の実行時間）、実際の運用で当該ＪＡＶＡ（登録商標）アプリケーションプログラムを実行している場合（この場合にはプロファイル情報を取得してはいない）の実行時間とはかけ離れた値となり、アプリケーションプログラムの実行時間について正確な特性を表していない。なお、この例では実行結果として実行時間を取り上げたが、イベントの種別によっては、実行結果は実行時間だけがパラメータとはならない（例えば、ガーベジコレクションでは実行回数となる）。
【００１９】
これら二つの課題は、メソッドの開始および終了のイベント通知を無効にすれば発生しないが、そうするとメソッドの実行時間の計測が不可能になってしまう。
【００２０】
ところで、プロファイラのユーザは、すべてのメソッドのプロファイル情報を要求しているとは限らず、特定のメソッドのプロファイル情報のみ得られれば目的を達成できることがある。そのようなケースとして、ＸＭＬ文書を処理するためのＪＡＶＡ（登録商標）アプリケーションプログラムを想定する。
【００２１】
ここで想定したＸＭＬ文書の処理には二つの段階がある。第一段階は、ＸＭＬ文書をパースしてＸＭＬ文書の木構造をメモリ上に展開し、その木構造をたどって所望のデータを取得する段階である。この段階のプログラミングを支援するＡＰＩ（Application Program Interface）として、ＪＡＸＰ（Java （登録商標）API for XML Processing）というメソッド群が標準化されている。第二段階は、第一段階で得られたデータを意味付けて、その意味に応じた処理をする段階である。仮に、ユーザが第一段階の「ＪＡＸＰで用意されたメソッド」の実行時間を計測してＪＡＸＰの処理性能を調べる意図を持っている場合、第二段階のメソッド実行時間（ＪＡＸＰ以外のメソッド実行時間）の計測は不要になる。
【００２２】
このように、特定のメソッドに限定したプロファイル情報を取得する場合、本発明の実施形態を用いれば、高速にプロファイル情報を取得することができる。このようなプロファイル情報の取得手法を、図２と図３を参照しながら以下説明する。
【００２３】
図２は本実施形態に関するプロファイル情報取得を高速化する原理を図示したものである。細線部分（２１）は、メソッド開始および終了のイベント通知を無効にした状態でプロファイラを実行していることを示す。イベント通知が無効なので、ＪＶＭＰＩ（１２）にかかるオーバーヘッドは少なくなり、プロファイラ（１３）は高速に実行される（後述するが、プロファイラはＪＶＭを一定間隔で監視する動作を実行するが、この動作を高速実行できる）。
【００２４】
太線部分（２２）は、メソッド開始および終了のイベント通知を有効にした状態でプロファイラ（１３）を実行していることを示す。イベント通知が有効なので、ＪＶＭＰＩ（１２）にかかるオーバーヘッドは大きくなり、プロファイラ（１３）はイベント通知を処理するので低速で実行される。
【００２５】
プロファイル開始時、プロファイラ（１３）はＪＶＭＰＩ（１２）に対してメソッド開始および終了に関するイベント通知を無効にするよう設定する。この設定により、メソッド開始および終了のイベント通知によるオーバーヘッドは発生しなくなるが、このままではメソッドの実行時間を計測することができない。そこで、プロファイラ（１３）は後述の方法で、或る一定時間間隔ごとに「プロファイル対象メソッドが実行中か」を判断する（２３）。実行中であることがわかった時点（２４）で、メソッド開始および終了のイベント通知を有効にする。なお、メソッド開始・終了のイベント通知の有効期間中に、メソッド開始・終了以外の他のイベント（図１参照）を取得するようにしても良い。
【００２６】
その後、プロファイル対象メソッドの終了イベント通知をプロファイラが受け取れば、メソッド開始および終了のイベント通知を再び無効にして、オーバーヘッドの発生を防ぎ、プロファイラを高速化する。そして、再び一定時間間隔ごとに「プロファイル対象メソッドが実行中か」の判断を始める（２５）。
【００２７】
次に、特定メソッドのプロファイル情報だけを取得することで高速化を図るプロファイラの構成を、図３を用いて説明する。図３におけるプロファイラ（３１）は、図１におけるプロファイラ（１３）にプロファイル情報取得対象設定部（３９）、コールスタック監視部（３２）、コールスタック監視部起動タイマ（５２）、イベント処理部（５０）を付け加えたものである。コールスタック（３３）とはＪＶＭ（３４）の中に存在し、メソッド呼び出し時に「戻りアドレス」（Ａのメソッドの所定のアドレスからＢのメソッドにジャンプして一定の動作後にＡのメソッドに戻る際のＡメソッドへの戻り先のアドレス）等の情報を格納しておくためのスタックで、プログラムの呼び出し関係を示す情報である（コールスタックを監視していれば、メソッドの特定と実行中か否かが認識できる）。
【００２８】
ここで、プロファイル情報取得対象設定部（３９）は、図１に示す各種イベント（メソッド開始／終了、ヒープ割り当て・解放、ガーベジコレクション開始／終了、スレッド開始・終了）を指定する。１つのイベントを指定しても良いし、２つ以上を指定しても良い。また、当該設定部（３９）では設定の対象がメソッドの場合に複数のメソッドの内の特定のメソッドに限定することもできる。
【００２９】
まず、プロファイラのユーザ（５１）がプロファイル対象としての監視対象メソッドをプロファイル情報取得対象設定部（３９）に通知（５３）し、さらに、プロファイル対象メソッドが実行中かどうかを監視する時間間隔をコールスタック監視部起動タイマ（５２）に通知（５４）する。次に、プロファイル情報取得対象設定部（３９）は、ＪＶＭＰＩ（３５）に対してプロファイル情報取得対象（例えば、メソッド）の指定を実施する（３９）。ＪＶＭ（３４）はメソッドの開始時、そのメソッドに関する情報（３７）をコールスタック（３３）にＰｕｓｈ  Ｄｏｗｎしている。
【００３０】
また、メソッドの終了時には、メソッド開始時にＰｕｓｈ  Ｄｏｗｎしたメソッド情報をコールスタック（３３）からＰｏｐ  Ｕｐしている。プロファイラ（３１）は、ＪＶＭＰＩ（３５）を介してコールスタック（３３）の中のメソッド情報を参照することができるが、その役割を果たすのがコールスタック監視部（３２）である。コールスタック監視部（３２）はコールスタック監視部起動タイマ（５２）から呼び出されたときにコールスタック（３３）の中を調べ、プロファイル対象メソッドに関する情報が見つかれば、そのメソッドは現在実行中であることがわかる。見つからなければ、そのメソッドは現在実行中ではないことがわかる。また、イベント処理部（５０）は、ＪＶＭＰＩ（３５）からメソッド開始を通知されたときに、現在の時刻をメソッド開始時刻記録エリア（３８）に記録する。
【００３１】
そして、メソッド終了を通知されたときに、現在時刻（＝メソッド終了時刻）とメソッド開始時刻記録エリア（３８）に記録しておいたメソッド開始時刻を基に、プロファイル対象メソッドの実行時間を算出して、それをプロファイル情報（３６）に保存する。なお、イベント処理部（５０）は、ＪＡＶＡ（登録商標）アプリケーションプログラムが複数同時に実行可能なマルチスレッドプログラムでも、スレッド毎にプロファイル情報（３６）を保持することで、マルチスレッドプログラムでも対応可能となる。
【００３２】
次に、図３に示すプロファイラを用いて特定メソッドの実行時間のみをプロファイルすれば、プロファイラが高速化することを、図４に示す流れ図を用いて説明する。図４では、（ａ）メソッド開始および終了のイベント通知について説明するが、他のプロファイル対象となるイベントの種類である、（ｂ）ヒープ割り当ておよび解放、（ｃ）ガーベジコレクションの開始および終了、（ｄ）スレッドの開始および終了なども、図４と同様の流れ図で処理可能である。ここでの説明では、プロファイル情報取得対象の指定としてメソッドを例示し、プロファイル情報の取得対象として特定のメソッドを指定する例示を挙げるが、これに限らず、プロファイル情報取得対象の指定としてメソッド以外の例えば、ヒープ割り当ておよび解放を指定し、監視時間について、タイマを用いてアプリケーションプログラム始動の一定期間を指定しても良い。また、ヒープ割り当ておよび解放の監視機関をメソッド監視と同時実行させても良い。
【００３３】
はじめに、プロファイル情報取得対象（例えば、メソッド）とプロファイル対象のメソッドが実行中かどうかを監視する間隔をユーザが指定する（４８）。次に、プロファイラ（３１）の実行が開始されたとき、プロファイラ（３１）はメソッド開始および終了のイベント通知を無効化するようにＪＶＭＰＩ（３５）を設定する（４１）。
【００３４】
次に、コールスタック監視部起動タイマ（５２）が、ユーザが指定した時間間隔だけ待機する（４２）。待機する方法としては、ＪＡＶＡ（登録商標）のＳｌｅｅｐメソッドを使ってプロファイラのプロセスを一定時間だけ非アクティブにする方法、または、ＪＶＭＰＩのＳｕｓｐｅｎｄＴｈｒｅａｄ関数を用いてプロファイラを中断モードに切り替え、タイマー用スレッドが一定時間後にＲｅｓｕｍｅＴｈｒｅａｄ関数を用いてプロファイラを中断モードから復帰させる方法がある。待機終了後、コールスタック監視部（３２）はコールスタック（３３）の中を見て、プロファイル対象メソッドが現在実行中か否かを判断する（４３）。もし実行中でなければ一定時間待機した後（４２）、再び実行中かの判断を繰り返す。プロファイル対象メソッドが実行中ならば、現在の時刻をプロファイル対象メソッドの開始時刻とみなしてメソッド開始時刻記録エリア（３８）に記録し（４４）、「メソッド開始および終了のイベント通知」を有効化する（４５）。プロファイル対象メソッドが終了するとイベント通知が発生するので、プロファイラ（３１）は、現在時刻とメソッド開始時刻記録エリア（３８）の情報からメソッド実行時間を算出し（４６）、プロファイル情報（３６）に保存する。
【００３５】
ここで、プロファイル対象メソッドが開始した真の時刻と、（４４）において「プロファイル対象メソッドの開始時刻」とみなした時刻には、ずれが生じる（図２の２７参照）。このずれが、プロファイル対象メソッドの真の実行時間と、本実施形態の手法により取得したメソッド実行時間との誤差になる。コールスタックの監視時間間隔を大きくすれば誤差は大きくなるが、コールスタックの監視に起因するオーバーヘッドは小さくなる。逆に、コールスタックの監視時間間隔を小さくすれば誤差は小さくなるが、コールスタックの監視に起因するオーバーヘッドが大きくなる。すなわち、コールスタック監視の時間間隔の調整により、プロファイル精度とプロファイル速度のトレードオフの調整が可能となる。
【００３６】
ＪＶＭＰＩのイベント通知によりプロファイル対象メソッドの終了を認識したら（４６）、プロファイラ（３１）はメソッド開始および終了に関するイベント通知を無効にするようにＪＶＭＰＩ（３５）を設定する（４７）。そして、再び一定時間おきに「プロファイル対象メソッドが実行中かどうか」を判断する。
【００３７】
この一連の動作を繰り返すことにより、プロファイル対象メソッドの実行中のみメソッド開始および終了に関するイベント通知が有効になり、それ以外のときは無効になる。その結果、メソッド開始および終了に関するイベント通知のオーバーヘッドが最小限になり、プロファイル情報は効率的に取得される。以上の説明ではプロファイラはＪＶＭと別個の構成要素としていたが、プロフィラをＪＶＭに含ませる構成であっても良い。
【００３８】
また、プロファイル情報を適宜選択的に取得できることで、従来の課題、すなわちプロファイルによるオーバーヘッドのためにＪＡＶＡ（登録商標）アプリケーションプログラムの実行結果が非プロファイル時の実行結果とかけ離れてしまい、得られたプロファイル情報が非プロファイル時のＪＡＶＡ（登録商標）アプリケーションプログラムの特性を正確に表さないという課題を解決することができる。
【００３９】
因みに、上述した特許文献１におけるプロファイラは、ＪＶＭＰＩを通して全てのイベント通知が入力され、プロファイラ自体でプロファイル情報としての要、不要の判断をして選別するものであるので、ＪＶＭにとっても全てのイベント通知が必要であり、プロファイラにとっても全てのイベント通知に対応する必要があり、プロファイラを含めたシステム全体の高速化ができず、特に、ＪＶＭには常にイベント通知の負荷が掛かり、アプリケーションプログラムの実行時間が実際の動作時（非プロファイル時）とはかけ離れてしまっていた。本発明の実施形態では、対象メソッドを指定し、監視間隔を設定して対象メソッドの実行中か否かを判断して実行中のみ対象メソッドのプロファイル情報を取得することによって、ＪＶＭの高速稼働化がなされてアプリケーションプログラムの正確な特性取得が可能となる。
【００４０】
以上説明したように、本発明の実施形態においては、プロファイル情報取得のための性能オーバーヘッドを極めて少ない状態で取得することで、実運用のアプリケーションプログラムに極めて近い実行性能値を取得することを解決課題として、具体的には、アプリケーションプログラム実行時のプロファイル情報の取得期間を、一定時間間隔で監視しながら、その一定時間間隔ごとに、プロファイル情報取得対象が実行中か否かの判断を行い、実行中であることがわかった時点だけ、ＪＶＭからのイベント通知を行うことで、不要なプロファイラ呼び出し（プロファイラによるイベント処理部が不動作状態）が行われず、プロファイラとＪＶＭを含めたシステム全体の高速化を果たすことができる。そして、プロファイラの呼び出しは、プロファイラ側で制御することで実現される。さらに、コールスタックを監視するコールスタック監視部により、プロファイル情報を取得したい対象（例えば、メソッド）だけのプロファイル情報だけを取得可能とすることで、プロファイラを含めたシステム全体の高速化を行うことができる。
【図面の簡単な説明】
【００４１】
【図１】ＪＡＶＡ（登録商標）アプリケーションプログラムのプロファイラにおける概略的な関連構成を示す図である。
【図２】本発明の実施形態に関するプロファイル情報取得における動作原理を示す図である。
【図３】本実施形態に関するプロファイラとＪＶＭの具体的構成を示す図である。
【図４】本実施形態に係るプロファイラがＪＶＭから特定メソッドのプロファイル情報を取得するフローを示す図である。
【符号の説明】
【００４２】
１１，３４  ＪＶＭ（Java （登録商標）Virtual Machine）
１２，３５  ＪＶＭＰＩ（Java（登録商標） Virtual Machine Profiler Interface）
１３，３１  プロファイラ
１４  イベント
１５，３６  プロファイル情報
１６  プロファイル対象アプリケーションプログラム
１７  バイトコードインタプリタ
２１  メソッド開始および終了のイベント通知を無効にした状態
２２  メソッド開始および終了のイベント通知を有効にした状態
２３，４２，４３  一定時間間隔毎にプロファイル対象メソッドが実行中かの判定
２４，２５  プロファイル対象メソッド
２７  プロファイル対象メソッドの開始時刻の誤差
３２  コールスタック監視部
３３  コールスタック
３７  メソッド情報
３８，４４  メソッド開始時刻記録エリア
４１，４５，４７  イベント通知の有効および無効化
４６  実行時間算出
５０  イベント処理部
５１  プロファイラのユーザ
５２  コールスタック監視タイマ
５３  プロファイル対象のメソッドのプロファイル情報取得対象設定部通知
５４  時間間隔をコールスタック監視部起動タイマに通知
【図１】
2005141392.tif 000003
【図２】
2005141392.tif 000004
【図３】
2005141392.tif 000005
【図４】
2005141392.tif 000006