JP2004258728A - プログラム実行時間測定方法 - Google Patents
プログラム実行時間測定方法 Download PDFInfo
- Publication number
- JP2004258728A JP2004258728A JP2003045731A JP2003045731A JP2004258728A JP 2004258728 A JP2004258728 A JP 2004258728A JP 2003045731 A JP2003045731 A JP 2003045731A JP 2003045731 A JP2003045731 A JP 2003045731A JP 2004258728 A JP2004258728 A JP 2004258728A
- Authority
- JP
- Japan
- Prior art keywords
- execution
- program
- time
- instruction
- measuring
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】ソースプログラムを必要とせずに,実行形式または中間コードのプログラムの実行時間を測定する方法を提供する。
【解決手段】ソースプログラム21を実行形式または中間コードに変換した第1実行プログラム23の実行時間を測定する場合に,プログラム解析部31の解析結果をもとに監視コード追加部32が,実行時間測定個所指示コード,実行開始時刻取得コード,実行終了時刻取得コードなどの実行時間測定のための監視コードを,第1実行プログラム23に追加して,第2実行プログラム11を生成する。プログラム実行マシン1が,第2実行プログラム11を実行するときに,監視コードから実行プログラム監視部12を呼び出し,実行時間測定個所の実行時間開始時刻,実行終了時刻を収集して,実行ログ14として出力する。
【選択図】 図1
【解決手段】ソースプログラム21を実行形式または中間コードに変換した第1実行プログラム23の実行時間を測定する場合に,プログラム解析部31の解析結果をもとに監視コード追加部32が,実行時間測定個所指示コード,実行開始時刻取得コード,実行終了時刻取得コードなどの実行時間測定のための監視コードを,第1実行プログラム23に追加して,第2実行プログラム11を生成する。プログラム実行マシン1が,第2実行プログラム11を実行するときに,監視コードから実行プログラム監視部12を呼び出し,実行時間測定個所の実行時間開始時刻,実行終了時刻を収集して,実行ログ14として出力する。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明はプログラムの実行時間の測定方法に関し,特に,プログラムの実行時間を測定するために実際のソースプログラムを使用することなく,実行形式・中間コードにおいて実行時間測定に関する命令を追加し,プログラムの実行時間を測定する方法に関するものである。
【0002】
【従来の技術】
従来,プログラムの実行時間を測定する技術として,例えば,下記の特許文献1(分散アプリケーション試験・運用管理システム)に記載された技術がある。この技術では,プログラムのソースファイルの実行時間を測定する個所(以下,実行時間測定個所という)において実行開始時刻を取得するソースコードと実行終了時刻を取得するソースコードを追加することで,プログラムの実行時間を測定することを実現している。
【0003】
【特許文献1】
特開2002−82926号公報
【0004】
【発明が解決しようとする課題】
しかし,上記特許文献1に示される技術を用いてプログラムの実行時間を測定する場合,前記実行時間測定個所における実行開始時刻を取得するソースコードおよび実行終了時刻を取得するソースコードの追加のためにソースプログラムを改変することが必要であった。したがって,実行時間測定対象のプログラムが,ソースプログラムをコンパイルした実行形式プログラムもしくは中間コードで表されるものであって,ソースプログラム自体を持っていない場合には,プログラムの任意の範囲の実行時間を測定することはできなかった。
【0005】
本発明は,上記の点に鑑みてなされたもので,その目的はプログラムのソースプログラムを必要とせずにプログラムの実行時間を測定する方法を提供することにある。
【0006】
【課題を解決するための手段】
上記課題を解決するため,本発明は,ソースプログラム上でプログラマが任意に指定した範囲(以下,try部という)について,前記ソースプログラムの実行形式もしくは中間コードのtry部の実行時に例外割込みなどが発生してもtry部の実行の直後に必ず実行される範囲(以下,finally部という)を指定することができる仕様を持つプログラミング言語および実行環境で記述,生成された実行形式または中間コードにおいて,実行時間を測定する実行時間測定個所をtry部とする実行時間測定個所指示命令を追加し,try部の直前に実行開始時刻を取得する実行開始時刻取得命令を追加し,前記try部に対応するfinally部として実行終了時刻を測定する実行終了時刻取得命令を追加し,前記実行形式または中間コードの実行時にtry部およびfinally部の実行により前記実行開始時刻取得命令が取得した実行開始時刻と前記実行終了時刻取得命令が取得した実行終了時刻との差分を前記実行時間測定個所の実行時間として算出することを最も主要な特徴とする。
【0007】
【発明の実施の形態】
以下,本発明の実施の形態として,プログラミング言語がJava(登録商標)である場合のプログラムの実行時間測定方法の例を説明する。
【0008】
図1は,本発明の適用対象システム構成の一例を示す図である。本システムは,第2実行プログラム11を実行し,その実行時間を測定するコンピュータであるプログラム実行マシン1と,プログラムを開発し,ソースプログラム21を実行形式または中間コードの第1実行プログラム23に変換するコンピュータである開発機2と,第1実行プログラム23に実行時間測定のための監視コードを追加し第2実行プログラム11を生成するコンピュータであるプログラム操作機3と,それらを接続するネットワーク4とからなる。
【0009】
プログラム実行マシン1は,一つまたは複数の監視コード追加済みである第2実行プログラム11の実行を監視するためのプログラムである実行プログラム監視部12と,JavaVM13と,実行ログ14を記録する手段とを備える。JavaVM13は,Javaで記述されたプログラムが動作する環境を提供する仮想的なコンピュータ(プログラム)である。
【0010】
開発機2は,プログラミング言語Javaで記述されたソースプログラム21を第1実行プログラム23に変換(以下,実行形式変換処理という)する開発環境22を備える。第1実行プログラム23は,開発環境22によってソースプログラム21が翻訳されて生成されたプログラムであって,後述する実行時間測定のための監視コードがまだ追加されていないプログラムである。
【0011】
プログラム操作機3は,ソースプログラム21を利用せずに第1実行プログラム23のプログラム構造等を解析するプログラム解析部31と,第1実行プログラム23における実行時間測定個所に対し,try節,finally節を実行する実行時間測定個所指示コードであるJavaバイトコードを追加し,try節の直前に実行開始時刻を取得する実行開始時刻取得コードであるJavaバイトコードを追加し,finally節に実行終了時刻を取得する実行終了時刻取得コードであるJavaバイトコードを追加する監視コード追加部32とを備える。なお,実行時間測定個所指示コード,実行開始時刻取得コード,実行終了時刻取得コードをまとめて監視コードといい,これらのJavaバイトコードの追加処理を監視コード追加処理という。
【0012】
プログラム操作機3が,第1実行プログラム23に前記監視コードを追加することで第2実行プログラム11が生成される。なお,プログラム実行マシン1,開発機2,プログラム操作機3は,それぞれ異なるコンピュータである必要はなく,同じコンピュータであってもよい。
【0013】
図2は,プログラム操作機3におけるプログラム解析部31および監視コード追加部32による監視コード追加処理のフローチャートの一例である。
【0014】
プログラム解析部31は,ステップS21で前記監視コード未追加の第1実行プログラム23を所定の媒体から読み込む。このとき,第1実行プログラム23が,jar,war,earのようなデータ圧縮されたアーカイブ・ファイルであった場合には,アーカイブ・ファイルのデータを所定の媒体に展開し,展開された実行プログラムそれぞれについて,以下のフローに従って処理を行う。
【0015】
次に,プログラム解析部31は,ステップS22でJavaバイトコードを直接操作するJavaライブラリを用いることなどにより,第1実行プログラム23について,Javaバイトコードレベルの構文等の解析を行う。Javaバイトコードを直接操作するJavaライブラリとして,例えばBCELがある。BCELは,周知のApache Software Foundationが管理しているjavaライブラリであり,「http://jakarta.apache.org/bce1/index.html 」のURLから情報を入手できる。本実施の形態ではBCELを利用するものとするが,本発明の実施においては,必ずしもBCELを利用しなければならないわけではなく,本発明は,BCELの利用に限定されない。またJavaバイトコードを直接操作するJavaライブラリを用いることに限定されない。
【0016】
続いて監視コード追加部32は,プログラム解析部31が得た解析結果から,ステップS23で所定の変数名および値が既に存在しているか否かを判断する。ここで,所定の変数名および値とは,監視コードの二重追加を防ぐためのものであり,例えば,後述する図4のJavaソースプログラム第6行目の「String translator=”Translated”」がこれに該当する。これは,監視コードが既に追加されているかどうかを判別することができるものであればよいので,フラグ等でもよい。
【0017】
ステップS23の判定で,プログラム中に所定の変数名および値が既に存在していた場合には,既に実行時間測定のための監視コードが追加されているものと判断し,ステップS30へ移行する。所定の変数名および値が存在していない場合には,第1実行プログラム23に前記監視コードが未追加であると判断し,ステップS24で,プログラム解析部31により得られた解析結果から実行時間測定のための監視コードの追加位置を決定する。
【0018】
次に監視コード追加部32は,ステップS25およびステップS27で前記監視コード追加に伴い監視コード自体および第1実行プログラム23の解析結果にJavaバイトコードレベルでのジャンプ先番地変更等の必要があるか否かを判断し,監視コードの修正の必要があれば,ステップS26で監視コードの修正を行い,第1実行プログラム23の修正の必要があれば,ステップS28で第1実行プログラム23の修正を行う。ステップS28における第1実行プログラム23の修正は,例えば,後述する図4のJavaソースプログラム第8行目および第19行目のtry節,finally節の追加が該当する。
【0019】
その後,監視コード追加部32は,ステップS29で実行時間測定のための監視コードを追加し,また,前記監視コードの二重追加を防ぐための所定の変数名および値を追加する。ステップS29における監視コードの追加は,例えば,後述する図4のJavaソースプログラム第7行目の「id=getStartTime();」および第20行目の「getEndTime(id); 」の追加が該当する。最後に,監視コード追加部32は,ステップS30で前記監視コードが追加されたメモリ上の実行プログラムを第2実行プログラム11として所定の媒体上に書き出すことにより,第2実行プログラム11を生成する。
【0020】
図3および図4は,監視コード追加部32が行う前記監視コード追加処理の理解のためにソースコードに対応させて説明する図である。図3は,第1実行プログラム23の一例を,説明をわかりやすくためにソースプログラムのイメージで示しているが,実際には,第1実行プログラム23は,図3に示すソースプログラムを翻訳した中間コードからなる。図4も同様である。
【0021】
本発明の実施の形態では,HelloWorldクラスのmainメソッドの実行開始から実行終了までの時間を実行時間として測定するものとする。このとき,図3に示す点線で囲んだ部分が実行時間測定個所である。以下に,図3に示すJavaプログラムの概要を説明する。
【0022】
図3のJavaプログラムHelloWorld.java 301では,まず,第1行目の「Package test; 」によって,クラス「Hello World 」が「test」というパッケージに属することを宣言した後,第3行目でクラス「Hello World 」を宣言している。また,第4行目の「public static void main(String[]argv) {」で,引数が文字列配列であり,戻り値がvoidであるクラスメソッドmainを宣言している。
【0023】
次に,第5行目の「try {」で,例外処理を受け付ける範囲を指定している。このtry節の記述個所が,実行時間測定開始個所311となっている。そして,第6行目および第7行目の「if(argv[0].compareTo (”0”)) {」および「return; 」は,1つ目のコマンドライン引数が,文字”0” ならばmainを終了することを示し,「retrun; 」の記述個所が第1終了個所321となっている。第9行目の「System.out.println(”Hello World”);」で文字列「Hello World」が表示される。
【0024】
また,第10行目の「}catch(exception e){」は,対応するtry節で指定した範囲内で例外が発生した場合に,その例外をeとして,ここで示す範囲が呼び出されることを示している。第11行目の「e.printStack Trace(); 」は,例外eの保持するスタック情報を表示する。第12行目および第14行目の「return; 」はmainを終了することを意味する。この第12行目が第2終了個所322となり,第14行目が第3終了個所323,実行時間測定終了個所312となる。
【0025】
上記のように,図3のプログラムにおいて終了個所は3個所あり,第1終了個所321,第2終了個所322,第3終了個所323が,それぞれ第1実行プログラム23が正常,準正常,および例外発生によって実行時間測定個所の実行終了となる部分である。
【0026】
図4は,本発明の実施の形態における監視コード追加例を示す図であって,第2実行プログラム11の一例をソースプログラムのイメージで示したものである。図4において,点線で囲んだ部分が実行時間測定個所である。
【0027】
本発明の実施の形態では,図4のJavaプログラムHelloWorld.java 401の第9行目の実行時間測定開始個所311から実行時間測定終了個所312をtry節でくくり,実行時間測定個所指示コードとして第8行目および第19行目にtry節,finally節を追加する。
【0028】
また,第8行目のtry節の直前の第7行目に,実行開始時刻取得コード411である「id=getStartTime();」を追加する。また,try節に対応するfinally節に実行終了時刻取得コード412である「getEndTime(id); 」(第20行目)を追加する。この操作により,実行時間測定開始個所311から実行時間測定終了個所312までの実行時間測定個所を終了する場合には,必ずfinally節の実行終了時刻取得コード412が実行されることになり,前記3個所の終了個所の特定が不要となる。
【0029】
監視コード追加部32において,図4に示すような監視コードを追加する場合,Javaバイトコードを直接操作するJavaライブラリを用いるなどして,上記内容に沿って,try節,finally節や実行開始時刻取得コード411および実行終了時刻取得コード412のJavaバイトコードを生成し,必要に応じて,プログラム解析部31によって解析された第1実行プログラム23のJavaバイトコード内のジャンプ先番地変更等の修正を行い,前記try節,finally節や実行開始時刻取得コード411および実行終了時刻取得コード412のJavaバイトコードを追加する。
【0030】
また,図4のJavaプログラム中,第6行目の「String translator=”Translated”; 」は,二重追加防止チェックに用いられる。すなわち,本発明において,二重追加防止チェック時に,例えば図4の第6行目の「translator」のような所定の変数名が宣言されていて,かつその値が所定の値(ここでは「Translated」) である場合には,以後の追加処理を行わず,現在のバイトコードをそのまま第2実行プログラム11として出力する。なお,実際にはバイトコードを第6行目のように変更するのではなく,上記ステップS22における第1実行プログラム23の解析結果の変数名宣言部分および値宣言部分を操作することによって,変数名およびその値の宣言を行う。
【0031】
図3および図4の例では,mainメソッドの実行開始から実行終了までの時間を実行時間として測定するものとしているが,プログラム中における任意の個所を実行時間測定個所として,ユーザにインタラクティブに指定させるような実施も可能である。この場合,実行時間測定範囲をユーザに指定させるために,第1実行プログラム23を視覚化して表示する必要があるが,例えばJavaバイトコードを表示する既存のソフトウェア・ツールを用いて,第1実行プログラム23の内容を表示し,その表示をもとに実行時間測定範囲をポインティングデバイス等によってユーザに指定させることができる。
【0032】
また,ユーザにメニュー等により選択させることにより,実行時間測定個所をすべてのメソッドの各実行開始部分から実行終了部分とすることもできる。
【0033】
図5は,getStartTime関数およびgetEndTime関数の処理フローチャートである。getStartTime関数は,実行開始時刻取得コード411によって呼び出される関数であり,getEndTime関数は,実行終了時刻取得コード412によって呼び出される関数である。
【0034】
図5(A)に示すように,getStartTime関数は,「id=getStartTime();」のように使用され,引数は無く,実行時間測定個所に対して一意に割り振られたid(識別子)を戻り値とする。
【0035】
getStartTime関数では,以下のような処理が行われる。まず,実行プログラム監視部12にidを要求し(ステップS31),実行プログラム監視部12から,実行時間測定個所に対して一意に割り振られたidを受け取る(ステップS32)。次に,システムが提供する時刻取得関数によって現在の時刻である実行開始時刻を取得し(ステップS33),id,実行開始時刻の組を実行プログラム監視部12に送信する(ステップS34)。その後,実行プログラム監視部12から取得したidを戻り値として(ステップS35),処理を終了する。
【0036】
getEndTime関数は,図5(B)に示すように,「getEndTime(id); 」のように使用され,実行時間測定個所に対して一意に割り振られたid,すなわちgetStartTime関数の戻り値として取得したidを引数とする。戻り値は無い。getEndTime関数では,システムが提供する時刻取得関数によって現在の時刻である実行終了時刻を取得し(ステップS41),引数で指定されたidと,実行終了時刻との組を実行プログラム監視部12に送信し(ステップS42),処理を終了する。
【0037】
次に,実行プログラム監視部12の処理の概要について説明する。
【0038】
(1)自身の初期化
実行プログラム監視部12がJavaVM13内にロードされるときに,一度だけ初期化される。このとき,
・id払い出し用クラスの初期化,
・id,実行開始時刻および実行終了時刻の記憶領域の初期化,
・id,実行開始時刻および実行終了時刻のログ化ルーチンの設定(定期的にログ化を行うようにする),
を行う。
【0039】
(2)idの払い出し
idの払い出しは,getStartTime関数における図5(A)のステップS31の要求に対して行う処理であり,上記ステップS31では,実行プログラム監視部12のid払い出し用クラスのメソッドgetを使ってidを獲得する。メソッドgetは,内部で払い出すidを1増加してからそのidを返す。また,メソッドgetは,複数の同時払い出し要求(getStartTime関数の呼び出し)に対し,同じidを払い出すことのないように排他的に実行されるようになっている(Java言語では,Synchronized long get() として実装されている)。
【0040】
(3)getStartTime関数,getEndTime関数の記録要求(idと時刻が送信される)の処理
・id,実行開始時刻および実行終了時刻の記憶領域は,idをキーとして,(id,実行開始時刻,実行終了時刻)の組を含むようになっている。
・getStartTime関数がidと時刻を送信してきた場合,キーとしてidが既に記憶領域上に存在しているかどうかをチェックする。存在しない場合には,(id,実行開始時刻,NULL)という組を記憶領域上に生成する。キーとしてidが既に存在している場合にはエラーとし,前記生成処理をスキップする。
・getEndTime関数がidと時刻を送信してきた場合,キーとしてidが記憶領域上に存在しているかどうかをチェックする。存在する場合には,対応する組の実行終了時刻を上書きする。キーとしてidが存在しない場合には,(id,NULL,実行終了時刻)という組を記憶領域上に生成する。
【0041】
(4)id,実行開始時刻および実行終了時刻のログ化
・所定の時間間隔でログ化を行う。
・ログ化時には,id,実行開始時刻および実行終了時刻の記憶領域中の(id,実行開始時刻,実行終了時刻)のNULLでない3情報がそろった組について,その情報を外部記憶媒体等にログとして書き込み,かつ記憶領域からログ化し終えた組を消去する。なお,このログ化の際に,実行開始時刻および実行終了時刻から実行時間を計算して,(id,実行開始時刻,実行終了時刻,実行時間)の組をログとして出力してもよい。このログ情報を参照することにより,目的とする第1実行プログラム23の実行時間を知ることができる。
【0042】
図6は,本発明を適用したシステムの一実施例を示す図である。ここで開発機2は,図1のプログラム操作機3を含む。ソースプログラム21は,フェーズP10で開発環境22によって監視コード未追加の第1実行プログラム23に変換される。この第1実行プログラム23は,例えばJava2 SDK Enterprise Edition(J2EE)のEJB コンポーネントまたはサーブレットである。第1実行プログラム23に対して,フェーズP11で監視コード追加処理が行われ,ファイル形式で第2実行プログラム11として書き出される。この第2実行プログラム11が,フェーズP12でプログラム実行マシン1にコピーまたはファイル共有などの手段で提供された後,フェーズP13でJavaアプリケーションとして実行される。このフェーズP13では,実行プログラム監視部12が同一JavaVM13内で実行されるようになっている。
【0043】
第2実行プログラム11の実行時,第2実行プログラム11内の実行開始時刻取得コード411により,その実行時に実行プログラム監視部12が払い出す一意のidと,現在の時刻である実行開始時刻とを,実行プログラム監視部12に通知して所定の記録個所に格納し,また,実行終了時刻取得コード412により,前記idと,現在の時刻である実行終了時刻とを,実行プログラム監視部12に通知し,対応するidの記録個所に実行終了時刻を格納する。
【0044】
実行プログラム監視部12は,前記idと前記実行開始時刻および前記実行終了時刻から実行時間を計算して,id,実行開始時刻,実行終了時刻,実行時間を実行ログ14に出力する(フェーズP14)。なお,本発明では実行時間測定対象となる実行プログラムについて,アーカイブ(jar,war,earなど)化されているか否かは問わない。アーカイブ化されている場合には,事前に復元を行えばよい。
【0045】
図7は,本発明を適用したシステムの別の一実施例を示す図である。ここでプログラム実行マシン1は,図1のプログラム操作機3を含む。図6と同様にして実行形式変換処理のフェーズP20で,ソースプログラム21から第1実行プログラム23が生成される。フェーズP21では,第1実行プログラム23がプログラム実行マシン1にコピーされ,フェーズP22で,第1実行プログラム23がプログラム実行マシン1のメモリにロードされる。なお,本発明では第1実行プログラム23がアーカイブ(jar,war,earなど)化されているか否かは問わない。
【0046】
フェーズP22で,JavaVM13が第1実行プログラム23をメモリへロードした後に,フェーズP23で,プログラム解析部31,監視コード追加部32による監視コード追加処理が行われる。このフェーズP23では,プログラム解析部31が第1実行プログラム23をJavaVM13内のメモリ上から読み出し,また監視コード追加部32が第2実行プログラム11をJavaVM13内のメモリ上に生成するようになっている。その後に,フェーズP24に移行する。フェーズP24では,監視コードが追加された第2実行プログラム11が実行され,同時に実行プログラム監視部12が同一JavaVM13内で実行される。
【0047】
図7に示す実施例では,プログラム解析部31が第1実行プログラム23を読み出す媒体および監視コード追加部32が第2実行プログラム11を書き出す媒体は,外部記憶媒体のファイルではなく,メモリ領域となる。メモリ上に生成された前記監視コードが追加された第2実行プログラム11の実行によって,図6の場合と同様にして,実行プログラム監視部12が,(id,実行開始時刻,実行終了時刻,実行時間)の組を実行ログ14として生成し出力する(フェーズP25)。
【0048】
【発明の効果】
以上説明したように,本発明によれば,例えばJavaバイトコードにおいて,実行時間測定個所に対しtry節,finally節を実行する実行時間測定個所指示コードを追加し,try節の直前部分に実行開始時刻を測定する実行開始時刻取得コードを追加し,finally節に実行終了時刻を測定する実行終了時刻取得コードを追加し,前記Javaバイトコードの実行時にtry節,finally節の評価により,実行開始時刻取得コードが測定する実行開始時刻と,実行終了時刻取得コードが測定する実行終了時刻とを収集し,その差分を,実行時間測定個所の実行時間として算出することができるようになる。これによって,実行時間を測定するプログラムのソースプログラムを必要とすることなく,実行形式または中間コードの状態で,目的とするプログラムの実行時間を測定することが可能になる。
【図面の簡単な説明】
【図1】本発明の適用対象システム構成の一例を示す図である。
【図2】監視コード追加処理フローの一例を示す図である。
【図3】第1実行プログラムの一例をソースプログラムイメージで示した図である。
【図4】第2実行プログラムの一例をソースプログラムイメージで示した図である。
【図5】getStartTime関数およびgetEndTime関数の処理フローチャートである。
【図6】本発明の適用システムの一実施例を示す図である。
【図7】本発明の適用システムの別の一実施例を示す図である。
【符号の説明】
1 プログラム実行マシン
2 開発機
3 プログラム操作機
4 ネットワーク
11 第2実行プログラム
12 実行プログラム監視部
13 JavaVM
14 実行ログ
21 ソースプログラム
22 開発環境
23 第1実行プログラム
31 プログラム解析部
32 監視コード追加部
【発明の属する技術分野】
本発明はプログラムの実行時間の測定方法に関し,特に,プログラムの実行時間を測定するために実際のソースプログラムを使用することなく,実行形式・中間コードにおいて実行時間測定に関する命令を追加し,プログラムの実行時間を測定する方法に関するものである。
【0002】
【従来の技術】
従来,プログラムの実行時間を測定する技術として,例えば,下記の特許文献1(分散アプリケーション試験・運用管理システム)に記載された技術がある。この技術では,プログラムのソースファイルの実行時間を測定する個所(以下,実行時間測定個所という)において実行開始時刻を取得するソースコードと実行終了時刻を取得するソースコードを追加することで,プログラムの実行時間を測定することを実現している。
【0003】
【特許文献1】
特開2002−82926号公報
【0004】
【発明が解決しようとする課題】
しかし,上記特許文献1に示される技術を用いてプログラムの実行時間を測定する場合,前記実行時間測定個所における実行開始時刻を取得するソースコードおよび実行終了時刻を取得するソースコードの追加のためにソースプログラムを改変することが必要であった。したがって,実行時間測定対象のプログラムが,ソースプログラムをコンパイルした実行形式プログラムもしくは中間コードで表されるものであって,ソースプログラム自体を持っていない場合には,プログラムの任意の範囲の実行時間を測定することはできなかった。
【0005】
本発明は,上記の点に鑑みてなされたもので,その目的はプログラムのソースプログラムを必要とせずにプログラムの実行時間を測定する方法を提供することにある。
【0006】
【課題を解決するための手段】
上記課題を解決するため,本発明は,ソースプログラム上でプログラマが任意に指定した範囲(以下,try部という)について,前記ソースプログラムの実行形式もしくは中間コードのtry部の実行時に例外割込みなどが発生してもtry部の実行の直後に必ず実行される範囲(以下,finally部という)を指定することができる仕様を持つプログラミング言語および実行環境で記述,生成された実行形式または中間コードにおいて,実行時間を測定する実行時間測定個所をtry部とする実行時間測定個所指示命令を追加し,try部の直前に実行開始時刻を取得する実行開始時刻取得命令を追加し,前記try部に対応するfinally部として実行終了時刻を測定する実行終了時刻取得命令を追加し,前記実行形式または中間コードの実行時にtry部およびfinally部の実行により前記実行開始時刻取得命令が取得した実行開始時刻と前記実行終了時刻取得命令が取得した実行終了時刻との差分を前記実行時間測定個所の実行時間として算出することを最も主要な特徴とする。
【0007】
【発明の実施の形態】
以下,本発明の実施の形態として,プログラミング言語がJava(登録商標)である場合のプログラムの実行時間測定方法の例を説明する。
【0008】
図1は,本発明の適用対象システム構成の一例を示す図である。本システムは,第2実行プログラム11を実行し,その実行時間を測定するコンピュータであるプログラム実行マシン1と,プログラムを開発し,ソースプログラム21を実行形式または中間コードの第1実行プログラム23に変換するコンピュータである開発機2と,第1実行プログラム23に実行時間測定のための監視コードを追加し第2実行プログラム11を生成するコンピュータであるプログラム操作機3と,それらを接続するネットワーク4とからなる。
【0009】
プログラム実行マシン1は,一つまたは複数の監視コード追加済みである第2実行プログラム11の実行を監視するためのプログラムである実行プログラム監視部12と,JavaVM13と,実行ログ14を記録する手段とを備える。JavaVM13は,Javaで記述されたプログラムが動作する環境を提供する仮想的なコンピュータ(プログラム)である。
【0010】
開発機2は,プログラミング言語Javaで記述されたソースプログラム21を第1実行プログラム23に変換(以下,実行形式変換処理という)する開発環境22を備える。第1実行プログラム23は,開発環境22によってソースプログラム21が翻訳されて生成されたプログラムであって,後述する実行時間測定のための監視コードがまだ追加されていないプログラムである。
【0011】
プログラム操作機3は,ソースプログラム21を利用せずに第1実行プログラム23のプログラム構造等を解析するプログラム解析部31と,第1実行プログラム23における実行時間測定個所に対し,try節,finally節を実行する実行時間測定個所指示コードであるJavaバイトコードを追加し,try節の直前に実行開始時刻を取得する実行開始時刻取得コードであるJavaバイトコードを追加し,finally節に実行終了時刻を取得する実行終了時刻取得コードであるJavaバイトコードを追加する監視コード追加部32とを備える。なお,実行時間測定個所指示コード,実行開始時刻取得コード,実行終了時刻取得コードをまとめて監視コードといい,これらのJavaバイトコードの追加処理を監視コード追加処理という。
【0012】
プログラム操作機3が,第1実行プログラム23に前記監視コードを追加することで第2実行プログラム11が生成される。なお,プログラム実行マシン1,開発機2,プログラム操作機3は,それぞれ異なるコンピュータである必要はなく,同じコンピュータであってもよい。
【0013】
図2は,プログラム操作機3におけるプログラム解析部31および監視コード追加部32による監視コード追加処理のフローチャートの一例である。
【0014】
プログラム解析部31は,ステップS21で前記監視コード未追加の第1実行プログラム23を所定の媒体から読み込む。このとき,第1実行プログラム23が,jar,war,earのようなデータ圧縮されたアーカイブ・ファイルであった場合には,アーカイブ・ファイルのデータを所定の媒体に展開し,展開された実行プログラムそれぞれについて,以下のフローに従って処理を行う。
【0015】
次に,プログラム解析部31は,ステップS22でJavaバイトコードを直接操作するJavaライブラリを用いることなどにより,第1実行プログラム23について,Javaバイトコードレベルの構文等の解析を行う。Javaバイトコードを直接操作するJavaライブラリとして,例えばBCELがある。BCELは,周知のApache Software Foundationが管理しているjavaライブラリであり,「http://jakarta.apache.org/bce1/index.html 」のURLから情報を入手できる。本実施の形態ではBCELを利用するものとするが,本発明の実施においては,必ずしもBCELを利用しなければならないわけではなく,本発明は,BCELの利用に限定されない。またJavaバイトコードを直接操作するJavaライブラリを用いることに限定されない。
【0016】
続いて監視コード追加部32は,プログラム解析部31が得た解析結果から,ステップS23で所定の変数名および値が既に存在しているか否かを判断する。ここで,所定の変数名および値とは,監視コードの二重追加を防ぐためのものであり,例えば,後述する図4のJavaソースプログラム第6行目の「String translator=”Translated”」がこれに該当する。これは,監視コードが既に追加されているかどうかを判別することができるものであればよいので,フラグ等でもよい。
【0017】
ステップS23の判定で,プログラム中に所定の変数名および値が既に存在していた場合には,既に実行時間測定のための監視コードが追加されているものと判断し,ステップS30へ移行する。所定の変数名および値が存在していない場合には,第1実行プログラム23に前記監視コードが未追加であると判断し,ステップS24で,プログラム解析部31により得られた解析結果から実行時間測定のための監視コードの追加位置を決定する。
【0018】
次に監視コード追加部32は,ステップS25およびステップS27で前記監視コード追加に伴い監視コード自体および第1実行プログラム23の解析結果にJavaバイトコードレベルでのジャンプ先番地変更等の必要があるか否かを判断し,監視コードの修正の必要があれば,ステップS26で監視コードの修正を行い,第1実行プログラム23の修正の必要があれば,ステップS28で第1実行プログラム23の修正を行う。ステップS28における第1実行プログラム23の修正は,例えば,後述する図4のJavaソースプログラム第8行目および第19行目のtry節,finally節の追加が該当する。
【0019】
その後,監視コード追加部32は,ステップS29で実行時間測定のための監視コードを追加し,また,前記監視コードの二重追加を防ぐための所定の変数名および値を追加する。ステップS29における監視コードの追加は,例えば,後述する図4のJavaソースプログラム第7行目の「id=getStartTime();」および第20行目の「getEndTime(id); 」の追加が該当する。最後に,監視コード追加部32は,ステップS30で前記監視コードが追加されたメモリ上の実行プログラムを第2実行プログラム11として所定の媒体上に書き出すことにより,第2実行プログラム11を生成する。
【0020】
図3および図4は,監視コード追加部32が行う前記監視コード追加処理の理解のためにソースコードに対応させて説明する図である。図3は,第1実行プログラム23の一例を,説明をわかりやすくためにソースプログラムのイメージで示しているが,実際には,第1実行プログラム23は,図3に示すソースプログラムを翻訳した中間コードからなる。図4も同様である。
【0021】
本発明の実施の形態では,HelloWorldクラスのmainメソッドの実行開始から実行終了までの時間を実行時間として測定するものとする。このとき,図3に示す点線で囲んだ部分が実行時間測定個所である。以下に,図3に示すJavaプログラムの概要を説明する。
【0022】
図3のJavaプログラムHelloWorld.java 301では,まず,第1行目の「Package test; 」によって,クラス「Hello World 」が「test」というパッケージに属することを宣言した後,第3行目でクラス「Hello World 」を宣言している。また,第4行目の「public static void main(String[]argv) {」で,引数が文字列配列であり,戻り値がvoidであるクラスメソッドmainを宣言している。
【0023】
次に,第5行目の「try {」で,例外処理を受け付ける範囲を指定している。このtry節の記述個所が,実行時間測定開始個所311となっている。そして,第6行目および第7行目の「if(argv[0].compareTo (”0”)) {」および「return; 」は,1つ目のコマンドライン引数が,文字”0” ならばmainを終了することを示し,「retrun; 」の記述個所が第1終了個所321となっている。第9行目の「System.out.println(”Hello World”);」で文字列「Hello World」が表示される。
【0024】
また,第10行目の「}catch(exception e){」は,対応するtry節で指定した範囲内で例外が発生した場合に,その例外をeとして,ここで示す範囲が呼び出されることを示している。第11行目の「e.printStack Trace(); 」は,例外eの保持するスタック情報を表示する。第12行目および第14行目の「return; 」はmainを終了することを意味する。この第12行目が第2終了個所322となり,第14行目が第3終了個所323,実行時間測定終了個所312となる。
【0025】
上記のように,図3のプログラムにおいて終了個所は3個所あり,第1終了個所321,第2終了個所322,第3終了個所323が,それぞれ第1実行プログラム23が正常,準正常,および例外発生によって実行時間測定個所の実行終了となる部分である。
【0026】
図4は,本発明の実施の形態における監視コード追加例を示す図であって,第2実行プログラム11の一例をソースプログラムのイメージで示したものである。図4において,点線で囲んだ部分が実行時間測定個所である。
【0027】
本発明の実施の形態では,図4のJavaプログラムHelloWorld.java 401の第9行目の実行時間測定開始個所311から実行時間測定終了個所312をtry節でくくり,実行時間測定個所指示コードとして第8行目および第19行目にtry節,finally節を追加する。
【0028】
また,第8行目のtry節の直前の第7行目に,実行開始時刻取得コード411である「id=getStartTime();」を追加する。また,try節に対応するfinally節に実行終了時刻取得コード412である「getEndTime(id); 」(第20行目)を追加する。この操作により,実行時間測定開始個所311から実行時間測定終了個所312までの実行時間測定個所を終了する場合には,必ずfinally節の実行終了時刻取得コード412が実行されることになり,前記3個所の終了個所の特定が不要となる。
【0029】
監視コード追加部32において,図4に示すような監視コードを追加する場合,Javaバイトコードを直接操作するJavaライブラリを用いるなどして,上記内容に沿って,try節,finally節や実行開始時刻取得コード411および実行終了時刻取得コード412のJavaバイトコードを生成し,必要に応じて,プログラム解析部31によって解析された第1実行プログラム23のJavaバイトコード内のジャンプ先番地変更等の修正を行い,前記try節,finally節や実行開始時刻取得コード411および実行終了時刻取得コード412のJavaバイトコードを追加する。
【0030】
また,図4のJavaプログラム中,第6行目の「String translator=”Translated”; 」は,二重追加防止チェックに用いられる。すなわち,本発明において,二重追加防止チェック時に,例えば図4の第6行目の「translator」のような所定の変数名が宣言されていて,かつその値が所定の値(ここでは「Translated」) である場合には,以後の追加処理を行わず,現在のバイトコードをそのまま第2実行プログラム11として出力する。なお,実際にはバイトコードを第6行目のように変更するのではなく,上記ステップS22における第1実行プログラム23の解析結果の変数名宣言部分および値宣言部分を操作することによって,変数名およびその値の宣言を行う。
【0031】
図3および図4の例では,mainメソッドの実行開始から実行終了までの時間を実行時間として測定するものとしているが,プログラム中における任意の個所を実行時間測定個所として,ユーザにインタラクティブに指定させるような実施も可能である。この場合,実行時間測定範囲をユーザに指定させるために,第1実行プログラム23を視覚化して表示する必要があるが,例えばJavaバイトコードを表示する既存のソフトウェア・ツールを用いて,第1実行プログラム23の内容を表示し,その表示をもとに実行時間測定範囲をポインティングデバイス等によってユーザに指定させることができる。
【0032】
また,ユーザにメニュー等により選択させることにより,実行時間測定個所をすべてのメソッドの各実行開始部分から実行終了部分とすることもできる。
【0033】
図5は,getStartTime関数およびgetEndTime関数の処理フローチャートである。getStartTime関数は,実行開始時刻取得コード411によって呼び出される関数であり,getEndTime関数は,実行終了時刻取得コード412によって呼び出される関数である。
【0034】
図5(A)に示すように,getStartTime関数は,「id=getStartTime();」のように使用され,引数は無く,実行時間測定個所に対して一意に割り振られたid(識別子)を戻り値とする。
【0035】
getStartTime関数では,以下のような処理が行われる。まず,実行プログラム監視部12にidを要求し(ステップS31),実行プログラム監視部12から,実行時間測定個所に対して一意に割り振られたidを受け取る(ステップS32)。次に,システムが提供する時刻取得関数によって現在の時刻である実行開始時刻を取得し(ステップS33),id,実行開始時刻の組を実行プログラム監視部12に送信する(ステップS34)。その後,実行プログラム監視部12から取得したidを戻り値として(ステップS35),処理を終了する。
【0036】
getEndTime関数は,図5(B)に示すように,「getEndTime(id); 」のように使用され,実行時間測定個所に対して一意に割り振られたid,すなわちgetStartTime関数の戻り値として取得したidを引数とする。戻り値は無い。getEndTime関数では,システムが提供する時刻取得関数によって現在の時刻である実行終了時刻を取得し(ステップS41),引数で指定されたidと,実行終了時刻との組を実行プログラム監視部12に送信し(ステップS42),処理を終了する。
【0037】
次に,実行プログラム監視部12の処理の概要について説明する。
【0038】
(1)自身の初期化
実行プログラム監視部12がJavaVM13内にロードされるときに,一度だけ初期化される。このとき,
・id払い出し用クラスの初期化,
・id,実行開始時刻および実行終了時刻の記憶領域の初期化,
・id,実行開始時刻および実行終了時刻のログ化ルーチンの設定(定期的にログ化を行うようにする),
を行う。
【0039】
(2)idの払い出し
idの払い出しは,getStartTime関数における図5(A)のステップS31の要求に対して行う処理であり,上記ステップS31では,実行プログラム監視部12のid払い出し用クラスのメソッドgetを使ってidを獲得する。メソッドgetは,内部で払い出すidを1増加してからそのidを返す。また,メソッドgetは,複数の同時払い出し要求(getStartTime関数の呼び出し)に対し,同じidを払い出すことのないように排他的に実行されるようになっている(Java言語では,Synchronized long get() として実装されている)。
【0040】
(3)getStartTime関数,getEndTime関数の記録要求(idと時刻が送信される)の処理
・id,実行開始時刻および実行終了時刻の記憶領域は,idをキーとして,(id,実行開始時刻,実行終了時刻)の組を含むようになっている。
・getStartTime関数がidと時刻を送信してきた場合,キーとしてidが既に記憶領域上に存在しているかどうかをチェックする。存在しない場合には,(id,実行開始時刻,NULL)という組を記憶領域上に生成する。キーとしてidが既に存在している場合にはエラーとし,前記生成処理をスキップする。
・getEndTime関数がidと時刻を送信してきた場合,キーとしてidが記憶領域上に存在しているかどうかをチェックする。存在する場合には,対応する組の実行終了時刻を上書きする。キーとしてidが存在しない場合には,(id,NULL,実行終了時刻)という組を記憶領域上に生成する。
【0041】
(4)id,実行開始時刻および実行終了時刻のログ化
・所定の時間間隔でログ化を行う。
・ログ化時には,id,実行開始時刻および実行終了時刻の記憶領域中の(id,実行開始時刻,実行終了時刻)のNULLでない3情報がそろった組について,その情報を外部記憶媒体等にログとして書き込み,かつ記憶領域からログ化し終えた組を消去する。なお,このログ化の際に,実行開始時刻および実行終了時刻から実行時間を計算して,(id,実行開始時刻,実行終了時刻,実行時間)の組をログとして出力してもよい。このログ情報を参照することにより,目的とする第1実行プログラム23の実行時間を知ることができる。
【0042】
図6は,本発明を適用したシステムの一実施例を示す図である。ここで開発機2は,図1のプログラム操作機3を含む。ソースプログラム21は,フェーズP10で開発環境22によって監視コード未追加の第1実行プログラム23に変換される。この第1実行プログラム23は,例えばJava2 SDK Enterprise Edition(J2EE)のEJB コンポーネントまたはサーブレットである。第1実行プログラム23に対して,フェーズP11で監視コード追加処理が行われ,ファイル形式で第2実行プログラム11として書き出される。この第2実行プログラム11が,フェーズP12でプログラム実行マシン1にコピーまたはファイル共有などの手段で提供された後,フェーズP13でJavaアプリケーションとして実行される。このフェーズP13では,実行プログラム監視部12が同一JavaVM13内で実行されるようになっている。
【0043】
第2実行プログラム11の実行時,第2実行プログラム11内の実行開始時刻取得コード411により,その実行時に実行プログラム監視部12が払い出す一意のidと,現在の時刻である実行開始時刻とを,実行プログラム監視部12に通知して所定の記録個所に格納し,また,実行終了時刻取得コード412により,前記idと,現在の時刻である実行終了時刻とを,実行プログラム監視部12に通知し,対応するidの記録個所に実行終了時刻を格納する。
【0044】
実行プログラム監視部12は,前記idと前記実行開始時刻および前記実行終了時刻から実行時間を計算して,id,実行開始時刻,実行終了時刻,実行時間を実行ログ14に出力する(フェーズP14)。なお,本発明では実行時間測定対象となる実行プログラムについて,アーカイブ(jar,war,earなど)化されているか否かは問わない。アーカイブ化されている場合には,事前に復元を行えばよい。
【0045】
図7は,本発明を適用したシステムの別の一実施例を示す図である。ここでプログラム実行マシン1は,図1のプログラム操作機3を含む。図6と同様にして実行形式変換処理のフェーズP20で,ソースプログラム21から第1実行プログラム23が生成される。フェーズP21では,第1実行プログラム23がプログラム実行マシン1にコピーされ,フェーズP22で,第1実行プログラム23がプログラム実行マシン1のメモリにロードされる。なお,本発明では第1実行プログラム23がアーカイブ(jar,war,earなど)化されているか否かは問わない。
【0046】
フェーズP22で,JavaVM13が第1実行プログラム23をメモリへロードした後に,フェーズP23で,プログラム解析部31,監視コード追加部32による監視コード追加処理が行われる。このフェーズP23では,プログラム解析部31が第1実行プログラム23をJavaVM13内のメモリ上から読み出し,また監視コード追加部32が第2実行プログラム11をJavaVM13内のメモリ上に生成するようになっている。その後に,フェーズP24に移行する。フェーズP24では,監視コードが追加された第2実行プログラム11が実行され,同時に実行プログラム監視部12が同一JavaVM13内で実行される。
【0047】
図7に示す実施例では,プログラム解析部31が第1実行プログラム23を読み出す媒体および監視コード追加部32が第2実行プログラム11を書き出す媒体は,外部記憶媒体のファイルではなく,メモリ領域となる。メモリ上に生成された前記監視コードが追加された第2実行プログラム11の実行によって,図6の場合と同様にして,実行プログラム監視部12が,(id,実行開始時刻,実行終了時刻,実行時間)の組を実行ログ14として生成し出力する(フェーズP25)。
【0048】
【発明の効果】
以上説明したように,本発明によれば,例えばJavaバイトコードにおいて,実行時間測定個所に対しtry節,finally節を実行する実行時間測定個所指示コードを追加し,try節の直前部分に実行開始時刻を測定する実行開始時刻取得コードを追加し,finally節に実行終了時刻を測定する実行終了時刻取得コードを追加し,前記Javaバイトコードの実行時にtry節,finally節の評価により,実行開始時刻取得コードが測定する実行開始時刻と,実行終了時刻取得コードが測定する実行終了時刻とを収集し,その差分を,実行時間測定個所の実行時間として算出することができるようになる。これによって,実行時間を測定するプログラムのソースプログラムを必要とすることなく,実行形式または中間コードの状態で,目的とするプログラムの実行時間を測定することが可能になる。
【図面の簡単な説明】
【図1】本発明の適用対象システム構成の一例を示す図である。
【図2】監視コード追加処理フローの一例を示す図である。
【図3】第1実行プログラムの一例をソースプログラムイメージで示した図である。
【図4】第2実行プログラムの一例をソースプログラムイメージで示した図である。
【図5】getStartTime関数およびgetEndTime関数の処理フローチャートである。
【図6】本発明の適用システムの一実施例を示す図である。
【図7】本発明の適用システムの別の一実施例を示す図である。
【符号の説明】
1 プログラム実行マシン
2 開発機
3 プログラム操作機
4 ネットワーク
11 第2実行プログラム
12 実行プログラム監視部
13 JavaVM
14 実行ログ
21 ソースプログラム
22 開発環境
23 第1実行プログラム
31 プログラム解析部
32 監視コード追加部
Claims (7)
- 実行形式もしくは中間コードで与えられたプログラムの実行時間を測定する方法であって,
前記プログラムにおける実行時間測定開始個所から実行時間測定終了個所までの実行時間測定範囲においてプログラム実行の例外割込みなどの何らかの事象が発生しても,その範囲の実行直後に必ず実行される命令の範囲を特定可能な実行時間測定個所指示命令を,前記プログラムの実行時間測定範囲部分に追加し,
前記実行時間測定範囲の直前に実行開始時刻を取得する実行開始時刻取得命令を追加し,
前記実行時間測定範囲の実行直後に必ず実行される命令の範囲に,実行終了時刻を取得する実行終了時刻取得命令を追加することにより,
前記プログラムに,少なくとも前記実行時間測定個所指示命令,前記実行開始時刻取得命令,前記実行終了時刻取得命令を含む監視コードが追加された第2のプログラムを生成する第1のステップと,
前記第2のプログラムを実行することにより,前記実行開始時刻取得命令の実行によって取得された実行開始時刻と,前記実行終了時刻取得命令の実行によって取得された実行終了時刻とを収集し記録する第2のステップとを有する
ことを特徴とするプログラム実行時間測定方法。 - 請求項1記載のプログラム実行時間測定方法において,
前記実行時間を測定するプログラムが,Java言語で記述されたプログラムを翻訳したプログラムであり,
前記実行時間測定個所指示命
令が前記実行時間測定範囲をtry節として設定するJavaバイトコードであり,
前記実行開始時刻取得命令が実行開始時刻を取得するJavaバイトコードであり,
前記実行終了時刻取得命令が前記try節に対応するfinally節として実行終了時刻を取得するJavaバイトコードである
ことを特徴とするプログラム実行時間測定方法。 - 請求項1記載のプログラム実行時間測定方法において,
前記第1のステップでは,
前記実行時間測定個所指示命令,前記実行開始時刻取得命令および実行終了時刻取得命令の追加時に前記各命令の二重追加を防ぐための所定の変数名とその値またはフラグを同時に追加し,
前記実行時間測定個所指示命令,前記実行開始時刻取得命令および実行終了時刻取得命令の追加の際に,前記所定の変数名とその値またはフラグが存在するか否かを判定し,存在する場合には前記各命令の追加を中止することで前記各命令の二重追加を防ぐ
ことを特徴とするプログラム実行時間測定方法。 - 請求項1記載のプログラム実行時間測定方法において,
前記第2のステップでは,
前記実行開始時刻取得命令によって前記実行時間測定範囲に対し一意に割り振られる識別子と実行開始時刻とを取得後,所定の記録個所に前記取得した識別子と実行開始時刻とを記録し,
前記実行終了時刻取得命令によって実行終了時刻を取得した際に,前記所定の記録個所に前記識別子に関係付けて前記取得した実行終了時刻を記録する
ことを特徴とするプログラム実行時間測定方法。 - 請求項1記載のプログラム実行時間測定方法において,
前記第1のステップでは,
前記実行時間を測定するプログラムに対する少なくとも前記実行時間測定個所指示命令,前記実行開始時刻取得命令,前記実行終了時刻取得命令を含む監視コードの追加を,ファイル化されたプログラムの実行形式または中間コードを対象に行う
ことを特徴とするプログラム実行時間測定方法。 - 請求項1記載のプログラム実行時間測定方法において,
前記第1のステップでは,
前記実行時間を測定するプログラムに対する少なくとも前記実行時間測定個所指示命令,前記実行開始時刻取得命令,前記実行終了時刻取得命令を含む監視コードの追加を,メモリ上にロードされたプログラムの実行形式または中間コードを対象に行う
ことを特徴とするプログラム実行時間測定方法。 - 請求項2に記載のプログラム実行時間測定方法において,
前記実行時間測定範囲をメソッドの実行開始部分から実行終了部分とする
ことを特徴とするプログラム実行時間測定方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003045731A JP2004258728A (ja) | 2003-02-24 | 2003-02-24 | プログラム実行時間測定方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003045731A JP2004258728A (ja) | 2003-02-24 | 2003-02-24 | プログラム実行時間測定方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004258728A true JP2004258728A (ja) | 2004-09-16 |
Family
ID=33112466
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003045731A Pending JP2004258728A (ja) | 2003-02-24 | 2003-02-24 | プログラム実行時間測定方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004258728A (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009505275A (ja) * | 2005-08-15 | 2009-02-05 | ソニー エリクソン モバイル コミュニケーションズ, エービー | モジュール内の実行アプリケーション・プログラムの安全性を検査するシステム、方法、及びコンピュータプログラム |
JP2009134643A (ja) * | 2007-11-30 | 2009-06-18 | Mitsubishi Electric Corp | 監視装置及びプログラム及び監視方法 |
JP2010033543A (ja) * | 2008-06-24 | 2010-02-12 | Smg Kk | ソフトウエア動作監視システム、そのクライアントコンピュータおよびサーバコンピュータ、並びに、そのプログラム |
JP2010061461A (ja) * | 2008-09-04 | 2010-03-18 | Ricoh Co Ltd | ソフトウェアの自動性能評価システム |
JP2011070533A (ja) * | 2009-09-28 | 2011-04-07 | Bank Of Tokyo-Mitsubishi Ufj Ltd | コード編集用プログラム及びコード編集装置 |
JP2019503542A (ja) * | 2016-01-15 | 2019-02-07 | グーグル エルエルシー | クライアント側アクティビティ監視 |
-
2003
- 2003-02-24 JP JP2003045731A patent/JP2004258728A/ja active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009505275A (ja) * | 2005-08-15 | 2009-02-05 | ソニー エリクソン モバイル コミュニケーションズ, エービー | モジュール内の実行アプリケーション・プログラムの安全性を検査するシステム、方法、及びコンピュータプログラム |
JP2009134643A (ja) * | 2007-11-30 | 2009-06-18 | Mitsubishi Electric Corp | 監視装置及びプログラム及び監視方法 |
JP2010033543A (ja) * | 2008-06-24 | 2010-02-12 | Smg Kk | ソフトウエア動作監視システム、そのクライアントコンピュータおよびサーバコンピュータ、並びに、そのプログラム |
JP2010061461A (ja) * | 2008-09-04 | 2010-03-18 | Ricoh Co Ltd | ソフトウェアの自動性能評価システム |
JP2011070533A (ja) * | 2009-09-28 | 2011-04-07 | Bank Of Tokyo-Mitsubishi Ufj Ltd | コード編集用プログラム及びコード編集装置 |
US8473903B2 (en) | 2009-09-28 | 2013-06-25 | The Bank Of Tokyo-Mitsubishi Ufj, Ltd. | Code edit apparatus and recording medium |
JP2019503542A (ja) * | 2016-01-15 | 2019-02-07 | グーグル エルエルシー | クライアント側アクティビティ監視 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7328255B2 (ja) | クロスレベル追跡マッピングによる実行制御 | |
US8201143B2 (en) | Dynamic mating of a modified user interface with pre-modified user interface code library | |
US10621068B2 (en) | Software code debugger for quick detection of error root causes | |
US7127707B1 (en) | Intellisense in project upgrade | |
US7496903B2 (en) | Synthesizing application response measurement (ARM) instrumentation | |
US7484209B2 (en) | Instrumenting java code by modifying bytecodes | |
US8397227B2 (en) | Automatic deployment of Java classes using byte code instrumentation | |
US8752015B2 (en) | Metadata merging in agent configuration files | |
US8359582B2 (en) | Compiling and inserting code snippets at runtime | |
US8640104B2 (en) | Computer method and apparatus for debugging in a dynamic computer language | |
JP5415557B2 (ja) | デバッギングのためのユーザ・スクリプト・コードの変換 | |
KR100995199B1 (ko) | 명령에 입력되는 파라미터들에 반영 기반 프로세싱을 수행하는 시스템 및 컴퓨터 판독 가능 저장 매체 | |
US9411616B2 (en) | Classloader/instrumentation approach for invoking non-bound libraries | |
US20050039186A1 (en) | Use of thread-local storage to propagate application context in Java 2 enterprise editon (J2EE) applications | |
US20050039171A1 (en) | Using interceptors and out-of-band data to monitor the performance of Java 2 enterprise edition (J2EE) applications | |
US20050039190A1 (en) | Propagating web transaction context into common object model (COM) business logic components | |
US8572554B2 (en) | Method and system for integrating Java and JavaScript technologies | |
JP5396979B2 (ja) | ソフトウェア開発支援装置、システム、ソフトウェア開発支援装置の機能拡張方法、及びプログラム | |
US20090320007A1 (en) | Local metadata for external components | |
US20090144751A1 (en) | Automatic discovery of the java classloader delegation hierarchy | |
KR102337962B1 (ko) | 마이크로서비스 아키텍처 애플리케이션 실행 시스템과 방법 및 이를 위한 컴퓨터 프로그램 | |
US7624381B1 (en) | Portable detection of start and completion of object construction | |
JP2009176064A (ja) | ソフトウェアリファクタリング支援装置および方法 | |
Turcotte et al. | Stubbifier: debloating dynamic server-side JavaScript applications | |
JP2004258728A (ja) | プログラム実行時間測定方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050126 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20071011 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20071030 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20080311 |