(57)【要約】【課題】動的コンパイラにより生成された実行命令列と同一の実行命令列を再現することにより、動的コンパイラのデバッグを容易化する。【解決手段】コンピュータを、プログラムの実行状態を取得する実行状態取得部と、プログラムの実行中に、実行すべき一の部分プログラムを実行状態に基づきコンパイルし、実行状態に応じて異なる実行命令列を生成する動的コンパイル部と、コンピュータのメモリ上に割り当てられた記憶領域に、実行状態を記録する実行状態記録部と、コンピュータにより記憶装置に保存された、メモリ上に割り当てられた記憶領域の内容を含むファイルを、記憶装置から読み出すファイル読出部と、ファイルから取得した実行状態に基づき一の部分プログラムをコンパイルし、プログラムの実行中に動的コンパイル部が生成した実行命令列と同一の実行命令列を生成する再現コンパイル部として機能させるコンパイラプログラムを提供する。【選択図】図１
2005215884.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンピュータによりコンパイルさせるコンパイラプログラムであって、
前記コンピュータを、
前記プログラムの実行状態を取得する実行状態取得部と、
前記プログラムの実行中に、実行すべき一の前記部分プログラムを前記実行状態に基づきコンパイルし、前記実行状態に応じて異なる実行命令列を生成する動的コンパイル部と、
前記コンピュータのメモリ上に割り当てられた記憶領域に、前記実行状態を記録する実行状態記録部と、
前記コンピュータにより記憶装置に保存された、前記メモリ上に割り当てられた記憶領域の内容を含むファイルを、前記記憶装置から読み出すファイル読出部と、
前記ファイルから取得した前記実行状態に基づき前記一の部分プログラムをコンパイルし、前記プログラムの実行中に前記動的コンパイル部が生成した前記実行命令列と同一の実行命令列を生成する再現コンパイル部と
して機能させるコンパイラプログラム。
【請求項２】
前記コンピュータは、前記メモリ上に割り当てられた前記記憶領域の内容を、前記コンピュータ上で動作するオペレーティングシステムによりシステムダンプさせることにより、前記ファイルを前記記憶装置に保存し、
前記再現コンパイル部は、前記システムダンプを用いて保存された前記ファイルから取得した前記実行状態に基づき前記一の部分プログラムをコンパイルする
請求項１記載のコンパイラプログラム。
【請求項３】
前記実行状態取得部は、前記複数の部分プログラムのそれぞれについて、当該部分プログラムのコンパイル時に前記動的コンパイル部が参照すべき前記実行状態を取得し、
前記動的コンパイル部は、前記複数の部分プログラムのそれぞれについて、当該部分プログラムについて取得された前記実行状態に基づき当該部分プログラムをコンパイルして、当該部分プログラムの前記実行命令列を生成し、
前記実行状態記録部は、前記複数の部分プログラムのそれぞれについて、前記コンピュータの前記メモリ上に割り当てられた前記記憶領域に、当該部分プログラムについて取得された前記実行状態を記録し、
前記コンピュータは、前記プログラムの実行を終了した後に、前記メモリ上に割り当てられた記憶領域の内容を含む前記ファイルを前記記憶装置に保存し、
前記再現コンパイル部は、前記一の部分プログラムについて取得された前記実行状態を前記ファイルから取得して、前記一の部分プログラムを当該実行状態に基づきコンパイルし、前記プログラムの実行中に前記動的コンパイル部が前記一の部分プログラムをコンパイルして生成した前記実行命令列と同一の実行命令列を生成する
請求項１記載のコンパイラプログラム。
【請求項４】
前記実行状態記録部は、前記複数の部分プログラムのそれぞれについて、当該部分プログラムについて取得された前記実行状態に対応付けて、当該実行状態の次の前記実行状態が記録された前記記憶領域上の位置を指定するポインタを前記記憶領域に記録し、
前記再現コンパイル部は、前記ファイルから取得した前記記憶領域の内容における、いずれかの前記部分プログラムについて取得された前記実行状態と組となる前記ポインタから順に前記ポインタをたどっていくことにより、前記一の部分プログラムについて取得された前記実行状態が記録された前記記憶領域上の位置を特定して当該実行状態を取得する
請求項３記載のコンパイラプログラム。
【請求項５】
前記実行状態記録部は、いずれかの前記実行状態に対応付けて、予め定められた識別情報を前記記憶領域に記録し、
前記再現コンパイル部は、前記ファイルから取得された前記記憶領域の内容から、前記識別情報を検索することにより前記識別情報と対応付けられた前記実行状態が記憶された前記記憶領域上の位置を特定し、当該実行状態と組となるポインタから順に前記ポインタをたどっていくことにより、前記一の部分プログラムについて取得された前記実行状態が記憶された前記記憶領域上の位置を特定して当該実行状態を取得する
請求項４記載のコンパイラプログラム。
【請求項６】
前記実行状態取得部は、前記記憶領域中の第１の領域から、前記プログラムの実行に伴って更新されない第１の前記実行状態と、前記プログラムの実行に伴って更新される第２の前記実行状態とを取得し、
前記実行状態記録部は、前記第２の実行状態を、前記記憶領域における前記プログラムの実行に伴い更新されない第２の領域に記録し、
前記動的コンパイル部は、前記第１の領域から取得した前記第１の実行状態及び前記第２の実行状態に基づき、前記一の部分プログラムをコンパイルし、
前記再現コンパイル部は、前記一の部分プログラムを、前記ファイルに含めて保存された前記第１の領域から取得した前記第１の実行状態、及び、前記ファイルに含めて保存された前記第２の領域から取得した前記第２の実行状態に基づきコンパイルする
請求項１記載のコンパイラプログラム。
【請求項７】
前記ファイル読出部は、前記記憶装置から前記ファイルを読み出して、前記メモリ上に割り当てられた前記記憶領域の内容を、前記再現コンパイル部のメモリアドレス空間におけるアドレス位置が、前記動的コンパイル部のメモリアドレス空間における当該記憶領域のアドレス位置と同一となるように前記メモリに格納し、
前記再現コンパイル部は、前記動的コンパイル部が前記第１の実行状態を参照するために用いたアドレスと同一のアドレスを用いて、前記ファイル読出部により前記メモリに格納された前記第１の実行状態を参照する
請求項６記載のコンパイラプログラム。
【請求項８】
前記ファイル読出部は、前記メモリにおける、前記再現コンパイル部が既に使用しているアドレス位置以外のアドレス位置について、前記メモリ上に割り当てられた前記記憶領域の内容を、前記再現コンパイル部のメモリアドレス空間におけるアドレス位置が、前記動的コンパイル部のメモリアドレス空間における当該記憶領域のアドレス位置と同一となるように前記メモリに格納する請求項７記載のコンパイラプログラム。
【請求項９】
前記実行状態記録部は、前記複数の部分プログラムのうち、前記実行状態を前記ファイルに含める旨の選択情報に対応付けられた前記部分プログラムについて、前記実行状態を前記記憶領域に記録し、
前記再現コンパイル部は、前記実行状態を前記ファイルに含める旨の前記選択情報に対応付けられた前記一の部分プログラムを、前記ファイルから取得した前記実行状態に基づきコンパイルする
請求項１記載のコンパイラプログラム。
【請求項１０】
前記実行状態記録部は、前記一の部分プログラムについて取得された前記実行状態が、前記一の部分プログラムを以前にコンパイルした際に用いた前記実行状態と同一である場合に、当該一の部分プログラムについての前記実行状態の少なくとも一部を前記記憶領域に記録しない請求項１記載のコンパイラプログラム。
【請求項１１】
前記実行状態記録部は、前記一の部分プログラムのサイズが、予め定められたしきい値以上であることを条件として、当該一の部分プログラムについての前記実行状態を前記記憶領域に記録する請求項１記載のコンパイラプログラム。
【請求項１２】
前記実行状態記録部は、前記一の部分プログラムのコンパイルに要した時間が、予め定められたしきい値以上であることを条件として、当該一の部分プログラムについての前記実行状態を前記記憶領域に記録する請求項１記載のコンパイラプログラム。
【請求項１３】
当該コンパイラプログラムは、前記コンピュータを、前記一の部分プログラムをコンパイルして前記実行命令列を生成してから予め定められたしきい値以上の時間が経過している場合に、前記記憶領域に記録された前記一の部分プログラムについての前記実行状態を削除する実行状態削除部として更に機能させる請求項１記載のコンパイラプログラム。
【請求項１４】
当該コンパイラプログラムは、前記コンピュータを、前記一の部分プログラムをコンパイルして生成した前記実行命令列が予め定められたしきい値以上の回数実行された場合に、前記記憶領域に記録された前記一の部分プログラムについての前記実行状態を削除する実行状態削除部として更に機能させる請求項１記載のコンパイラプログラム。
【請求項１５】
当該コンパイラプログラムは、前記コンピュータを、前記一の部分プログラムをコンパイルして生成した前記実行命令列の処理時間が予め定められたしきい値以下である場合に、前記記憶領域に記録された前記一の部分プログラムについての前記実行状態を削除する実行状態削除部として更に機能させる請求項１記載のコンパイラプログラム。
【請求項１６】
プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンピュータによりコンパイルさせる動的コンパイラプログラムにより生成された実行命令列と同一の実行命令列をコンピュータにより生成させる再現コンパイラプログラムであって、
前記動的コンパイラプログラムは、前記コンピュータに、前記プログラムの実行状態を取得させ、実行すべき一の前記部分プログラムを前記実行状態に基づきコンパイルさせ、前記実行状態に応じて異なる実行命令列を生成させ、前記コンピュータのメモリ上に割り当てられた記憶領域に前記実行状態を記録させ、
前記コンピュータは、前記メモリ上に割り当てられた前記記憶領域の内容を含むファイルを記憶装置に保存し、
前記再現コンパイラプログラムは、前記コンピュータを、
前記ファイルを前記記憶装置から読み出すファイル読出部と、
前記一の部分プログラムを、前記ファイルから取得した前記実行状態に基づきコンパイルし、前記コンパイル部が生成した前記実行命令列と同一の実行命令列を生成する再現コンパイル部と
して機能させる再現コンパイラプログラム。
【請求項１７】
プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンピュータによりコンパイルさせる動的コンパイラプログラムが生成した実行命令列と同一の実行命令列を生成する再現コンパイラであって、
前記動的コンパイラプログラムは、前記コンピュータに、前記プログラムの実行状態を取得させ、実行すべき一の前記部分プログラムを前記実行状態に基づきコンパイルさせ、前記実行状態に応じて異なる実行命令列を生成させ、前記コンピュータのメモリ上に割り当てられた記憶領域に前記実行状態を記録させ、
前記コンピュータは、前記メモリ上に割り当てられた前記記憶領域の内容を含むファイルを記憶装置に保存し、
当該再現コンパイラは、
前記ファイルを前記記憶装置から読み出すファイル読出部と、
前記一の部分プログラムを、前記ファイルから取得した前記実行状態に基づきコンパイルし、前記コンパイル部が生成した前記実行命令列と同一の実行命令列を生成する再現コンパイル部と
を備える再現コンパイラ。
【請求項１８】
プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンピュータによりコンパイルさせる動的コンパイラプログラムであって、
前記コンピュータを、
前記複数の部分プログラムのそれぞれについて、当該部分プログラムのコンパイル時に前記動的コンパイル部が参照すべき前記実行状態を取得する実行状態取得部と、
前記複数の部分プログラムのそれぞれについて、当該部分プログラムについて取得された前記実行状態に基づき当該部分プログラムをコンパイルして、当該部分プログラムの前記実行命令列を生成する動的コンパイル部と、
前記複数の部分プログラムのそれぞれについて、前記コンピュータのメモリ上に割り当てられた記憶領域に、当該部分プログラムについて取得された前記実行状態と、当該実行状態の次の前記実行状態が記録された前記記憶領域上の位置を指定するポインタとを記録する実行状態記録部と
して機能させる動的コンパイラプログラム。
【請求項１９】
プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンピュータによりコンパイルさせるコンパイル方法であって、
前記プログラムの実行状態を前記コンピュータに取得させる実行状態取得段階と、
前記プログラムの実行中に、実行すべき一の前記部分プログラムを前記実行状態に基づき前記コンピュータによりコンパイルさせ、前記実行状態に応じて異なる実行命令列を前記コンピュータにより生成させる動的コンパイル段階と、
前記コンピュータのメモリ上に割り当てられた記憶領域に、前記実行状態を前記コンピュータにより記録させる実行状態記録段階と、
前記コンピュータにより、前記メモリ上に割り当てられた記憶領域の内容を含むファイルを記憶装置に保存させるファイル保存段階と、
前記コンピュータにより記憶装置に保存された、前記メモリ上に割り当てられた記憶領域の内容を含むファイルを、前記コンピュータにより前記記憶装置から読み出させるファイル読出段階と、
前記ファイルから取得した前記実行状態に基づき前記一の部分プログラムを前記コンピュータによりコンパイルし、前記プログラムの実行中に前記動的コンパイル段階により生成された前記実行命令列と同一の実行命令列を前記コンピュータにより生成する再現コンパイル段階と
を備えるコンパイル方法。
【請求項２０】
請求項１、請求項１６、及び請求項１８のいずれかに記載したプログラムを記録した、コンピュータにより読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイラプログラム、動的コンパイラプログラム、再現コンパイラプログラム、再現コンパイラ、コンパイル方法、及び記録媒体に関する。特に本発明は、動的コンパイラによりコンパイルされた実行命令列を再現するためのコンパイラプログラム、動的コンパイラプログラム、再現コンパイラプログラム、再現コンパイラ、コンパイル方法、及び記録媒体に関する。
【背景技術】
【０００２】
近年、例えばＪａｖａ（登録商標）プログラムの実行環境において、ＪＩＴ（Ｊｕｓｔ  Ｉｎ  Ｔｉｍｅ）コンパイラ等の動的コンパイラが用いられている。動的コンパイラは、Ｊａｖａ（登録商標）アプリケーション等のプログラムの実行中において、プログラムの未コンパイルの部分を実行する必要が生じた場合、プログラムのうち実行すべき部分である部分プログラムをコンパイルする。これにより、プログラム全体を最初にコンパイルした場合におけるプログラム起動の遅延を防ぎつつ、インタプリタ実行と比較し高速にプログラムを実行することができる。
【０００３】
プログラムをより高速に実行するため、動的コンパイラは、部分プログラムをコンパイルする際に、プログラムの実行状態を取得し、当該実行状態に最適化してコンパイルした実行命令列を生成する。動的コンパイラが実行命令列の最適化のために参照する実行状態としては、例えば、クラスがロードされているか否かの情報や、プログラムの実行時のプロファイルデータ等が挙げられる。そして、場合によっては、部分プログラムをある実行状態に最適化して既にコンパイルしている場合においても、当該部分プログラムを異なる実行状態に最適化して更にコンパイルする場合も有り得る。
【０００４】
このような動的コンパイラをデバッグする場合、動的コンパイラの動作がプログラムの実行状態に応じて変化するため、同一の部分プログラムをコンパイルしたとしても、動的コンパイラのバグを再現することができない場合がある。更に、プログラムを実行する環境と異なる実行環境でデバッグを行う場合においても、実行環境により実行状態が変わる結果、動的コンパイラのバグを再現することができない可能性もある。
【０００５】
従来、動的コンパイラによりコンパイルされた実行命令列を再現する技術として、プログラムの実行中において実行命令列の格納領域が不足した場合に、実行命令列を破棄すると共に実行状態を一時的に保持し、再度この実行命令列が必要となった場合に当該実行状態を用いて再コンパイルする技術が開示されている（非特許文献１参照。）。
【非特許文献１】K. Konno, H. Komatsu, K. Ishizaki, "Offset-safe Compilation Method for Fixed-size Code Area Management", Research Disclosure  (Japan) 11-1998, v41, n415, article 415108
【発明の開示】
【発明が解決しようとする課題】
【０００６】
非特許文献１では、プログラムの実行中において、破棄した実行命令列と同一の実行命令列を再現することができる。一方、動的コンパイラをデバッグするために、プログラムの実行を終えた後に、再現コンパイルを行う点については考慮されていない。
【０００７】
そこで本発明は、上記の課題を解決することのできるコンパイラプログラム、動的コンパイラプログラム、再現コンパイラプログラム、再現コンパイラ、コンパイル方法、及び記録媒体を提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【０００８】
本発明の第１の形態によると、プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンピュータによりコンパイルさせるコンパイラプログラムであって、前記コンピュータを、前記プログラムの実行状態を取得する実行状態取得部と、前記プログラムの実行中に、実行すべき一の前記部分プログラムを前記実行状態に基づきコンパイルし、前記実行状態に応じて異なる実行命令列を生成する動的コンパイル部と、前記コンピュータのメモリ上に割り当てられた記憶領域に、前記実行状態を記録する実行状態記録部と、前記コンピュータにより記憶装置に保存された、前記メモリ上に割り当てられた記憶領域の内容を含むファイルを、前記記憶装置から読み出すファイル読出部と、前記ファイルから取得した前記実行状態に基づき前記一の部分プログラムをコンパイルし、前記プログラムの実行中に前記動的コンパイル部が生成した前記実行命令列と同一の実行命令列を生成する再現コンパイル部として機能させるコンパイラプログラムと、当該コンパイラプログラムに関する動的コンパイラプログラム、再現コンパイラプログラム、再現コンパイラ、コンパイル方法、及び記録媒体を提供する。
【０００９】
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明の効果】
【００１０】
本発明によれば、動的コンパイラにより生成された実行命令列と同一の実行命令列を再現することにより、動的コンパイラのデバッグを容易化することができる。
【発明を実施するための最良の形態】
【００１１】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１２】
図１は、本実施形態に係るコンパイラシステム１０の構成を示す。コンパイラシステム１０は、プログラムの実行中において動的コンパイラ１００が部分プログラムを最適化コンパイルする際に参照した実行状態を、メモリの内容をファイルにダンプするシステムダンプ等の手段によりファイルとして記憶装置１４０に格納する。そして、このファイルに含まれる実行状態を用いて再現コンパイラ１５０により再現コンパイルすることにより、動的コンパイラ１００により生成された実行命令列と同一の実行命令列を生成する。これにより、動的コンパイラ１００の開発者は、プログラムのコンパイル時に発生した動的コンパイラ１００のバグを、プログラムの実行を終えた後に再現コンパイラ１５０において再現させることができ、動的コンパイラ１００のデバッグを効率良く行うことができる。
【００１３】
コンパイラシステム１０は、実行対象のプログラムの一部ずつを動的にコンパイルする動的コンパイラ１００及び動的コンパイラ１００によりコンパイルされた実行命令列を実行する部分プログラム実行部１３０を備えるプログラム実行システム９０と、動的コンパイラ１００がコンパイル時に参照したプログラムの実行状態を記憶装置１４０に保存するシステムダンプ部１３５と、例えばハードディスク等の記憶装置１４０と、動的コンパイラ１００によりコンパイルされた実行命令列と同一の実行命令列をコンパイルにより再現する再現コンパイラ１５０とを備える。
【００１４】
プログラム実行システム９０は、Ｊａｖａ（登録商標）バイトコード等の、コンピュータにより直接実行できないプログラムを実行する指示を受けて、動的コンパイラ１００及び部分プログラム実行部１３０の協調動作により当該プログラムを実行する。
動的コンパイラ１００は、コンピュータ上で動的コンパイラプログラムを実行することにより実現され、プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンパイルする。動的コンパイラ１００は、メモリ１０５と、実行状態取得部１１０と、動的コンパイル部１１５と、実行状態記録部１２０と、実行状態削除部１２５とを有する。
【００１５】
メモリ１０５は、動的コンパイラプログラムを実行するコンピュータのメモリ上に割り当てられた記憶領域である。より具体的には、メモリ１０５は、例えばプログラム実行システム９０がコンピュータのオペレーティングシステムにメモリ割り当てを要求することにより確保した記憶領域であり、動的コンパイラ１００及び／又は部分プログラム実行部１３０のスタック領域、ヒープ領域、又は、ｍｍａｐシステムコール等により割り当てられた記憶領域等であってよい。
【００１６】
実行状態取得部１１０は、部分プログラムのコンパイル時に動的コンパイル部１１５が参照すべきプログラムの実行状態を、メモリ１０５から取得する。動的コンパイル部１１５は、プログラムの実行中に、実行すべき一の部分プログラムを実行状態に基づき最適化してコンパイルし、実行状態に応じて異なる実行命令列を生成する。そして、動的コンパイル部１１５は、生成した実行命令列を、メモリ１０５に格納する。これにより、動的コンパイル部１１５により生成された実行命令列は、部分プログラム実行部１３０により読み出されて実行される。
【００１７】
実行状態記録部１２０は、動的コンパイル部１１５が当該一の部分プログラムをコンパイルする際に参照した実行状態を、メモリ１０５に記録する。実行状態削除部１２５は、実行状態記録部１２０によりメモリ１０５に記録された実行状態のうち、再現コンパイラ１５０による再現コンパイル時に参照される可能性が低い実行状態をメモリ１０５から削除する。
【００１８】
部分プログラム実行部１３０は、動的コンパイラ１００により生成された実行命令列を実行することにより、プログラムを実行する。また、部分プログラム実行部１３０は、例えばＪａｖａ仮想マシン等の機能を含み、一部の部分プログラムを動的コンパイラ１００によりコンパイルさせず、インタプリタにより実行してもよい。
【００１９】
システムダンプ部１３５は、メモリ１０５の内容を含むファイルを、記憶装置１４０に保存する。すなわち例えば、システムダンプ部１３５は、プログラムの実行を動的コンパイラ１００を実行するコンピュータ上で動作するオペレーティングシステムにより実現され、プログラムの実行終了時等にメモリ１０５をシステムダンプする等により、メモリ１０５の内容をファイルに保存する。
【００２０】
再現コンパイラ１５０は、コンピュータ上で再現コンパイラプログラムを実行することにより実現され、記憶装置１４０に保存されたファイルに含まれる実行状態を参照して、動的コンパイラ１００が生成した実行命令列と同一の実行命令列を生成する。ここで、再現コンパイラ１５０として動作するコンピュータは、動的コンパイラ１００として動作するコンピュータと同一であってよく、これに代えて異なるコンピュータであってもよい。再現コンパイラ１５０は、ファイル読出部１５５と、メモリ１６０と、再現コンパイル部１７０とを有する。
【００２１】
ファイル読出部１５５は、動的コンパイラ１００として機能するコンピュータ上のシステムダンプ部１３５により記憶装置１４０に保存された、メモリ１０５の内容を含むファイルを記憶装置１４０から読み出して、メモリ１６０に格納する。メモリ１６０は、再現コンパイラプログラムを実行するコンピュータのメモリ上に、再現コンパイラ１５０の要求により確保されて割り当てられた記憶領域である。
【００２２】
再現コンパイル部１７０は、動的コンパイラ１００の開発者から、再現コンパイルする部分プログラムの指定を受ける。次に、再現コンパイル部１７０は、指定された一の部分プログラムについての実行状態を、ファイルから取得されメモリ１６０に格納されたデータ中から取得する。次に、当該実行状態に基づき当該一の部分プログラムをコンパイルし、プログラムの実行中に動的コンパイル部１１５が生成した実行命令列と同一の実行命令列を生成する。ここで、再現コンパイル部１７０は、動的コンパイル部１１５と共通のコンパイルモジュールを用いて再現コンパイルを行ってもよく、これに代えて、デバッグに用いる情報を出力するコードを付加する等の変更を加えたコンパイルモジュールを用いて再現コンパイルを行ってもよい。このように動的コンパイル部１１５及び再現コンパイル部１７０のコンパイルモジュールとして、同一のコンパイルアルゴリズムに基づくコンパイルモジュールを使用すれば、同一の実行状態を入力として決定的に動作する結果、同一の実行命令列を生成させることができる。
そして、再現コンパイル部１７０は、再現コンパイル部１７０を実行した結果得られるデバッグ用の情報等のコンパイル結果を、動的コンパイラ１００の開発者に対して出力する。
【００２３】
図２は、本実施形態に係るコンパイラシステム１０の、プログラム実行時の動作フローを示す。
動的コンパイラ１００は、プログラムに含まれる複数の部分プログラムのうち、次に実行すべき部分プログラムを順次コンパイルする。そして、部分プログラム実行部１３０は、コンパイルにより生成された実行命令列を順次実行することにより、プログラムを実行する。ここで、部分プログラムは、例えばプログラム中のメソッド、関数、基本ブロック等であってよい。
【００２４】
まず、部分プログラム実行部１３０は、プログラムの実行中において、次に実行するべき部分プログラムがコンパイル済であるかどうかを判断する（Ｓ２００）。当該部分プログラムがコンパイル済である場合、部分プログラム実行部１３０は、当該部分プログラムの再コンパイルが必要かどうかを判断する（Ｓ２０５）。ここで、部分プログラム実行部１３０は、当該部分プログラムが頻繁に実行される場合や、現在の実行状態と異なる実行状態に最適化されてコンパイルされている場合等において、当該部分プログラムの再コンパイルが必要と判断してよい。
【００２５】
当該部分プログラムがコンパイルされていない場合（Ｓ２００：Ｎｏ）、又は、当該部分プログラムの再コンパイルが必要と判断した場合（Ｓ２０５：Ｙｅｓ）、部分プログラム実行部１３０は、動的コンパイラ１００内の実行状態取得部１１０に当該部分プログラムのコンパイルを指示する。
【００２６】
部分プログラム実行部１３０から当該部分プログラムのコンパイルを指示されると、実行状態取得部１１０は、プログラムの実行状態をメモリ１０５から取得する（Ｓ２１０）。すなわち実行状態取得部１１０は、当該部分プログラムを最適化コンパイルする動的コンパイル部１１５に参照させるために、当該部分プログラムの実行時におけるプログラムの実行状態をメモリ１０５から取得する。
【００２７】
ここで、動的コンパイル部１１５が最適化コンパイルを行うために参照する実行状態は、プログラムの実行に伴って更新されない第１の実行状態と、プログラムの実行に伴って更新される第２の実行状態とに分類される。
【００２８】
第１の実行状態としては、以下に例示するものが挙げられる。
（１）コンピュータ上でプログラム実行システム９０を起動する際に指定したコンパイルオプション
（２）プログラムの実行開始時にＪａｖａ（登録商標）クラスファイルから部分プログラム実行部１３０により読み込まれてメモリ１０５に格納された、静的なクラスデータ
例えばバイトコード、定数表、及び、クラスやメソッドの属性等である。ここで、プログラム実行システム９０が動的にクラスをロードする実行環境の場合、プログラムの実行に伴い参照可能なクラスの数が増加していく。このため、システムダンプ部１３５は、プログラムの実行終了時にメモリ１０５の内容をファイルとして保存すれば、ロードされた全てのクラスについてのクラスデータをまとめて保存することができる。
一方、プログラム実行システム９０がクラスをアンロードする可能性がある実行環境である場合、動的コンパイル部１１５は、アンロードされたクラスについての状態を記録した記憶領域を解放しないこととしてよい。これにより、システムダンプ部１３５は、アンロードされたクラスについてのクラスデータについても、ファイルとして保存することができる。
【００２９】
また、第２の実行状態としては、以下に例示するものが挙げられる。
（３）動的なクラスデータ
クラスが初期化済みか否かについての情報や、定数表内の外部参照が解決しているか否かについての情報等である。
（４）クラス階層情報
部分プログラムのコンパイル時においてロードされているクラスの継承関係についての情報である。例えば、ａｂｓｔｒａｃｔでない仮想メソッド、ａｂｓｔｒａｃｔメソッド、及び、インターフェイスメソッドについて、これらのメソッドが継承されておらず、ロード済みクラス内での実装が１個のみであるか否か等の情報である。
（５）動的コンパイル部１１５が生成したデータ
動的コンパイル部１１５は、コンパイル中の解析結果の一部をメモリ１０５に格納し、以後のメソッドの最適化コンパイルに利用してもよい。
（６）プログラム実行中のプロファイルデータ
部分プログラム実行部１３０は、部分プログラムの実行頻度や、変数に代入される値の出現頻度等の、プログラムの振る舞いについての統計データをプロファイルデータとして採取してもよい。そして、動的コンパイル部１１５は、このプロファイルデータを実行状態として参照して、最適化コンパイルに利用してもよい。
【００３０】
Ｓ２１０において、実行状態取得部１１０は、メモリ１０５中における、プログラム実行中に動的コンパイラ１００及び部分プログラム実行部１３０の作業領域として用いられる第１領域１０６から、以上に示した第１の実行状態及び第２の実行状態の両方を取得する。
【００３１】
次に、動的コンパイル部１１５は、Ｓ２１０において取得された第１の実行状態及び第２の実行状態に基づいて、当該部分プログラムをコンパイルし、実行命令列を生成する（Ｓ２１５）。ここで、動的コンパイル部１１５は、実行状態に応じて異なる最適化コンパイルを行い、実行状態に応じて異なる実行命令列を生成する。
【００３２】
次に、実行状態記録部１２０は、Ｓ２１０において取得された実行状態をメモリ１０５に記録するか否かを判断し（Ｓ２２０）、記録対象の実行状態をメモリ１０５に記録する（Ｓ２２５）。すなわち、Ｓ２１０において取得された全ての実行状態をメモリ１０５に記録した場合、実行状態を記録するために使用する記憶領域が大きくなり、実行対象のプログラムが使用する命令／データ領域の大きさを制限すると共に、プログラムの実行速度を低下させる。そこで、実行状態記録部１２０は、予め定められた条件を満たす実行状態のみをメモリ１０５に記録することにより、プログラムの実行効率の低下を抑える。
【００３３】
より具体的には、実行状態記録部１２０は、以下に例示する条件に基づいて、実行状態をメモリ１０５に記録するか否かを判断する。
（１）選択した部分プログラムについてのみ実行状態を記録
実行状態記録部１２０は、複数の部分プログラムのうち、実行状態をファイルに含める旨の選択情報に対応付けられた部分プログラムについて、実行状態をメモリ１０５に記録してよい。この結果、再現コンパイル部１７０は、実行状態をファイルに含める旨の選択情報に対応付けられた部分プログラムについては、ファイルから取得した実行状態に基づいてコンパイルし、同一の実行命令列を再現することができる。一方、当該選択情報に対応付けられていない部分プログラムについては、同一の実行命令列を再現することができなくなる。
【００３４】
すなわち、動的コンパイラ１００の開発者は、コンパイル時に問題が生じる可能性が高い部分プログラムに、実行状態をファイルに含める旨の選択情報を予め付加しておく。実行状態記録部１２０は、この選択情報に基づいて、コンパイル時に問題が生じる可能性が高い部分プログラムについての実行状態を記録する一方、選択されていない部分プログラムについて実行状態を記録しないことにより、実行状態を記録する量を低減する。
【００３５】
例えばＪａｖａ（登録商標）プログラムにおける「ｊａｖａ．ｌａｎｇ」や「ｊａｖａ．ｍａｔｈ」等に含まれる、標準クラス内のメソッド等の部分プログラムについては、使用頻度が高く動的コンパイラ１００の開発過程で十分にテストされているため、コンパイル時に問題が生じる可能性は低い。一方、標準クラスに含まれないアプリケーションプログラム中のメソッド等の部分プログラムは、標準クラス内の部分プログラムと比較し実行頻度が低く、コンパイル時に問題が生じる可能性が高い。そこで、標準クラス内の部分プログラムについては実行状態をファイルに含める旨の選択情報を付加せず、アプリケーションプログラム内の部分プログラムについては実行状態をファイルに含める旨の選択情報を付加しておけば、実行状態記録部１２０は、問題が生じる可能性が高い部分プログラムについてのみ実行状態を記録することができる。
【００３６】
（２）同一の部分プログラムについて同一の実行状態を記録しない
実行状態記録部１２０は、一の部分プログラムについて取得された実行状態が、当該一の部分プログラムを以前にコンパイルした際に用いた実行状態と同一である場合に、当該一の部分プログラムについての実行状態の少なくとも一部を記憶領域に記録しなくてもよい。これにより、同一の部分プログラムを複数回コンパイルした場合において、過去に参照した実行状態と同一の実行状態を参照してコンパイルした場合には実行状態を記録せず、当該実行状態を用いて再現コンパイルができなくなる。しかしながら、同一の実行状態を用いて既にコンパイルされている場合には、コンパイル時に問題が生じる可能性が低いため、実行状態を記録する量を効率良く低減することができる。また、実行状態記録部１２０は、過去に記録した実行状態を用いれば、同一の実行状態を用いて再現コンパイルを行うこともできる。
【００３７】
ここで実行状態記録部１２０は、過去のコンパイル時にエラーが発生する等の問題が生じていないことを更に条件として、過去に参照した実行状態と同一の実行状態について記録を行わないこととしてもよい。
【００３８】
（３）コンパイル時の処理量が大きいと判断した部分プログラムについてのみ実行状態を記録
実行状態記録部１２０は、コンパイル時の作業量が大きいと判断した部分プログラムについてのみ実行状態を記録してもよい。より具体的には、実行状態記録部１２０は、一の部分プログラムのサイズが、予め定められたしきい値以上であることを条件として、当該一の部分プログラムについての実行状態を記憶領域に記録し、当該しきい値未満の場合に、当該一の部分プログラムについての実行状態を記録しない。コンパイル対象のプログラムのサイズが大きいほど、コンパイル時の処理量が大きくなるのが一般的であるため、この判断により動的コンパイラ１００の負担が大きい部分プログラムについての実行状態のみを効率良く記録することができる。
【００３９】
また、実行状態記録部１２０は、一の部分プログラムのコンパイルに要した時間が、予め定められたしきい値以上であることを条件として、当該一の部分プログラムについての実行状態を記憶領域に記録し、当該しきい値未満の場合に当該一の部分プログラムについての実行状態を記録しなくてもよい。コンパイルに要した時間が大きいほど、コンパイル時の処理量が大きいのが一般的であるため、この判断によっても動的コンパイラ１００の負担が大きい部分プログラムについての実行状態のみを効率良く記録することができる。
【００４０】
また、実行状態記録部１２０は、プログラムの実行に伴って第１領域１０６上で更新される第２の実行状態のみを、メモリ１０５における、プログラムの実行に伴い更新されない第２領域１０７に記録し、第１の実行状態については第２領域１０７に複製を記録しなくてもよい。これにより、動的コンパイラ１００が最適化のために参照する実行状態の大部分は、静的なクラスデータ等の第１の実行状態に分類される情報であるから、第２領域１０７に記録する実行状態のサイズを低減することができる。
【００４１】
以上において、実行状態記録部１２０は、動的コンパイル部１１５が生成した実行命令列が格納されたメモリ１０５のアドレスを実行状態に含めて記録する。そして再現コンパイル部１７０は、このアドレスを、再現コンパイル時において再現に用いるべき実行状態の選択に用いてもよい。
【００４２】
次に、部分プログラム実行部１３０は、動的コンパイラ１００により生成された実行命令列を実行することにより、部分プログラムを実行する（Ｓ２３０）。次に、実行状態削除部１２５は、実行状態記録部１２０によりメモリ１０５に記録された実行状態のうち、削除すべき実行状態があるか否かを判断し（Ｓ２３５）、再現コンパイラ１５０による再現コンパイル時に参照される可能性が低い実行状態をメモリ１０５から削除する（Ｓ２４０）。これにより、メモリ１０５に記録している実行状態の数を低減させることができ、メモリの利用効率が低下するのを防ぐことができる。
【００４３】
より具体的には、実行状態削除部１２５は、以下に例示する条件に基づいて、実行状態をメモリ１０５から削除するか否かを判断する。
（１）コンパイル後一定以上の時間が経過した部分プログラムについての実行状態を削除
コンパイル時に発生した問題は、コンパイル後数回以内の実行時において検出されるものが大半である。そこで、実行状態削除部１２５は、部分プログラムをコンパイルして実行命令列を生成してから予め定められたしきい値以上の時間が経過している場合に、記憶領域に記録された、当該部分プログラムについての実行状態を削除してよい。
【００４４】
（２）コンパイル後一定の回数以上実行された部分プログラムについての実行状態を削除
コンパイル後に一定の回数以上正常に実行された部分プログラムについては、正常にコンパイルされており今後問題が発生する可能性が低いと見なすことができる。そこで、実行状態削除部１２５は、部分プログラムをコンパイルして生成した実行命令列が予め定められたしきい値以上の回数実行された場合に、記憶領域に記録された当該部分プログラムについての実行状態を削除してもよい。
【００４５】
（３）実行時間が一定時間以下の部分プログラムについての実行状態を削除
部分プログラムをコンパイルして生成した実行命令列の処理時間が一定時間以下であった場合、当該実行命令列の複雑度は低く問題が発生する可能性が低いと見なすことができる。そこで、実行状態削除部１２５は、部分プログラムをコンパイルして生成した実行命令列の処理時間が予め定められたしきい値以下である場合に、記憶領域に記録された当該部分プログラムについての実行状態を削除してもよい。
【００４６】
以上において、実行状態削除部１２５は、メモリ１０５上に設けられたバッファに実行状態を格納し、当該バッファが溢れた時点で上記のいずれかの処理を行い実行状態を削除してもよい。すなわち、実行状態削除部１２５は、バッファが溢れたことを更に条件として、バッファ内の全実行状態のうち、実行命令列を生成してからの経過時間が全実行状態のうち最大の実行状態、実行された回数が最大の部分プログラムについての実行状態、又は、実行時間が最小の部分プログラムについての実行状態を削除してもよい。
【００４７】
また、Ｓ２２０及びＳ２２５において、実行状態記録部１２０により全ての実行状態をメモリ１０５に記録させておき、実行状態削除部１２５がＳ２３０に関連して説明した実行状態の記録条件及びＳ２４０に関連して説明した実行状態の削除条件に基づいて優先度の低い実行状態を判断し、メモリ１０５から削除してもよい。
【００４８】
動的コンパイラ１００及び部分プログラム実行部１３０は、以上に示したＳ２００からＳ２４０の処理を、プログラムの実行が終了するまで繰り返し行う（Ｓ２４５）。これにより、実行状態取得部１１０は、Ｓ２１０において、複数の部分プログラムのそれぞれについて、当該部分プログラムのコンパイル時に動的コンパイル部１１５が参照すべき実行状態を取得する。また、動的コンパイル部１１５は、Ｓ２１５において、複数の部分プログラムのそれぞれについて、当該部分プログラムについて取得された実行状態に基づき当該部分プログラムをコンパイルして、当該部分プログラムの実行命令列を生成する。また、実行状態記録部１２０は、Ｓ２２０及びＳ２２５において、複数の部分プログラムのそれぞれについて、メモリ１０５に当該部分プログラムについて取得された実行状態を記録する。また、部分プログラム実行部１３０は、Ｓ２３０において、複数の部分プログラムのそれぞれを順次実行する。そして、実行状態削除部１２５は、Ｓ２３５及びＳ２４０において、メモリ１０５に記録された複数の実行状態のうち、不要と判断した実行状態を削除する。
【００４９】
プログラムの実行を終了した後、システムダンプ部１３５は、メモリ１０５の内容を含むファイルを記憶装置１４０に保存する。これにより、システムダンプ部１３５は、複数の部分プログラムのそれぞれについて実行状態記録部１２０により記録された各実行状態を、まとめてファイルに保存することができる。本実施形態に係るシステムダンプ部１３５は、プログラムの実行を動的コンパイラ１００を実行するコンピュータ上で動作するオペレーティングシステムにより実現され、プログラムの実行終了時にメモリ１０５をシステムダンプして、メモリ１０５の内容をファイルに保存する。このため、動的コンパイラ１００及び部分プログラム実行部１３０によるプログラム実行が正常終了した場合のみならず、異常終了した場合についても、実行状態を含むメモリ１０５の内容を一括してファイルに保存することができる。
【００５０】
図３は、本実施形態に係るコンパイラシステム１０の、再現コンパイル時の動作フローを示す。
まず、再現コンパイル部１７０は、動的コンパイラ１００の開発者から再現コンパイルする部分プログラムの指定を入力する（Ｓ３００）。ここで再現コンパイル部１７０は、開発者から再現すべき実行命令列のアドレスの指定を受けて、当該アドレスに格納された実行命令列の元となった部分プログラムを、再現コンパイルする対象の部分プログラムとしてもよい。これにより、開発者は、プログラムの実行が異常終了した際のプログラムカウンタの値を、再現すべき実行命令列のアドレスとして指定して、プログラムの実行が異常終了した際に実行していた実行命令列を再現させることができる。
【００５１】
また再現コンパイル部１７０は、例えばプログラム実行時に動的コンパイル部１１５から採取された、各部分プログラムをコンパイルした順序等を入力して開発者に提示し、このコンパイル順序の中から再現コンパイルする部分プログラムの指定を受けてもよい。
【００５２】
次にファイル読出部１５５は、当該部分プログラムの実行状態を含むファイルを記憶装置１４０から読み出して、再現コンパイラ１５０に割り当てられたメモリ１６０に格納する（Ｓ３１０）。これにより、ファイル読出部１５５は、メモリ１０５中の第１領域１０６及び第２領域１０７をメモリ１６０中の第１領域１６１及び第２領域１６２としてそれぞれ格納する。
【００５３】
次に、再現コンパイル部１７０は、指定された部分プログラムのコンパイルに用いるために実行状態取得部１１０により取得された実行状態をメモリ１６０から取得することにより、システムダンプを用いて保存されたファイルに含まれる当該実行状態を取得する。そして、再現コンパイル部１７０は、当該部分プログラムを当該実行状態に基づきコンパイルし、プログラムの実行中に動的コンパイル部１１５が一の部分プログラムをコンパイルして生成した実行命令列と同一の実行命令列を生成する。更に再現コンパイル部１７０は、生成した実行命令列を、メモリ１６０中における再現コンパイラ１５０に割り当てられた作業領域である第３領域１６３に格納する（Ｓ３３０）。
【００５４】
そして、再現コンパイル部１７０は、再現コンパイル部１７０を実行した結果得られるデバッグ用の情報等のコンパイル結果を、動的コンパイラ１００の開発者に対して出力する（Ｓ３４０）。
【００５５】
以上の図１から３に示したコンパイラシステム１０によれば、複数の部分プログラムのそれぞれについて、当該部分プログラムのコンパイル時に参照した実行状態をシステムダンプ等の手段によりファイルに保存しておくことができる。そして、再現コンパイラ１５０は、当該ファイルから実行状態を取得して再現コンパイルすることにより、動的コンパイラ１００が生成した実行命令列と同一の実行命令列を生成することができ、動的コンパイラ１００のデバッグ効率を高めることができる。
【００５６】
なお、動的コンパイラ１００における実行状態取得部１１０が、プログラム実行システム９０により提供されるＡＰＩ等のサブルーチンを用いて実行状態を取得する構成を採る場合、再現コンパイラプログラムは、動的コンパイラ１００における、実行状態を取得するＡＰＩを変更することにより実現されてもよい。より具体的には、動的コンパイラ１００により呼び出されて実行状態を動的コンパイラ１００に返すＡＰＩにおける、第２の実行状態を取得する処理を、動的記憶領域４０６を参照する処理に代えて実行状態４２５を参照する処理に変更する。これにより、再現コンパイル部１７０は、第１の実行状態については第１領域１０６の内容を格納した第１領域１６１から取得し、第２の実行状態については第２領域１０７の内容を格納した第２領域１６２から取得することができ、動的コンパイラ１００のＡＰＩを変更して再現コンパイラ１５０を実現することができる。
【００５７】
図４は、本実施形態に係るプログラム実行システム９０及び再現コンパイラ１５０のメモリアドレス空間を示す。
動的コンパイラ１００及び部分プログラム実行部１３０として機能するコンピュータは、プログラム実行システム９０からの要求を受けて、動的コンパイラ１００及び部分プログラム実行部１３０にメモリ１０５を割り当てる。メモリ１０５は、動的コンパイラ１００及び部分プログラム実行部１３０のメモリアドレス空間に、記憶領域４００としてマッピングされる。
【００５８】
記憶領域４００中における、プログラムの実行に伴い更新されない静的記憶領域４０５及びプログラムの実行に伴い更新される動的記憶領域４０６は、動的コンパイラ１００及び部分プログラム実行部１３０がプログラムを実行するために用いる作業領域である第１領域１０６に含まれる。
【００５９】
各部分プログラムをコンパイルする際に、実行状態取得部１１０は、各プログラムのコンパイル時に動的コンパイル部１１５が参照すべき実行状態として、プログラムの実行に伴って更新されない第１の実行状態を静的記憶領域４０５から取得し、プログラムの実行に伴って更新される第２の実行状態を動的記憶領域４０６から取得する。動的コンパイル部１１５は、実行状態取得部１１０により取得された第１の実行状態及び第２の実行状態に基づき、コンパイル対象の部分プログラムをコンパイルし、実行命令列を生成して記憶領域４００に格納する。
【００６０】
実行状態記録部１２０は、プログラムの実行に伴って更新される動的記憶領域４０６から取得された第２の実行状態を、プログラムの実行に伴い更新されない第２領域１０７に記録する。より具体的には、第２領域１０７は、各部分プログラムについて記録すべき実行状態４２５ａ〜ｂに対応付けて、当該実行状態の次の実行状態が記録された記憶領域４００上の位置を指定するポインタ４２０ａ〜ｂを記憶領域４００に記録する。すなわち例えば、ある部分プログラムについて実行状態４２５ａを記録し、次にコンパイルされた部分プログラムについて実行状態４２５ｂを記録する場合、実行状態記録部１２０は、実行状態４２５ａに対応付けて、次の部分プログラムの実行状態４２５ｂが記録された記憶領域４００上の位置を指定するポインタ４２０ａを記録する。これに代えて、実行状態記録部１２０は、複数の実行状態４２５を、片方向リンクリスト構造以外の構造、すなわち例えば、双方向リンクリスト構造や木構造等のデータ構造として記録してもよい。
また、第２領域１０７は、実行状態４２５ａ〜ｂに対応付けて、当該実行状態の大きさを示すサイズ４１５ａ〜ｂを更に記録し、実行状態４２５ａ〜ｂのそれぞれが記録された記憶領域の範囲を指定してもよい。
【００６１】
また、実行状態記録部１２０は、いずれかの実行状態４２５に対応付けて、予め定められたデータ値を有する識別情報４１０を記憶領域４００に記録してもよい。例えば実行状態記録部１２０は、実行状態４２５ａ〜ｂをポインタ４２０ａ〜ｂにより一方向のリスト構造として記録する場合、リストの先頭に位置する実行状態４２５ａに対応付けて静的記憶領域４０５を記録する。これにより、再現コンパイル部１７０は、ファイルとして保存された記憶領域４００から識別情報４１０を検索して実行状態４２５ａを取得し、ポインタ４２０ａから順にポインタ４２０をたどっていくことにより各実行状態４２５を取得することができる。
【００６２】
部分プログラム実行部１３０は、動的コンパイル部１１５により記憶領域４００に格納された実行命令列を実行する。この実行により、プログラム中の変数の値が変化し、動的なクラスデータ等が更新される結果、動的記憶領域４０６の内容が更新される。そして、プログラムの実行を終えると、システムダンプ部１３５は、記憶領域４００の内容を含むファイルを記憶装置１４０に保存する。
【００６３】
次に、再現コンパイラ１５０として機能するコンピュータは、再現コンパイラ１５０からの要求を受けて、再現コンパイラ１５０にメモリ１６０を割り当てる。メモリ１６０は、再現コンパイラ１５０のメモリアドレス空間に、記憶領域４５０としてマッピングされる。
【００６４】
次に、ファイル読出部１５５は、記憶装置１４０から当該ファイルを読み出して、メモリ１０５上に割り当てられた記憶領域４００の内容を、記憶領域４５０に含まれる記憶領域４５１としてメモリ１６０に格納する。この際、ファイル読出部１５５は、記憶領域４００の内容を、再現コンパイル部１７０のメモリアドレス空間におけるアドレス位置が、動的コンパイル部１１５のメモリアドレス空間における当該記憶領域４００のアドレス位置と同一となるようにする。この結果、記憶領域４００中のアドレスＸに格納されていた静的記憶領域４０５は、アドレスＸに位置する静的記憶領域４５５として記憶領域４５１に格納される。同様に、記憶領域４００中の識別情報４１０、サイズ４１５ａ〜ｂ、ポインタ４２０ａ〜ｂ、及び、実行状態４２５ａ〜ｂは、識別情報４６０、サイズ４６５ａ〜ｂ、ポインタ４７０ａ〜ｂ、及び、実行状態４７５ａ〜ｂとして記憶領域４５１にそれぞれ格納される。なお、動的記憶領域４０６は、プログラムの実行に伴って更新される結果、部分プログラムのコンパイルに用いた実行状態は失われる。
【００６５】
また、再現コンパイラ１５０は、再現コンパイル時において使用する作業領域として、ファイルから読み出してメモリ１６０に格納された記憶領域４００と重ならない第３領域１６３である作業領域４８０を使用する。これにより、再現コンパイル部１７０は、プログラムの実行終了時における記憶領域４００の内容を上書きすることなく参照することができる。
【００６６】
再現コンパイル部１７０は、部分プログラムの再現コンパイルする指示を受けると、当該部分プログラムのコンパイル時に動的コンパイル部１１５が参照した実行状態を記憶領域４５１から取得して、この実行状態に基づいて当該部分プログラムをコンパイルし、動的コンパイル部１１５が生成した実行命令列と同一の実行命令列を生成する。
【００６７】
ここで、再現コンパイル部１７０は、プログラムの実行に伴って更新されない第１の実行状態については、動的コンパイル部１１５が第１の実行状態を参照するために用いたアドレスと同一のアドレスを用いて、ファイル読出部１５５によりメモリに格納された記憶領域４５１中から参照する。これにより、再現コンパイル部１７０は、第１の実行状態については動的コンパイル部１１５と同一の処理を行って同一の実行状態を取得することができる。
【００６８】
一方、再現コンパイル部１７０は、第２の実行状態については、ファイルから取得した記憶領域４００の内容における、いずれかの部分プログラムについて取得された実行状態４７５と組となるポインタ４７０から順にポインタ４７０をたどっていくことにより、当該部分プログラムについて取得された実行状態４７５が記録された記憶領域４５１上の位置を特定して当該実行状態４７５を取得する。
【００６９】
ここで実行状態記録部１２０により識別情報４１０が記録されている場合、再現コンパイル部１７０は、まず、ファイルから取得された記憶領域４００の内容が格納された記憶領域４５１から、予め定められたデータ値である識別情報４６０を検索することにより、識別情報４６０と対応付けられた実行状態４７５ａが記憶された記憶領域４５１上の位置を特定する。そして、再現コンパイル部１７０は、当該実行状態４７５ａと組となるポインタ４７０ａから順にポインタ４７０をたどっていくことにより、当該部分プログラムについて取得された実行状態４７５が記憶された記憶領域４５１上の位置を特定して、当該部分プログラムについての当該実行状態４７５を取得する。これにより、再現コンパイル部１７０は、再現コンパイルの対象となる部分プログラムについての実行状態４７５を、記憶領域４５１から適切に選択して取得することができる。
【００７０】
以上に示したコンパイラシステム１０によれば、実行状態記録部１２０は、プログラムの実行に伴って更新される第１領域１０６から、部分プログラムのコンパイル時に動的コンパイル部１１５により参照された第２の実行状態を取得して、第２領域１０７に記録して記憶装置１４０に保存させることができる。これにより、再現コンパイル部１７０は、ファイルから取得された記憶領域４００の内容から、再現コンパイルを指定された部分プログラムについて取得された実行状態を適切に取得して、動的コンパイル部１１５により生成された実行命令列と同一の実行命令列を生成することができる。したがって、コンパイラシステム１０は、プログラム全体をプログラム実行システム９０上で再度動作させて、同一の問題を発生させるよう試行することなく、コンパイル時に問題が生じた特定の部分プログラムの再現コンパイルを行うことができる。
【００７１】
図５は、本実施形態の変形例に係る動的コンパイラ１００及び再現コンパイラ１５０のメモリアドレス空間を示す。図５中の各記憶領域のうち、図４と同一の符号を付した記憶領域は、図４中の同一符号の記憶領域と同様であるため、以下相違点を除き説明を省略する。
【００７２】
ファイル読出部１５５は、記憶装置１４０に記録されたファイルを読み出して、メモリ１０５上に割り当てられた記憶領域４００の内容を、記憶領域４５０に含まれる記憶領域４５１としてメモリ１６０に格納する。ここでファイル読出部１５５は、記憶領域４００の内容を、再現コンパイル部１７０のメモリアドレス空間におけるアドレス位置が、動的コンパイル部１１５のメモリアドレス空間における当該記憶領域４００のアドレス位置と同一となるようにメモリ１６０に格納する。本変形例に係るファイル読出部１５５は、メモリ１６０における、再現コンパイル部１７０が既に使用している既使用領域４９０のアドレス位置以外のアドレス位置について、メモリ１０５上に割り当てられた記憶領域４００の内容を記憶領域４５１として格納する。
【００７３】
ここで、動的コンパイル部１１５及び再現コンパイル部１７０のコンパイルモジュールとして略同一のコンパイルモジュールを使用した場合、記憶領域４００が読み込まれる前に再現コンパイル部１７０が使用する第３領域１６３である既使用領域４９０は、記憶領域４００における、プログラム実行システム９０上においてプログラムを実行する前の初期化処理中に動的コンパイラ１００及び部分プログラム実行部１３０が使用した記憶領域に対応する。したがって、既使用領域４９０には再現コンパイル時に用いるべき実行状態は格納されておらず、このアドレス位置以外のアドレス位置について記憶領域４００の内容が復元されれば、再現コンパイル部１７０は再現コンパイルを行うことができる。また、本変形例によれば、再現コンパイル部１７０の作業領域をプログラム実行システム９０の作業領域と同一としたまま再現コンパイル部１７０を動作させることができ、動的コンパイル部１１５と再現コンパイル部１７０の間の相違を図４に示した再現コンパイル部１７０と比較してより少なくすることができる。
【００７４】
図６は、本実施形態に係るコンピュータ９００のハードウェア構成の一例を示す。本実施形態に係るコンピュータ９００は、ホスト・コントローラ１０８２により相互に接続されるＣＰＵ１０００、ＲＡＭ１０２０、グラフィック・コントローラ１０７５、及び表示装置１０８０を有するＣＰＵ周辺部と、入出力コントローラ１０８４によりホスト・コントローラ１０８２に接続される通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を有する入出力部と、入出力コントローラ１０８４に接続されるＲＯＭ１０１０、フレキシブルディスク・ドライブ１０５０、及び入出力チップ１０７０を有するレガシー入出力部とを備える。
【００７５】
ホスト・コントローラ１０８２は、ＲＡＭ１０２０と、高い転送レートでＲＡＭ１０２０をアクセスするＣＰＵ１０００及びグラフィック・コントローラ１０７５とを接続する。ＣＰＵ１０００は、ＲＯＭ１０１０及びＲＡＭ１０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。ＲＡＭ１０２０は、図１のメモリ１０５及び／又はメモリ１６０として機能する。グラフィック・コントローラ１０７５は、ＣＰＵ１０００等がＲＡＭ１０２０内に設けたフレーム・バッファ上に生成する画像データを取得し、表示装置１０８０上に表示させる。これに代えて、グラフィック・コントローラ１０７５は、ＣＰＵ１０００等が生成する画像データを格納するフレーム・バッファを、内部に含んでもよい。
【００７６】
入出力コントローラ１０８４は、ホスト・コントローラ１０８２と、比較的高速な入出力装置である通信インターフェイス１０３０、ハードディスクドライブ１０４０、ＣＤ−ＲＯＭドライブ１０６０を接続する。通信インターフェイス１０３０は、ネットワークを介して他の装置と通信する。ハードディスクドライブ１０４０は、コンピュータ９００内のＣＰＵ１０００が使用するプログラム及びデータを格納する。またハードディスクドライブ１０４０は、図１の記憶装置１４０として機能する。ＣＤ−ＲＯＭドライブ１０６０は、ＣＤ−ＲＯＭ１０９５からプログラム又はデータを読み取り、ＲＡＭ１０２０を介してハードディスクドライブ１０４０に提供する。
【００７７】
また、入出力コントローラ１０８４には、ＲＯＭ１０１０と、フレキシブルディスク・ドライブ１０５０、及び入出力チップ１０７０の比較的低速な入出力装置とが接続される。ＲＯＭ１０１０は、コンピュータ９００が起動時に実行するブート・プログラムや、コンピュータ９００のハードウェアに依存するプログラム等を格納する。フレキシブルディスク・ドライブ１０５０は、フレキシブルディスク１０９０からプログラム又はデータを読み取り、ＲＡＭ１０２０を介してハードディスクドライブ１０４０に提供する。入出力チップ１０７０は、フレキシブルディスク・ドライブ１０５０や、例えばパラレル・ポート、シリアル・ポート、キーボード・ポート、マウス・ポート等を介して各種の入出力装置を接続する。
【００７８】
ＲＡＭ１０２０を介してハードディスクドライブ１０４０に提供されるプログラムは、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、記録媒体から読み出され、ＲＡＭ１０２０を介してコンピュータ９００内のハードディスクドライブ１０４０にインストールされ、ＣＰＵ１０００において実行される。
【００７９】
コンピュータ９００にインストールされ、コンピュータ９００をコンパイラシステム１０として機能させるコンパイラプログラムは、動的コンパイラプログラムと、部分プログラム実行モジュールと、再現コンパイラプログラムとを備える。これらのプログラム又はモジュールは、ＣＰＵ１０００等に働きかけて、コンピュータ９００を、動的コンパイラ１００と、部分プログラム実行部１３０と、再現コンパイラ１５０としてそれぞれ機能させる。
【００８０】
動的コンパイラプログラムは、実行状態取得モジュールと、動的コンパイルモジュールと、実行状態記録モジュールと、実行状態削除モジュールとを有する。これらのプログラム又はモジュールは、ＣＰＵ１０００等に働きかけて、コンピュータ９００を、実行状態取得部１１０、動的コンパイル部１１５、実行状態記録部１２０、及び実行状態削除部１２５としてそれぞれ機能させる。また、動的コンパイルプログラムは、コンピュータ９００をシステムダンプ部１３５として機能させるシステムダンプモジュールを更に有してもよい。
【００８１】
再現コンパイラプログラムは、ファイル読出モジュールと、再現コンパイルモジュールとを有する。これらのプログラム又はモジュールは、ＣＰＵ１０００等に働きかけて、コンピュータ９００を、ファイル読出部１５５及び再現コンパイル部１７０としてそれぞれ機能させる。ここで、再現コンパイルプログラムは、プログラム実行システム９０として機能するコンピュータ９００と異なるコンピュータ９００上で実行されてもよい。
【００８２】
以上に示したプログラム又はモジュールは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５の他に、ＤＶＤやＰＤ等の光学記録媒体、ＭＤ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータ９００に提供してもよい。
【００８３】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【００８４】
以上に説明した実施形態によれば、以下の各項目に示すコンパイラプログラム、動的コンパイラプログラム、再現コンパイラプログラム、再現コンパイラ、コンパイル方法、及び記録媒体が実現される。
【００８５】
（項目１）プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンピュータによりコンパイルさせるコンパイラプログラムであって、前記コンピュータを、前記プログラムの実行状態を取得する実行状態取得部と、前記プログラムの実行中に、実行すべき一の前記部分プログラムを前記実行状態に基づきコンパイルし、前記実行状態に応じて異なる実行命令列を生成する動的コンパイル部と、前記コンピュータのメモリ上に割り当てられた記憶領域に、前記実行状態を記録する実行状態記録部と、前記コンピュータにより記憶装置に保存された、前記メモリ上に割り当てられた記憶領域の内容を含むファイルを、前記記憶装置から読み出すファイル読出部と、前記ファイルから取得した前記実行状態に基づき前記一の部分プログラムをコンパイルし、前記プログラムの実行中に前記動的コンパイル部が生成した前記実行命令列と同一の実行命令列を生成する再現コンパイル部として機能させるコンパイラプログラム。
【００８６】
（項目２）前記コンピュータは、前記メモリ上に割り当てられた前記記憶領域の内容を、前記コンピュータ上で動作するオペレーティングシステムによりシステムダンプさせることにより、前記ファイルを前記記憶装置に保存し、前記再現コンパイル部は、前記システムダンプを用いて保存された前記ファイルから取得した前記実行状態に基づき前記一の部分プログラムをコンパイルする項目１記載のコンパイラプログラム。
【００８７】
（項目３）前記実行状態取得部は、前記複数の部分プログラムのそれぞれについて、当該部分プログラムのコンパイル時に前記動的コンパイル部が参照すべき前記実行状態を取得し、前記動的コンパイル部は、前記複数の部分プログラムのそれぞれについて、当該部分プログラムについて取得された前記実行状態に基づき当該部分プログラムをコンパイルして、当該部分プログラムの前記実行命令列を生成し、前記実行状態記録部は、前記複数の部分プログラムのそれぞれについて、前記コンピュータの前記メモリ上に割り当てられた前記記憶領域に、当該部分プログラムについて取得された前記実行状態を記録し、前記コンピュータは、前記プログラムの実行を終了した後に、前記メモリ上に割り当てられた記憶領域の内容を含む前記ファイルを前記記憶装置に保存し、前記再現コンパイル部は、前記一の部分プログラムについて取得された前記実行状態を前記ファイルから取得して、前記一の部分プログラムを当該実行状態に基づきコンパイルし、前記プログラムの実行中に前記動的コンパイル部が前記一の部分プログラムをコンパイルして生成した前記実行命令列と同一の実行命令列を生成する項目１記載のコンパイラプログラム。
【００８８】
（項目４）前記実行状態記録部は、前記複数の部分プログラムのそれぞれについて、当該部分プログラムについて取得された前記実行状態に対応付けて、当該実行状態の次の前記実行状態が記録された前記記憶領域上の位置を指定するポインタを前記記憶領域に記録し、前記再現コンパイル部は、前記ファイルから取得した前記記憶領域の内容における、いずれかの前記部分プログラムについて取得された前記実行状態と組となる前記ポインタから順に前記ポインタをたどっていくことにより、前記一の部分プログラムについて取得された前記実行状態が記録された前記記憶領域上の位置を特定して当該実行状態を取得する項目３記載のコンパイラプログラム。
【００８９】
（項目５）前記実行状態記録部は、いずれかの前記実行状態に対応付けて、予め定められた識別情報を前記記憶領域に記録し、前記再現コンパイル部は、前記ファイルから取得された前記記憶領域の内容から、前記識別情報を検索することにより前記識別情報と対応付けられた前記実行状態が記憶された前記記憶領域上の位置を特定し、当該実行状態と組となるポインタから順に前記ポインタをたどっていくことにより、前記一の部分プログラムについて取得された前記実行状態が記憶された前記記憶領域上の位置を特定して当該実行状態を取得する項目４記載のコンパイラプログラム。
【００９０】
（項目６）前記実行状態取得部は、前記記憶領域中の第１の領域から、前記プログラムの実行に伴って更新されない第１の前記実行状態を取得と、前記プログラムの実行に伴って更新される第２の前記実行状態とを取得し、前記実行状態記録部は、前記第２の実行状態を、前記記憶領域における前記プログラムの実行に伴い更新されない第２の領域に記録し、前記動的コンパイル部は、前記第１の領域から取得した前記第１の実行状態及び前記第２の実行状態に基づき、前記一の部分プログラムをコンパイルし、前記再現コンパイル部は、前記一の部分プログラムを、前記ファイルに含めて保存された前記第１の領域から取得した前記第１の実行状態、及び、前記ファイルに含めて保存された前記第２の領域から取得した前記第２の実行状態に基づきコンパイルする項目１記載のコンパイラプログラム。
【００９１】
（項目７）前記ファイル読出部は、前記記憶装置から前記ファイルを読み出して、前記メモリ上に割り当てられた前記記憶領域の内容を、前記再現コンパイル部のメモリアドレス空間におけるアドレス位置が、前記動的コンパイル部のメモリアドレス空間における当該記憶領域のアドレス位置と同一となるように前記メモリに格納し、前記再現コンパイル部は、前記動的コンパイル部が前記第１の実行状態を参照するために用いたアドレスと同一のアドレスを用いて、前記ファイル読出部により前記メモリに格納された前記第１の実行状態を参照する項目６記載のコンパイラプログラム。
【００９２】
（項目８）前記ファイル読出部は、前記メモリにおける、前記再現コンパイル部が既に使用しているアドレス位置以外のアドレス位置について、前記メモリ上に割り当てられた前記記憶領域の内容を、前記再現コンパイル部のメモリアドレス空間におけるアドレス位置が、前記動的コンパイル部のメモリアドレス空間における当該記憶領域のアドレス位置と同一となるように前記メモリに格納する項目７記載のコンパイラプログラム。
【００９３】
（項目９）前記実行状態記録部は、前記複数の部分プログラムのうち、前記実行状態を前記ファイルに含める旨の選択情報に対応付けられた前記部分プログラムについて、前記実行状態を前記記憶領域に記録し、前記再現コンパイル部は、前記実行状態を前記ファイルに含める旨の前記選択情報に対応付けられた前記一の部分プログラムを、前記ファイルから取得した前記実行状態に基づきコンパイルする項目１記載のコンパイラプログラム。
【００９４】
（項目１０）前記実行状態記録部は、前記一の部分プログラムについて取得された前記実行状態が、前記一の部分プログラムを以前にコンパイルした際に用いた前記実行状態と同一である場合に、当該一の部分プログラムについての前記実行状態の少なくとも一部を前記記憶領域に記録しない項目１記載のコンパイラプログラム。
【００９５】
（項目１１）前記実行状態記録部は、前記一の部分プログラムのサイズが、予め定められたしきい値以上であることを条件として、当該一の部分プログラムについての前記実行状態を前記記憶領域に記録する項目１記載のコンパイラプログラム。
【００９６】
（項目１２）前記実行状態記録部は、前記一の部分プログラムのコンパイルに要した時間が、予め定められたしきい値以上であることを条件として、当該一の部分プログラムについての前記実行状態を前記記憶領域に記録する項目１記載のコンパイラプログラム。
【００９７】
（項目１３）当該コンパイラプログラムは、前記コンピュータを、前記一の部分プログラムをコンパイルして前記実行命令列を生成してから予め定められたしきい値以上の時間が経過している場合に、前記記憶領域に記録された前記一の部分プログラムについての前記実行状態を削除する実行状態削除部として更に機能させる項目１記載のコンパイラプログラム。
【００９８】
（項目１４）当該コンパイラプログラムは、前記コンピュータを、前記一の部分プログラムをコンパイルして生成した前記実行命令列が予め定められたしきい値以上の回数実行された場合に、前記記憶領域に記録された前記一の部分プログラムについての前記実行状態を削除する実行状態削除部として更に機能させる項目１記載のコンパイラプログラム。
【００９９】
（項目１５）当該コンパイラプログラムは、前記コンピュータを、前記一の部分プログラムをコンパイルして生成した前記実行命令列の処理時間が予め定められたしきい値以下である場合に、前記記憶領域に記録された前記一の部分プログラムについての前記実行状態を削除する実行状態削除部として更に機能させる項目１記載のコンパイラプログラム。
【０１００】
（項目１６）プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンピュータによりコンパイルさせる動的コンパイラプログラムにより生成された実行命令列と同一の実行命令列をコンピュータにより生成させる再現コンパイラプログラムであって、前記動的コンパイラプログラムは、前記コンピュータに、前記プログラムの実行状態を取得させ、実行すべき一の前記部分プログラムを前記実行状態に基づきコンパイルさせ、前記実行状態に応じて異なる実行命令列を生成させ、前記コンピュータのメモリ上に割り当てられた記憶領域に前記実行状態を記録させ、前記コンピュータは、前記メモリ上に割り当てられた前記記憶領域の内容を含むファイルを記憶装置に保存し、前記再現コンパイラプログラムは、前記コンピュータを、前記ファイルを前記記憶装置から読み出すファイル読出部と、前記一の部分プログラムを、前記ファイルから取得した前記実行状態に基づきコンパイルし、前記コンパイル部が生成した前記実行命令列と同一の実行命令列を生成する再現コンパイル部として機能させる再現コンパイラプログラム。
【０１０１】
（項目１７）プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンピュータによりコンパイルさせる動的コンパイラプログラムが生成した実行命令列と同一の実行命令列を生成する再現コンパイラであって、前記動的コンパイラプログラムは、前記コンピュータに、前記プログラムの実行状態を取得させ、実行すべき一の前記部分プログラムを前記実行状態に基づきコンパイルさせ、前記実行状態に応じて異なる実行命令列を生成させ、前記コンピュータのメモリ上に割り当てられた記憶領域に前記実行状態を記録させ、前記コンピュータは、前記メモリ上に割り当てられた前記記憶領域の内容を含むファイルを記憶装置に保存し、当該再現コンパイラは、前記ファイルを前記記憶装置から読み出すファイル読出部と、前記一の部分プログラムを、前記ファイルから取得した前記実行状態に基づきコンパイルし、前記コンパイル部が生成した前記実行命令列と同一の実行命令列を生成する再現コンパイル部とを備える再現コンパイラ。
【０１０２】
（項目１８）プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンピュータによりコンパイルさせる動的コンパイラプログラムであって、前記コンピュータを、前記複数の部分プログラムのそれぞれについて、当該部分プログラムのコンパイル時に前記動的コンパイル部が参照すべき前記実行状態を取得する実行状態取得部と、前記複数の部分プログラムのそれぞれについて、当該部分プログラムについて取得された前記実行状態に基づき当該部分プログラムをコンパイルして、当該部分プログラムの前記実行命令列を生成する動的コンパイル部と、前記複数の部分プログラムのそれぞれについて、前記コンピュータのメモリ上に割り当てられた記憶領域に、当該部分プログラムについて取得された前記実行状態と、当該実行状態の次の前記実行状態が記録された前記記憶領域上の位置を指定するポインタとを記録する実行状態記録部として機能させる動的コンパイラプログラム。
【０１０３】
（項目１９）プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンピュータによりコンパイルさせるコンパイル方法であって、前記プログラムの実行状態を前記コンピュータに取得させる実行状態取得段階と、前記プログラムの実行中に、実行すべき一の前記部分プログラムを前記実行状態に基づき前記コンピュータによりコンパイルさせ、前記実行状態に応じて異なる実行命令列を前記コンピュータにより生成させる動的コンパイル段階と、前記コンピュータのメモリ上に割り当てられた記憶領域に、前記実行状態を前記コンピュータにより記録させる実行状態記録段階と、前記コンピュータにより、前記メモリ上に割り当てられた記憶領域の内容を含むファイルを記憶装置に保存させるファイル保存段階と、前記コンピュータにより記憶装置に保存された、前記メモリ上に割り当てられた記憶領域の内容を含むファイルを、前記コンピュータにより前記記憶装置から読み出させるファイル読出段階と、前記ファイルから取得した前記実行状態に基づき前記一の部分プログラムを前記コンピュータによりコンパイルし、前記プログラムの実行中に前記動的コンパイル段階により生成された前記実行命令列と同一の実行命令列を前記コンピュータにより生成する再現コンパイル段階とを備えるコンパイル方法。
（項目２０）項目１、項目１６、及び項目１８のいずれかに記載したプログラムを記録した、コンピュータにより読み取り可能な記録媒体。
【図面の簡単な説明】
【０１０４】
【図１】本発明の実施形態に係るコンパイラシステム１０の構成を示す。
【図２】本発明の実施形態に係るコンパイラシステム１０の、プログラム実行時の動作フローを示す。
【図３】本発明の実施形態に係るコンパイラシステム１０の、再現コンパイル時の動作フローを示す。
【図４】本発明の実施形態に係る動的コンパイラ１００及び再現コンパイラ１５０のメモリアドレス空間を示す。
【図５】本発明の実施形態の変形例に係る動的コンパイラ１００及び再現コンパイラ１５０のメモリアドレス空間を示す。
【図６】本発明の実施形態に係るコンピュータ９００のハードウェア構成の一例を示す。
【符号の説明】
【０１０５】
１０  コンパイラシステム
９０  プログラム実行システム
１００  動的コンパイラ
１０５  メモリ
１０６  第１領域
１０７  第２領域
１１０  実行状態取得部
１１５  動的コンパイル部
１２０  実行状態記録部
１２５  実行状態削除部
１３０  部分プログラム実行部
１３５  システムダンプ部
１４０  記憶装置
１５０  再現コンパイラ
１５５  ファイル読出部
１６０  メモリ
１６１  第１領域
１６２  第２領域
１６３  第３領域
１７０  再現コンパイル部
４００  記憶領域
４０５  静的記憶領域
４０６  動的記憶領域
４１０  識別情報
４１５ａ〜ｂ  サイズ
４２０ａ〜ｂ  ポインタ
４２５ａ〜ｂ  実行状態
４５０  記憶領域
４５１  記憶領域
４５５  静的記憶領域
４６０  識別情報
４６５ａ〜ｂ  サイズ
４７０ａ〜ｂ  ポインタ
４７５ａ〜ｂ  実行状態
４８０  作業領域
４９０  既使用領域
９００  コンピュータ
１０００  ＣＰＵ
１０１０  ＲＯＭ
１０２０  ＲＡＭ
１０３０  通信インターフェイス
１０４０  ハードディスクドライブ
１０５０  フレキシブルディスク・ドライブ
１０６０  ＣＤ−ＲＯＭドライブ
１０７０  入出力チップ
１０７５  グラフィック・コントローラ
１０８０  表示装置
１０８２  ホスト・コントローラ
１０８４  入出力コントローラ
１０９０  フレキシブルディスク
１０９５  ＣＤ−ＲＯＭ
【図１】
2005215884.tif 000003
【図２】
2005215884.tif 000004
【図３】
2005215884.tif 000005
【図４】
2005215884.tif 000006
【図５】
2005215884.tif 000007
【図６】
2005215884.tif 000008