(57)【要約】【課題】アプリケーションプログラムを長時間実行させ得た最適なコンパイル済みプログラムコードを、アプリケーションプログラムの再起動時でも維持する。【解決手段】ユーザインタフェース部１１は、起動時に指定されたファイル名とともにファイル操作制御部１２へコンパイル済みプログラムコード保存の指示をする。ファイル変換部１３は、動的コンパイル済みプログラムコード２２を取得し、ファイルとして保存可能な形式に変換し、また、クラスバージョンＵＩＤを実行プログラムクラスファイル２３から、現仮想命令コード実行環境１０のバージョンをバージョン管理部１４からそれぞれ取得し、変換後のコンパイル済みプログラムコード２２に付与する。ファイル操作制御部１２は、取得されたコンパイル済みプログラムコード２２を、指示されたファイル名でファイルシステム２０に保存する。【選択図】　　　図２
2004078751.tif 000002
【特許請求の範囲】
【請求項１】
プログラム実行時の動的なデータを基に仮想命令コードの最適化および実マシン命令コードへの変換をプログラムを実行しながら動的に行うコンパイラを実装した仮想命令コード実行環境において、
動的コンパイルにより最適化済みのコンパイル済みプログラムコードを外部ファイルに保存し、仮想命令コード実行環境の起動時に、保存されている外部ファイルを読み出し、コンパイル結果を再利用するコンパイル済みプログラムコード再利用方法。
【請求項２】
仮想命令コード実行環境起動時に読み出した、コンパイル済みプログラムコードが保存されている外部ファイルのファイル形式およびファイルの内容が正当であるかを検証する、請求項１に記載のコンパイル済みプログラムコード再利用方法。
【請求項３】
仮想命令コード実行環境起動時に読み出した、コンパイル済みプログラムコードが保存されている外部ファイルの内容と、実行しようとしているアプリケーションプログラムとの整合性の検証を行う、請求項１または２に記載のコンパイル済みプログラムコード再利用方法。
【請求項４】
コンパイル済みプログラムコードを保存した外部ファイルのバーションと、その外部ファイルを読み出した仮想命令コード実行環境のバージョンの互換性を検証する、請求項１から３のいずれか１項に記載のコンパイル済みプログラムコード再利用方法。
【請求項５】
プログラム実行時の動的なデータを基に仮想命令コードの最適化および実マシン命令コードへの変換をプログラムを実行しながら動的に行う動的コンパイラを実装した仮想命令コード実行環境において、
該仮想命令実行環境内の動的コンパイル済みプログラムコードを取得し、ファイルとして保存可能な形式に変換する手段と、
変換されたコンパイル済みプログラムコードを、指定されたファイル名で外部ファイルに保存し、また指定されたファイル名のファイルを前記外部ファイルから読み出す手段と、
前記外部ファイルから読み出されたファイルを内部データ形式のコンパイル済みプログラムコードに変換し、仮想メモリ上に動的コンパイル済みプログラムコードとしてコピーする手段を有する、コンパイル済みプログラムコード再利用装置。
【請求項６】
仮想命令コード実行環境起動時に読み出した、コンパイル済みプログラムコードが保存されている外部ファイルのファイル形式およびファイルの内容が正当であるかを検証する手段を有する、請求項５に記載のコンパイル済みプログラムコード再利用装置。
【請求項７】
仮想命令コード実行環境起動時に読み出した、コンパイル済みプログラムコードが保存されている外部ファイルの内容と、実行しようとしているアプリケーションプログラムとの整合性の検証を行う手段を有する、請求項５または６に記載のコンパイル済みプログラムコード再利用装置。
【請求項８】
コンパイル済みプログラムコードを保存した外部ファイルのバーションと、その外部ファイルを読み出した仮想命令コード実行環境のバージョンの互換性を検証する手段を有する、請求項５から７のいずれか１項記載のコンパイル済みプログラムコード再利用装置。
【請求項９】
請求項１から４のいずれか１項に記載のコンパイル済みプログラムコード再利用方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラム実行時の動的なデータ（プロファイル）を基に仮想命令コードの最適化および実マシン命令コードへの変換をプログラムを実行しながら動的に行う動的コンパイラを実装した仮想命令コード実行環境におけるコンパイル済みプログラムコード再利用方法、装置、およびプログラムに関するものである。
【０００２】
【従来の技術】
プログラム実行時の動的なデータ（プロファイル）を基に仮想命令コードの最適化および実マシン命令コードへの変換をプログラムを実行しながら動的に行う従来の動的コンパイラを実装した仮想命令コード実行環境では、アプリケーションプログラムを実行することで得られた動的コンパイラによりコンパイルされたコンパイル済みプログラムコードが、同一アプリケーションプログラムを実行するために前出の仮想命令コード実行環境を再起動した場合でも引き継がれていない。
【０００３】
【発明が解決しようとする課題】
そのため、再起動されたアプリケーションプログラムの初期実行速度が、長時間実行して最適化された状態の実行速度と比べて著しく遅い場合があった。
【０００４】
このため、アプリケーションプログラムを再起動せずに、できるだけ長時間実行させておき、実行速度の最適な状態を保つ必要があるが、プログラム故障などの不測の事態が生じた場合には、やむを得ずアプリケーションを再起動することになる。また、サーバー系のプログラムは、プログラム故障などでサービスが利用できなかったときの復旧直後には、通常運用時以上に利用者が多くなり、本来はアプリケーションプログラムの高速な実行を要する部分である。
【０００５】
このように従来の技術では、アプリケーションプログラムの起動直後の実行速度が遅いという問題がある。
【０００６】
本発明の目的は、アプリケーションプログラムを長時間実行させて得た最適なコンパイル済みプログラムコードを、アプリケーションプログラムの再起動時でも維持するコンパイル済みプログラムコード再利用方法、装置、およびプログラムを提供することにある。
【０００７】
【課題を解決するための手段】
本発明は、仮想命令コード実行環境内部で使用しているコンパイル済みプログラムコードを、外部ファイルとして保存可能な形式に変換し、ファイルシステム中にファイルとして保存し、また、仮想命令コード実行環境の起動時に、指定された外部ファイルを読み出し、動的コンパイラによるコンパイル済みプログラムコードとして使用可能な状態へ復元するものである。
【０００８】
ここで、コンパイル済みプログラムコードは、実行時コンパイルによって、実行時に仮想命令コードから動的にコンパイルされた実マシン命令コードである。
【０００９】
プログラム実行時の動的なデータ（プロファイル）を基に仮想命令コードの最適化および実マシン命令コードへの変換をプログラムを実行しながら動的に行う動的コンパイラーを実装した仮想命令コード実行環境の下でアプリケーションプログラムを高速に実行するために、仮想命令コードを実マシン命令コードへ変換し、コンパイルされるコンパイル済みプログラムコードを保存・再利用することにより、アプリケーションプログラムの再起動直後でも再起動前と変わらない高速なプログラム実行速度を保つことができる。
【００１０】
【発明の実施の形態】
次に、本発明の実施の形態について図面を参照して説明する。
【００１１】
図１は本発明の一実施形態の動的コンパイル結果再利用装置を含む仮想命令実行環境１０およびファイルシステム２０の構成図である。
【００１２】
動的コンパイル結果再利用装置はユーザインタフェース部１１とファイル操作制御部１２とファイル変換部１３とバージョン管理部１４と整合性検証部１５を有している。
【００１３】
ユーザインタフェース部１１は仮想命令コード実行環境１０の起動時にユーザに指示されたファイルとともにコンパイル済みプログラムコードの保存指示をファイル操作制御部１２へ出し、またユーザに指定されたファイル名とともにコンパイル済みプログラムコードの読み出し指示をファイル操作制御部１２に出す。ファイル操作制御部１２はコンパイル済みプログラムコードの保存指示を受けてファイル変換部１３からファイルとして保存可能な形式に変換された動的コンパイル済みプログラムコード２２を取得し、指定されたファイル名でファイルシステム２０に保存する。また、ファイル操作制御部１２は、コンパイル済みプログラムコードの読み出し指示を受けると、指定されたファイル名のファイルをファイルシステム２０から読み出し、ファイル変換部１３へ通知する。ファイル変換部１３は通知されたファイルの内容からバージョン番号を抽出し、バージョン管理部１４へ通知し、バージョン管理部１４から返却されたバージョンチェック結果を判断し、互換性がないと判断した場合、ユーザインタフェース部１１へエラーを通知し、バージョンチェックが正常な場合、ファイルから読み出された内容を内部データ形式のコンパイル済みプログラムコードに変換し、仮想メモリ上に動的コンパイル済みプログラムコード２２としてコピーする。バージョン管理部１４はファイル変換部１３から通知されたバージョン番号が互換性のあるコンパイル済みプログラムコードかどうか判定し、チェック結果をファイル変換部１３へ返却する。整合性検証部１５は、ファイル変換部１３で変換されたコンパイル済みプログラムコード２２と実行しようとしているアプリケーションプログラムとの整合性を確認するために、全てのコンパイル済みプログラムコード２２が実行プログラムクラスファイル２３と一致しているかチェックし、チェック結果をファイル変換部１３に返却する。
【００１４】
図２は本実施形態におけるコンパイル済みプログラムコードの保存処理を示したものである。また、ファイルの保存形式を図３に示す。以下に処理の流れを説明する。
【００１５】
ステップ１．　　キー入力（Ｃｔｒｌ＋￥）などによるユーザ指示を検出したユーザインタフェース部１１は、起動時に指定されたファイル名とともにファイル操作制御部１２へコンパイル済みプログラムコード保存の指示をする。
【００１６】
ステップ２．　　指示を受けたファイル操作制御部１２は、ファイル変換部１３からファイルとして保存可能な形式（バイト配列）に変換されたコンパイル済みプログラムコード２２を取得する。
【００１７】
ステップ３．　　ファイル変換部１３は、
（３―１）　仮想命令コード実行環境１０内の動的コンパイル済みプログラムコード２２を取得し、ファイルとして保存可能な形式（バイト配列）に変換する。また、
（３―２）　クラスバージョンＵＩＤを仮想命令コード実行環境１０内の実行プログラムクラスファイル２３から、
（３―３）　現仮想命令コード実行環境１０のバージョンをバージョン管理部１４からそれぞれ取得し、変換後のコンパイル済みプログラムコードに付与する。クラスバージョンＵＩＤ（Ｕｎｉｑｕｅ　　ＩＤ）は、クラスファイル作成時に生成され、クラスファイル内に変更が生じた場合には、別のＵＩＤが付与されなければならない。ＵＩＤ生成アルゴリズムは、クラスファイルの全内容に対するハッシュコードでもよく、ソースファイルからクラスファイルを作成した時点の時刻情報でもよい。
【００１８】
ステップ２では、上記の情報を付与した変換済みのコンパイル済みプログラムコード２２をファイル操作制御部１２が取得している。
【００１９】
ステップ４．　　ファイル操作制御部１２は、取得されたコンパイル済みプログラムコード２２を、指示されたファイル名で図３に示す形式でファイルシステム２０に保存する。
【００２０】
図４は、本実施形態における、コンパイル済みプログラムコードを保存したファイル２１を読み出す処理を示したものである。また、図５〜８は、各処理のエラールートを示したものである。以下に処理の流れを説明する。
【００２１】
ステップ１．　　仮想命令コード実行環境起動時にユーザインタフェース部１１を経由してパラメータとして指定されたファイル名とともに、ファイル操作制御部１２へコンパイル済みプログラムコードの読み出し指示をする。
【００２２】
ステップ２．　　指示を受けたファイル操作制御部１２は、指定されたファイル名のファイルをファイルシステム２０から読み出す。指定されたファイル名のファイルが存在していない場合には、その旨をユーザインタフェース部１１へ通知する（図５）。
【００２３】
ステップ３．　　指定されたファイルが存在している場合、ファイル操作制御部１２は読み出した内容をファイル変換部１３へ通知する。
【００２４】
ステップ４．　　ファイル変換部１３は、ファイル内容からバージョン番号を抽出し、バージョン管理部１４へバージョン番号を通知する。
【００２５】
ステップ５．　　バージョン管理部１４は、通知されたバージョン番号が互換性のあるコンパイル済みプログラムコードかどうかチェックし、チェック結果をファイル変換部１３へ返却する。
【００２６】
ステップ６．　　ファイル変換部１３はバージョンチェック結果を判断し、互換性がないと判断された場合には、ユーザインタフェース部１１へエラーを通知する（図６）。
【００２７】
ステップ７．　　バージョンチェックが正常の場合、ファイル変換部１３はファイルから読み出された内容（バイト配列）を内部データ形式のコンパイル済みプログラムコードに変換し、仮想メモリ上に動的コンパイル済みプログラムコード２２としてコピーする。もし、変換が不可能な内容であった場合には、ユーザインタフェース部１１へその旨エラーを通知する（図７）。
【００２８】
ステップ８．　　コンパイル済みプログラムコード２２の内部データ形式に変換ができた場合には、ファイル変換部１３は変換されたコンパイル済みプログラムコード２２と実行しようとするアプリケーションプログラムとの整合性を確認するために、整合性検証部１５へ指示する。
【００２９】
ステップ９．　　検証要求を受けた整合性検証部１５は、全てのコンパイル済みプログラムコード２２の内容が実行プログラムクラスファイル２３と一致しているかチェックする。また、チェック結果を起動元のファイル変換部１３へ返却する。
【００３０】
ステップ１０．　　ファイル変換部１３は整合性検証結果を判定し、整合性がＮＧだった場合には、その旨エラーをユーザインタフェース部１１へ通知する（図８）。また、整合性がＯＫの場合には、正常終了でユーザインタフェース部１１へ制御を戻す。
【００３１】
図９は、コンパイル済みプログラムコードと実行するアプリケーションプログラムの整合性を検証する処理を示したものである。
【００３２】
整合性検証部１５では、コンパイル済みプログラムコードを保存したときに実行していたアプリケーションプログラムが、コンパイル済みプログラムコード２２を読み出したときと全く同じものであるか検証を行う。検証に用いるデータは、クラスごとに付与されるクラスバージョンＵＩＤである。
【００３３】
コンパイル済みプログラムコードの整合性検証手順は単純で、読み出されたコンパイル済みプログラムコード２２内にあるクラス名からロードされているクラスファイルを特定し、その両方のクラスバージョンＵＩＤが一致しているかどうか、全クラスバージョンＵＩＤに対して行うだけである。
【００３４】
なお、以上説明したコンパイル済みプログラムコード再利用方法は専用のハードウェアにより実現されるもの以外に、その機能を実現するためのプログラムを、コンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行するものであってもよい。コンピュータ読み取り可能な記録媒体とは、フロッピーディスク、光磁気ディスク、ＣＤ―ＲＯＭ等の記録媒体、コンピュータシステムに内蔵されるハードディスク装置等の記憶装置を指す。さらに、コンピュータ読み取り可能な記録媒体は、インターネットを介してプログラムを送信する場合のように、短時間の間、動的にプログラムを保持するもの（伝送媒体もしくは伝送波）、その場合のサーバとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含む。
【００３５】
【発明の効果】
以上説明したように、本発明によれば、プログラム実行時の動的なデータ（プロファイル）を基に仮想命令コードの最適化および実マシン命令コードへの変換をプログラムを実行しながら動的に行う動的コンパイラーを実装した仮想命令コード実行環境の下でアプリケーションプログラムを高速に実行するために、仮想命令コードを実マシン命令コードへ変換し、コンパイルされるコンパイル済みプログラムコードを保存・再利用することにより、アプリケーションプログラムの再起動直後でも再起動前と変わらない高速なプログラム実行速度を保つことができる。
【図面の簡単な説明】
【図１】本発明の一実施形態における仮想命令実行環境とファイルシステムの構成図である。
【図２】動的コンパイル済みプログラムコードの保存処理を示す図である。
【図３】ファイル保存形式を示す図である。
【図４】動的コンパイル済みプログラムコードの読み出し処理を示す図である。
【図５】指定ファイルエラーのエラールートを示す図である。
【図６】バージョンチェックエラーのエラールートを示す図である。
【図７】ファイル内容不正のエラールートを示す図である。
【図８】整合性検証エラーのエラールートを示す図である。
【図９】整合性検証方法の説明図である。
【符号の説明】
１０　　仮想命令実行環境
１１　　ユーザインタフェース部
１２　　ファイル操作制御部
１３　　ファイル変換部
１４　　バージョン管理部
１５　　整合性検証部
２０　　ファイルシステム
２１　　動的コンパイル済みプログラムコード保存ファイル
２２　　動的コンパイル済みプログラムコード
２３　　実行プログラムクラスファイル
【図１】
2004078751.tif 000003
【図２】
2004078751.tif 000004
【図３】
2004078751.tif 000005
【図４】
2004078751.tif 000006
【図５】
2004078751.tif 000007
【図６】
2004078751.tif 000008
【図７】
2004078751.tif 000009
【図８】
2004078751.tif 000010
【図９】
2004078751.tif 000011