(57)【要約】【課題】従来のＪｉＴコンパイラ付ＪＶＭが実装されたプロセッサを備える家電製品において、未コンパイルのメソッド実行時に当該メソッドをコンパイルすることにより生じていた実行速度の低下を解消するプログラム実行制御装置を提供する。【解決手段】本発明に係るプログラム実行制御装置は、プログラムの実行過程においてメソッドを呼び出す際に、当該メソッドが未コンパイルであるか否かを判定し、未コンパイルであれば、当該メソッドのバイトコードをインタプリタ処理で実行すると共に当該メソッドをコンパイルする要求を行い、コンパイル済であれば、当該メソッドのネイティブコードを実行する。コンパイル要求されたメソッドのコンパイルは、バイトコードのインタプリタ処理による実行又はネイティブコードの実行といった命令実行を行うタスクとは別のタスクで行う。【選択図】  図１
2004355277.tif 000002
【特許請求の範囲】
【請求項１】
バイトコード列を呼び出す呼出コードを含む１又は複数のバイトコード列からなるプログラムをプロセッサに実行させるプログラム実行制御装置であって、
前記プログラムの実行過程において呼出コードが実行対象とされる度に、呼び出されるべきバイトコード列が前記プロセッサ用のネイティブコードに変換済みか否かを判定する判定手段と、
前記判定手段により否定的な判定がなされた場合に、前記呼び出されるべきバイトコード列を逐次解釈して前記プロセッサに実行させ、且つ、当該バイトコード列を当該プロセッサ用のネイティブコードに変換する要求を行う第１手段と、
前記判定手段により肯定的な判定がなされた場合に、前記ネイティブコードをプロセッサに実行させる第２手段と、
前記第１手段によりなされるバイトコード列の逐次解釈実行又は前記第２手段によりなされる前記ネイティブコードの実行と並行して、前記要求に係るバイトコード列をネイティブコードに変換する変換処理をプロセッサに実行させる第３手段とを備える
ことを特徴とするプログラム実行制御装置。
【請求項２】
マルチタスクオペレーティングシステムの制御下で、前記第１手段によりなされる前記バイトコード列の実行又は前記第２手段によりなされる前記ネイティブコードの実行と、前記第３手段によりなされる前記変換処理の実行とは、それぞれ異なるタスクとして実行され、前記第１手段又は前記第２手段のタスク実行は、前記第３手段のタスク実行より優先度が高いことを特徴とする請求項１記載のプログラム実行制御装置。
【請求項３】
前記第１手段又は前記第２手段のタスク実行において待ち状態が発生した場合、前記第３手段のタスク実行に切り替える切替手段を備えることを特徴とする請求項２記載のプログラム実行制御装置。
【請求項４】
前記第１手段によりなされる前記要求に応じて、当該要求に係るバイトコード列をネイティブコードに変換するための情報であるコンパイル要求情報を記憶手段に登録し管理する要求管理手段を備え、
前記第３手段は、前記第１手段によりなされるバイトコード列の逐次解釈実行又は前記第２手段によりなされる前記ネイティブコードの実行と並行して、前記要求管理手段によって前記記憶手段に登録されているコンパイル要求情報に係るバイトコード列をネイティブコードに変換する変換処理をプロセッサに実行させる
ことを特徴とする請求項１〜３のうちいずれか１項記載のプログラム実行制御装置。
【請求項５】
前記要求管理手段は、前記要求を先に受けたものからの順番となるキューで各コンパイル要求情報を登録して管理し、
前記第３手段は、前記キューの先頭位置にあるコンパイル要求情報から順番に前記変換処理を前記プロセッサに実行させる
ことを特徴とする請求項４記載のプログラム実行制御装置。
【請求項６】
前記要求管理手段は、前記第１手段によりなされる前記要求に係るバイトコード列のコンパイル要求情報が前記記憶手段に既に登録されている場合に、２重登録を行わないことを特徴とする請求項５記載のプログラム実行制御装置。
【請求項７】
前記要求管理手段は、
繰り返し前記要求がなされるバイトコード列については、その要求回数を計数し、計数した要求回数を当該バイトコード列のコンパイル要求情報に含めて前記記憶手段に記録する回数記録手段と、
記録した各コンパイル要求情報の要求回数を比較して、要求回数が多いもの順となるように各コンパイル要求情報のキュー位置を入替える入替手段とを備える
ことを特徴とする請求項５記載のプログラム実行制御装置。
【請求項８】
各バイトコード列の優先度を示す優先度情報を取得する優先度情報取得手段を更に備え、
前記要求管理手段は、
前記第１手段によりなされる前記要求に応じて、取得された優先度情報を参照し、当該要求に係るバイトコード列の優先度を特定する特定手段と、
前記記憶手段に登録されている各コンパイル要求情報に係るバイトコード列の優先度と、前記特定手段により特定された優先度とを比較する比較手段と、
比較した結果に基づいて、優先度の高いもの順の配列となるように、前記要求に係るバイトコード列のコンパイル要求情報のキュー位置を決定する決定手段とを備える
ことを特徴とする請求項４記載のプログラム実行制御装置。
【請求項９】
前記要求管理手段は、優先度の異なる複数のキューを管理しており、
前記第３手段は、優先度が最も高いキューに登録されているコンパイル要求情報に係るバイトコード列から順番に前記変換処理を前記プロセッサに実行させる
ことを特徴とする請求項５記載のプログラム実行制御装置。
【請求項１０】
前記プログラムの実行前に、ネイティブコードに変換すべき複数のバイトコード列を示す特別要求情報を取得する特別要求情報取得手段を更に備え、
前記要求管理手段は、
取得された特別要求情報に示される各バイトコード列のコンパイル要求情報を、優先度が最も高いキューに一括登録し、管理する
ことを特徴とする請求項９記載のプログラム実行制御装置。
【請求項１１】
各バイトコード列の優先度を示す優先度情報を取得する優先度情報取得手段と、
前記変換処理を行うバイトコード列の優先度と前記命令実行タスクの優先度とを比較する比較手段と、
比較した結果、前記バイトコード列の優先度の方が命令実行タスクの優先度より高い場合に、前記コンパイルタスクの優先度を一時的に高くする優先度変更手段とを更に備える
ことを特徴とする請求項２記載のプログラム実行制御装置。
【請求項１２】
あるバイトコード列と関連する関連バイトコード列を対応付けている対応情報を取得する対応情報取得手段と、
前記対応情報を参照して、前記要求に係るバイトコード列と対応付けられている関連バイトコード列があるか否かを検索する検索手段とを更に備え、
前記検索手段による検索結果、関連バイトコード列が検出された場合、前記要求管理手段は、検出された関連バイトコード列のコンパイル要求情報を記憶手段に登録する
ことを特徴とする請求項４記載のプログラム実行制御装置。
【請求項１３】
前記判定手段により否定的な判定がなされたときに、前記バイトコード列が現在、前記変換処理の途中であるか否かを判定する第２判定手段と、
前記第２判定手段により肯定的な判定がなされた場合に、当該変換処理が終了するのを待って、変換されたネイティブコードを前記プロセッサに実行させる第４手段とを更に備える
ことを特徴とする請求項１記載のプログラム実行制御装置。
【請求項１４】
各バイトコード列の優先度を示す優先度情報を取得する優先度情報取得手段を更に備え、
前記第３手段は、前記記憶手段に複数登録されているコンパイル要求情報に係るバイトコード列のうち、取得された前記優先度情報に基づいて優先度の高いものから順番に前記変換処理を前記プロセッサに実行させる
ことを特徴とする請求項１〜３のうちいずれか１項記載のプログラム実行制御装置。
【請求項１５】
前記要求管理手段は、
閾値を取得する取得手段と、
繰り返し前記要求がなされるバイトコード列については、その要求回数を計数し、当該バイトコード列のコンパイル要求情報に含めて計数した要求回数を前記記憶手段に記録する回数記録手段とを備え、
前記第３手段は、前記要求回数が閾値を超えたものから順番に前記変換処理を前記プロセッサに実行させる
ことを特徴とする請求項１〜３のうちいずれか１項記載のプログラム実行制御装置。
【請求項１６】
バイトコード列を呼び出す呼出コードを含む１又は複数のバイトコード列からなるプログラムをプロセッサに実行させるプログラム実行制御装置におけるプログラム実行制御方法であって、
前記プログラムの実行過程において呼出コードが実行対象とされる度に、呼び出されるべきバイトコード列が前記プロセッサ用のネイティブコードに変換済みか否かを判定する判定ステップと、
前記判定ステップにおいて否定的な判定がなされた場合に、前記呼び出されるべきバイトコード列を逐次解釈して前記プロセッサに実行させ、且つ、当該バイトコード列を当該プロセッサ用のネイティブコードに変換する要求を行う第１ステップと、
前記判定ステップにおいて肯定的な判定がなされた場合に、前記ネイティブコードをプロセッサに実行させる第２ステップと、
前記第１ステップにおいてなされるバイトコード列の逐次解釈実行又は前記第２ステップにおいてなされる前記ネイティブコードの実行と並行して、前記要求に係るバイトコード列をネイティブコードに変換する変換処理をプロセッサに実行させる第３ステップとを含む
ことを特徴とするバイトコード実行制御方法。
【請求項１７】
バイトコード列を呼び出す呼出コードを含む１又は複数のバイトコード列からなるプログラムをプロセッサに実行させるプログラム実行制御装置にプログラム実行制御処理を行わせるための制御プログラムであって、
前記プログラム実行制御処理は、
前記プログラムの実行過程において呼出コードが実行対象とされる度に、呼び出されるべきバイトコード列が前記プロセッサ用のネイティブコードに変換済みか否かを判定する判定ステップと、
前記判定ステップにおいて否定的な判定がなされた場合に、前記呼び出されるべきバイトコード列を逐次解釈して前記プロセッサに実行させ、且つ、当該バイトコード列を当該プロセッサ用のネイティブコードに変換する要求を行う第１ステップと、
前記判定ステップにおいて肯定的な判定がなされた場合に、前記ネイティブコードをプロセッサに実行させる第２ステップと、
前記第１ステップにおいてなされるバイトコード列の逐次解釈実行又は前記第２ステップにおいてなされる前記ネイティブコードの実行と並行して、前記要求に係るバイトコード列をネイティブコードに変換する変換処理をプロセッサに実行させる第３ステップとを含む
ことを特徴とする制御プログラム。
【請求項１８】
バイトコード列を呼び出す呼出コードを含む１又は複数のバイトコード列からなるプログラムをプロセッサに実行させるプログラム実行制御装置にプログラム実行制御処理を行わせるための制御プログラムを記録した記録媒体であって、
前記プログラム実行制御処理は、
前記プログラムの実行過程において呼出コードが実行対象とされる度に、呼び出されるべきバイトコード列が前記プロセッサ用のネイティブコードに変換済みか否かを判定する判定ステップと、
前記判定ステップにおいて否定的な判定がなされた場合に、前記呼び出されるべきバイトコード列を逐次解釈して前記プロセッサに実行させ、且つ、当該バイトコード列を当該プロセッサ用のネイティブコードに変換する要求を行う第１ステップと、
前記判定ステップにおいて肯定的な判定がなされた場合に、前記ネイティブコードをプロセッサに実行させる第２ステップと、
前記第１ステップにおいてなされるバイトコード列の逐次解釈実行又は前記第２ステップにおいてなされる前記ネイティブコードの実行と並行して、前記要求に係るバイトコード列をネイティブコードに変換する変換処理をプロセッサに実行させる第３ステップとを含む
ことを特徴とする記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、バイトコード列からなるプログラムをプロセッサに実行させるプログラム実行制御装置に関する。
【０００２】
【従来の技術】
特定のプラットホームに依存することなくプログラムの実行を実現するソフトウェアである仮想マシンが、組み込み機器等のプロセッサを備えた様々な家電製品に実装されている。代表的な仮想マシンとして、Ｊａｖａ（登録商標）バイトコード（以下、単にバイトコードという。）を解釈して実行するＪＶＭ（Ｊａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）が挙げられる。ＪＶＭの仕様については、下記の非特許文献に詳しく説明されている。
【０００３】
上述のバイトコードは、一般的にはＪａｖａ言語で記述されたソースプログラムをｊａｖａｃ等のＪａｖａコンパイラで変換することにより生成され、．ｃｌａｓｓ拡張子のクラスファイルと呼ばれるファイルに格納される。
ＪＶＭは、クラスファイルを解釈して、当該クラスファイルに含まれている各種メソッドをプロセッサに実行させるための制御を行う。メソッドとは、バイトコード列から成る特定の処理を行う手続きのことをいい、他のプログラミング言語ではメンバ関数と呼ばれているものである。
【０００４】
基本的にＪＶＭは、バイトコードを逐次解釈してプロセッサに処理を実行させるインタプリタとして機能するものであるが、一般的に言われているようにその実行速度は、プロセッサが直接理解できるネイティブコードに変換されたプログラムの実行速度に比べると遅い。特に、同じメソッドが繰り返し呼び出されるようなプログラムの場合、呼び出される度に同じメソッドを解釈することになるので、無駄が多い。
【０００５】
そのため、プログラム実行過程においてメソッドを呼び出した時に、そのメソッドが未コンパイルであるか否かを判定し、未コンパイルであれば、当該メソッドをネイティブコードに変換するＪｉＴ（Ｊｕｓｔ  ｉｎ  Ｔｉｍｅ）コンパイラを備えるＪＶＭが考案されている。
これにより、同じメソッドが再び呼び出されるような場合、先のメソッド呼び出し時に変換したネイティブコードを実行すればよいので、実行速度を速めることができる。
【０００６】
また、ネイティブコードに変換すべきメソッドを特定するためのＪｉＴコンパイラの拡張技術として、Ｊａｖａ  ＨｏｔＳｐｏｔ（登録商標）と呼ばれる技術がある。これは、プログラムの実行過程において、呼び出したメソッドの呼出回数を集計し、呼出回数が閾値を超えた時に当該メソッドをネイティブコードに変換する技術である。
【０００７】
ＪｉＴコンパイラ付きＪＶＭのように、インタプリタ機能とコンパイラ機能を共に備えるプログラム実行装置が、下記の特許文献１、特許文献２に示されている。
【０００８】
【非特許文献】
Ｊａｖａ仮想マシン仕様  第２版（株式会社ピアソン・エデュケーション発行、ＩＳＢＮ４−８９４７１−３５６−Ｘ）
【０００９】
【特許文献１】
特開平４−１７８７３４号公報
【００１０】
【特許文献２】
特開昭６４−６２７０５号公報
【００１１】
【発明が解決しようとする課題】
ところで、上述したＪｉＴコンパイラ付きＪＶＭは、呼び出したメソッドが未コンパイルであれば直ちにコンパイルを開始し、コンパイルが終了するのを待って、生成されたネイティブコードをプロセッサに実行させるので、未コンパイルのメソッドを実行する時は、同じメソッドをインタプリタで実行するより実行速度が遅くなるという問題があった。また、Ｊａｖａ  ＨｏｔＳｐｏｔ技術も同様で、未コンパイルのメソッドを呼び出した時にコンパイルを行う場合は、実行速度が遅くなる。
【００１２】
特に、プログラムの実行開始当初にコンパイル処理が頻発するので実行速度の低下が顕著に現れる。
本発明は、上述した問題を解決するべく、未コンパイルのメソッド実行時に当該メソッドをコンパイルすることにより生じていた実行速度の低下を解消するプログラム実行制御装置、プログラム実行制御方法を提供することを目的とする。
【００１３】
【課題を解決するための手段】
上記目的を達成するために本発明に係るプログラム実行制御装置は、バイトコード列を呼び出す呼出コードを含む１又は複数のバイトコード列からなるプログラムをプロセッサに実行させるプログラム実行制御装置であって、前記プログラムの実行過程において、呼出コードが実行対象とされる度に、呼び出されるべきバイトコード列が前記プロセッサ用のネイティブコードに変換済みか否かを判定する判定手段と、前記判定手段により否定的な判定がなされた場合に、前記呼び出されるべきバイトコード列を逐次解釈して前記プロセッサに実行させ、且つ、当該バイトコード列を当該プロセッサ用のネイティブコードに変換する要求を行う第１手段と、前記判定手段により肯定的な判定がなされた場合に、前記ネイティブコードをプロセッサに実行させる第２手段と、前記第１手段によりなされるバイトコード列の逐次解釈実行又は前記第２手段によりなされる前記ネイティブコードの実行と並行して、前記要求に係るバイトコード列をネイティブコードに変換する変換処理をプロセッサに実行させる第３手段とを備えることを特徴とする。
【００１４】
また、本発明に係るプログラム実行制御方法は、バイトコード列を呼び出す呼出コードを含む１又は複数のバイトコード列からなるプログラムをプロセッサに実行させるプログラム実行制御装置におけるプログラム実行制御方法であって、前記プログラムの実行過程において、呼出コードが実行対象とされる度に、呼び出されるべきバイトコード列が前記プロセッサ用のネイティブコードに変換済みか否かを判定する判定ステップと、前記判定ステップにおいて否定的な判定がなされた場合に、前記呼び出されるべきバイトコード列を逐次解釈して前記プロセッサに実行させ、且つ、当該バイトコード列を当該プロセッサ用のネイティブコードに変換する要求を行う第１ステップと、前記判定ステップにおいて肯定的な判定がなされた場合に、前記ネイティブコードをプロセッサに実行させる第２ステップと、前記第１ステップにおいてなされるバイトコード列の逐次解釈実行又は前記第２ステップにおいてなされる前記ネイティブコードの実行と並行して、前記要求に係るバイトコード列をネイティブコードに変換する変換処理をプロセッサに実行させる第３ステップとを含むことを特徴とする。
【００１５】
ここで、バイトコード列は、例えば、メソッド、又はメンバ関数を指す。
これらの構成により、呼び出すバイトコード列が未コンパイルであれば、当該バイトコード列を逐次解釈して実行するので、従来のＪｉＴコンパイラ付ＪＶＭが未コンパイルのメソッド実行時に当該メソッドをコンパイルすることにより生じていた、プログラム実行開始当初に顕著に現れる実行速度の低下を解消することができ、また、並行して未コンパイルメソッドのコンパイルも行うので、全体的なプログラム実行速度が低下することもない。
【００１６】
また、本発明は、上記プログラム実行制御方法の各ステップを含むプログラム実行制御処理をプログラム実行制御装置に行わせる制御プログラムであってもよく、当該制御プログラムを記録した記録媒体であってもよい。
【００１７】
【発明の実施の形態】
本発明に係るプログラム実行制御装置は、メモリ又はハードディスク等の記憶媒体と、プロセッサを備えるコンピュータ装置であり、具体的には携帯電話機や、デジタル放送受信装置等である。
プログラム実行制御装置が有する記憶媒体にはマルチタスクＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）、ＪＶＭ、クラスファイル、そして、よく使われる汎用的なクラス又はメソッド等の部品群から成るクラスライブラリ等が格納されており、本プログラム実行制御装置の各種機能は、記憶媒体に格納されているマルチタスクＯＳ、及び当該マルチタスクＯＳの制御下において動作するＪＶＭに従ってプロセッサが動作することにより実現される。
【００１８】
本プログラム実行制御装置は、プログラムの実行過程においてメソッドを呼び出す場合、当該メソッドが未コンパイルであるか否かを判定し、未コンパイルであれば、当該メソッドのバイトコードをインタプリタ処理で実行すると共に当該メソッドをコンパイルする要求を登録し、コンパイル済であれば、当該メソッドのネイティブコードを実行する。そして、登録されたコンパイル要求に係るメソッドのコンパイルは、バイトコードのインタプリタ処理による実行又はネイティブコードの実行といった命令実行を行うタスクとは別のタスクで行う。
【００１９】
つまり、バイトコード又はネイティブコードの実行を行うタスクを命令実行タスク、コンパイル処理を行うタスクをコンパイルタスクと呼ぶとすると、命令実行タスクとコンパイルタスクを非同期で並行処理している点が、本発明の特徴である。
図１は、命令実行タスクとコンパイルタスクの実行状態推移を示す図である。
【００２０】
本プログラム実行制御装置は、プリエンプティブで優先度ベースのタスクスケジューリングによりシングルプロセッサ資源の割り当てを行っている。
各タスクの優先度は、命令実行タスクを高とし、コンパイルタスクを低としており、優先度高のタスクに割り当てられるプロセッサ時間配分と優先度低のタスクに割り当てられるプロセッサ時間配分の比率は、９：１としている。また、命令実行タスクの実行において待ち状態が発生した場合、直ちにコンパイルタスクの実行に切り替える制御を行う。
【００２１】
これにより、本発明のプログラム実行制御装置は、未コンパイルのメソッドを呼び出したタイミングではコンパイル処理を実行せず、コンパイルタスクの実行時にコンパイルするので、プログラムの実行開始当初に頻発するコンパイル処理に伴う立ち上がりの遅延を抑えることができ、実行速度の低下を抑えることができる。
【００２２】
以下、本発明に係るプログラム実行制御装置の各実施形態について説明する。
＜実施形態１＞
＜構成１＞
図２は、実施形態１のプログラム実行制御装置１の機能構成図である。
プログラム実行装置１は、同図に示すように、クラスファイル／クラスライブラリ記憶部２、命令実行処理部３、コンパイル要求管理部４、ネイティブコード記憶部５、コンパイル処理部６、コンパイル済メソッド情報テーブル７及びマルチタスク制御部１９を備える。なお、同図には本発明の特徴となる機能部のみを示しており、図示していない、マルチタスクＯＳ及びＪＶＭが実装されているコンピュータ装置が通常有する各機能については説明を省略する。
【００２３】
クラスファイル／クラスライブラリ記憶部２は記憶媒体であり、クラスファイル及びクラスライブラリが格納されている。
クラスファイルは、アンテナ２１又はネットワーク２０より取得することができる。
命令実行処理部３は、クラスファイル／クラスライブラリ記憶部２から読み出したバイトコードを逐次解釈してプロセッサに実行させ、メソッド呼び出し時に当該メソッドがコンパイル済みであれば、当該メソッドのネイティブコードをプロセッサに実行させる処理を行う。
【００２４】
ここで、命令実行処理部３に含まれる各機能について説明する。命令実行処理部３には、クラスロード部８、命令取出部９、命令解読部１０、命令実行部１１、メソッド種別判定部１２、及びネイティブコード取出部１３が含まれる。
クラスロード部８は、クラスファイル／クラスライブラリ記憶部２に格納されているクラスファイル又はクラスライブラリをメモリにロードする機能を有する。
【００２５】
命令取出部９は、クラスロード部８によってメモリにロードされたクラスファイル又はクラスライブラリを構成するバイトコードを命令単位で取り出す機能を有する。
命令解読部１０は、命令取出部９によって取り出された命令単位のバイトコードを解読してネイティブコードを選択する機能を有する。
【００２６】
命令実行部１１は、ネイティブコードをプロセッサに実行させる機能を有する。
命令実行部１１により実行される命令が、メソッドを呼び出す呼出コードである場合、メソッド種別判定部１２は、コンパイル済メソッド情報テーブル７を参照して、当該呼出コードによって呼び出されるべきメソッドがコンパイル済みか否かを判定する機能を有する。呼出コードは、Ｊａｓｍｉｎのアセンブラコード表記で言えば、ｉｎｖｏｋｅｖｉｒｔｕａｌ、ｉｎｖｏｋｅｓｐｅｃｉａｌ、ｉｎｖｏｋｓｔａｔｉｃ、ｉｎｖｏｋｅｉｎｔｅｒｆａｃｅといったインストラクションに相当する。
【００２７】
呼び出されるべきメソッドがコンパイル済みと判定された場合、ネイティブコード取出部１３は、該当のメソッドのネイティブコードをネイティブコード記憶部５から取り出して命令実行部１１に送る。命令実行部１１は、取り出されたネイティブコードをプロセッサに実行させる。
呼び出されるべきメソッドが未コンパイルと判定された場合、メソッド種別判定部１２は、当該メソッドをコンパイルする要求をコンパイル要求管理部４に通知する。そして、命令取出部９は該当メソッドのバイトコード列を命令単位で逐次取り出し、命令解読部１０は取り出されたバイトコード列を命令単位で逐次解釈し、命令実行部１１は逐次解釈された結果の命令単位のネイティブコードをプロセッサに実行させる。
【００２８】
コンパイル要求管理部４は、メソッド種別判定部１２からコンパイル要求の通知を受けて、受け付けたコンパイル要求に係るメソッドをコンパイルする順番について管理する機能を有する。コンパイル要求管理部４は、登録要求受付部１４、キュー制御部１５及びキュー記憶部１６を有する。
登録要求受付部１４は、メソッド種別判定部１２からコンパイル要求の通知を受け付ける機能を有する。この時に、メソッドに関する情報、例えば、メソッドを特定する識別情報や、メソッドを構成するバイトコード列の格納先アドレス等を取得する。
【００２９】
キュー記憶部１６はＲＡＭ等の記憶媒体である。
キュー制御部１５は、キュー記憶部１６に複数のコンパイル要求情報を記憶させ、これらのコンパイル要求情報をキューで管理する。詳しくは、登録要求受付部１４において受け付けたコンパイル要求をコンパイル要求情報としてキュー記憶部１６に登録し、コンパイル処理部６からコンパイル要求情報の取得要求を受け付けると、キューの先頭位置にあるコンパイル要求情報が示すメソッドをコンパイル処理部６に通知し、コンパイル処理部６においてメソッドのコンパイルが終了するとコンパイル処理部６から通知を受けて、当該メソッドのコンパイル要求情報をキュー記憶部１６から削除する。
【００３０】
キュー制御部１５は、コンパイル処理部６からコンパイル要求情報の取得要求を受けて、キューの先頭位置にあるコンパイル要求情報が示すメソッドをコンパイル処理部６に通知する際、コンパイル要求情報に含まれるコンパイル状態を示すビットフラグを立てて、コンパイル中であることを記録する。
キュー制御部１５は、コンパイル要求情報の登録と、登録されているコンパイル要求情報の削除とを排他制御で行う。即ち、同時にコンパイル要求情報の登録と削除を行わないようにしている。また、登録しようとしているコンパイル要求情報がキュー記憶部１６に既に登録されていれば、登録は行わない。
【００３１】
コンパイル処理部６は、コンパイル要求取得部１７及びメソッドコンパイル部１８から構成されており、コンパイル要求取得部１７は、キュー制御部１５にコンパイルすべきメソッドの情報を要求して取得する機能を有し、メソッドコンパイル部１８は、当該メソッドのバイトコード列をネイティブコードに変換する機能を有する。
【００３２】
メソッドコンパイル部１８において生成されたネイティブコードは、ネイティブコード記憶部５に格納され、メソッド名とネイティブコードの格納先アドレスとを示すコンパイル済メソッド情報が、コンパイル済メソッド情報テーブル７に追加される。また、コンパイル要求取得部１７は、メソッドのコンパイルが終了すると、当該メソッドのコンパイルが終了した旨をキュー制御部１５に通知する。
【００３３】
マルチタスク制御部１９は、マルチタスクＯＳの機能であり、優先度ベースのタスクスケジューリングに基づいて、命令実行処理部３により実行される命令実行タスクとコンパイル処理部６により実行されるコンパイルタスクそれぞれにプロセッサ資源の割り当てを行う。
＜データ１＞
ここで各種データについて説明する。
【００３４】
まず、プログラム実行制御装置１により実行されるプログラムについて説明する。
図３は、Ｊａｖａ言語で記述されたソースプログラムの一例を示す図である。なお、本発明の説明上必要がないためｍ１メソッド、ｍ２メソッドの内容については記載を省略している。同図に示すソースプログラムを変換して生成されたバイトコードから成るクラスファイルＡが、プログラム実行制御装置１のクラスファイル／クラスライブラリ記憶部２に記憶される。
【００３５】
クラスファイルをプログラム実行制御装置１が実行する場合、その実行過程においてクラスファイル内の呼出コードによってメソッドが呼び出される。例えば、図３のに示すプログラムの場合だと、まずｉｎｉｔメソッドが１回呼び出され、続いて、ｍ１メソッドが１０回呼び出され、その後、ｍ２メソッドが５回呼び出される。
【００３６】
次に、コンパイル要求情報について説明する。
図４は、キュー記憶部１６に登録されているコンパイル要求情報の具体例を示す図である。
コンパイル要求情報は、次のコンパイル要求情報の位置を示すポインタと、メソッド情報と、コンパイル状態を示すビットフラグから成り、各コンパイル要求情報はポインタによって繋がっており、キューを構成している。
【００３７】
メソッド情報には、コンパイルするメソッドを識別する情報や、メソッドを構成するバイトコード列の格納アドレス等が含まれる。
コンパイル状態を示すビットフラグは、フラグが立っていればコンパイル中、立っていなければ未コンパイルを表す。同図には、わかりやすいように「コンパイル中」、「未コンパイル」と表現している。
【００３８】
同図では、ｉｎｉｔメソッドのコンパイル要求情報がキューの先頭となっており、続いて、ｍ１メソッドのコンパイル要求情報、ｍ２メソッドのコンパイル要求情報の順番で配列されている。よって、この場合、コンパイル処理部６からコンパイルすべきメソッドの情報を要求する通知がキュー制御部１５に対してなされると、ｉｎｉｔメソッドの情報がコンパイル処理部６に対して通知される。コンパイル処理部６において、ｉｎｉｔメソッドのコンパイルが行われ、コンパイルが終了すると、ｉｎｉｔメソッドのコンパイルが終了した旨の通知をキュー制御部１５に対して行う。
【００３９】
キュー制御部１５は、ｉｎｉｔメソッドのコンパイルが終了した旨の通知を受けると、ｉｎｉｔメソッドのコンパイル要求情報をキュー記憶部１６から削除し、キューの先頭のコンパイル要求情報を示すポインタは、ｍ１メソッドのコンパイル要求情報を示すように更新される。
次にコンパイル済メソッド情報について説明する。
【００４０】
図５は、コンパイル済メソッド情報テーブル７の一例を示す図である。コンパイル済メソッド情報は、コンパイル済みのメソッドを特定する情報（例えば、メソッド名）と、ネイティブコードの格納先アドレスから成る。
＜動作１＞
ここでプログラム実行制御装置１の動作について説明する。
【００４１】
図６は、命令実行処理部３により実行される命令実行タスクのフローを示す図である。
まず、命令実行部１１は、取り出された命令（ネイティブコード）をプロセッサに実行させる（ステップＳ１）。実行する命令がプログラム終了命令であれば（ステップＳ２：ＹＥＳ）、動作を終了する。実行する命令がプログラム終了命令でなければ（ステップＳ２：ＮＯ）ステップＳ３に進む。
【００４２】
ステップＳ３において、実行する命令が呼出コードであれば（ステップＳ３：ＹＥＳ）、ステップＳ４に進む。ステップＳ３において、実行する命令が呼出コードでなければ（ステップＳ３：ＮＯ）、ステップＳ１に戻る。
ステップＳ４では、メソッド種別判定部１２が、コンパイル済メソッド情報テーブルを参照して呼出対象のメソッドがコンパイル済みか否かを判定する。呼出対象のメソッドがコンパイル済であれば（ステップＳ４：ＹＥＳ）、ステップＳ５に進む。呼出対象のメソッドがコンパイル済でなければ（ステップＳ４：ＮＯ）、ステップＳ６に進む。
【００４３】
ステップＳ５では、ネイティブコード取出部１３が該当メソッドのネイティブコードをネイティブコード記憶部５から取り出し、取り出したネイティブコードを命令実行部１１に送る。その後、ステップＳ１に戻る。
ステップＳ６では、メソッド種別判定部１２は、コンパイル要求をコンパイル要求管理部４に通知する。続いて、ステップＳ７では、命令取出部９が、該当メソッドのバイトコードを取り出し、命令解読部１０が、取り出したバイトコードの解読を行う。その後、ステップＳ１に戻る。
【００４４】
一方、コンパイル処理部６により実行されるコンパイルタスクは、マルチタスク制御部１９によりプロセッサ資源が割り当てられると、キュー制御部１５に要求し取得したメソッドのバイトコード列のコンパイルを行う。
続いて動作の具体的な例を図２、図４、図５を用いて説明する。図２に示す命令実行部１１が、メソッドｍ２を呼び出す呼出コードをプロセッサに実行させる場合、メソッド種別判定部１２は、当該メソッドｍ２がコンパイル済か否かを図５に示すコンパイル済メソッド情報テーブル７を参照して判定する。
【００４５】
コンパイル済メソッド情報テーブル７には、メソッドｍ２を特定する情報がコンパイル済みメソッドとしてネイティブコードの格納先アドレスと共に記載されているので、メソッド種別判定部１２は、当該メソッドｍ２がコンパイル済であると判定し、ネイティブコード取出部１３に該当のネイティブコードを取り出させる。取り出されたネイティブコードは命令実行部１１に送られて、実行される。
【００４６】
一方、図示されていないメソッドｍ３を呼び出す呼出コードを命令実行部１１がプロセッサに実行させる場合、メソッド種別判定部１２は、図５に示すコンパイル済メソッド情報テーブル７にメソッドｍ３が記載されていないので未コンパイルと判定し、当該メソッドのコンパイル要求をコンパイル要求管理部４に通知する。そして、当該メソッドのバイトコードを命令単位で逐次取り出して解釈実行する、いわゆるインタプリタ処理を行う。
【００４７】
コンパイル要求管理部４は、図４に示すコンパイル要求情報のキューの最後列、すなわち、メソッドｍ２のコンパイル要求情報の後に、メソッドｍ３のコンパイル要求情報を登録する。
＜実施形態２＞
実施形態２のプログラム実行制御装置は、登録されているコンパイル要求情報のメソッドと同じメソッドについてコンパイル要求がなされる場合、コンパイル要求を受けた回数を要求回数としてコンパイル要求情報毎にカウントして記録し、登録された順番で配列されている各コンパイル要求情報の配列順を、要求回数が多いもの順に入替える順番入替処理を行う。
【００４８】
これにより、頻繁に呼び出されるメソッドを先にコンパイルさせることができ、プログラム実行速度の向上に繋がる。
以下、実施形態２のプログラム実行制御装置について、実施形態１で説明したプログラム実行制御装置１とは異なる部分のみを、構成、データ、動作の各項に分けて説明する。
【００４９】
＜構成２＞
図７は、実施形態２のプログラム実行制御装置１Ａの機能構成図である。
実施形態１のプログラム実行制御装置１と異なる点は、キュー制御部１５Ａ内に加算部２２を備えている点である。
加算部２２は、既に登録されているコンパイル要求情報のメソッドと同一のメソッドのコンパイル要求を受けた場合に、当該コンパイル要求情報のメソッドが未コンパイル状態であれば、当該コンパイル要求情報に含めて記録されている要求回数に１加算した値を算出する機能を有する。キュー制御部１５Ａは、算出した値を要求回数として更新記録する。
【００５０】
＜データ２＞
次に、実施形態２のキュー記憶部１６Ａに登録されている具体的なコンパイル要求情報について説明する。
図８は、キュー記憶部１６Ａに登録されているコンパイル要求情報の具体例を示す図である。実施形態１で説明したコンパイル要求情報と異なる点は、各コンパイル要求情報が２つのポインタを有し、配列位置の前後関係を２つのポインタで示すようにしている点と、要求回数を記録する領域を設けている点である。
【００５１】
同図は、順番入替処理によって要求回数が多いもの順に入替えが行われた後の配列状態を示している。
＜動作２＞
次に、キューの順番入替処理の動作について説明する。
図９は、キュー制御部１５Ａが行うコンパイル要求情報の順番入替処理のフローを示す図である。
【００５２】
まず、登録要求受付部１４でコンパイル要求が受け付けられると、キュー制御部１５Ａは、キューの先頭のコンパイル要求情報を参照する（ステップＳ１１）。
続いて、受け付けられたコンパイル要求に係るメソッドと、参照したコンパイル要求情報に係るメソッドとが同一であれば（ステップＳ１２：ＹＥＳ）、ステップＳ１３に進む。同一でなければ（ステップＳ１２：ＮＯ）、ステップＳ１７に進む。
【００５３】
ステップＳ１７において、全てのコンパイル要求情報を参照し終わっていれば（ステップＳ１７：ＹＥＳ）、ステップＳ１９に進み、まだ、全てのコンパイル要求情報を参照していなければ（ステップＳ１７：ＮＯ）、ステップＳ１８に進む。
ステップＳ１８において、参照したコンパイル要求情報のポインタが示す、１つ後の配列位置のコンパイル要求情報を参照し、ステップＳ１２に進む。
【００５４】
ステップＳ１９において、受け付けたコンパイル要求に係るメソッドのコンパイル要求情報を、キューの最後列に登録する。
ステップＳ１３において、参照したコンパイル要求情報のメソッドが未コンパイルであるかコンパイル中かをビットフラグで確認する。コンパイル中であれば（ステップＳ１３：ＮＯ）、入替処理を終了し、未コンパイルであれば（ステップＳ１３：ＹＥＳ）、ステップＳ１４に進む。
【００５５】
ステップＳ１４において、参照したコンパイル要求情報の要求回数に１加算した値を要求回数として更新する。続いて、ステップＳ１５において、１つ前の配列位置にあるコンパイル要求情報の要求回数と、更新した要求回数の大きさを比較する。
その結果、１つ前の配列位置にあるコンパイル要求情報の要求回数より、更新した要求回数の方が大きな値であれば（ステップＳ１５：ＹＥＳ）、ステップＳ１６に進む。そうでなければ（ステップＳ１５：ＮＯ）、順番入替処理を終了する。
【００５６】
ステップＳ１６において、１つ前の配列位置にあるコンパイル要求情報と、要求回数を更新したコンパイル要求情報の配列順番を入替える。すなわち、入替える２つのコンパイル要求情報及びその前後に位置する各コンパイル要求情報のポインタ情報の変更を行う。その後、順番入替処理を終了する。
＜実施形態３＞
実施形態３のプログラム実行制御装置は、各メソッドの優先度が記載されている優先度情報テーブルをクラスファイルから取得し、取得した優先度情報テーブルを参照して、コンパイルするメソッドの優先度を特定し、優先度に基づいてコンパイル要求情報の配列位置を決定する処理を行う。
【００５７】
これにより優先度の高いメソッドからコンパイルされるので、プログラム実行速度の向上に繋がる。
以下、実施形態３のプログラム実行制御装置について、実施形態１で説明したプログラム実行制御装置１とは異なる部分のみを、構成、データ、動作の各項に分けて説明する。
【００５８】
＜構成３＞
図１０は、実施形態３のプログラム実行制御装置１Ｂの機能構成図である。
実施形態１のプログラム実行制御装置１と異なる点は、優先度情報テーブル２３を取得する点と、キュー制御部１５Ｂが、メソッドの優先度に基づいて登録するコンパイル要求情報の、キューにおける登録位置を決定している点である。
【００５９】
＜データ３＞
次に各種データについて説明する。
図１１は、クラスファイルから取得した優先度情報テーブル２３の具体的な内容を示す図である。優先度情報テーブル２３では、メソッドと優先度とが対応付けられている。ここでいう優先度とは、コンパイル処理を優先的に行うべき度合いを示す指標であり、値が大きい方が優先度の高いものとしている。よって、優先度の高いものから並べると、メソッドｍ３、メソッドｉｎｉｔ、メソッドｍ２、メソッドｍ１の順番になる。なお、本実施形態では、各メソッドの優先度はそれぞれ異なる値となっている。
【００６０】
図１２は、キュー記憶部１６Ｂに登録されているコンパイル要求情報の具体例を示す図である。同図に示すように、優先度が高いコンパイル要求情報が先になるように配列されている。
＜動作３＞
次にキュー制御部１５Ｂによるコンパイル要求情報の登録位置決定処理について説明する。
【００６１】
図１３は、キュー制御部１５Ｂが行うコンパイル要求情報の登録位置決定処理のフローを示す図である。
まず、登録要求受付部１４Ｂにおいてコンパイル要求が受け付けられると、キュー制御部１５Ｂは、キューの先頭のコンパイル要求情報を参照する（ステップＳ２１）。
【００６２】
続いて、受け付けられたコンパイル要求に係るメソッドと、参照したコンパイル要求情報に係るメソッドとが同一であれば（ステップＳ２２：ＹＥＳ）、登録位置決定処理を終了する。同一でなければ（ステップＳ２２：ＮＯ）、ステップＳ２３に進む。
ステップＳ２３において、登録するメソッドの優先度と、参照したコンパイル要求情報に記載されている優先度とを比較し、登録するメソッドの優先度の方が高ければ（ステップＳ２３：ＹＥＳ）、ステップＳ２４に進む。参照したコンパイル要求情報に記載されている優先度の方が高ければ、（ステップＳ２３：ＮＯ）、ステップＳ２５に進む。
【００６３】
ステップＳ２５において、全てのコンパイル要求情報を参照し終わっていれば（ステップＳ２５：ＹＥＳ）、ステップＳ２６に進み、まだ、全てのコンパイル要求情報を参照していなければ（ステップＳ２５：ＮＯ）、ステップＳ２７に進む。
ステップＳ２７において、参照したコンパイル要求情報のポインタが示す、１つ後の配列位置のコンパイル要求情報を参照し、ステップＳ２２に進む。
【００６４】
ステップＳ２６において、受け付けたコンパイル要求に係るメソッドのコンパイル要求情報を、キューの最後列に登録して、登録位置決定処理を終了する。
ステップＳ２４において、登録するメソッドのコンパイル要求情報を、参照したコンパイル要求情報の１つ前の配列位置に登録して、登録位置決定処理を終了する。
【００６５】
例えば、図１２に示すコンパイル要求情報のキューに、優先度２のメソッドｍ３のコンパイル要求情報を登録する場合、登録位置決定処理により、メソッドｍ２のコンパイル要求情報とメソッドｍ１のコンパイル要求情報との間にメソッドｍ３のコンパイル要求情報が登録されることになるが、具体的には、メソッドｍ２のコンパイル要求情報及びメソッドｍ１のコンパイル要求情報のポインタそれぞれが、メソッドｍ３のコンパイル要求情報の登録位置を示すように更新することで、メソッドｍ３のコンパイル要求情報の登録位置が決定される。
＜実施形態４＞
実施形態４のプログラム実行制御装置は、優先度が高、中、低と付けられている３つのキューを設けて、優先度の高いキューに登録されているコンパイル要求情報のメソッドから順番にコンパイルする。すなわち、優先度高のキューの先頭位置に登録されているコンパイル要求情報のメソッドから順番にコンパイルをし、優先度高のキューに登録されているコンパイル要求情報のメソッドが全てコンパイルされると、次に優先度中のキューの先頭に登録されているコンパイル要求情報のコンパイルを行い、優先度中のキューに登録されているコンパイル要求情報のメソッドが全てコンパイルされると、次に優先度低のキューの先頭に登録されているコンパイル要求情報のコンパイルを行う。
【００６６】
優先度高のキューには、プログラム実行制御装置のＯＳ起動と共にキュー記憶部に一括登録されるコンパイル要求情報が登録され、優先度中のキューには、優先度情報テーブルに優先度が示されているメソッドのコンパイル要求情報が登録され、優先度低のキューには、優先度高のキュー及び優先度中のキューに登録されるメソッド以外のメソッドが登録される。
【００６７】
以下、実施形態４のプログラム実行制御装置について、実施形態１から実施形態３までで説明したプログラム実行制御装置とは異なる部分のみを、構成、データの各項に分けて説明する。
＜構成４＞
図１４は、実施形態４のプログラム実行制御装置１Ｃの機能構成図である。
【００６８】
実施形態１のプログラム実行制御装置１と異なる点は、キュー制御部１５Ｃが優先度の異なる３つのキューを制御している点と、一括登録部２５を新たに備えて、優先的にコンパイルすべきメソッドのメソッド名や格納先等を示すメソッド情報のテーブルである一括登録情報２４に基づいて、ＯＳ起動と共にキュー記憶部１６Ｃの優先度高のキューに、これらのメソッドのコンパイル要求情報を登録する点と、実施形態２で説明した順番入替処理や、実施形態３で説明した登録位置決定処理を行ってコンパイル要求情報を登録している点である。
【００６９】
＜データ４＞
次に各種データについて説明する。
図１５は、一括登録情報２４の具体的な内容を示す図である。一括登録情報２４の各メソッドは、ユーザによりコンパイルすべきメソッドとして指定されたメソッドや、プログラム実行シミュレーションの結果、頻繁に呼び出されることがわかっているメソッド等を想定している。
【００７０】
図１６は、キュー記憶部１６Ｃに登録されているコンパイル要求情報の具体例を示す図である。同図に示すように、優先度高の第一キュー、優先度中の第二キュー、優先度低の第三キューが設けられており、第一キューには、図１５で示した一括登録情報２４に記載されていたメソッドｍ４、メソッドｍ５、メソッドｍ６それぞれのコンパイル要求情報が登録されている。
【００７１】
また、第二キューには、優先度が付けられている各種メソッドが優先度順で登録されている。そして、第三キューには、第一キュー及び第二キューに登録されることのないメソッドのコンパイル要求情報が順番入替処理により動的に順番を変えながら配列されている。
＜実施形態５＞
実施形態５のプログラム実行制御装置は、関連メソッドテーブルをクラスファイルから取得し、コンパイル処理部６においてコンパイルを行うメソッドと関連付けされているメソッドがないかどうかを関連メソッドテーブルから検索し、関連付けされているメソッドが検出されれば、その検出されたメソッドの登録要求を行う。
【００７２】
以下、実施形態５のプログラム実行制御装置について、実施形態１で説明したプログラム実行制御装置１とは異なる部分のみを、構成、データ、動作の各項に分けて説明する。
＜構成５＞
図１７は、実施形態５のプログラム実行制御装置１Ｄの機能構成図である。
【００７３】
実施形態１のプログラム実行制御装置１と異なる点は、関連メソッド検索処理部２６を備えている点である。
関連メソッド検索処理部２６は、関連メソッドテーブル２８を取得し、コンパイル要求取得部１７から通知されたメソッドと関連付けされているメソッドがないかどうかを、取得した関連メソッドテーブル２８から検索する検索部２７とを有する。関連するメソッドが検出されれば、検出されたメソッドをコンパイル要求されたものとして、登録要求受付部１４Ｄに通知する。
【００７４】
＜データ５＞
図１８は、関連メソッドテーブル２８の具体例を示す図である。
メソッドｉｎｉｔと関連付けられているメソッドは、メソッドｍ１、メソッドｍ２であり、メソッドｍ３と関連付けられているメソッドは、メソッドｍ４、メソッドｍ５である。
【００７５】
＜動作５＞
次に、関連メソッドの検索から登録までの処理である関連メソッド検索処理の動作について説明する。
図１９は、関連メソッド検索処理部２６においてなされる関連メソッド検索処理のフローを示す図である。
【００７６】
まず、コンパイル要求取得部１７からメソッドが通知されると、検索部２７は、関連メソッドテーブル２８を参照して、関連メソッドがあるかないかを検索する（ステップＳ３１）。
関連メソッドが検出されれば（ステップＳ３２：ＹＥＳ）、ステップＳ３３に進む。検出されなければ（ステップＳ３２：ＮＯ）、関連メソッド検索処理を終了する。
【００７７】
ステップＳ３３において、検出された関連メソッドについて、コンパイル要求がなされたものとして、登録要求受付部１４Ｄに通知し、関連メソッド検索処理を終了する。
ここで、具体的な動作を図１８を用いて説明する。関連メソッド検索処理部２６は、コンパイル要求取得部１７からメソッドｉｎｉｔが通知されると、関連メソッドテーブル２８を参照して、関連メソッドがあるかないかを検索する。その結果、図１８に示すように、メソッドｉｎｉｔには、メソッドｍ１、メソッドｍ２が関連付けられているため、メソッドｍ１、メソッドｍ２を登録要求受付部１４Ｄに通知する。
＜実施形態６＞
実施形態６のプログラム実行制御装置は、実施形態３で説明したように、各メソッドの優先度に基づいて登録位置決定処理を行うが、更に、コンパイルするメソッドの優先度と命令実行タスクの優先度との比較を行い、その結果、コンパイルするメソッドの優先度の方が命令実行タスクの優先度より高ければ、当該メソッドの優先度をコンパイルタスクの優先度とする優先度継承処理を行う。
【００７８】
以下、実施形態６のプログラム実行制御装置について、実施形態３で説明したプログラム実行制御装置１Ｂとは異なる部分のみを、構成、動作の各項に分けて説明する。
＜構成６＞
図２０は、実施形態６のプログラム実行制御装置１Ｅの機能構成図である。
【００７９】
実施形態３のプログラム実行制御装置１Ｂと異なる点は、優先度継承部２９を備えている点である。
優先度継承部２９は、機能的には優先度比較部３０とタスク優先度変更部３１を含む。
優先度比較部３０は、コンパイル要求取得部１７からコンパイル開始するメソッドの優先度の通知を受けて、当該メソッドの優先度と命令実行タスクの優先度とを比較する。
【００８０】
比較した結果、コンパイル開始するメソッドの優先度の方が高い場合、タスク優先度変更部３１は、マルチタスク制御部１９Ｅに当該メソッドの優先度を、コンパイルタスクの優先度とする指示を行う。
マルチタスク制御部１９Ｅは、タスク優先度変更部３１からの指示に基づいて、コンパイルタスクの優先度を変更する。
【００８１】
＜動作６＞
次に優先度継承処理について説明する。
図２１は、優先度継承処理の動作を説明するためのフロー図である。
まず、優先度継承部２９は、コンパイル要求取得部１７からコンパイル開始するメソッドの優先度の通知を受けて、優先度比較部３０において当該メソッドの優先度と命令実行タスクの優先度とを比較する（ステップＳ４１）。
【００８２】
その結果、メソッドの優先度の方が命令実行タスクの優先度より高ければ（ステップＳ４２：ＹＥＳ）、タスク優先度変更部３１は、コンパイルタスクの優先度をメソッドの優先度に変更する指示をマルチタスク制御部１９Ｅに通知する（ステップＳ４３）。命令実行タスクの優先度の方がメソッドの優先度より高ければ（ステップＳ４２：ＮＯ）、ステップＳ４１に戻る。
【００８３】
例えば、命令実行タスクの優先度のデフォルト値が６で、コンパイルタスクの優先度のデフォルト値が２であり、コンパイルするメソッドの優先度が７である場合、優先度比較部３０においてコンパイルするメソッドの優先度と命令実行タスクの優先度を比較すると、７＞６より、コンパイルするメソッドの優先度の方が高いので、タスク優先度変更部３１は、コンパイルタスクの優先度をメソッドの優先度に変更する指示をマルチタスク制御部１９Ｅに対して行う。マルチタスク制御部１９Ｅは、指示に基づいてコンパイルタスクの優先度を７とし、これは、命令実行タスクのデフォルト優先度６より高い値なので、コンパイルタスクに対してプロセッサ資源を優先的に割り当てる。
＜補足＞
以上、本発明に係るプログラム実行制御装置について、実施形態１〜６に基づいて説明したが、本発明はこれらの実施形態に限られないことは勿論である。即ち、
（１）実施形態１の説明では、メソッド種別判定部１２において、呼び出すメソッドがコンパイル済でなければ、直ちに当該メソッドのインタプリタ処理を行っていたが、呼び出すメソッドがコンパイル中であれば、そのコンパイル終了を待って、コンパイルされたメソッドのネイティブコードを実行するようにしてもよい。その場合の動作について図を用いて説明する。
【００８４】
図２２は、呼び出すメソッドがコンパイル中であれば待つ場合の命令実行タスクのフローを示す図である。
まず、命令実行部１１は、取り出された命令をプロセッサに実行させる（ステップＳ５１）。実行する命令がプログラム終了命令であれば（ステップＳ５２：ＹＥＳ）、動作を終了する。実行する命令がプログラム終了命令でなければ（ステップＳ５２：ＮＯ）ステップＳ５３に進む。
【００８５】
ステップＳ５３において、実行する命令が呼出コードであれば（ステップＳ５３：ＹＥＳ）、ステップＳ５４に進む。ステップＳ５３において、実行する命令が呼出コードでなければ（ステップＳ５３：ＮＯ）、ステップＳ５１に戻る。
ステップＳ５４では、メソッド種別判定部１２が、コンパイル済メソッド情報テーブルを参照して呼出対象のメソッドがコンパイル済みか否かを判定する。呼出対象のメソッドがコンパイル済であれば（ステップＳ５４：ＹＥＳ）、ステップＳ５５に進む。呼出対象のメソッドがコンパイル済でなければ（ステップＳ５４：ＮＯ）、ステップＳ５６に進む。
【００８６】
ステップＳ５５では、ネイティブコード取出部１３が該当メソッドのネイティブコードをネイティブコード記憶部５から取り出し、取り出したネイティブコードを命令実行部１１に送る。その後、ステップＳ５１に戻る。
ステップＳ５６では、メソッド種別判定部１２は、キュー制御部１５にキューを参照させて、呼出対象のメソッドが現在コンパイル中か否かを確認させる。その結果、呼出対象のメソッドが現在コンパイル中であれば（ステップＳ５６：ＹＥＳ）、コンパイルが終了するまで待ち（ステップＳ５７）、そうでなければ（ステップＳ５６：ＮＯ）、コンパイル要求をコンパイル要求管理部４に通知する。続いて、ステップＳ５９では、命令取出部９が、該当メソッドのバイトコードを取り出し、命令解読部１０が、取り出したバイトコードの解読を行う。その後、ステップＳ５１に戻る。
（２）図１では、１つの命令実行タスクと１つのコンパイルタスクの実行状態推移を示したが、命令実行タスク及びコンパイルタスクは複数であってもよく、この場合、各タスクにそれぞれ異なる優先度が付けられていてもよい。
【００８７】
上記各実施形態では、コンパイルタスクの優先度より命令実行タスクの優先度を高くしていたが、複数のコンパイルタスクを設ける場合、特定のコンパイルタスクを例外として、当該コンパイルタスクの優先度を命令実行タスクの優先度より高く設定していてもよい。
例えば、実施形態４では、優先度が高、中、小と付けられている３つのキューを設けていたが、それぞれ優先度が異なるコンパイルタスクのキューであるとして、優先度高の第一キューに登録されているコンパイル要求情報のメソッドをコンパイルするコンパイルタスクの優先度を、命令実行タスクの優先度より高く設定しておくことが考えられる。
（３）上述した各実施形態のプログラム実行制御装置は、シングルプロセッサ資源の各タスクへの割り当てをスケジューリングして、各タスクを擬似並行処理しているものとして説明したが、本発明のプログラム実行制御装置は、マルチプロセッサ、或いは複数の独立したプロセッサを使用して、各タスクを同時に並行して実行するものであってもよい。
（４）本発明は、ＪｉＴコンパイラ付ＪＶＭが実装されたプログラム実行制御装置の適用のみに限られず、コンパイラ機能を備えた、中間コードを解釈実行する仮想マシンが実装されているプログラム実行制御装置全般に適用可能である。
（５）各実施形態では、メソッドをコンパイルする順番をキューで管理していたが、本発明に係るプログラム実行制御装置は、必ずしもキューでコンパイルする順番を管理する必要はない。例えば、プログラム毎、或いはクラスファイル毎に予め設定されている閾値を取得して、コンパイル要求回数が閾値を超えたものからコンパイルするようにしてもよい。また、プログラム実行開始から所定時間毎に、その時に登録されている全てのコンパイル要求情報のうち、最も優先度が高いメソッドをコンパイルするようにしてもよいし、コンパイルタスクにプロセッサ資源が割り当てられる都度、その時に登録されているコンパイル要求情報のうち、最も優先度の高いメソッドをコンパイルするようにしてもよい。
（６）実施形態４では、３つの優先度の異なるキューを用いていたが、３つに限られず、２つでも、４つでもよい。
（７）本発明に係るプログラム実行制御装置は、一般的なＪＶＭが備えているガーベジコレクション機能を有しており、ガーベジコレクションは、ガーベジコレクションタスクとして命令実行タスク及びコンパイルタスクと並行して実行されることを想定する。コンパイルしたネイティブコードのうち、再び取り出されることのないもの、使用頻度が小さいものについては、ガーベジコレクションによって破棄されるようにしてもよい。
（８）各実施形態に示したプログラム実行制御装置による処理手順（図６、図９、図１３、図１９、図２１、図２２に示した手順等）を、プログラム実行機能を備える機器等に実行させるための制御プログラムを、記録媒体に記録し又は各種通信路等を介して、流通させ頒布することもできる。このような記録媒体には、ＩＣカード、光ディスク、フレキシブルディスク、ＲＯＭ等がある。流通、頒布された制御プログラムは、ＲＯＭを備える機器等にインストールされることにより利用に供され、その機器等はその制御プログラムの実行により各実施形態で示したようなプログラム実行制御装置の機能を実現する。
【００８８】
【発明の効果】
以上の説明から明らかなように、本発明に係るプログラム実行制御装置は、バイトコード列を呼び出す呼出コードを含む１又は複数のバイトコード列からなるプログラムをプロセッサに実行させるプログラム実行制御装置であって、前記プログラムの実行過程において呼出コードが実行対象とされる度に、呼び出されるべきバイトコード列が前記プロセッサ用のネイティブコードに変換済みか否かを判定する判定手段と、前記判定手段により否定的な判定がなされた場合に、前記呼び出されるべきバイトコード列を逐次解釈して前記プロセッサに実行させ、且つ、当該バイトコード列を当該プロセッサ用のネイティブコードに変換する要求を行う第１手段と、前記判定手段により肯定的な判定がなされた場合に、前記ネイティブコードをプロセッサに実行させる第２手段と、前記第１手段によりなされるバイトコード列の逐次解釈実行又は前記第２手段によりなされる前記ネイティブコードの実行と並行して、前記要求に係るバイトコード列をネイティブコードに変換する変換処理をプロセッサに実行させる第３手段とを備えることを特徴とする。
【００８９】
この構成によると、呼び出すバイトコード列（メソッド）が未コンパイルであれば、当該バイトコード列を逐次解釈して実行するので、従来のＪｉＴコンパイラ付ＪＶＭが未コンパイルのメソッド実行時に当該メソッドをコンパイルすることにより生じていた、プログラム実行開始当初に顕著に現れる実行速度の低下を解消することができ、また、並行して未コンパイルメソッドのコンパイルも行うので、全体的なプログラム実行速度が低下することもない。
【００９０】
また、前記プログラム実行制御装置は、マルチタスクオペレーティングシステムの制御下で、前記第１手段によりなされる前記バイトコード列の実行又は前記第２手段によりなされる前記ネイティブコードの実行と、前記第３手段によりなされる前記変換処理の実行とは、それぞれ異なるタスクとして実行され、前記第１手段又は前記第２手段のタスク実行は、前記第３手段のタスク実行より優先度が高いことを特徴としてもよい。
【００９１】
この構成によると、コンパイル実行タスクより命令実行タスクが優先的に実行されることになるので、プログラム実行開始当初に顕著に現れる実行速度の低下を解消することができる。
また、前記プログラム実行制御装置は、前記第１手段又は前記第２手段のタスク実行において待ち状態が発生した場合、前記第３手段のタスク実行に切り替える切替手段を備えることを特徴としてもよい。
【００９２】
この構成によると、命令実行タスクにおいて待ち状態が発生した場合にコンパイルタスクの実行に切り替えるので、コンパイル処理を速やかに実行することができる。コンパイル処理が速やかに実行されれば、命令実行におけるインタプリタ処理の回数が減り、全体的なプログラム実行速度を速めることができる。
また、前記プログラム実行制御装置は、前記第１手段によりなされる前記要求に応じて、当該要求に係るバイトコード列をネイティブコードに変換するための情報であるコンパイル要求情報を記憶手段に登録し管理する要求管理手段を備え、前記第３手段は、前記第１手段によりなされるバイトコード列の逐次解釈実行又は前記第２手段によりなされる前記ネイティブコードの実行と並行して、前記要求管理手段によって前記記憶手段に登録されているコンパイル要求情報に係るバイトコード列をネイティブコードに変換する変換処理をプロセッサに実行させることを特徴としてもよい。
【００９３】
この構成によると、要求管理手段によって記憶手段に登録及び管理されているコンパイル要求情報に基づいてバイトコード列のコンパイルを実行することができる。
また、前記プログラム実行制御装置の前記要求管理手段は、前記要求を先に受けたものからの順番となるキューで各コンパイル要求情報を登録して管理し、前記第３手段は、前記キューの先頭位置にあるコンパイル要求情報から順番に前記変換処理を前記プロセッサに実行させることを特徴としてもよい。
【００９４】
この構成によると、コンパイル要求を受けた順番でバイトコード列のコンパイルを行うことができる。
また、前記プログラム実行制御装置の前記要求管理手段は、前記第１手段によりなされる前記要求に係るバイトコード列のコンパイル要求情報が前記記憶手段に既に登録されている場合に、２重登録を行わないことを特徴としてもよい。
【００９５】
この構成によると、既に登録されているコンパイル要求情報を２重登録しないので、重複して同じメソッドをコンパイル処理することを防ぐことができる。
また、前記プログラム実行制御装置の前記要求管理手段は、繰り返し前記要求がなされるバイトコード列については、その要求回数を計数し、計数した要求回数を当該バイトコード列のコンパイル要求情報に含めて前記記憶手段に記録する回数記録手段と、記録した各コンパイル要求情報の要求回数を比較して、要求回数が多いもの順となるように各コンパイル要求情報のキュー位置を入替える入替手段とを備えることを特徴としてもよい。
【００９６】
この構成によると、変換要求の多いバイトコード列を先にコンパイルすることができるので、命令実行におけるインタプリタ処理の回数が減り、全体的なプログラム実行速度を速めることができる。
また、前記プログラム実行制御装置は、各バイトコード列の優先度を示す優先度情報を取得する優先度情報取得手段を更に備え、前記要求管理手段は、前記第１手段によりなされる前記要求に応じて、取得された優先度情報を参照し、当該要求に係るバイトコード列の優先度を特定する特定手段と、前記記憶手段に登録されている各コンパイル要求情報に係るバイトコード列の優先度と、前記特定手段により特定された優先度とを比較する比較手段と、比較した結果に基づいて、優先度の高いもの順の配列となるように、前記要求に係るバイトコード列のコンパイル要求情報のキュー位置を決定する決定手段とを備えることを特徴としてもよい。
【００９７】
この構成によると、優先度の高いバイトコード列から先にコンパイルすることができる。
また、前記プログラム実行制御装置は、前記要求管理手段は、優先度の異なる複数のキューを管理しており、前記第３手段は、優先度が最も高いキューに登録されているコンパイル要求情報に係るバイトコード列から順番に前記変換処理を前記プロセッサに実行させることを特徴としてもよい。
【００９８】
この構成によると、コンパイル要求情報を登録するキューで、優先的にコンパイルすべきバイトコード列とそうでないバイトコード列を区別することができる。
また、前記プログラム実行制御装置は、前記プログラムの実行前に、ネイティブコードに変換すべき複数のバイトコード列を示す特別要求情報を取得する特別要求情報取得手段を更に備え、前記要求管理手段は、取得された特別要求情報に示される各バイトコード列のコンパイル要求情報を、優先度が最も高いキューに一括登録し、管理することを特徴としてもよい。
【００９９】
この構成によると、優先的コンパイルすべきバイトコード列を特別要求情報に含めておくことで、これらのバイトコード列を優先的にコンパイルすることができる。
また、前記プログラム実行制御装置は、各バイトコード列の優先度を示す優先度情報を取得する優先度情報取得手段と、前記変換処理を行うバイトコード列の優先度と前記命令実行タスクの優先度とを比較する比較手段と、比較した結果、前記バイトコード列の優先度の方が命令実行タスクの優先度より高い場合に、前記コンパイルタスクの優先度を一時的に高くする優先度変更手段とを更に備えることを特徴としてもよい。
【０１００】
この構成によると、命令実行タスクの優先度より高い優先度のバイトコード列をコンパイルする場合、一時的にコンパイルタスクの優先度を高くするので、当該バイトコード列についてはコンパイルを速やかに行うことができる。
また、前記プログラム実行制御装置は、あるバイトコード列と関連する関連バイトコード列を対応付けている対応情報を取得する対応情報取得手段と、前記対応情報を参照して、前記要求に係るバイトコード列と対応付けられている関連バイトコード列があるか否かを検索する検索手段とを更に備え、前記検索手段による検索結果、関連バイトコード列が検出された場合、前記要求管理手段は、検出された関連バイトコード列のコンパイル要求情報を記憶手段に登録することを特徴としてもよい。
【０１０１】
この構成によると、コンパイル要求されたバイトコード列と関連するバイトコード列のコンパイル要求情報を登録することができる。
また、前記プログラム実行制御装置は、前記判定手段により否定的な判定がなされたときに、前記バイトコード列が現在、前記変換処理の途中であるか否かを判定する第２判定手段と、前記第２判定手段により肯定的な判定がなされた場合に、当該変換処理が終了するのを待って、変換されたネイティブコードを前記プロセッサに実行させる第４手段とを更に備えることを特徴としてもよい。
【０１０２】
この構成によると、未コンパイルのバイトコード列の実行時に、当該バイトコード列がコンパイル中であれば、そのコンパイルが終了するのを待って、変換されたネイティブコードを実行することができる。
また、前記プログラム実行制御装置は、各バイトコード列の優先度を示す優先度情報を取得する優先度情報取得手段を更に備え、前記第３手段は、前記記憶手段に複数登録されているコンパイル要求情報に係るバイトコード列のうち、取得された前記優先度情報に基づいて優先度の高いものから順番に前記変換処理を前記プロセッサに実行させることを特徴としてもよい。
【０１０３】
この構成によると、優先度の高いバイトコード列から先にコンパイルすることができる。
また、前記プログラム実行制御装置の前記要求管理手段は、閾値を取得する取得手段と、繰り返し前記要求がなされるバイトコード列については、その要求回数を計数し、当該バイトコード列のコンパイル要求情報に含めて計数した要求回数を前記記憶手段に記録する回数記録手段とを備え、前記第３手段は、前記要求回数が閾値を超えたものから順番に前記変換処理を前記プロセッサに実行させることを特徴としてもよい。
【０１０４】
この構成によると、閾値を超えるコンパイル要求回数となったバイトコード列からコンパイルすることができる。
【図面の簡単な説明】
【図１】命令実行タスクとコンパイルタスクの実行状態推移を示す図である。
【図２】実施形態１のプログラム実行制御装置１の機能構成図である。
【図３】Ｊａｖａ言語で記述されたソースプログラムの一例を示す図である。
【図４】実施形態１のキュー記憶部１６に登録されているコンパイル要求情報の具体例を示す図である。
【図５】コンパイル済メソッド情報テーブルの一例を示す図である。
【図６】命令実行処理を説明するためのフロー図である。
【図７】実施形態２のプログラム実行制御装置１Ａの機能構成図である。
【図８】実施形態２のキュー記憶部１６Ａに登録されているコンパイル要求情報の具体例を示す図である。
【図９】コンパイル要求情報の順番入替処理を説明するためのフロー図である。
【図１０】実施形態３のプログラム実行制御装置１Ｂの機能構成図である。
【図１１】クラスファイルから取得した優先度情報テーブル２３の具体的な内容を示す図である。
【図１２】キュー記憶部１６Ｂに登録されているコンパイル要求情報の具体例を示す図である。
【図１３】コンパイル要求情報の登録位置決定処理を説明するためのフロー図である。
【図１４】実施形態４のプログラム実行制御装置１Ｃの機能構成図である。
【図１５】一括登録情報２４の具体的な内容を示す図である。
【図１６】キュー記憶部１６Ｃに登録されているコンパイル要求情報の具体例を示す図である。
【図１７】実施形態５のプログラム実行制御装置１Ｄの機能構成図である。
【図１８】関連メソッドテーブル２８の具体例を示す図である。
【図１９】関連メソッド検索処理を説明するためのフロー図である。
【図２０】実施形態６のプログラム実行制御装置１Ｅの機能構成図である。
【図２１】優先度継承処理を説明するためのフロー図である。
【図２２】命令実行処理の変形例を説明するためのフロー図である。
【符号の説明】
１、１Ａ、１Ｂ、１Ｃ、１Ｄ、１Ｅ  プログラム実行制御装置
２        クラスロード記憶部
３、３Ｂ、３Ｃ、３Ｄ、３Ｅ  命令実行処理部
４、４Ａ、４Ｂ、４Ｃ、４Ｄ、４Ｅ  コンパイル要求管理部
５        ネイティブコード記憶部
６        コンパイル処理部
７        コンパイル済メソッド情報テーブル
８、８Ｂ、８Ｃ、８Ｄ、８Ｅ  クラスロード部
９        命令取出部
１０        命令解読部
１１        命令実行部
１２        メソッド種別判定部
１３        ネイティブコード取出部
１４        登録要求受付部
１５、１５Ａ、１５Ｂ、１５Ｃ、１５Ｄ、１５Ｅ  キュー制御部
１６、１６Ａ、１６Ｂ、１６Ｃ、１６Ｄ  キュー記憶部
１７        コンパイル要求取得部
１８        メソッドコンパイル部
１９、１９Ｅ  マルチタスク制御部
２０        ネットワーク
２１        アンテナ
２２        加算部
２３        優先度情報テーブル
２４        一括登録情報
２５        一括登録部
２６        関連メソッド検索処理部
２７        検索部
２８        関連メソッドテーブル
２９        優先度継承部
３０        優先度比較部
３１        タスク優先度変更部
【図１】
2004355277.tif 000003
【図２】
2004355277.tif 000004
【図３】
2004355277.tif 000005
【図４】
2004355277.tif 000006
【図５】
2004355277.tif 000007
【図６】
2004355277.tif 000008
【図７】
2004355277.tif 000009
【図８】
2004355277.tif 000010
【図９】
2004355277.tif 000011
【図１０】
2004355277.tif 000012
【図１１】
2004355277.tif 000013
【図１２】
2004355277.tif 000014
【図１３】
2004355277.tif 000015
【図１４】
2004355277.tif 000016
【図１５】
2004355277.tif 000017
【図１６】
2004355277.tif 000018
【図１７】
2004355277.tif 000019
【図１８】
2004355277.tif 000020
【図１９】
2004355277.tif 000021
【図２０】
2004355277.tif 000022
【図２１】
2004355277.tif 000023
【図２２】
2004355277.tif 000024