(57)【特許請求の範囲】
【請求項１】
実行対象プログラムに含まれる命令のうち、逐次解釈による実行回数が閾値以上となった命令の翻訳コードを生成して第一の記憶部に記憶し、
所定のタイミングで前記翻訳コードの一部又は全部を前記第一の記憶部より破棄する処理をコンピュータが実行し、
前記生成する処理は、前記翻訳コードが破棄されてから所定期間において、前記閾値を前記実行回数に対して相対的に低下させる
ことを特徴とする命令処理方法。
【請求項２】
前記破棄する処理は、破棄対象の前記翻訳コードの中で、当該翻訳コードの生成後に前記実行対象プログラムにおいて当該翻訳コードに対応する命令が更新されていない翻訳コードを示す情報を第二の記憶部に記憶し、
前記生成する処理は、前記第二の記憶部が記憶する情報が示す前記翻訳コードに関して、破棄されてからの所定期間において前記閾値を低下させる請求項１記載の命令処理方法。
【請求項３】
前記破棄する処理は、前記第一の記憶部が前記翻訳コードに関連付けて記憶する該翻訳コードに対応する命令の識別情報を退避し、
前記生成する処理は、退避されている前記識別情報に係る命令に関して、破棄されてからの所定期間において前記閾値を低下させる請求項１又は２記載の命令処理方法。
【請求項４】
実行対象プログラムに含まれる命令のうち、逐次解釈による実行回数が閾値以上となった命令の翻訳コードを生成して第一の記憶部に記憶する生成部と、
所定のタイミングで前記翻訳コードの一部又は全部を前記第一の記憶部より破棄する破棄部とを有し、
前記生成部は、前記翻訳コードが破棄されてから所定期間において、前記閾値を前記実行回数に対して相対的に低下させる命令処理装置。
【請求項５】
実行対象プログラムに含まれる命令のうち、逐次解釈による実行回数が閾値以上となった命令の翻訳コードを生成して第一の記憶部に記憶し、
所定のタイミングで前記翻訳コードの一部又は全部を前記第一の記憶部より破棄する処理をコンピュータに実行させ、
前記生成する処理は、前記翻訳コードが破棄されてから所定期間において、前記閾値を前記実行回数に対して相対的に低下させる命令処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令処理方法、命令処理装置、及び命令処理プログラムに関する。
【背景技術】
【０００２】
或るＣＰＵの動作を異なるアーキテクチャのＣＰＵでエミュレーションするために、インタプリタとジャストインタイムコンパイラ（Ｊｕｓｔ−Ｉｎ−Ｔｉｍｅコンパイラ：以下、「ＪＩＴコンパイラ」という。）とが用いられる場合がある。インタプリタは、プログラムの命令を逐次解釈しながら、各命令の実行頻度を監視する。インタプリタは、実行頻度の高い命令について、機械語への翻訳要求をＪＩＴコンパイラに入力する。ＪＩＴコンパイラは、翻訳要求に係る命令を機械語に翻訳（コンパイル）し、翻訳されたコード（以下、「翻訳コード」という。）をコードキャッシュと呼ばれるメモリ領域に記録する。以後、当該命令の実行時には、コードキャッシュに記録された翻訳コードが実行される。その結果、プログラムの実行速度が高速化される。
【０００３】
従来、インタプリタは、命令毎に実行回数を計測し、実行回数が既定の閾値を超えた場合に翻訳要求を行っていた。ＪＩＴコンパイラが多くの翻訳要求を受けている場合に、閾値を大きくすることも行われている。例えば、インタプリタからの翻訳要求がキューによって管理され、キューの長さに応じて、閾値の増減が図られている。
【０００４】
コードキャッシュに対して所定量以上の翻訳コードが記録された場合、新たな翻訳コードの記録に備えて、既存の翻訳コードの一部又は全部について、コードキャッシュからの破棄が行われる。コードキャッシュにおける翻訳コードの破棄（すなわち、コードキャッシュの空き領域の確保）に関する処理は、一般的に、ガーベージコレクション（Ｇａｒｂａｇｅ  Ｃｏｌｌｅｃｔｉｏｎ：ＧＣ）と呼ばれる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２００３−５２６１３５号公報
【特許文献２】特表２００２−５１９７５２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＧＣ実行後における命令実行時には、実行対象の命令に対する翻訳コードが存在しない可能性が高くなる。その結果、ＧＣ実行前には翻訳コードを用いて高速実行されていた命令に関して、逐次解釈が行われ、性能が低下してしまう可能性がある。
【０００７】
ＧＣによってコードキャッシュから破棄された命令が、ＧＣ実行前の程度まで性能が復帰するには、当該命令の実行回数が改めて上記閾値以上となるまでの時間が必要とされた。
【０００８】
１側面では、翻訳コードの破棄による性能の低下期間を短縮することのできる命令処理方法、命令処理装置、及び命令処理プログラムの提供を目的とする。
【課題を解決するための手段】
【０００９】
一案では、命令処理方法は、実行対象プログラムに含まれる命令のうち、逐次解釈による実行回数が閾値以上となった命令の翻訳コードを生成して第一の記憶部に記憶し、所定のタイミングで前記翻訳コードの一部又は全部を前記第一の記憶部より破棄する処理をコンピュータが実行し、前記生成する処理は、前記翻訳コードが破棄されてから所定期間において、前記閾値を前記実行回数に対して相対的に低下させる。
【発明の効果】
【００１０】
一態様によれば、翻訳コードの破棄による性能の低下期間を短縮することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施の形態における情報処理装置のハードウェア構成例を示す図である。
【図２】第一の実施の形態における情報処理装置の機能構成例を示す図である。
【図３】第一の実施の形態の情報処理装置が実行する処理手順の一例を説明するための図である。
【図４】第一の実施の形態の管理テーブルの構成例を示す図である。
【図５】第一の実施の形態の逐次解釈部の処理手順の一例を説明するためのフローチャートである。
【図６】第二の実施の形態の情報処理装置が実行する処理手順の一例を説明するための図である。
【図７】第二の実施の形態の逐次解釈部の処理手順の一例を説明するためのフローチャートである。
【図８】翻訳コードに不整合が発生する状況の一例を説明するための図である。
【図９】第三の実施の形態の管理テーブルの構成例を示す図である。
【図１０】第三の実施の形態における情報処理装置の機能構成例を示す図である。
【図１１】強制破棄フラグ記憶部の構成例を示す図である。
【図１２】第三の実施の形態のＧＣの実行処理の処理手順の一例を説明するためのフローチャートである。
【図１３】第三の実施の形態の逐次解釈部の処理手順の一例を説明するためのフローチャートである。
【図１４】第四の実施の形態における情報処理装置の機能構成例を示す図である。
【図１５】第四の実施の形態の翻訳コード破棄部の初期化処理の処理手順の一例を示す図である。
【図１６】第四の実施の形態のＧＣの実行処理の処理手順の一例を説明するためのフローチャートである。
【図１７】第四の実施の形態における翻訳部の処理手順の一例を説明するためのフローチャートである。
【図１８】第四の実施の形態の逐次解釈部の処理手順の一例を説明するためのフローチャートである。
【図１９】第五の実施の形態の逐次解釈部の処理手順の一例を説明するためのフローチャートである。
【発明を実施するための形態】
【００１２】
以下、図面に基づいて本発明の実施の形態を説明する。図１は、本発明の実施の形態における情報処理装置のハードウェア構成例を示す図である。図１の情報処理装置１０は、それぞれバスＢで相互に接続されているドライブ装置１００、補助記憶装置１０２、メモリ装置１０３、ＣＰＵ１０４、及びインタフェース装置１０５等を有する。
【００１３】
情報処理装置１０での処理を実現するプログラムは、記録媒体１０１によって提供される。プログラムを記録した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。但し、プログラムのインストールは必ずしも記録媒体１０１より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置１０２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００１４】
メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。ＣＰＵ１０４は、メモリ装置１０３に格納されたプログラムに従って情報処理装置１０に係る機能を実行する。インタフェース装置１０５は、ネットワークに接続するためのインタフェースとして用いられる。
【００１５】
なお、記録媒体１０１の一例としては、ＣＤ−ＲＯＭ、ＤＶＤディスク、又はＵＳＢメモリ等の可搬型の記録媒体が挙げられる。また、補助記憶装置１０２の一例としては、ＨＤＤ（Hard Disk Drive）又はフラッシュメモリ等が挙げられる。記録媒体１０１及び補助記憶装置１０２のいずれについても、コンピュータ読み取り可能な記録媒体に相当する。
【００１６】
図２は、第一の実施の形態における情報処理装置の機能構成例を示す図である。同図において、情報処理装置１０は、逐次解釈部１１、翻訳要求キュー１２、翻訳部１３、コードキャッシュ部１４、及び翻訳コード破棄部１５等を有する。逐次解釈部１１、翻訳部１３、及び翻訳コード破棄部１５は、情報処理装置１０にインストールされたプログラムがＣＰＵ１０４に実行させる処理によって実現される。翻訳要求キュー１２、コードキャッシュ部１４は、例えば、メモリ装置１０３を用いて実現可能である。
【００１７】
逐次解釈部１１は、実行対象プログラムＴｐのソースコード又は中間的な表現（中間コード）の各命令を逐次的に解釈して実行する。実行対象プログラムＴｐは、本実施の形態において実行対象とされるプログラムが、メモリ装置１０３にロードされた状態のデータである。逐次解釈部１１は、実行対象プログラムＴｐが含む命令ごとに、逐次解釈による当該命令の実行回数（すなわち、逐次解釈の実行回数）を計測する。逐次解釈部１１は、実行回数が閾値以上となった命令が発生した場合、当該命令のアドレス（すなわち、実行対象プログラムＴｐ内の位置情報）を指定して、翻訳要求を翻訳要求キュー１２に入力する。翻訳要求キュー１２は、翻訳要求をＦＩＦＯ（First-In First-Out）のリスト構造で保持する。
【００１８】
なお、厳密には、実行回数は、実行対象プログラムＴｐ内の各分岐命令の分岐先ごとに計測される。分岐命令間に含まれる命令群の実行回数は一致するため、命令ごとに実行回数を計測する必要はないからである。したがって、翻訳要求には、分岐先のアドレスが指定される。
【００１９】
翻訳部１３は、翻訳要求キュー１２より翻訳要求を取り出し、取り出された翻訳要求に指定されたアドレスに係る命令群を機械語によるネイティブコードに翻訳する。例えば、翻訳要求に指定されたアドレスに係る命令から次の分岐命令までの命令群（命令が一つの場合も含む。）が翻訳される。以下、翻訳部１３によって翻訳された（又は生成された）コードを「翻訳コード」という。翻訳部１３は、翻訳コードをコードキャッシュ部１４に記憶する。
【００２０】
コードキャッシュ部１４は、翻訳コードや、翻訳コードの管理情報を記憶するための管理テーブル等を記憶する。
【００２１】
翻訳コード破棄部１５は、コードキャッシュ部１４に関して、ガーベージコレクション（ＧＣ）を実行する。すなわち、翻訳コード破棄部１５は、コードキャッシュ部１４の空き領域を確保するため、コードキャッシュ部１４が記憶する一部又は全部の翻訳コード及び一部又は全部の管理情報等を所定のタイミングで破棄（削除）する。
【００２２】
なお、逐次解釈部１１は、「インタプリタ」と呼ばれるプログラムを用いて実現されてもよい。また、翻訳部１３は、「ジャストインタイムコンパイラ（Ｊｕｓｔ−Ｉｎ−Ｔｉｍｅコンパイラ）」と呼ばれるプログラムを用いて実現されてもよい。更に、翻訳コード破棄部１５は、「ガーベージコレクタ」と呼ばれるプログラムを用いて実現されてもよい。
【００２３】
以下、情報処理装置１０が実行する処理手順について説明する。図３は、第一の実施の形態の情報処理装置が実行する処理手順の一例を説明するための図である。
【００２４】
実行対象プログラムＴｐがメモリ装置１０３にロードされ、実行対象プログラムＴｐの実行が開始されると、実行対象プログラムＴｐの終了まで、以下の処理手順が繰り返し実行される。
【００２５】
まず、逐次解釈部１１は、実行対象プログラムＴｐより命令を読み出す（Ｓ１）。逐次解釈部１１は、読み出された命令が分岐命令でなければ、当該命令を逐次的に解釈し、解釈結果をＣＰＵ１０４に実行させる（Ｓ２）。逐次解釈部１１は、また、読み出された命令が分岐命令であり、分岐先のアドレスに関してコードキャッシュ部１４に翻訳コードが生成されていない場合、分岐先のアドレスに係る命令を逐次的に解釈し、解釈結果をＣＰＵ１０４に実行させる（Ｓ２）。
【００２６】
一方、読み出された命令が分岐命令であり、かつ、分岐先のアドレスに関してコードキャッシュ部１４に翻訳コードが生成されている場合、逐次解釈部１１は、当該翻訳コードをＣＰＵ１０４に実行させる。（Ｓ３）。翻訳コードの実行が終了すると、逐次解釈部１１に処理制御が復帰する（Ｓ４）。
【００２７】
なお、分岐先のアドレスに関して翻訳コードが生成されているか否かや、コードキャッシュ部１４内における翻訳コードの位置（アドレス）は、例えば、コードキャッシュ部１４内の管理テーブルを参照して判定される。
【００２８】
図４は、第一の実施の形態の管理テーブル１４Ｔａの構成例を示す図である。同図において、管理テーブル１４Ｔａは、アドレス、実行回数、翻訳済フラグ、翻訳先アドレス等を記憶する。
【００２９】
アドレスは、分岐先の命令のアドレスである。なお、アドレスは、管理テーブル１４Ｔａに含まれていなくてもよい。アドレスと管理テーブル１４Ｔａの各レコードとの対応付けが別途管理されていてもよい。実行回数は、当該アドレスに係る命令群の逐次的な実行回数である。翻訳済フラグは、当該アドレスに係る命令群に関して翻訳コードが生成されているか否かを示す情報である。例えば、「ｔｒｕｅ」は、翻訳コードは生成されている（翻訳済である）ことを示し、「ｆａｌｓｅ」は、翻訳コードは生成されていれていない（翻訳済でない）ことを示す。翻訳先アドレスは、コードキャッシュ部１４において、翻訳コードが記憶された位置（アドレス）を示す。また、実行回数は、コードキャッシュ部１４外において（すなわち、管理テーブル１４Ｔａ外において）管理されてもよい。
【００３０】
したがって、逐次解釈部１１は、管理テーブル１４Ｔａにおいて、分岐先のアドレスに対応する翻訳済みフラグがｔｒｕｅであれば、分岐先のアドレスに関して翻訳コードは生成されていると判定する。この場合、逐次解釈部１１は、当該アドレスに対応する翻訳先アドレスに基づいて、翻訳コードの記憶位置を特定する。
【００３１】
但し、翻訳済フラグの代わりに、翻訳先アドレスに基づいて、分岐先のアドレスに関して翻訳コードが生成されているか否かが判定されてもよい。すなわち、翻訳先アドレスに値が記録されている場合、分岐先のアドレスに関して翻訳コードは生成されていると判定されてもよい。この場合、管理テーブル１４Ｔａに翻訳済フラグは含まれていなくてもよい。
【００３２】
なお、逐次解釈部１１は、ステップＳ２の実行時において、読み出された命令が分岐命令である場合、管理テーブル１４Ｔａにおいて、分岐先のアドレスに対応する実行回数に１を加算する。但し、分岐先のアドレスに対応するレコードが無い場合、逐次解釈部１１は、当該アドレスに対応するレコードを管理テーブル１４Ｔａに追加し、当該レコードの実行回数に１を記録する。
【００３３】
１の加算の結果、実行回数が閾値以上となった場合、逐次解釈部１１は、翻訳要求を翻訳要求キュー１２に入力する（Ｓ５）。翻訳要求には、分岐先の命令のアドレスが指定される。なお、図３の翻訳キュー１２内における各矩形は、翻訳要求を表現する。
【００３４】
翻訳部１３は、翻訳要求キュー１２に入力された翻訳要求を古い順に取り出す（Ｓ６）。翻訳部１３は、取り出された翻訳要求に指定されたアドレスに係る命令群について翻訳処理を実行する（Ｓ７）。翻訳処理によって、当該命令群に関する翻訳コードが生成される。翻訳部１３は、生成された翻訳コードをコードキャッシュ部１４に記憶する（Ｓ８）。翻訳部１３は、また、管理テーブル１４Ｔａにおいて、当該アドレスに対応する翻訳済フラグを「ｔｒｕｅ」に更新し、当該アドレスに対応する翻訳先アドレスに、翻訳コードが記憶されたアドレスを記録する。
【００３５】
例えば、管理テーブル１４Ｔａに新たなレコードが追加され、又は新たな翻訳コードがコードキャッシュ部１４に記憶され、コードキャッシュ部１４の空き領域が所定量以下になると、翻訳コード破棄部１５に対して、ＧＣの実行が要求される（Ｓ１１又はＳ１２）。
【００３６】
翻訳コード破棄部１５は、要求に応じ、ＧＣを実行する（Ｓ１３）。すなわち、翻訳コード破棄部１５は、一部又は全部の翻訳コード、及び管理テーブル１４Ｔａの一部又は全部のレコードをコードキャッシュ部１４より破棄（削除）する（Ｓ１３）。その結果、破棄された翻訳コード又はレコードに使用されていたメモリ領域は解放される。
【００３７】
なお、破棄対象が一部の翻訳コードに限定される場合、管理テーブル１４Ｔａにおいて破棄されるレコードは、破棄対象の翻訳コードに対応するレコードである。すなわち、破棄対象の翻訳コードのアドレスを翻訳先アドレスとして含むレコードが破棄される。
【００３８】
続いて、翻訳コード破棄部１５は、翻訳コード等を破棄した時刻（以下、「ＧＣ実行時刻」という。）を、例えば、メモリ装置１０３に記録する（Ｓ１４）。
【００３９】
ＧＣ実行時刻は、逐次解釈部１１が、実行回数に対する閾値を動的に変化させるために用いられる。すなわち、上述したステップＳ２において、逐次解釈部１１は、ＧＣ実行時刻から所定期間においては、実質的又は相対的に当該閾値を低下させる。閾値が低下することにより、ＧＣ実行時刻から所定期間においては、通常より少ない実行回数でも、翻訳コードが生成されるようになる。したがって、実行頻度の高い命令群に関して、翻訳コードが再生成される時期を早めることができる。その結果、ＧＣの実行による性能の低下期間の短縮化を期待することができる。
【００４０】
図３における逐次解釈部１１の処理手順について、更に詳細に説明する。図５は、第一の実施の形態の逐次解釈部の処理手順の一例を説明するためのフローチャートである。なお、同図は、読み出された命令が分岐命令である場合の処理手順を示す。
【００４１】
ステップＳ１１０において、逐次解釈部１１は、管理テーブル１４Ｔａを参照して、分岐先のアドレスに対する翻訳コードの有無を判定する。分岐先のアドレスに対応するレコードが管理テーブル１４Ｔａに有り、かつ、当該レコードの翻訳済フラグの値が「ｔｒｕｅ」である場合、逐次解釈部１１は、当該翻訳コードは有ると判定する。一方、分岐先のアドレスに対応するレコードが管理テーブル１４Ｔａに無い場合、又は当該レコードが管理テーブル１４Ｔａに有り、かつ、当該レコードの翻訳済フラグの値が「ｆａｌｓｅ」である場合、逐次解釈部１１は、当該翻訳コードは無いと判定する。
【００４２】
当該翻訳コードが無い場合（Ｓ１１０でＮｏ）、逐次解釈部１１は、分岐先のアドレスの命令を逐次的に解釈し、解釈結果をＣＰＵ１０４に実行させる（Ｓ１２０）。続いて、逐次解釈部１１は、管理テーブル１４Ｔａにおいて、分岐先のアドレスに対応する実行回数に１を加算する（Ｓ１３０）。但し、分岐先のアドレスに対応するレコードが無い場合、逐次解釈部１１は、当該アドレスに対応するレコードを管理テーブル１４Ｔａに追加し、当該レコードの実行回数に１を記録する。なお、後述のステップＳ１７０における実行回数は、ステップＳ１３０において更新又は記録された実行回数である。
【００４３】
続いて、逐次解釈部１１は、ＧＣ実行時刻がメモリ装置１０３に記録されているか否かを判定する（Ｓ１４０）。すなわち、実行対象プログラムＴｐの実行開始後において、ＧＣが実行されたか否かが判定される。ＧＣ実行時刻がメモリ装置１０３に記録されている場合（すなわち、ＧＣが実行されている場合）（Ｓ１４０でＹｅｓ）、逐次解釈部１１は、現在時刻とＧＣ実行時刻の差分（すなわち、ＧＣ実行時刻からの経過時間）を算出する（Ｓ１５０）。算出結果は、変数ａｆｔｅｒ＿ｇｃ＿ｔｉｍｅに代入される。一方、ＧＣ実行時刻がメモリ装置１０３に記録されていない場合（すなわち、ＧＣが実行されていない場合）（Ｓ１４０でＮｏ）、逐次解釈部１１は、変数ａｆｔｅｒ＿ｇｃ＿ｔｉｍｅにＭＡＸ＿ＧＣ＿ＴＩＭＥを代入する（Ｓ１６０）。ＭＡＸ＿ＧＣ＿ＴＩＭＥは、ＧＣ実行後、実行回数に対する閾値を低下させる期間である。当該期間（ＭＡＸ＿ＧＣ＿ＴＩＭＥ）は、予め決定され、例えば、補助記憶装置１０２に記録されている。
【００４４】
ステップＳ１５０又はＳ１６０に続いて、逐次解釈部１１は、以下の式（１）が閾値以上であるか否かを判定する（Ｓ１７０）。
【００４５】
ＭＡＸ＿ＧＣ＿ＴＩＭＥ×実行回数／ｍｉｎ（ａｆｔｅｒ＿ｇｃ＿ｔｉｍｅ，ＭＡＸ＿ＧＣ＿ＴＩＭＥ）  ・・・（１）
ここで、ｍｉｎ（ｘ，ｙ）は、ｘとｙとの最小値を示す。したがって、ａｆｔｅｒ＿ｇｃ＿ｔｉｍｅ＜ＭＡＸ＿ＧＣ＿ＴＩＭＥの場合（すなわち、ＧＣ実行時刻からの経過時間がＭＡＸ＿ＧＣ＿ＴＩＭＥ未満である場合）、ｍｉｎ（ａｆｔｅｒ＿ｇｃ＿ｔｉｍｅ，ＭＡＸ＿ＧＣ＿ＴＩＭＥ）の値は、ａｆｔｅｒ＿ｇｃ＿ｔｉｍｅとなる。一方、ａｆｔｅｒ＿ｇｃ＿ｔｉｍｅ≧ＭＡＸ＿ＧＣ＿ＴＩＭＥの場合（すなわち、ＧＣ実行時刻からの経過時間がＭＡＸ＿ＧＣ＿ＴＩＭＥ以上である場合）、ｍｉｎ（ａｆｔｅｒ＿ｇｃ＿ｔｉｍｅ，ＭＡＸ＿ＧＣ＿ＴＩＭＥ）の値は、ＭＡＸ＿ＧＣ＿ＴＩＭＥとなる。
【００４６】
上記より、ステップＳ１７０では、ＧＣ実行時刻からの経過時間がＭＡＸ＿ＧＣ＿ＴＩＭＥ未満である場合、式（１）の値は、実際の実行回数より大きな値となる。一方、ＧＣ実行時刻からの経過時間がＭＡＸ＿ＧＣ＿ＴＩＭＥ以上である場合、式（１）の値は、実際の実行回数と一致する。したがって、ＧＣ実行時刻からの経過時間がＭＡＸ＿ＧＣ＿ＴＩＭＥ未満である場合、当該経過時間が小さい程、閾値は実質的に小さくなる。一方、ＧＣ実行時刻からの経過時間がＭＡＸ＿ＧＣ＿ＴＩＭＥ以上である場合、閾値は、本来の値となる。
【００４７】
式（１）の値が閾値以上である場合（Ｓ１７０でＹｅｓ）、逐次解釈部１１は、分岐先のアドレスが指定された翻訳要求を生成し、当該翻訳要求を翻訳要求キュー１２に入力する（Ｓ１８０）。一方、式（１）の値が閾値未満である場合（Ｓ１７０でＮｏ）、ステップＳ１８０は実行されない。
【００４８】
なお、分岐先のアドレスに対する翻訳コードが有る場合（Ｓ１１０でＹｅｓ）、逐次解釈部１１は、管理テーブル１４Ｔａにおいて、当該アドレスに対する翻訳先アドレスに記憶されている翻訳コードをＣＰＵ１０４に実行させる（Ｓ１９０）。
【００４９】
なお、上記では、ＧＣ実行時刻が記録される例を示したが、時刻を計測するタイマーが用いられてもよい。この場合、図３のステップＳ１４において、翻訳コード破棄部１５は、当該タイマーの値を０に初期化する。図５のステップＳ１５０において、逐次解釈部１１は、その時のタイマーの値をａｆｔｅｒ＿ｇｃ＿ｔｉｍｅに代入する。
【００５０】
次に、第二の実施の形態について説明する。第二の実施の形態では、第一の実施の形態と異なる点について説明する。したがって、特に言及しない点については、第一の実施の形態と同様でよい。
【００５１】
図６は、第二の実施の形態の情報処理装置が実行する処理手順の一例を説明するための図である。図６中、図３と同一部分には同一符号を付し、その説明は省略する。
【００５２】
図６では、図３のステップＳ１４がステップＳ１４ａに置き換わっている。ステップＳ１４ａにおいて、翻訳コード破棄部１５は、ＧＣ実行時（ＧＣ実行直後）における、コードキャッシュ部１４の翻訳コードの残量（以下、「ＧＣ実行時翻訳コード量」という。）を、例えば、メモリ装置１０３に記録する。
【００５３】
ＧＣ実行時翻訳コード量は、逐次解釈部１１が、実行回数に対する閾値を動的に変化させるために用いられる。すなわち、図６のステップＳ２において、逐次解釈部１１は、ＧＣ実行時翻訳コード量から所定量の翻訳コードが生成されるまで（すなわち、ＧＣ実行後の翻訳量が所定量になるまで）は、実質的に当該閾値を低下させる。その結果、第一の実施の形態と同様の効果を得ることができる。このように、ＧＣ実行後の所定期間は、時刻ではなく、翻訳コード量等、時刻の経過に応じて変化する他の指標を用いて計測されてもよい。
【００５４】
第一の実施の形態における図５は、図７に示されるように置き換えられればよい。図７は、第二の実施の形態の逐次解釈部の処理手順の一例を説明するためのフローチャートである。図７中、図５と同一ステップには同一符号を付し、その説明は省略する。図７では、図５のステップＳ１４０、Ｓ１５０、Ｓ１６０、及びＳ１７０のそれぞれが、ステップＳ１４０ａ、Ｓ１５０ａ、Ｓ１６０ａ、又はＳ１７０ａに置き換わっている。
【００５５】
ステップＳ１４０ａにおいて、逐次解釈部１１は、ＧＣ実行時翻訳コード量がメモリ装置１０３に記録されているか否かを判定する。ＧＣ実行時翻訳コード量がメモリ装置１０３に記録されている場合（すなわち、ＧＣが実行されている場合）（Ｓ１４０ａでＹｅｓ）、逐次解釈部１１は、現在のコードキャッシュ部１４における翻訳コードの残量と、ＧＣ実行時翻訳コード量との差分（すなわち、ＧＣ実行時からの翻訳コード量）を算出する（Ｓ１５０ａ）。算出結果は、変数ａｆｔｅｒ＿ｇｃ＿ｖｏｌに代入される。
【００５６】
一方、一方、ＧＣ実行時翻訳コード量がメモリ装置１０３に記録されていない場合（すなわち、ＧＣが実行されていない場合）（Ｓ１４０ａでＮｏ）、逐次解釈部１１は、変数ａｆｔｅｒ＿ｇｃ＿ｖｏｌにＭＡＸ＿ＧＣ＿ＶＯＬを代入する（Ｓ１６０ａ）。上記において、第二の実施の形態では、ＧＣ実行後の翻訳量が所定量になるまで閾値が実質的に低下すると述べた。ＭＡＸ＿ＧＣ＿ＶＯＬは、当該所定量を示す。ＭＡＸ＿ＧＣ＿ＶＯＬは、予め決定され、例えば、補助記憶装置１０２に記録されている。
【００５７】
ステップＳ１５０ａ又はＳ１６０ｂに続いて、逐次解釈部１１は、以下の式（２）が閾値以上であるか否かを判定する（Ｓ１７０ａ）。
【００５８】
ＭＡＸ＿ＧＣ＿ＶＯＬ×実行回数／ｍｉｎ（ａｆｔｅｒ＿ｇｃ＿ｖｏｌ，ＭＡＸ＿ＧＣ＿ＶＯＬ）  ・・・（２）
式（２）は、第一の実施の形態の式（１）におけるａｆｔｅｒ＿ｇｃ＿ｔｉｍｅ及びＭＡＸ＿ＧＣ＿ＴＩＭＥのそれぞれが、ａｆｔｅｒ＿ｇｃ＿ｖｏｌ又はＭＡＸ＿ＧＣ＿ＶＯＬに置換されたものである。したがって、ＧＣ実行時からの翻訳コード量がＭＡＸ＿ＧＣ＿ＶＯＬ未満である場合、当該翻訳コード量が小さい程、閾値は実質的に小さくなる。一方、ＧＣ実行時刻からの経過時間がＭＡＸ＿ＧＣ＿ＶＯＬ以上である場合、閾値は、本来の値となる。
【００５９】
なお、上記第一及び第二の実施の形態において、ＧＣ実行時時刻からの経過時間がＭＡＸ＿ＧＣ＿ＴＩＭＥ未満である場合、又はＧＣ実行時からの翻訳コード量がＭＡＸ＿ＧＣ＿ＶＯＬ未満である場合において、式（１）又は式（２）の値は一定となるようにしてもよい。この場合、例えば、式（１）におけるａｆｔｅｒ＿ｇｃ＿ｔｉｍｅ又は式（２）におけるａｆｔｅｒ＿ｇｃ＿ｖｏｌの値を、ＭＡＸ＿ＧＣ＿ＴＩＭＥ／ｎ、又はＭＡＸ＿ＧＣ＿ＶＯＬ／ｎとしてもよい。ここで、ｎ＞１である。その結果、ＧＣ実行時時刻からの経過時間がＭＡＸ＿ＧＣ＿ＴＩＭＥ未満である場合、又はＧＣ実行時からの翻訳コード量がＭＡＸ＿ＧＣ＿ＶＯＬ未満である場合において、閾値の実質的な低下の程度は一定となる。
【００６０】
また、第一及び第二の実施の形態では、所定期間において命令の実行回数を過大評価されることにより、閾値が実質的に低下する例について説明したが、閾値それ自体が動的に変化するようにしてもよい。例えば、翻訳要求キュー１２に蓄積されている翻訳要求の数に応じて閾値が変化してもよい。この場合、ステップＳ１７０又はＳ１７０ａにおいて用いられる閾値は、例えば、以下の式（３）に基づいて算出される。
【００６１】
閾値＝（翻訳要求キュー１２に蓄積されている翻訳要求の数×定数Ａ）＋定数Ｂ  ・・・（３）
例えば、定数Ａ＝１０２４、定数Ｂ＝１が式（３）に当てはめられて、閾値が算出されてもよい。
【００６２】
次に、第三の実施の形態について説明する。第三の実施の形態では、第一の実施の形態と異なる点について説明する。したがって、特に言及しない点については、第一の実施の形態と同様でよい。
【００６３】
第三の実施の形態では、翻訳コードと実行対象プログラムＴｐとの間に不整合が発生する場合について考慮する。斯かる不整合の発生は、実行対象プログラムＴｐが、ＣＰＵ１０４と異なるアーキテクチャのＣＰＵのエミュレーションを実現するためのプログラムである場合に、特に顕在化する。すなわち、第三の実施の形態は、実行対象プログラムＴｐ、逐次解釈部１１、コードキャッシュ部１４、及び翻訳コード翻訳コード破棄部１５が、ＣＰＵ１０４と異なるアーキテクチャのＣＰＵをエミュレータとして機能する場合に好適である。但し、他の場合に第三の実施の形態が適用されてもよい。
【００６４】
翻訳コードの不整合は、例えば、図８に示されるような状況において発生する。図８は、翻訳コードに不整合が発生する状況の一例を説明するための図である。
【００６５】
同図では、自己書き換えの例が示されている。すなわち、実行対象プログラムＴｐの命令の実行（逐次的な実行又は当該命令を含む翻訳コードによる実行）により、実行対象プログラムＴｐの一部の命令Ｐが動的に書き換えられることがある。このように、プログラムが実行時に自分自身の命令を書き換えることを「自己書き換え」という。この場合、図８において、書き換えられた命令Ｐを含む翻訳コードＣｐは、実行対象プログラムＴｐの現在の状態と異なることになる。すなわち、翻訳コードＣｐに不整合が発生した状態となる。
【００６６】
不整合な翻訳コードＣｐの実行は、回避されなければならない。そこで、逐次解釈部１１は、不整合な翻訳コードＣｐに対して無効であることを示す情報を関連付ける。当該情報を関連付けるため、第三の実施の形態の管理テーブル１４Ｔは、例えば、図９に示されるような構成を有する。
【００６７】
図９は、第三の実施の形態の管理テーブルの構成例を示す図である。同図において、管理テーブル１４Ｔｂは、アドレスに関連付けて無効化フラグを記憶する。無効化フラグは、当該アドレスに係る翻訳コードが無効であるか否かを示す情報である。無効化フラグの初期値は「ｆａｌｓｅ」である。翻訳コードに不整合が発生した又は発生した可能性が有る場合、無効化フラグの値は「ｔｒｕｅ」に更新される。翻訳コードに関して無効化フラグが「ｔｒｕｅ」に更新されることを、本実施の形態において、翻訳コードの無効化という。
【００６８】
逐次解釈部１１は、分岐先のアドレスに対する無効化フラグの値が「ｔｒｕｅ」である場合、翻訳コードは実行対象とせずに、改めて、当該分岐先の命令を逐次的に実行する。
【００６９】
本実施の形態において、無効化フラグの更新は、逐次解釈部１１によって行われる。或る翻訳コードに不整合が発生したことを検知するために、逐次解釈部１１又は翻訳部１３は、翻訳コードが生成された命令が属する実行対象プログラムＴｐのページに関して、ページテーブルのアクセス権として「読み込み可（ＲｅａｄＯｎｌｙ）」を設定しておく。すなわち、当該ページに対する書き込みは禁止される。その後、実行対象プログラムＴｐの命令の実行により、当該ページに対して自己書き換えを実行しようとすると、アクセス違反に関する例外が発生する。逐次解釈部１１は、当該例外を補足（キャッチ）するためのハンドラを介して、当該例外の発生を検知する。逐次解釈部１１は、当該例外の発生を検知すると、当該例外によって通知されたアドレスを含むページに属する翻訳コードに係るアドレスに関して、管理テーブル１４Ｔｂの無効化フラグを「ｔｒｕｅ」に更新する。
【００７０】
なお、翻訳コードの不整合は、新たなプロセスが生成された場合やスワッピングが発生した場合等において、仮想アドレスと物理アドレスとのマッピングの変更が必要となったときにも発生する。この場合に関しても、逐次解釈部１１は、影響を受ける翻訳コードに関して無効化フラグを「ｔｒｕｅ」にする。
【００７１】
ここで、無効化された翻訳コード及び無効化されていない（有効な）翻訳コードのそれぞれと、ＧＣとの関係について説明する。無効化された翻訳コードは、不要な翻訳コードであり、今後使用することができない翻訳コードである。したがって、当該翻訳コードに関してＧＣが実行されることによる性能上の不利益は、相対的に小さいものと考えられる。一方、有効な翻訳コードは、今後も使用することができ、また、使用される可能性の有る翻訳コードである。したがって、当該翻訳コードに関してＧＣが実行されることによる性能上の不利益は、相対的に大きいものと考えられる。
【００７２】
以上に鑑みて、第三の実施の形態では、無効化された翻訳コードと有効な翻訳コードとの間で、ＧＣの実行後の実行回数に対する閾値を変えることができるようにする。すなわち、有効な翻訳コードは、早期に復帰されるように、閾値が実質的に下げられる。
【００７３】
このような制御を実現するため、第三の実施の形態の情報処理装置１０は、例えば、図１０に示されるような機能構成を有する。
【００７４】
図１０は、第三の実施の形態における情報処理装置の機能構成例を示す図である。同図において、情報処理装置１０は、強制破棄フラグ記憶部１６を更に有する。強制破棄フラグ記憶部１６は、例えば、メモリ装置１０３又は補助記憶装置１０２を用いて実現可能である。
【００７５】
強制破棄フラグ記憶部１６は、有効な翻訳コードであったが、ＧＣの実行により強制的に破棄された翻訳コードを識別するための情報（以下、「強制破棄フラグ」という。）を記憶する。但し、翻訳コードごとに強制破棄フラグを管理するのは、管理情報の増加を招く。そこで、本実施の形態において、強制破棄フラグは、実行対象プログラムＴｐのページ単位に管理される。
【００７６】
図１１は、強制破棄フラグ記憶部の構成例を示す図である。同図に示されるように、強制破棄フラグ記憶部１６は、ページアドレスごとに強制破棄フラグを記憶する。ページアドレスは、ページの開始アドレスである。ページのサイズは決まっているため、開始アドレスに基づいて、各ページの範囲が特定される。なお、ページのサイズは、ＯＳ（Operating System）によって管理されるページのサイズと必ずしも一致していなくてもよい。
【００７７】
ＧＣ実行時に既に無効化されていた翻訳コードを含むページに関しては、強制破棄フラグに「ｆａｌｓｅ」が記録され、有効であった翻訳コードのみを含むページに関しては、強制破棄フラグに「ｔｒｕｅ」が記録される。なお、強制破棄フラグは、当該翻訳コードの生成後に、実行対象プログラムＴｐにおいて当該翻訳コードに対応する命令が更新されていない翻訳コードを示す情報の一例である。
【００７８】
以下、第三の実施の形態の処理手順について説明する。図１２は、第三の実施の形態のＧＣの実行処理の処理手順の一例を説明するためのフローチャートである。同図は、一回のＧＣにおいて（すなわち、図３のＳ１３の一回の実行において）実行される処理である。
【００７９】
ステップＳ２０１において、翻訳コード破棄部１５は、強制破棄フラグ記憶部１６における、全てのページアドレスに対する強制破棄フラグを「ｆａｌｓｅ」に初期化する。続いて、翻訳コード破棄部１５は、破棄対象の翻訳コード群を決定する（Ｓ２０２）。破棄対象の決定方法は、公知の方法が用いられればよい。一部の翻訳コードが破棄対象とされてもよいし、全部の翻訳コードが破棄対象とされてもよい。
【００８０】
破棄対象の翻訳コード群が有る場合（Ｓ２０３でＹｅｓ）、翻訳コード破棄部１５は、当該翻訳コード群のうちの一つの翻訳コードを処理対象（以下、「対象翻訳コード」という。）とする（Ｓ２０４）。続いて、翻訳コード破棄部１５は、管理テーブル１４Ｔｂにおいて、対象翻訳コードに対応するレコードの無効化フラグを参照して、対象翻訳コードは無効化されているか否かを判定する（Ｓ２０５）。すなわち、無効化フラグが「ｔｕｒｅ」であるか「ｆａｌｓｅ」であるかが確認される。
【００８１】
対象翻訳コードが無効化されていない場合（Ｓ２０５でＮｏ）、翻訳コード破棄部１５は、実行対象プログラムＴｐのページの中で、対象翻訳コードが属するページのアドレスを求める（Ｓ２０６）。続いて、翻訳コード破棄部１５は、強制破棄フラグ記憶部１６において、当該ページのアドレスに対する強制破棄フラグの値を「ｔｒｕｅ」に更新する（Ｓ２０７）。すなわち、対象翻訳コードに関して、対象翻訳コードの生成後、実行対象プログラムＴｐにおいて対象翻訳コードに対応する命令は更新されていないことを示す情報が強制破棄フラグ記憶部１６に記録される。ここでいう更新とは、例えば、自己書き換え等による更新である。
【００８２】
続いて、翻訳コード破棄部１５は、対象翻訳コード、及び管理テーブル１４Ｔｂにおいて対象翻訳コードに対応するレコード等をコードキャッシュ部１４より破棄する（Ｓ２０８）。なお、対象翻訳コードが無効化されている場合（Ｓ２０５でＹｅｓ）、強制破棄フラグの更新は行われずに、対象翻訳コード等に関して破棄が実行される（Ｓ２０９）。
【００８３】
続いて、翻訳コード破棄部１５は、破棄対象の翻訳コード群に属する全ての翻訳コードについてステップＳ２０３以降を繰り返す。
【００８４】
図１２の処理の結果、強制破棄フラグ記憶部１６は、有効であった翻訳コードのみを含むページに関して「ｔｒｕｅ」を記憶した状態となる。
【００８５】
続いて、第三の実施の形態の逐次解釈部１１の処理手順について説明する。図１３は、第三の実施の形態の逐次解釈部の処理手順の一例を説明するためのフローチャートである。図１３中、図５と同一ステップには同一符号を付し、その説明は省略する。図１３では、ステップＳ１３２及びＳ１３３が追加されている。
【００８６】
ステップＳ１３２において、逐次解釈部１１は、分岐先アドレスを含むページに対する強制破棄フラグの値を強制破棄フラグ記憶部１６より取得する。取得された強制破棄フラグの値が「ｔｒｕｅ」である場合（Ｓ１３３でＹｅｓ）、ステップＳ１４０以降が実行される。すなわち、ＧＣ実行後の一定期間において、閾値が実質的に下げられる。一方、取得された強制破棄フラグの値が「ｆａｌｓｅ」である場合（Ｓ１３３でＮｏ）、ステップＳ１６０以降が実行される。すなわち、閾値の実質的な低下は行われない。
【００８７】
なお、図１３のステップＳ１４０、Ｓ１５０、Ｓ１６０、及びＳ１７０のそれぞれは、図７のステップＳ１４０ａ、Ｓ１５０ａ、Ｓ１６０ａ、又はＳ１７０ａに置き換えられてもよい。すなわち、第二の実施の形態と同様に、ＧＣ実行後の所定期間が、翻訳コード量によって計測されてもよい。
【００８８】
また、上記では、ページごとに強制破棄フラグが管理される例を示したが、翻訳コードごと（分岐先アドレスごと）に強制破棄フラグが管理されてもよい。この場合、より厳密に、無効化されていた翻訳コードと、有効であった翻訳コードとの閾値を実質的に変えることができる。
【００８９】
上述したように、第三の実施の形態によれば、使用される可能性が有った翻訳コードについて、使用される可能性の無い翻訳コードに比較して、ＧＣ実行後の復帰時期を早めることができる。その結果、翻訳コードの破棄による性能の低下期間を短縮することができる。
【００９０】
次に、第四の実施の形態について説明する。第四の実施の形態では、第一の実施の形態と異なる点について説明する。したがって、特に言及しない点については、第一の実施の形態と同様でよい。
【００９１】
図１４は、第四の実施の形態における情報処理装置の機能構成例を示す図である。同図において情報処理装置１０は、コードキャッシュ部１４ａ及びコードキャッシュ部１４ｂの二つのコードキャッシュ部１４を有する。
【００９２】
コードキャッシュ部１４ａ及びコードキャッシュ部１４ｂは、第一の実施の形態のコードキャッシュ部１４が二分割されたものでもよいし、第一の実施の形態のコードキャッシュ部１４の二つに相当するものであってもよい。
【００９３】
以下、第四の実施の形態の処理手順について説明する。図１５は、第四の実施の形態の翻訳コード破棄部の初期化処理の処理手順の一例を示す図である。同図の処理手順は、実行対象プログラムＴｐの一回の実行に関して、翻訳コード破棄部１５が最初に起動される際に実行される。
【００９４】
ステップＳ３０１において、翻訳コード破棄部１５は、コードキャッシュ部１４ａがカレントコードキャッシュであることをメモリ装置１０３に記録する。例えば、カレントコードキャッシュを特定するための変数に、コードキャッシュ部１４ａの先頭アドレスが代入される。なお、カレントコードキャッシュとは、使用対象とされるコードキャッシュ部１４をいう。
【００９５】
図１６は、第四の実施の形態のＧＣの実行処理の処理手順の一例を説明するためのフローチャートである。同図は、一回のＧＣにおいて（すなわち、図３のＳ１３の一回の実行において）実行される処理である。
【００９６】
ステップＳ３１１において、翻訳コード破棄部１５は、カレントコードキャッシュは、ラストコードキャッシュであることをメモリ装置１０３に記録する。例えば、カレントコードキャッシュを特定するための変数の値が、ラストコードキャッシュを特定するための変数に代入される。なお、ラストコードキャッシュとは、最後に使用されたコードキャッシュ部１４をいう。
【００９７】
続いて、翻訳コード破棄部１５は、コードキャッシュ部１４ａ及びｂのうち、ラストコードキャッシュでない方が、カレントコードキャッシュであることをメモリ装置１０３に記録する（Ｓ３１２）。すなわち、ステップＳ３１１及びＳ３１２では、カレントコードキャッシュとラストコードキャッシュとの入れ替えが行われる。具体的には、コードキャッシュ部１４ａ及びｂのうち、前回のＧＣ実行時から現時点までに使用対象でなかった方が、使用対象（カレントコードキャッシュ）とされる。
【００９８】
続いて、翻訳コード破棄部１５は、カレントコードキャッシュについてＧＣを実行する（Ｓ３１３）。
【００９９】
例えば、図１６の開始時点において、コードキャッシュ部１４ａがカレントコードキャッシュであったとする。コードキャッシュ部１４ａは、ＧＣが実行されるまで使用されていたため、翻訳コードが記録され、管理テーブル１４Ｔに対する記録等も行われている。
【０１００】
ステップＳ３１１及びＳ３１２の実行により、コードキャッシュ部１４ａはラストコードキャッシュとなり、コードキャッシュ部１４ｂがカレントコードキャッシュとなる。したがって、ステップＳ３１３では、コードキャッシュ部１４ｂが、ＧＣの対象とされる。その結果、コードキャッシュ部１４ａに対する記録内容は、退避（又は保存）された状態となる。
【０１０１】
このように、第四の実施の形態では、ＧＣまでにカレントコードキャッシュに対して行われた記録内容が退避される。
【０１０２】
続いて、図１７は、第四の実施の形態における翻訳部の処理手順の一例を説明するためのフローチャートである。図１７中、図３と同一ステップ（Ｓ６、Ｓ７）には同一ステップ番号を付し、その説明は省略する。
【０１０３】
図１７では、ステップＳ８の代わりにステップＳ８ａが実行される。ステップＳ８ａにおいて、翻訳部１３は、生成された翻訳コードをカレントコードキャッシュに記憶する。また、翻訳部１３は、カレントコードキャッシュの管理テーブル１４Ｔにおいて、翻訳要求に指定されたアドレスに対応する翻訳済フラグを「ｔｒｕｅ」に更新し、当該アドレスに対応する翻訳先アドレスに、翻訳コードが記憶されたアドレスを記録する。
【０１０４】
続いて、図１８は、第四の実施の形態の逐次解釈部の処理手順の一例を説明するためのフローチャートである。図１８中、図５と同一ステップには同一符号を付し、その説明は省略する。図１３では、ステップＳ１１０がステップＳ１１０ａに置き換えられ、ステップＳ１３１が追加されている。
【０１０５】
ステップＳ１１０ａにおいて、逐次解釈部１１は、カレントコードキャッシュの管理テーブル１４Ｔａを参照して、分岐先のアドレスに対する翻訳コードの有無を判定する。
【０１０６】
また、ステップＳ１３１において、逐次解釈部１１は、ラストコードキャッシュの管理テーブル１４Ｔａを参照して、分岐先のアドレスに対する翻訳コードの有無を判定する。ラストコードキャッシュに当該翻訳コードが有る場合（Ｓ１３１でＹｅｓ）、ステップＳ１４０以降が実行される。すなわち、ＧＣ実行後の一定期間において、閾値が実質的に下げられる。一方、ラストコードキャッシュに当該翻訳コード無い場合（Ｓ１３１でＮｏ）、ステップＳ１６０以降が実行される。すなわち、閾値の実質的な低下は行われない。
【０１０７】
なお、図１８のステップＳ１４０、Ｓ１５０、Ｓ１６０、及びＳ１７０のそれぞれは、図７のステップＳ１４０ａ、Ｓ１５０ａ、Ｓ１６０ａ、又はＳ１７０ａに置き換えられてもよい。すなわち、第二の実施の形態と同様に、ＧＣ実行後の所定期間が、翻訳コード量によって計測されてもよい。
【０１０８】
なお、上記では、カレントコードキャッシュ及びラストコードキャッシュに関して、コードキャッシュ部１４ａ及びコードキャッシュ部１４ｂを入れ替えることにより、カレントコードキャッシュの記憶内容を退避する例について説明した。但し、コードキャッシュ部１４ａが常に使用対象（カレントコードキャッシュ）とされてもよい。この場合、図１６のステップＳ３１１及びＳ３１２の代わりに、コードキャッシュ部１４ａの内容が、コードキャッシュ部１４ｂにコピーされる処理が実行されればよい。その結果、ＧＣ前のコードキャッシュ部１４ａの内容を退避することができる。なお、退避対象は、カレントコードキャッシュの記憶内容の全部でなくてよい。翻訳コードが生成されていた命令群を識別可能な情報が退避されればよい。本実施の形態では、管理テーブル１４Ｔａにおけるアドレスの値が退避されればよい。
【０１０９】
上述したように、第四の実施の形態によれば、過去に翻訳コードが生成されている命令群に関して、実質的に閾値を低下させることができる。したがって、斯かる命令群の翻訳を優先させることができる。過去に翻訳コードが生成されている命令群は、以降の実行頻度も高い傾向にある。したがって、斯かる命令群の翻訳コードの再生成が早期化されることにより、翻訳コードの破棄による性能の低下期間を短縮することができる。
【０１１０】
また、全ての命令群に関して一律に閾値が低下される場合に比べて、翻訳コード量の増大を抑制することができる。
【０１１１】
なお、ステップＳ１３１において、分岐先のアドレスに対する翻訳コードの有無のみではなく、分岐先アドレスに対する実行回数が閾値α以上であるか否かが判定されてもよい。当実行回数が閾値α以上であれば、ステップＳ１４０以降が実行され、閾値α未満であれば、ステップＳ１６０以降が実行されるようにしてもよい。そうすることで、より実行頻度の高い命令群に翻訳対象を限定することができる。この場合、退避対象には、管理テーブル１４Ｔａにおけるアドレスの値に加えて、実行回数の値が含まれるようにすればよい。また、閾値αは、ステップＳ１７０において利用される閾値と同じであってもよいし、異なっていてもよい。
【０１１２】
次に、第五の実施の形態について説明する。第五の実施の形態は、第三の実施の形態と第四の実施の形態とを組み合わせたものである。したがって、逐次解釈部１１は、図１９に示される処理を実行する。
【０１１３】
図１９は、第五の実施の形態の逐次解釈部の処理手順の一例を説明するためのフローチャートである。図１９は、図１８のステップＳ１３１の後に、図１６のステップＳ１３２及びＳ１３３が追加されたものである。同図の処理手順は、図１６及び図１８等より自明であるため省略する。
【０１１４】
第五の実施の形態によれば、第三及び第四の実施の形態の双方の効果を得ることができる。
【０１１５】
なお、上記各実施の形態において、翻訳部１３は、生成部の一例である。翻訳コード破棄部１５は、破棄部の一例である。コードキャッシュ部１４は、第一の記憶部の一例である。強制破棄フラグ記憶部１６は、第二の記憶部の一例である。
【０１１６】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【０１１７】
以上の説明に関し、更に以下の項を開示する。
（付記１）
実行対象プログラムに含まれる命令のうち、逐次解釈による実行回数が閾値以上となった命令の翻訳コードを生成して第一の記憶部に記憶し、
所定のタイミングで前記翻訳コードの一部又は全部を前記第一の記憶部より破棄する処理をコンピュータが実行し、
前記生成する処理は、前記翻訳コードが破棄されてから所定期間において、前記閾値を前記実行回数に対して相対的に低下させる
ことを特徴とする命令処理方法。
（付記２）
前記破棄する処理は、破棄対象の前記翻訳コードの中で、当該翻訳コードの生成後に前記実行対象プログラムにおいて当該翻訳コードに対応する命令が更新されていない翻訳コードを示す情報を第二の記憶部に記憶し、
前記生成する処理は、前記第二の記憶部が記憶する情報が示す前記翻訳コードに関して、破棄されてからの所定期間において前記閾値を低下させる付記１記載の命令処理方法。
（付記３）
前記破棄する処理は、前記第一の記憶部が前記翻訳コードに関連付けて記憶する該翻訳コードに対応する命令の識別情報を退避し、
前記生成する処理は、退避されている前記識別情報に係る命令に関して、破棄されてからの所定期間において前記閾値を低下させる付記１又は２記載の命令処理方法。
（付記４）
実行対象プログラムに含まれる命令のうち、逐次解釈による実行回数が閾値以上となった命令の翻訳コードを生成して第一の記憶部に記憶する生成部と、
所定のタイミングで前記翻訳コードの一部又は全部を前記第一の記憶部より破棄する破棄部とを有し、
前記生成部は、前記翻訳コードが破棄されてから所定期間において、前記閾値を前記実行回数に対して相対的に低下させる命令処理装置。
（付記５）
前記破棄部は、破棄対象の前記翻訳コードの中で、当該翻訳コードの生成後に前記実行対象プログラムにおいて当該翻訳コードに対応する命令が更新されていない翻訳コードを示す情報を第二の記憶部に記憶し、
前記生成部は、前記第二の記憶部が記憶する情報が示す前記翻訳コードに関して、破棄されてからの所定期間において前記閾値を低下させる付記４記載の命令処理装置。
（付記６）
前記破棄部は、前記第一の記憶部が前記翻訳コードに関連付けて記憶する該翻訳コードに対応する命令の識別情報を退避し、
前記生成部は、退避されている前記識別情報に係る命令に関して、破棄されてからの所定期間において前記閾値を低下させる付記４又は５記載の命令処理装置。
（付記７）
実行対象プログラムに含まれる命令のうち、逐次解釈による実行回数が閾値以上となった命令の翻訳コードを生成して第一の記憶部に記憶し、
所定のタイミングで前記翻訳コードの一部又は全部を前記第一の記憶部より破棄する処理をコンピュータに実行させ、
前記生成する処理は、前記翻訳コードが破棄されてから所定期間において、前記閾値を前記実行回数に対して相対的に低下させる命令処理プログラム。
（付記８）
前記破棄する処理は、破棄対象の前記翻訳コードの中で、当該翻訳コードの生成後に前記実行対象プログラムにおいて当該翻訳コードに対応する命令が更新されていない翻訳コードを示す情報を第二の記憶部に記憶し、
前記生成する処理は、前記第二の記憶部が記憶する情報が示す前記翻訳コードに関して、破棄されてからの所定期間において前記閾値を低下させる付記７記載の命令処理プログラム。
（付記９）
前記破棄する処理は、前記第一の記憶部が前記翻訳コードに関連付けて記憶する該翻訳コードに対応する命令の識別情報を退避し、
前記生成する処理は、退避されている前記識別情報に係る命令に関して、破棄されてからの所定期間において前記閾値を低下させる付記７又は８記載の命令処理プログラム。
【符号の説明】
【０１１８】
１０          情報処理装置
１１          逐次解釈部
１２          翻訳要求キュー
１３          翻訳部
１４          コードキャッシュ部
１５          翻訳コード破棄部
１６          強制破棄フラグ記憶部
１００        ドライブ装置
１０１        記録媒体
１０２        補助記憶装置
１０３        メモリ装置
１０４        ＣＰＵ
１０５        インタフェース装置
Ｂ            バス
【図１】
0005614348.tif 000002
【図２】
0005614348.tif 000003
【図３】
0005614348.tif 000004
【図４】
0005614348.tif 000005
【図５】
0005614348.tif 000006
【図６】
0005614348.tif 000007
【図７】
0005614348.tif 000008
【図８】
0005614348.tif 000009
【図９】
0005614348.tif 000010
【図１０】
0005614348.tif 000011
【図１１】
0005614348.tif 000012
【図１２】
0005614348.tif 000013
【図１３】
0005614348.tif 000014
【図１４】
0005614348.tif 000015
【図１５】
0005614348.tif 000016
【図１６】
0005614348.tif 000017
【図１７】
0005614348.tif 000018
【図１８】
0005614348.tif 000019
【図１９】
0005614348.tif 000020