(57)【要約】【課題】仮想マシンの生成を必要とするアプリケーションプログラムの実行を高速化すること。【解決手段】本発明に係るプログラム実行装置９は、アプリケーションプログラムの実行を制御する制御プログラム９３が格納された記憶部９１と、制御プログラム９３に従って動作することで、アプリケーションプログラムを逐次解釈して実行するための仮想マシンを生成し、生成した仮想マシンによってアプリケーションプログラムを実行するＣＰＵ９２と、を備える。ＣＰＵ９２は、制御プログラム９３に従った動作において、ＣＰＵ９２の負荷が所定の閾値未満である場合に、仮想マシンを事前生成しておき、アプリケーションプログラムの実行要求に応じて、事前生成した仮想マシンによって実行要求されたアプリケーションプログラムを実行する。【選択図】図５
2014170353.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションプログラムの実行を制御する制御プログラムが格納された記憶部と、
前記制御プログラムに従って動作することで、前記アプリケーションプログラムを逐次解釈して実行するための仮想マシンを生成し、生成した仮想マシンによって前記アプリケーションプログラムを実行するＣＰＵと、を備え、
前記ＣＰＵは、前記制御プログラムに従った動作において、前記ＣＰＵの負荷が所定の閾値未満である場合に、前記仮想マシンを事前生成しておき、前記アプリケーションプログラムの実行要求に応じて、前記事前生成した仮想マシンによって前記実行要求されたアプリケーションプログラムを実行する、
プログラム実行装置。
【請求項２】
前記ＣＰＵは、前記制御プログラムに従った動作において、前記仮想マシンを事前生成する際に、前記アプリケーションプログラムで使用される標準ライブラリを事前ロードしておく、
請求項１に記載のプログラム実行装置。
【請求項３】
前記記憶部は、さらに、前記プログラム実行装置に用意された標準ライブラリの中から、前記事前ロードする標準ライブラリとして選択された所定数の標準ライブラリのリストを示すリスト情報が格納され、
前記ＣＰＵは、前記制御プログラムに従った動作において、前記記憶部に格納されたリスト情報で示される標準ライブラリを事前ロードし、
前記ＣＰＵは、前記制御プログラムに従った動作において、前記標準ライブラリの使用状況に応じて、より使用頻度の高い標準ライブラリが前記リストに含まれるように前記リスト情報を更新する、
請求項２に記載のプログラム実行装置。
【請求項４】
前記記憶部は、さらに、前記仮想マシンのプール数を示す設定情報が格納され、
前記ＣＰＵは、前記制御プログラムに従った動作において、前記ＣＰＵの負荷が所定の閾値未満である場合であっても、前記事前生成されている仮想マシンの数が、前記記憶部に格納された設定情報が示すプール数に達しているときには、前記仮想マシンの事前生成を抑止する、
請求項１乃至３のいずれか１項に記載のプログラム実行装置。
【請求項５】
前記ＣＰＵは、前記制御プログラムに従った動作において、前記アプリケーションプログラムを実行する仮想マシンの異常を検出した場合、当該アプリケーションプログラムを他の事前生成されている仮想マシンによって実行する、
請求項１乃至４のいずれか１項に記載のプログラム実行装置。
【請求項６】
前記アプリケーションプログラムは、Ｊａｖａアプリケーションプログラムであり、
前記ＣＰＵは、前記制御プログラムに従った動作において、前記Ｊａｖａアプリケーションプログラムの実行要求に応じて、アプリケーションクラスローダを生成し、生成したアプリケーションクラスローダによって前記Ｊａｖａアプリケーションプログラムのクラスをロードして、前記仮想マシンによって前記Ｊａｖａアプリケーションプログラムを実行する、
請求項１乃至５のいずれか１項に記載のプログラム実行装置。
【請求項７】
ＣＰＵの負荷が所定の閾値未満である場合、アプリケーションプログラムを逐次解釈して実行するための仮想マシンを事前生成するステップと、
前記アプリケーションプログラムの実行要求に応じて、前記事前生成した仮想マシンによって前記実行要求されたアプリケーションプログラムを実行するステップと、
を備えたプログラム実行方法。
【請求項８】
ＣＰＵの負荷が所定の閾値未満である場合、アプリケーションプログラムを逐次解釈して実行するための仮想マシンを事前生成する処理と、
前記アプリケーションプログラムの実行要求に応じて、前記事前生成した仮想マシンによって前記実行要求されたアプリケーションプログラムを実行する処理と、
をコンピュータに実行させるプログラム実行プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム実行装置、プログラム実行方法、及びプログラム実行プログラムに関し、特に、仮想マシンによってアプリケーションプログラムを逐次解釈して実行する技術に関する。
【背景技術】
【０００２】
特許文献１には、Ｊａｖａ（登録商標）仮想マシン上で、Ｊａｖａアプリケーションを実行する技術が開示されている。しかしながら、Ｊａｖａアプリケーションは主に起動が遅いことを理由にあまり普及していない。
【０００３】
Ｊａｖａアプリケーションプロセスは、その起動の際、Ｊａｖａ仮想マシン（Ｊａｖａ ＶＭ）を生成する必要があり、通常のネイティブアプリケーションプロセスに比べて起動が遅い。そのため、Ｊａｖａアプリケーションは、同じ目的のネイティブアプリケーションよりも実行時間が長くなる。クライアントアプリケーションとしてのＪａｖａアプリケーションは、一般的に、ユーザの要求でＪａｖａプロセスを起動し、比較的短時間で実行を終了するため、起動の遅さが問題になっていた。特に、テキスト処理などの比較的実行時間が短いアプリケーションでは性能差が大きく、実用的ではなかった。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２００１／０８４３０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の目的は、上述したような課題を解決するために、仮想マシンの生成を必要とするアプリケーションプログラムの実行を高速化することができるプログラム実行装置、プログラム実行方法、及びプログラム実行プログラムを提供することである。
【課題を解決するための手段】
【０００６】
本発明の第１の態様に係るプログラム実行装置は、アプリケーションプログラムの実行を制御する制御プログラムが格納された記憶部と、前記制御プログラムに従って動作することで、前記アプリケーションプログラムを逐次解釈して実行するための仮想マシンを生成し、生成した仮想マシンによって前記アプリケーションプログラムを実行するＣＰＵと、を備え、前記ＣＰＵは、前記制御プログラムに従った動作において、前記ＣＰＵの負荷が所定の閾値未満である場合に、前記仮想マシンを事前生成しておき、前記アプリケーションプログラムの実行要求に応じて、前記事前生成した仮想マシンによって前記実行要求されたアプリケーションプログラムを実行するものである。
【０００７】
本発明の第２の態様に係るプログラム実行方法は、ＣＰＵの負荷が所定の閾値未満である場合、アプリケーションプログラムを逐次解釈して実行するための仮想マシンを事前生成するステップと、前記アプリケーションプログラムの実行要求に応じて、前記事前生成した仮想マシンによって前記実行要求されたアプリケーションプログラムを実行するステップと、を備えたものである。
【０００８】
本発明の第３の態様に係るプログラム実行プログラムは、ＣＰＵの負荷が所定の閾値未満である場合、アプリケーションプログラムを逐次解釈して実行するための仮想マシンを事前生成する処理と、前記アプリケーションプログラムの実行要求に応じて、前記事前生成した仮想マシンによって前記実行要求されたアプリケーションプログラムを実行する処理と、をコンピュータに実行させるものである。
【発明の効果】
【０００９】
上述した本発明の各態様によれば、仮想マシンの生成を必要とするアプリケーションプログラムの実行を高速化することができるプログラム実行装置、プログラム実行方法、及びプログラム実行プログラムを提供することができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態に係るＪａｖａプログラム実行装置の構成図である。
【図２】実施の形態に係るプログラム構成の模式図である。
【図３】実施の形態に係るＪａｖａプログラム実行装置におけるＪａｖａプロセス事前起動処理を示すフローチャートである。
【図４】実施の形態に係るＪａｖａプログラム実行装置におけるＪａｖａアプリケーション実行処理を示すフローチャートである。
【図５】実施の形態に係るＪａｖａプログラム実行装置の概略構成図である。
【発明を実施するための形態】
【００１１】
以下に図面を参照しながら、本発明の好適な実施の形態について説明する。以下の実施の形態に示す具体的な数値等は、発明の理解を容易とするための例示にすぎず、特に断る場合を除き、それに限定されるものではない。また、以下の記載及び図面では、説明の明確化のため、当業者にとって自明な事項等については、適宜、省略及び簡略化がなされている。
【００１２】
＜発明の実施の形態＞
図１を参照して、本発明の実施の形態に係るＪａｖａプログラム実行装置１の構成について説明する。図１は、本発明の実施の形態に係るＪａｖａプログラム実行装置１の構成図である。
【００１３】
Ｊａｖａプログラム実行装置１は、ＣＰＵ（Central Processing Unit）２、記憶部３、入力部４、及び通信部５を有する。Ｊａｖａプログラム実行装置１は、例えばＰＣ及びスマートフォン等のように、ユーザからのＪａｖａアプリケーションプログラム（以下、「Ｊａｖａアプリケーション」とも呼ぶ）の実行を要求する入力に応じて、Ｊａｖａアプリケーションを実行する情報処理端末であってもよい。また、Ｊａｖａプログラム実行装置１は、クライアントからのＪａｖａアプリケーションの実行を要求する情報のネットワークを介した受信に応じて、Ｊａｖａアプリケーションを実行するアプリケーションサーバであってもよい。この場合、クライアントは、例えば、ユーザによって操作されるＰＣ及びスマートフォン等の情報処理端末が該当する。
【００１４】
ＣＰＵ２は、記憶部３に格納されたプログラムを実行することによって、Ｊａｖａプログラム実行装置１としての処理を実行する。すなわち、記憶部３に格納されたプログラムは、本実施の形態に係るＪａｖａプログラム実行装置１における処理を、ＣＰＵ２に実行させるためのコードを含む。このプログラムには、後述するＯＳ（Operating System）１０のプログラム、アプリケーションＪａｒファイル１１、ライブラリＪａｒファイル群１２、標準ライブラリＪａｒファイル群１３、Ｊａｖａプロセス管理プログラム４１、Ｊａｖａプロセス２１〜２３のプログラム等が含まれる。
【００１５】
記憶部３は、アプリケーションＪａｒファイル１１、ライブラリＪａｒファイル群１２、標準ライブラリＪａｒファイル群１３、Ｊａｖａプロセス管理プログラム４１、クラスリスト４２、及び設定ファイル４３等が格納されている。記憶部３は、各種情報（上記のファイル及びプログラム等）を格納可能なメモリ及びハードディスク等の記憶装置の少なくとも１つ以上を含み構成されている。
【００１６】
入力部４は、ユーザからの各種入力を受け付ける。入力部４は、例えばマウス、キーボード及びタッチパネル等の入力装置の少なくとも１つ以上を含んで構成されている。入力部４は、ユーザからの入力に応じて、その入力内容を通知する通知情報をＣＰＵ２に出力する。
【００１７】
例えば、Ｊａｖａプログラム実行装置１が、ユーザからの入力による実行要求に応じて、Ｊａｖａアプリケーションを実行する情報処理端末である場合、入力部４は、ユーザからのＪａｖａアプリケーションの実行を要求する入力に応じて、その入力内容を通知する通知情報をＣＰＵ２に出力する。そして、ＣＰＵ２は、入力部４からのＪａｖａアプリケーションの実行を要求する入力内容を通知する通知情報の出力に応じて、Ｊａｖａアプリケーションを起動する。なお、このＪａｖａアプリケーションの実行を要求する入力には、実行対象とするアプリケーションＪａｒファイル１１と、そのＪａｖａアプリケーションで利用するライブラリＪａｒファイルを指定する入力が含まれる。
【００１８】
通信部５は、Ｊａｖａプログラム実行装置１と他の情報処理端末との間でネットワークを介して任意の情報を送受信する。通信部５は、例えばネットワークアダプタ等の通信装置を含み構成されている。通信部５は、ＣＰＵ２から他の情報処理端末に送信するために出力された情報を、ネットワークを介して他の情報処理端末に送信する。また、通信部５は、他の情報処理端末からネットワークを介して送信された情報を受信し、ＣＰＵ２に出力する。
【００１９】
例えば、Ｊａｖａプログラム実行装置１が、クライアントからの実行要求に応じて、Ｊａｖａアプリケーションを実行するアプリケーションサーバである場合、通信部５は、他の情報処理端末からのＪａｖａアプリケーションの実行を要求する情報を受信した場合、その情報をＣＰＵ２に出力する。そして、ＣＰＵ２は、通信部５からのＪａｖａアプリケーションの実行を要求する情報の出力に応じて、Ｊａｖａアプリケーションを起動する。なお、このＪａｖａアプリケーションの実行を要求する情報には、クライアントに対するユーザからの入力で指定された実行対象とするアプリケーションＪａｒファイル１１と、そのＪａｖａアプリケーションで利用するライブラリＪａｒファイルが示されている。
【００２０】
続いて、図２を参照して、本実施の形態に係るＪａｖａアプリケーションの実行高速化方法について説明する。図２は、本実施の形態に係るプログラム構成の模式図である。
【００２１】
アプリケーションＪａｒファイル１１は、Ｊａｖａアプリケーションプログラムを示すファイルである。ライブラリＪａｒファイル群１２は、複数のライブラリＪａｒファイルの集合である。ライブラリＪａｒファイルは、Ｊａｖａアプリケーションプログラムで使用されるライブラリのプログラムを示すファイルである。標準ライブラリＪａｒファイル群１３は、複数の標準ライブラリＪａｒファイルの集合である。標準ライブラリＪａｒファイルは、Ｊａｖａアプリケーションプログラムで使用される標準ライブラリのプログラムを示すファイルである。ライブラリＪａｒファイルは、ユーザ定義のライブラリのファイルであり、標準ライブラリＪａｒファイルは、Ｊａｖａにおいて標準で用意されているライブラリのファイルである。
【００２２】
アプリケーションＪａｒファイル１１、ライブラリＪａｒファイル、及び標準ライブラリＪａｒファイルは、それぞれ、プログラムを、Ｊａｖａ仮想マシン（Ｊａｖａ ＶＭ）で解釈・実行可能な形式であるバイトコード形式で含んでいる。
【００２３】
Ｊａｖａプロセス管理プログラム４１は、Ｊａｖａアプリケーションの実行を管理するプログラムである。Ｊａｖａプロセス管理プログラム４１は、ＯＳ１０上で予め実行されて、Ｊａｖａプロセス管理プロセス３１としてバックグラウンドで動作する。
【００２４】
Ｊａｖａプロセス管理プロセス３１は、Ｊａｖａアプリケーション（アプリケーションＪａｒファイル１１）を実行するためのＪａｖａプロセス２１〜２３を起動（生成）する。Ｊａｖａプロセス２１〜２３のそれぞれは、その内部においてＪａｖａ ＶＭ及びアプリケーションクラスローダを生成し、アプリケーションクラスローダによってアプリケーションＪａｒファイル１１のクラスをロードし、ロードしたクラスのｍａｉｎメソッドをＪａｖａ ＶＭによって逐次解釈して実行する。これによって、Ｊａｖａアプリケーションが実行される。
【００２５】
ここで、本実施の形態では、Ｊａｖａプロセス管理プロセス３１は、Ｊａｖａプログラム実行装置１のＣＰＵ２の資源に余裕があるときに、Ｊａｖａプロセス２１〜２３を指定された個数まで事前起動しておく。事前起動されたＪａｖａプロセスは、Ｊａｖａ ＶＭを生成した後、アプリケーションクラスローダの生成直前まで動作し、ユーザがＪａｖａアプリケーションの実行を要求するまで待機する。Ｊａｖａプロセス管理プロセス３１は、ユーザからのＪａｖａアプリケーションの実行要求に応じて、事前起動されたＪａｖａプロセスの１つを払い出す。払い出されたＪａｖａプロセスは、アプリケーションクラスローダを生成し、実行要求されたＪａｖａアプリケーション（アプリケーションＪａｒファイル１１）のクラスをロードし、そのＪａｖａアプリケーションの実行を開始する。
【００２６】
このように、本実施の形態では、Ｊａｖａアプリケーションを、事前起動してプールされたＪａｖａプロセスで実行することにより、Ｊａｖａアプリケーション実行時にかかってしまう、Ｊａｖａプロセス起動時のＪａｖａ仮想マシン生成の処理時間オーバーヘッドを無くし、Ｊａｖａアプリケーションの実行を高速化する。
【００２７】
なお、Ｊａｖａプロセス管理プロセス３１は、ＣＰＵ２の資源に余裕があるか否かを、ＣＰＵ２の負荷が所定の閾値よりも低いか否かによって判定する。ＣＰＵ２の負荷の閾値は、設定ファイル４３に予め設定されている。したがって、Ｊａｖａプロセス管理プロセス３１は、ＣＰＵ２の負荷が設定ファイル４３で示される閾値未満である場合には、ＣＰＵ２の資源に余裕があると判定する。Ｊａｖａプロセス管理プロセス３１は、ＣＰＵ２の負荷が設定ファイル４３で示される閾値以上である場合には、ＣＰＵ２の資源に余裕がないと判定する。ここで、ＣＰＵ２の負荷として、ＣＰＵ２の負荷を示すものであれば、ＣＰＵ２の使用率等の任意のパラメータを計測するようにしてよい。
【００２８】
また、Ｊａｖａプロセス管理プロセス３１は、ＣＰＵ２の資源に余裕があるときは、Ｊａｖａプロセスを指定された個数まで事前起動する。Ｊａｖａプロセスを事前起動する個数は、設定ファイル４３においてプール数として予め設定されている。したがって、Ｊａｖａプロセス管理プロセス３１は、ＣＰＵ２の資源に余裕があるときに、事前起動したＪａｖａプロセス数が、設定ファイル４３で示されるプール数未満である場合に、Ｊａｖａプロセスを起動する。Ｊａｖａプロセス管理プロセス３１は、ＣＰＵ資源に余裕があるであっても、事前起動したＪａｖａプロセス数が、設定ファイル４３で示されるプール数に達している場合には、さらなるＪａｖａプロセスの事前起動を抑止する。例えば、設定ファイル４３に示されるプール数が「３」である場合、ＣＰＵ２の資源に余裕があっても、図２に示すように、３つまでのＪａｖａプロセス２１〜２３が生成（起動）されることになる。これによれば、ＣＰＵ資源に余裕があるからといって、必要以上にＪａｖａプロセスを起動してＣＰＵ資源を圧迫してしまうことを防止することができる。
【００２９】
また、本実施の形態では、Ｊａｖａプログラム実行装置１のＣＰＵ２の資源に余裕があるときに事前起動されたＪａｖａプロセスは、Ｊａｖａ標準ライブラリ（標準ライブラリＪａｒファイル）中のクラスを事前ロードする。すなわち、Ｊａｖａプロセスは、Ｊａｖａ ＶＭの他にブートストラップローダも事前生成し、ブートストラップローダによってＪａｖａ標準ライブラリのクラスを事前ロードする。
【００３０】
ここで、事前ロードされるクラスは、Ｊａｖａ標準ライブラリのクラスのうち、よく使用されるクラスとする。この事前ロードされるクラスは、クラスリスト４２によって示される。クラスリスト４２は、一般的に使用頻度の高いクラスを所定数だけ示すように予め作成されて記憶部３に格納されている。事前起動されたＪａｖａプロセスは、記憶部３に格納されたクラスリスト４２を参照することで、事前ロードするクラスを認識し、認識したクラスを標準ライブラリＪａｒファイル群１３の中から選択的に事前ロードする。
【００３１】
また、このクラスリスト４２は、Ｊａｖａ標準ライブラリのクラスの使用状況に応じて、統計的に使用率が高いクラスのみを示すように更新するようにしてもよい。このクラスリスト４２の更新は、ＣＰＵ２によって、クラスの使用状況に応じて使用頻度の高いクラスだけがクラスリスト４２のリストで示されるように更新されるのであれば、任意の手法によって実施するようにしてもよい。例えば、アプリケーションＪａｒファイル１１及びライブラリＪａｒファイルのプログラムにおいて標準ライブラリのクラスを使用する毎に、記憶部３に保持したそのクラスの使用回数をカウントアップするようにし、Ｊａｖａプロセス管理プロセス３１が、所定の時間間隔毎に定期的に、記憶部３に保持された各クラスの使用回数に基づいて、使用回数の高い順に上記所定数までのクラスを示すようにクラスリスト４２を更新する等してもよい。
【００３２】
続いて、図３及びを参照して、本実施の形態に係るＪａｖａプログラム実行装置１の処理について説明する。図３は、本実施の形態に係るＪａｖａプログラム実行装置１におけるＪａｖａプロセス事前起動処理を示すフローチャートである。図４は、本実施の形態に係るＪａｖａプログラム実行装置１におけるＪａｖａアプリケーション実行処理を示すフローチャートである。
【００３３】
まず、図３を参照して、Ｊａｖａプログラム実行装置１におけるＪａｖａプロセス事前起動処理について説明する。
【００３４】
Ｊａｖａプロセス管理プロセス３１は、ユーザからＪａｖａアプリケーションの実行要求が行なわれる前におけるバックグラウンドの動作として、ＯＳ１０からＣＰＵ負荷情報を取得し、取得したＣＰＵ負荷情報が示すＣＰＵ２の負荷が、設定ファイル４３に設定された閾値よりも低いか否かを判定する（Ｓ１）。すなわち、ＯＳ１０は、ＣＰＵ２の負荷を計測し、計測したＣＰＵ２の負荷を示すＣＰＵ負荷情報を、ＯＳ１０上で動作するプロセスに提供する機能を有するものとする。Ｊａｖａプロセス管理プロセス３１は、例えば、所定の一定時間間隔毎に、ＣＰＵ２の負荷が閾値よりも低いか否かを判定する。
【００３５】
ＣＰＵ２の負荷が閾値よりも低くないと判定した場合（Ｓ１：Ｎｏ）、Ｊａｖａプロセス管理プロセス３１は、再度、ステップＳ１に戻り、ＣＰＵ２の負荷が閾値よりも低いか否かの判定を繰り返す。
【００３６】
ＣＰＵ２の負荷が閾値以上であると判定した場合（Ｓ１：Ｙｅｓ）、Ｊａｖａプロセス管理プロセス３１は、事前起動しているＪａｖａプロセス数が、設定ファイル４３に設定されているプール数未満であるか否かを判定する（Ｓ２）。
【００３７】
事前起動しているＪａｖａプロセス数がプール数に達していると判定した場合（Ｓ２：Ｎｏ）、Ｊａｖａプロセス管理プロセス３１は、再度、ステップＳ１に戻り、ＣＰＵ２の負荷が閾値よりも低いか否かの判定を繰り返す。
【００３８】
事前起動しているＪａｖａプロセス数がプール数未満であると判定した場合（Ｓ２：Ｙｅｓ）、Ｊａｖａプロセス管理プロセス３１は、Ｊａｖａプロセスを事前起動する（Ｓ３）。
【００３９】
事前起動されたＪａｖａプロセスは、Ｊａｖａ ＶＭを生成（起動）する（Ｓ４）。Ｊａｖａプロセスは、標準ライブラリＪａｒファイル群１３の標準ライブラリのクラスのうち、クラスリスト４２で示されるクラスを事前ロードする（Ｓ５）。そして、Ｊａｖａプロセスは、アプリケーションクラスローダの起動（生成）前まで処理を進めたところで、待機状態に遷移する（Ｓ６）。例えば、Ｊａｖａプロセスは、アプリケーションクラスローダの起動（生成）前まで処理を進めたところでスリープすることで、待機状態に遷移する。
【００４０】
以上の処理によれば、ＣＰＵ２の資源に余裕がある限り、プール数に達するまでＪａｖａプロセスを事前起動することができる。これによれば、次に説明するように、ユーザからのＪａｖａアプリケーションの実行要求に応じて、Ｊａｖａ ＶＭの起動を待つことなく迅速にＪａｖａアプリケーションの実行を開始することができる。
【００４１】
続いて、図４を参照して、Ｊａｖａプログラム実行装置１におけるＪａｖａアプリケーション実行処理を説明する。
【００４２】
Ｊａｖａプロセス管理プロセス３１は、ユーザから、実行するアプリケーションＪａｒファイル１１と、そのＪａｖａアプリケーションで利用するライブラリＪａｒファイルが指定されたＪａｖａアプリケーションの実行要求を受ける（Ｓ１１）。このＪａｖａアプリケーションの実行要求は、上述したように、ユーザからの入力部４を介した入力による実行要求、又は、ユーザからのクライアントに対する入力に応じてネットワーク及び通信部５を介して受信した実行要求が該当する。
【００４３】
Ｊａｖａプロセス管理プロセス３１は、ユーザからのＪａｖａアプリケーションの実行要求に応じて、事前起動しているＪａｖａプロセス２１〜２３のうち、任意のＪａｖａプロセスの待機状態を解除する（Ｓ１２）。待機状態を解除するＪａｖａプロセスは、ランダムに選択してもよく、最先に起動したものを選択してもよい。なお、Ｊａｖａプロセスの待機状態の解除は、ＯＳ１０上で実装可能な任意の手法によって行うようにしてよい。例えば、Ｊａｖａプロセス管理プロセス３１からＪａｖａプロセスに対するプロセス間通信に応じて、Ｊａｖａプロセスが起床することで、待機状態が解除されるようにしてもよい。この場合、実行するアプリケーションＪａｒファイル１１及びライブラリＪａｒファイルも、そのプロセス間通信によって通知するようにしてもよい。
【００４４】
ここで、Ｊａｖａプロセス管理プロセス３１は、Ｊａｖａプロセス２１の待機状態を解除したものとして説明を続ける。待機状態が解除されたＪａｖａプロセス２１は、アプリケーションクラスローダを生成する（Ｓ１３）。そして、Ｊａｖａプロセス２１は、生成したアプリケーションクラスローダによって、実行要求されたアプリケーションＪａｒファイル１１のクラスをロードし、Ｊａｖａアプリケーションの実行を開始する（Ｓ１４）。
【００４５】
Ｊａｖａプロセス２１は、アプリケーションＪａｒファイルのクラスをロードして実行したｍａｉｎメソッドの実行が終了することで、Ｊａｖａアプリケーションの実行が終了したとき、Ｊａｖａ ＶＭからロードしたクラスをアンロードすることでＪａｖａ ＶＭを初期化し、Ｊａｖａプロセス２１をプール状態に戻す（Ｓ１５）。
【００４６】
なお、ステップＳ１５では、Ｊａｖａアプリケーションの実行を終了したＪａｖａプロセス２１をプール状態に戻すようにしているが、これに限られない。ステップＳ１５で、Ｊａｖａプロセス２１を終了するようにしてもよい。この場合、ＣＰＵ２の資源に余裕があるのであれば、再度、図３に示したＪａｖａプロセス事前起動処理によって、実行終了したＪａｖａプロセス２１に代わるＪａｖａプロセスが事前起動され、待機状態でＪａｖａアプリケーションの実行を待つことになる。
【００４７】
以上に説明したように、本実施の形態では、ＣＰＵ２の負荷が所定の閾値未満である場合に、Ｊａｖａプログラムを事前起動（仮想マシンを事前生成）しておき、Ｊａｖａアプリケーションプログラムの実行要求に応じて、事前起動したＪａｖａプログラム（事前生成した仮想マシン）によって実行要求されたアプリケーションプログラムを実行するようにしている。これによれば、Ｊａｖａプロセス起動時におけるＪａｖａ ＶＭの生成のオーバーヘッドがＪａｖａアプリケーション実行時に掛からないため、仮想マシンの生成を必要とするアプリケーションプログラムの実行を高速化することができる。
【００４８】
また、Ｊａｖａプログラムを事前起動する際に、良く使う標準ライブラリクラスを事前ロードしているのでＪａｖａアプリケーション実行時に標準ライブラリをロードする確率が減り、Ｊａｖａアプリケーション自体の実行性能も向上することができる。
【００４９】
＜発明の他の実施の形態＞
ＪａｖａプロセスがＪａｖａ ＶＭレベルの障害に陥ってしまった場合、Ｊａｖａプロセスを再起動することでＪａｖａ ＶＭを再生成（再起動）しなければ復旧することができない。しかしながら、Ｊａｖａプロセスの再起動は、Ｊａｖａ ＶＭの再生成も伴うため、時間がかかってしまうという。そのため、例えば、Ｊａｖａプロセスによって実行さえていたＪａｖａアプリケーションに対して、ユーザからの何らかのリクエスト（何らかの処理を要求する入力）があった場合には、そのリクエストはエラーとなってしまう。
【００５０】
それに対して、上記実施の形態によれば、さらに以下に説明するように処理することで、Ｊａｖａアプリケーションの再起動を高速化することができる。これによれば、上記で例として挙げたように、Ｊａｖａアプリケーションがリクエストに対して処理するものであっても、再起動の時間を短縮してエラーとなるリクエストを低減することができる。
【００５１】
具体的には、Ｊａｖａプロセス管理プロセス３１は、Ｊａｖａアプリケーションを実行中のＪａｖａプロセスが再起動が必要となる障害に陥ってしまった場合、そのＪａｖａプロセスで実行中のＪａｖａアプリケーションを、他の事前起動されているＪａｖａプロセスで実行開始させる。すなわち、Ｊａｖａプロセス管理プロセス３１は、上記ステップＳ１２における説明と同様に、他の事前起動されているＪａｖａプロセスの待機状態を解除してＪａｖａアプリケーションを実行させる。なお、Ｊａｖａプロセス管理プロセス３１による障害に陥ったＪａｖａプロセスが実行中だったＪａｖａアプリケーション（アプリケーションＪａｒファイル１１）の特定は、例えば、Ｊａｖａプロセス管理プロセス３１がＪａｖａプロセスにアプリケーションＪａｒファイル１１を実行させるときに、そのアプリケーションＪａｒファイル１１を示す情報をＪａｖａプロセスと紐付けて記憶部３に記録しておき、その情報を参照することで行うようにすればよい。
【００５２】
なお、Ｊａｖａプロセス管理プロセス３１による、Ｊａｖａプロセスが再起動が必要となる障害に陥ったことは、Ｊａｖａプロセスからのプロセス間通信による障害の通知や、Ｊａｖａプロセスが終了する際に障害を通知する終了コードで終了する等によって、Ｊａｖａプロセスが任意の手法によってＪａｖａプロセス管理プロセス３１に障害の発生を通知することで検出可能とするようにすればよい。
＜発明の実施の形態の概要＞
続いて、図５を参照して、本発明の実施の形態に係るＪａｖａプログラム実行装置１の概略構成となるプログラム実行装置９の構成について説明する。図５は、本発明の実施の形態に係るＪａｖａプログラム実行装置１の概略構成図（プログラム実行装置９の構成図）である。すなわち、上述した本実施の形態に係るＪａｖａプログラム実行装置１は、その概要構成として、図５に示すプログラム実行装置９のように捉えることもできる。
【００５３】
プログラム実行装置９は、記憶部９１及びＣＰＵ９２を有する。記憶部９１は、制御プログラム９３が格納されている。制御プログラム９３は、アプリケーションプログラムの実行を制御する。制御プログラム９３は、Ｊａｖａプログラム管理プログラム４１及びＪａｖａプロセス２１〜２３のプログラムに対応する。
【００５４】
ＣＰＵ９２は、制御プログラム９３に従って動作することで、アプリケーションプログラムを逐次解釈して実行するための仮想マシンを生成し、生成した仮想マシンによってアプリケーションプログラムを実行する。
【００５５】
ここで、ＣＰＵ９２は、制御プログラム９３に従った動作において、ＣＰＵ９２の負荷が所定の閾値未満である場合に、仮想マシンを事前生成しておき、アプリケーションプログラムの実行要求に応じて、事前生成した仮想マシンによって実行要求されたアプリケーションプログラムを実行する。
【００５６】
これによれば、Ｊａｖａプロセス起動時におけるＪａｖａ ＶＭの生成のオーバーヘッドがＪａｖａアプリケーション実行時に掛からないため、仮想マシンの生成を必要とするアプリケーションプログラムの実行を高速化することができる。
【００５７】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【００５８】
上記実施の形態では、Ｊａｖａアプリケーションプログラムを対象とした例について説明したが、本発明の適用対象は、これに限られない。アプリケーションプログラムを実行するときに、そのアプリケーションプログラムを逐次解釈して実行するための仮想マシンの起動が必要となるものであれば、他のプログラミング言語で作成されたアプリケーションプログラムを対象としてもよい。例えば、任意のスクリプト言語で作成されたアプリケーションプログラム（例えばテキスト処理のような簡易なプログラムも含む）について適用してもよい。Ｒｕｂｙであれば、先に起動するプロセスがｒｕｂｙ．ｅｘｅとなり、後からロードされる情報がＲｕｂｙのクラスとなる。
【００５９】
上述した記憶部３に格納され、ＣＰＵ２によって実行されるプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータ（Ｊａｖａプログラム実行装置１）に供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（Random Access Memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【符号の説明】
【００６０】
１  Ｊａｖａプログラム実行装置
２  ＣＰＵ
３  記憶部
４  入力部
５  通信部
１１  アプリケーションＪａｒファイル
１２  ライブラリＪａｒファイル群
１３  標準ライブラリＪａｒファイル群
２１、２２、２３  Ｊａｖａプロセス
３１  Ｊａｖａプロセス管理プロセス
４１  Ｊａｖａプロセス管理プログラム
４２  クラスリスト
４３  設定ファイル
【図１】
2014170353.tif 000003
【図２】
2014170353.tif 000004
【図３】
2014170353.tif 000005
【図４】
2014170353.tif 000006
【図５】
2014170353.tif 000007