JP5460430B2 - 動的コンパイラプログラム、動的コンパイル方法及び動的コンパイル装置 - Google Patents

動的コンパイラプログラム、動的コンパイル方法及び動的コンパイル装置 Download PDF

Info

Publication number
JP5460430B2
JP5460430B2 JP2010087038A JP2010087038A JP5460430B2 JP 5460430 B2 JP5460430 B2 JP 5460430B2 JP 2010087038 A JP2010087038 A JP 2010087038A JP 2010087038 A JP2010087038 A JP 2010087038A JP 5460430 B2 JP5460430 B2 JP 5460430B2
Authority
JP
Japan
Prior art keywords
execution
state information
instruction sequence
program
list
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010087038A
Other languages
English (en)
Other versions
JP2011221609A (ja
Inventor
一則 緒方
清久仁 河内谷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2010087038A priority Critical patent/JP5460430B2/ja
Priority to US13/076,853 priority patent/US8612948B2/en
Publication of JP2011221609A publication Critical patent/JP2011221609A/ja
Priority to US14/096,700 priority patent/US8938728B2/en
Application granted granted Critical
Publication of JP5460430B2 publication Critical patent/JP5460430B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code

Description

本発明は、動的コンパイラプログラム、動的コンパイル方法及び動的コンパイル装置に関する。特に、適応型最適化されたコンパイル済みの部分プログラムを再利用する動的コンパイラプログラム、動的コンパイル方法及び動的コンパイル装置に関する。
近年、例えばJava(登録商標)プログラムの実行環境において、JIT(Just In Time)コンパイラ等の動的コンパイラが用いられている。動的コンパイラは、Java(登録商標)アプリケーション等のプログラムの実行中において、プログラムの未コンパイルの部分を実行する必要が生じた場合、プログラムのうち実行すべき部分である部分プログラムをコンパイルする。これによりプログラム全体を最初にコンパイルした場合におけるプログラム起動の遅延を防ぎつつ、インタプリタ実行と比較し高速にプログラム実行することができる。
プログラムをより高速に実行するため、動的コンパイラは、部分プログラムをコンパイルする際に、プログラムの実行環境の状態情報である実行状態情報を取得し、該実行状態情報が示す実行環境の状態に最適化してコンパイルした実行命令列を生成する。動的コンパイラが最適化のために参照する実行状態情報としては、例えば、クラスがロードされているか否かの情報や、プログラムの実行時のプロファイルデータ等が挙げられる。このような最適化は適応型最適化と呼ばれている(非特許文献1参照。)。
上記のようにしてJITコンパイラ等の動的コンパイラが部分プログラムをコンパイルして生成する実行命令列は、コンパイルを行ったプロセスが動作している間有効である。そのため、動的コンパイラは同一のJavaプログラムが起動される度その部分プログラムをコンパイルする。このような状況は、同一マシンにおいて同一のJavaプログラムが複数回起動される場合や、仮想化環境において、複数のゲスト仮想マシンが同一のJavaプログラムを実行する場合に生じる。
従来、Javaプログラムに含まれる部分プログラムの重複したコンパイルを回避する技術として、永続化したキャッシュにAOT (Ahead of Time) コンパイル技術でコンパイルしたAOTコードを保管することによって、Java(登録商標)仮想マシン間でコンパイル済みAOTコードの共有を可能とする技術が開示されている(非特許文献2参照。)。
また、容量の制限されたネイティブコードの格納領域としてコードキャッシュを持ち、バイトコードを実行する際に、JITコンパイラによりバイトコードを仮想計算機が直接実行できるネイティブコードにコンパイルして上記コードキャッシュに格納した後、そのネイティブコードを実行するJITコンパイラを備えた仮想計算機において、上記バイトコードのアドレスから、コンパイルされているか否かを判断するための情報と、コンパイルされたネイティブコードのアドレスを検索する検索テーブルを備える技術が開示されている(特許文献1参照。)。
特許文献2及び特許文献3については後述する。
特許第3808755号公報 特開2005−215884号公報(第「0003」段落、第「0024」段落) 特開2002−259135号公報
T. Suganuma、外4名、"A DynamicOptimization Framework for a Java Just-In-Time Compiler"、In Proceedings of the ACM SIG-PLAN Conferenceon Object-Oriented Programming, Systems, Languages & Applications, pp.180-194, Oct. 2001. Adam Pilkington、 Graham Rawson、"クラスの共有によるパフォーマンスの向上"、[online]、2008年9月30日、developerWorks Japan、 [平成22年3月23日検索]、インターネット<http://www.ibm.com/developerworks/jp/java/library/j-sharedclasses/?ca=dnj-1031>
非特許文献2において永続化したキャッシュに保管されるAOTコードは、AOTコンパイルによって生成されるJava(登録商標)メソッドのネイティブなコード・バージョンである。JITコンパイルとは異なり、AOTコンパイルは、実行中のJavaメソッドの動的な分析結果に応じた適応型最適化を採用していない。このため、AOTコードの共有よりコンパイルに必要な時間は節約されるが、共有AOTコードの実行速度は遅い。
一方、特許文献1においてコードキャッシュに格納されるネイティブコードは、JITコンパイルによって生成される。しかし特許文献1には、適応型最適化を含め、プログラムの実行速度を向上させる最適化に関する記載はなく、コードキャッシュに格納されるネイティブコードは最適化が行われていないネイティブコードである。従って、特許文献1においても、非特許文献2の技術と同様に、再利用されるネイティブコードの実行速度は遅い。
従って、Javaプログラムに含まれる部分プログラムの重複したコンパイルを回避するとともに、高速にプログラムを実行することが望まれる。しかし、適応型最適化を適用して生成された実行命令列を単に共有コードとしてキャッシュに保存しても、上述したように、適応型最適化では現在の実行状態情報の値が示す実行環境の状態に最適化を行うので、現在の実行状態情報の値と再利用時の実行状態情報の値とが異なる場合は、共有コードの利用可能性が不明となり結局のところ利用できない。この点に関し特許文献2は、現在の実行環境の状態と異なる状態に最適化されてコンパイルされている場合は、再コンパイルが必要と判断し、再度コンパイルを行う旨記載する。
しかしながら、特許文献2に示されるように、コンパイル時の実行状態情報の値と再利用時の実行状態情報の値が同一である場合のみコンパイル済みの実行命令列を利用するのでは、再利用の可能性が低くなるため、コンパイル済みコードの再利用による効果はほとんど期待できない。
なお、最適化の1つとして、プログラムの一部を、プログラムにより参照される変数が特定の値である場合の処理に特殊化する手法(specialization)が提案されている。例えば、プログラム内の各メソッドについて、そのメソッドが呼び出される毎に変数の値が特定の値であるか判断させ、その判断結果に応じて、特殊化した命令列及び特殊化していない命令の何れかに分岐して実行させる手法が提案されている(特許文献3参照。)。従って最適化の方法として特殊化を利用すれば上記問題は解消される。しかし、その他の適応型最適化を適用して生成されたネイティブコードの再利用の問題は依然として残る。
この発明は、上記の問題点を解決するためになされたものであって、適応型最適化を適用して生成されたコンパイル済みの実行命令列を効果的に再利用する技術を提供することを目的とする。本発明は、かかる技術の提供により、Javaプログラムに含まれる部分プログラムの重複したコンパイルを回避するとともに、高速にプログラムを実行することを目的とする。
上記課題を解決するために、本願発明者等は、適応型最適化を適用して生成された実行命令列を再利用するための条件に着目した。適応型最適化は、最適化時の実行環境の状態に最適化して実行命令列を生成するものであるが 再利用時の実行状態情報の値が、最適化時の実行状態情報の値とわずかでも違えば使用できないというものばかりではない。即ち、適応型最適化の中には、該最適化を適用して生成した実行命令列を、利用時の実行状態情報の値がある「一定の範囲内」であることを条件に利用可能とするものもある。そこで本願発明者等は、再利用時の実行状態情報の値が上記「一定の範囲内」であることを再利用時に検証可能とするために、コンパイル済みの実行命令列に、適用した最適化が参照した実行状態情報のリストと、適用した最適化の効果を得るためにリスト内の各実行状態情報の値が満たすべき条件とを関連付けて保存するというアイデアに想到した。
即ち、本願発明では、プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンパイルする動的コンパイラプログラムを実行するコンピュータにおいて、コンピュータのメモリの一部又はコンピュータがアクセス可能な記憶装置を共有プールとし、該共有プールに、部分プログラムをコンパイルして生成された実行命令列を、部分プログラムに適用された1以上の最適化の各々に関して参照された実行環境の状態情報である実行状態情報のリストと、該リスト内の各実行状態情報の値が対応する最適化の効果を得るために満たすべきとされた条件のリストとに関係付けて保存する。そして、次に実行する部分プログラムに関して現在の1以上の実行状態情報の各値を取得すると、次に実行する部分プログラムに対応するコンパイル済みの実行命令列であって、かつ現在の1以上の実行状態情報の各値がそれに関連付けられた条件のリスト内の対応する条件を満たす実行命令列が、共有プール内に存在するか否かを判定する。条件を満たすコンパイル済みの実行命令列が存在する場合は、該コンパイル済みの実行命令列を再利用する。条件を満たすコンパイル済みの実行命令列が存在しない場合は、次に実行する部分プログラムをコンパイルして実行命令列を生成する。
言い換えると、上記目的を達成する本発明は、次のような、上記コンピュータ・システムにおいて実行される、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンピュータにコンパイルさせる動的コンパイラプログラムによって実現される。
前記動的コンパイラプログラムは前記コンピュータを、現在の1以上の実行状態情報の各値を取得する実行状態取得部と、前記共有プールから、コンパイル対象の部分プログラムと同じ部分プログラムをコンパイルして生成された実行命令列に関係付けられた前記条件のリストを読み出し、各条件を対応する現在の実行状態情報の値が満たすか否かを判定する判定部と、前記判定部による判定が否定的である場合に、前記コンパイル対象の部分プログラムをコンパイルして実行命令列を生成する動的コンパイル部として機能させる。そして前記動的コンパイラプログラムは、前記判定部による判定結果が肯定的である場合は、前記条件のリストに関連付けられた前記共有プールに保存される前記実行命令列を再利用する。なお、部分プログラムは、例えばプログラム中のメソッド、関数、基本ブロック等であってよい。
好ましくは、前記動的コンパイル部は、前記コンパイル対象の部分プログラムに適用可能な1以上の最適化のうち、前記現在の1以上の実行状態情報の各値を参照して該最適化による効果が得られると判断した最適化を適用して前記コンパイル対象の部分プログラムをコンパイルして実行命令列を生成する。そして上記動的コンパイラプログラムは、前記コンピュータを、前記部分プログラムに適用された1以上の最適化の各々に関して参照された実行状態情報のリストと、該リスト内の各実行状態情報に関して対応する前記最適化による効果が得られると判断するために利用された、前記各実行状態情報が満たすべき条件のリストとに関連付けて、前記動的コンパイル部により生成された実行命令列を前記共有プールに記録する条件付実行命令列記録部として更に機能させる。
更に好ましくは、前記条件付実行命令列記録部は、前記部分プログラムに適用された前記1以上の最適化のすべてが、前記共有プールにアクセス可能な他のコンパイル装置における値との差が少ない実行状態情報のみ又は前記実行状態取得部による取得ごとの値の変化が少ない実行状態情報のみを参照する最適化である場合にのみ、各最適化に関して参照された実行状態情報のリストと、該リスト内の各実行状態情報に関して前記各最適化による効果が得られると判断するために利用された、前記各実行状態情報が満たすべき条件のリストとに関連付けて、前記動的コンパイル部により生成された実行命令列を前記共有プールに記録する。あるいは、前記条件付実行命令列記録部は、前記部分プログラムに適用された1以上の最適化のすべてが低い最適化レベルの最適化である場合にのみ、各最適化に関して参照された実行状態情報のリストと、該リスト内の各実行状態情報に関して前記各最適化による効果が得られると判断するために利用された、前記各実行状態情報が満たすべき条件のリストとに関連付けて、前記動的コンパイル部により生成された実行命令列を前記共有プールに記録する。
また好ましくは、前記動的コンパイラプログラムは、前記コンピュータを、前記判定部による判定が肯定的である場合は、前記コンピュータのメモリ上に前記プログラムの作業領域として割り当てられた記憶領域に、前記共有プールから前記条件のリストに関連付けられた前記実行命令列を読み出して記録し、前記判定部による判定が否定的である場合は、前記記憶領域に、前記動的コンパイル部により生成された前記実行命令列を記録する実行命令列記録部として更に機能させる。
また好ましくは、前記判定部は、前記コンパイル対象の部分プログラムに対応する実行命令列であって、かつ前記現在の1以上の実行状態情報の各値が満し得る前記条件のリストに関連付けられた前記実行命令列が、前記共有プール内に複数存在する場合、前記条件のリスト内の条件の数の合計が最大である前記実行命令列を再利用すべき前記実行命令列として決定する。
更に好ましくは、前記条件の数の合計は、最適化の種類ごとに予め設定された重み付けの値を用いて計算される。
また好ましくは、前記判定部は、前記コンパイル対象の部分プログラムに対応する実行命令列であって、かつ前記現在の1以上の実行状態情報の各値が満し得る前記条件のリストに関連付けられた前記実行命令列が、前記共有プール内に複数存在する場合、前記実行命令列に適用された最適化の数の合計が最大である前記実行命令列を再利用すべき前記実行命令列として決定する。
更に好ましくは、前記最適化の数の合計は、最適化の種類ごとに予め設定された重み付けの値を用いて計算される。
また好ましくは、前記条件付実行命令列記録部は、前記動的コンパイル部が生成した前記実行命令列内にオペランドとしてアドレスが含まれる場合に、前記アドレスの前記実行命令列内での位置情報と、該アドレスが指すデータを識別する識別情報とに更に関連付けて、前記実行命令列を前記共有プールに記録する。
以上、プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンピュータにコンパイルさせる動的コンパイラプログラムとして本発明を説明した。しかし、本発明は、上記動的コンパイラプログラムをインストールしたコンピュータにおいて実行される動的コンパイル方法として把握することもできる。また、本発明は、上記動的コンパイラプログラムをインストールして動的コンパイル方法を実行する動的コンパイル装置として把握することもできる。
本願発明では、部分プログラムをコンパイルして生成された実行命令列を再利用の目的で保存する共有プールに、上記実行命令列に関連付けて、上記部分プログラムに適用された1以上の最適化の各々に関して参照された実行状態情報のリストと、該リスト内の各実行状態情報の値が対応する最適化の効果を得るために満たすべきとされた条件とを保存する。このため、コンパイル済みの実行命令列の再利用を検討する際に、現在の実行状態情報の各値が、検討対象の実行命令列に関連付けられた上記条件リスト内の対応する条件を満たすか否かを判定することが可能となり、適応型最適化を適用して生成した実行命令列の再利用可能性が高まる。また、適応型最適化を適用して生成された実行命令列を効率的に再利用することが可能となることから、Javaプログラムに含まれる部分プログラムの重複したコンパイルを回避するとともに、高速にプログラムを実行することができる。本発明のその他の効果については、各実施の形態の記載から理解される。
図1は、本実施形態に係るコンパイラシステム80の機能構成の一例を示す。 図2(a)は、共有プールの一例を示す。図2(b)は、共有プールの他の一例を示す。 図3は、実行状態情報と対応する実行状態情報の満たすべき条件の一覧表の一例を示す。 図4は、本実施形態に係る動的コンパイラ100の動作フローの一例を示す。 図5(a)は、動的コンパイラ100による判定処理の詳細な動作フローの一例を示す。図5(b)は、動的コンパイラ100によるスコア算出処理の詳細な動作フローの一例を示す。 図6は、動的コンパイラ100による動的コンパイル処理の詳細な動作フローの一例を示す。 図7は、本発明の実施形態に係るコンピュータ50のハードウェア構成の一例を示す。
以下、本発明の実施形態を図面に基づいて詳細に説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。なお、実施の形態の説明の全体を通じて同じ要素には同じ番号を付している。
図1は、本実施形態に係るコンパイラシステム80の構成を示す。コンパイラシステム80は、プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを、対応するコンパイル済みの実行命令列が再利用可能であるか否かの判定結果に応じてコンピュータにコンパイルさせる動的コンパイラ100と、動的コンパイラ100により生成された又は再利用を決定された実行命令列を実行することにより、プログラムを上記コンピュータにおいて実行する実行部140とを備えるプログラム実行環境90と、再利用するコンパイル済みの実行命令列を保存する共有プール135とを備える。
ここで共有プール135は、上記コンピュータが実行するプログラムの1以上の部分プログラムの各々について、該部分プログラムをコンパイルして生成された実行命令列を、該部分プログラムに適用された1以上の最適化の各々に関して参照された実行環境の状態情報である実行状態情報のリストと、該リスト内の各実行状態情報の値が対応する最適化の効果を得るために満たすべきとされた条件とに関連付けて保存する。
上述したように、適応型最適化の中には、該最適化を適用して生成した実行命令列を、利用時の実行状態情報の値がある「一定の範囲内」であることを条件に利用可能とするものもある。従って、コンパイル済みの実行命令列を、コンパイル時に適用された最適化に関して参照された実行状態情報の値が最適化の効果を得るために満たすべきとされた条件とともに記憶することで、再利用時の実行状態情報の値が上記「一定の範囲内」であることを再利用時に検証可能となる。そしてこのような検証が可能となることで、適応型最適化を適用して生成された実行命令列の利用可能性が高まる。
共有プール135は、より具体的には、コンピュータのメモリの一部又はコンピュータがアクセス可能なハードディスク等の記憶装置のいずれであってもよい。図2(a)に示すように、ハイパーバイザ(hypervisor)202等の制御プログラムを利用してコンピュータを仮想化して複数の異なるオペレーティング・システム(OS)を並列実行させる仮想化環境200では、同一のアプリケーション・プログラム206、214が複数の仮想マシン208、212上で動作することがある。この場合、コンピュータの共有メモリの一部を、再利用するコンパイル済みの実行命令列を保存する共有プール216とすることで、重複したコンパイルを回避できるとともに、複数の仮想マシン208、212においてJITコンパイラ等の動的コンパイラが使用するプロセッサやメモリ等のリソースを有効利用することが可能となる。
なお、図2(a)の右側の矢印217は、ゲスト仮想マシン210のJITコンパイラがアプリケーション・プログラム212に含まれる部分プログラムをコンパイルして生成した実行命令列が、共有プール216に保存されることを示している。また、同図左側の矢印218は、その共有プール216に保存された実行命令列を、ゲスト仮想マシン204のJITコンパイラが読み出して再利用することを示している。
図2(b)は、アクセス可能な記憶装置234を共有プール135とする例を示す。同図に示すように、同一マシン222では、同一のアプリケーション・プログラム224が複数回起動される。そこで、同図左側の矢印227が示すように、アプリケーション・プログラム224を起動してその部分プログラムをコンパイルする場合は、コンピュータがアクセス可能な記憶装置234を共有プール135として、該共有プールにコンパイル済みの実行命令列を保存する。以降、同一アプリケーション・プログラム224を起動する場合には、同図右側の矢印228が示すように、共有プールに保存された実行命令列を再利用すれば、重複したコンパイルを回避できる。
なお、共有プール135として利用されるメモリの一部や記憶装置内の記憶領域(以下、ファイルという)は、動的コンパイラ100が、必要に応じてプログラム実行環境90を経由して、コンピュータのOSやハイパーバイザ202にその割り当てを要求することにより確保される。また、メモリの一部が共有プール135として割り当てられる場合、該共有プール135は、利用者により明示的に削除されない限り、OSやハイパーバイザ202が再起動するまで維持される。一方、ファイルが共有プール135として割り当てられる場合、該共有プール135は利用者により明示的に削除されるまで維持される。いずれの場合も、保存されてから一定時間経過したものを自動的に削除するなどのヒューリスティクスを適用することが可能であり、実行命令列単位で削除することも可能である。
共有プール135として、コンピュータのメモリの一部又はファイルのいずれを利用するかは、ハイパーバイザ202の有無などの実行環境、図2(a)のようにゲスト仮想マシン間で共有するか又は図2(b)のように複数回の実行間で再利用するかといった利用シナリオ、共有プール135の永続性の必要性などの観点から、利用者がプログラム実行環境90の設定として決定する。なお、メモリの一部とファイルの両方に共有プール135を割り当て、利用者やコンパイラ設計者が事前に条件として設定したメソッド名やクラス名などのコンパイル対象の部分プログラムの条件に応じて使い分けることも可能である。
プログラム実行環境90は、Java(登録商標)バイトコード等の、コンピュータにより直接実行できないプログラムを実行する指示を受けて、動的コンパイラ100及び実行部140の協調動作により該プログラムを実行する。実行部140は、動的コンパイラ100によって共有プール135内のコンパイル済みの実行命令列が利用可能であると判定された場合は、そのコンパイル済みの実行命令列を実行する。より具体的には、共有プール135内のコンパイル済みの実行命令列が、後述する動的コンパイラ100の実行命令列記録部125によりメモリ105にコピーされる場合は、実行部140は、メモリ105からコンパイル済みの実行命令列を読み出して実行する。
これに代えて実行部140は、メモリ・マップによりコンパイル済みの実行命令列を共有して実行してもよい。但し、最適化の無効化や、詳細は後述するが、クラス領域などへの参照をアドレス再配置で定数値にする場合など、実行命令列のパッチが必要な場合は、コンパイル済みの実行命令列はメモリ105にコピーし、実行部140は、メモリ105からコンパイル済みの実行命令列を読み出して実行するものとする。しかしこの場合であっても、共有プール135内のコンパイル済みの実行命令列を、Java仮想マシン等の複数のプログラム実行環境90が同時には利用しないと保証できる場合は、実行部140はメモリ・マップによりコンパイル済みの実行命令列を利用して実行してもよい。そのような保証は、例えば使用中フラグやロック機構を利用することで実現できる。
また、実行部140は、動的コンパイラ100によって実行命令列が生成される場合はその生成される実行命令列を実行する。より具体的には、動的コンパイラ100の動的コンパイル部120により生成された実行命令列が、動的コンパイラ100の実行命令列記録部125によりメモリ105に記録される場合は、実行部140は、メモリ105に記録された実行命令列を読み出して実行する。なお、実行部140は、例えばJava仮想マシン等の機能を含み、一部の部分プログラムを、インタプリタにより実行してもよい。
動的コンパイラ100は、コンピュータ上で動的コンパイラプログラムを実行することにより実現され、メモリ105と、実行状態取得部110と、判定部115と、動的コンパイル部120と、実行命令列記録部125と、条件付実行命令列記録部130とを備える。
メモリ105は、動的コンパイラプログラムを実行するコンピュータのメモリ上に実行するプログラムの作業領域として割り当てられた記憶領域である。具体的には、メモリ105は、例えばコンパイラシステム80がコンピュータのOSにメモリ割り当てを要求することにより確保した記憶領域であり、動的コンパイラ100及び/又は実行部140のスタック領域、ヒープ領域、又は、mmapシステムコール等により割り当てられた記憶領域等であってよい。
実行状態取得部110は、部分プログラムの最適化の際に参照される、実行環境の状態情報である現在の1以上の実行状態情報の各値を取得する。各実行状態情報の値は、例えばJava仮想マシン等のプログラム実行環境90が提供するAPIを呼び出したり、メモリ105を直接参照したりすることにより取得できる。
判定部115は、共有プール135から、コンパイル対象の部分プログラムと同じ部分プログラムをコンパイルして生成された実行命令列に関係付けられた条件のリストを読み出し、該リスト内の各条件を実行状態取得部110により取得された対応する現在の実行状態情報の値が満たすか否かを判定する。共有プール135の検索は、例えば、コンパイル対象の部分プログラムがメソッドである場合、該メソッドのクラス名及びメソッド名を利用してよい。
現在の各実行状態情報の値が、対応する条件、即ち該実行状態情報の値が満たすべきとされる条件を満たす場合、判定部115は、共有プール135から上記リストに関連付けられた実行命令列を読み出し、該実行命令列を、実行命令列記録部125を介して作業領域としてのメモリ105に記録してよい。ここで、リスト内に複数の条件がある場合、全ての条件が、それぞれ対応する現在の実行状態情報の値(各条件について参照された実行状態情報が複数ある場合は複数の実行状態情報の値)により満たされることがコンパイル済みの実行命令列を再利用する条件となる。
また、コンパイル対象の部分プログラムに対応する実行命令列であって、かつ現在の1以上の実行状態情報の各値がそれぞれ満し得る条件のリストに関連付けられた実行命令列が、共有プール135内に複数存在する場合、判定部115は、リスト内の条件の数の合計が最大である実行命令列を再利用すべき実行命令列として決定してよい。この際判定部115は、条件の数の合計を、該条件を課す基となった最適化の種類ごとに予め設定された重み付けの値を用いて計算してもよい。重み付けは、例えば、最適化の種類ごとその実行速度への影響度に応じて設定してよい。
上記構成に代えて判定部115は、コンパイル対象の部分プログラムに対応する実行命令列であって、かつ現在の1以上の実行状態情報の各値がそれぞれ満し得る条件のリストに関連付けられた実行命令列が、共有プール135内に複数存在する場合、実行命令列に適用された最適化の数の合計が最大である実行命令列を再利用すべき実行命令列として決定してもよい。ここでも判定部115は、最適化の数の合計を、最適化の種類ごとに予め設定された重み付けの値を用いて計算してもよい。重み付けは、例えば、最適化の種類ごとその実行速度への影響度に応じて設定してよい。
なお、コンパイル対象の部分プログラムに対応する実行命令列であって、かつ現在の1以上の実行状態情報の各値がそれぞれ満し得る条件のリストに関連付けられた実行命令列が、共有プール135内に1つも存在しない場合、判定部115は、後述する動的コンパイル部120にコンパイル対象の部分プログラムをコンパイルするよう通知する。なおこの場合、実行命令列記録部125は、動的コンパイル部120により生成された実行命令列を作業領域としてのメモリ105に記録する。
動的コンパイル部120は、判定部115による判定結果が否定的である場合に、コンパイル対象の部分プログラムをコンパイルして実行命令列を生成する。好ましくは、動的コンパイル部120は、コンパイル対象の部分プログラムに適用可能な1以上の最適化のうち、現在の1以上の実行状態情報の各値を参照してその効果が得られると判断した最適化を適用してコンパイル対象の部分プログラムをコンパイルする。
適用する最適化の決定は、より具体的には次のようにして行われる。まず、選択された最適化レベルによって決まる最適化の候補リストが取得される。なお、最適化レベルは、コンパイル対象の部分プログラムの累積実行回数や単位時間当たりの実行頻度などにより選択される。続いて、コンパイル対象の部分プログラムが解析され、候補リストにあるいずれかの最適化が可能なコード列が検索される。続いて、検索されたコード列に対して適用可能と判断された最適化を実際に適用した場合の効果が、現在の実行状態情報の値に基づいて見積もられる。見積もられた効果が所定の効果以上であれば最終的にその最適化が適用される。なお、上記見積もりは、実際には、現在の実行状態情報の値が、見積もる効果が所定の効果以上となるために実行状態情報の値が満たすべき条件を満たすか否かを判断することによって行われる。そして見積もりの結果、最適化の効果が得られると判断された全ての最適化が最終的に適用される。
このような最適化の効果の見積もり方法や、見積もりの際に参照される1以上の実行状態情報の種類、更に見積もる効果が所定の効果以上となるために各実行状態情報の値が満たすべき条件は、最適化のアルゴリズムによって決まるものであり、最適化の種類ごとに異なる。それぞれの最適化のアルゴリズムは例えば非特許文献1に記載されるように公知の技術であり、最適化のアルゴリズムそれ自体は本発明の要旨ではないので、ここでは最適化ごとのアルゴリズムの詳細な説明は省略する。なお、本発明において重要であるのは、最適化の適用を検討する際に動的コンパイル部120が参照した実行状態情報のリストと、動的コンパイル部120が使用した、各実行状態情報の値が最適化の効果を得るために満たすべき条件のリストとを、コンパイル済みの実行命令列の再利用を検討する際に利用できるようにすることである。そのために、動的コンパイル部120はこれら情報を一時的に保存して、後述する条件付実行命令列記録部130に渡す。
上記一時的な保存において、動的コンパイル部120は、1以上の実行状態情報の各値が最適化の効果を得るために満たすべき条件を、該条件を示すデータとして有している場合は、該データを保存してよい。また、動的コンパイル部120は、上記条件を、引数として渡された実行状態情報の値が条件を満たす場合に真を返す実行可能コードとして有している場合は、該実行可能コードを保存してよい。
条件付実行命令列記録部130は、動的コンパイル部120が生成した実行命令列を、動的コンパイル部120が部分プログラムに適用した1以上の最適化の各々に関して参照された実行状態情報のリストと、該リスト内の各実行状態情報に関して最適化による効果が得られると判断するために動的コンパイル部120が利用した情報、即ち、適用した最適化の効果を得るために対応する実行状態情報の値が満たすべき条件のリストとに関連付けて、共有プール135に記録する。なお、条件付実行命令列記録部130は、共有プール135に記録するこれら情報を動的コンパイル部120から直接にまたはメモリ105等を介して間接的に取得する。
共有プール135としてコンピュータのメモリの一部が使用される場合、条件付実行命令列記録部130は、適用された1以上の最適化のすべてが、共有プール135にアクセス可能な他のコンパイル装置における値との差が少ない実行状態情報のみを参照する最適化である場合に限定して、該最適化に関して参照された実行状態情報のリストと、該リスト内の各実行状態情報に関して最適化による効果が得られると判断するために利用された、各実行状態情報が満たすべき条件のリストとに関連付けて、動的コンパイル部120により生成された実行命令列を共有プール135に記録してもよい。一方、共有プール135としてコンピュータがアクセス可能な記憶装置が使用される場合、条件付実行命令列記録部130は、適用された最適化のすべてが、実行状態取得部110による取得ごとの値の変化が少ない実行状態情報のみを参照する適化である場合に限定して、該最適化に関して参照された実行状態情報のリストと、該リスト内の各実行状態情報に関して最適化による効果が得られると判断するために利用された、各実行状態情報が満たすべき条件のリストとに関連付けて、動的コンパイル部120により生成された実行命令列を共有プール135に記録してもよい。
上記性質を有する実行状態情報の種類に関する情報は、条件付実行命令列記録部130が参照できるように予めコンピュータに設定しておくものとする。あるいは、低い最適化レベルを適用する際に参照される実行状態情報の多くがこのような性質を有するので、上記構成に代えて、条件付実行命令列記録部130は、適用された1以上の最適化のすべてが、低い最適化レベルの最適化である場合に限定して、該最適化に関して参照された実行状態情報のリストと、該リスト内の各実行状態情報に関して最適化による効果が得られると判断するために利用された、各実行状態情報が満たすべき条件リストとに関連付けて、動的コンパイル部120により生成された実行命令列を共有プール135に記録してもよい。この場合、動的コンパイル部120は、適用した最適化レベルの情報も合わせて条件付実行命令列記録部130に渡すものとする。上記のような構成を採用すれば、適応型最適化を適用してコンパイルした実行命令列の再利用可能性が更に高まる。
図3は、適応型最適化の適用を検討する際に参照される実行状態情報と、適用する最適化の効果を得るために実行状態情報が満たすべき条件の具体例を示す一覧表である。図3に示すように、実行状態取得部110により取得され、また適応型最適化の適用を判断するために動的コンパイル部120が参照する実行状態情報は、(1)コンパイル対象の部分プログラム(メソッド)と、(2)プログラム実行環境90が構築されるコンピュータ(システム)の構成情報と、(3)仮想マシンの内部情報と、(4)プログラム実行時のプロファイル情報のいずれかに分類できる。
(1)〜(4)のそれぞれに分類される実行状態情報の具体例は図3に示す通りである。なお、これらの実行状態情報は、プログラムの実行開始時にJava(登録商標)クラスファイルから実行部140により読み込まれて、又はプログラムの実行後新たに生成されてメモリ105格納される。なお、図3の一覧表に示す実行状態情報のうち、網掛けを施されたものは、上述した、共有プール135にアクセス可能な他のコンパイル装置における値との差が少ない及び実行状態取得部110による取得ごとの値の変化が少ない実行状態情報である。
以下、図3の一覧表にある「実行状態情報が満たすべき条件の具体例」の各々を説明する。まず条件1において、実行状態情報は、クラスファイルの変更日時(実行状態情報1)とメモリ105に保存されている実行命令列の作成日(実行状態情報2)である。条件1は、実行状態情報1の値が実行状態情報2の値以下であれば真を返す論理式として表すことができる。条件2において、実行状態情報は、インライン可能なメソッド一覧(実行状態情報1)である。実行状態情報1に、C1.foo()とC2.foo()の両方が含まれていれば真を返す論理式として表すことができる。
条件3において、実行状態情報は、マシンのCPU数(実行状態情報1)である。従って条件3は、実行状態情報1の値が2以上であれば真を返す論理式として表すことができる。条件4において、実行状態情報はJava仮想マシンのバージョン(実行状態情報1)である。従って条件4は、実行状態情報1の値がJava6に等しければ真を返す論理式として表すことができる。
条件5において、実行状態情報は、コマンド行引数(実行状態情報1)である。従って条件5は、実行状態情報1の値に-Xaggressiveが含まれていれば真を返す論理式として表すことができる。条件6において、実行状態情報は初期化が完了しているクラスのリスト(実行状態情報1)である。従って条件6は、実行状態情報1の値にjava.util.ArrayListが含まれていれば真を返す論理式として表すことができる。
条件7において、実行状態情報は、別のメソッドの実行命令列のアドレス(実行状態情報1)である。従って条件7は、実行状態情報1の値が現在コンパイル中のメソッドの生成アドレスの前後32KB以内であれば真を返す論理式として表すことができる。条件8において、実行状態情報はコンパイル中のメソッドが呼び出す別のメソッドに関してメモリ105に保存された情報(実行状態情報1)である。従って条件8は、実行状態情報1の値が「引数として受け取った値をグローバル変数に代入している」ことを示す情報を含んでいなければ真を返す論理式として表すことができる。
条件9において、実行状態情報は、ロード済みクラスのクラス階層情報(実行状態情報1)である。従って条件9は、実行状態情報1の値に「クラスCのメソッドfoo()がサブクラスでオーバーライドされている」ことを示す情報が含まれていなければ真を返す論理式として表すことができる。条件10において、実行状態情報はコンパイル中のメソッドから参照されるクラスCへの外部参照解決の状態(実行状態情報1)である。従って条件10は、実行状態情報1の値が「解決済み」であることを示す情報に等しければ真を返す論理式として表すことができる。
条件11において、実行状態情報は、実行時プロファイルの結果(実行状態情報1)である。従って条件11は、実行状態情報1の値に、メソッドfoo()引数の値が0である確率を示す情報として75%以上の数値が含まれていれば真を返す論理式として表すことができる。条件12において、実行状態情報は最適化レベルの情報(実行状態情報1)である。従って条件12は、実行状態情報1の値が「warm」に等しければ真を返す論理式として表すことができる。
以上のように、適用する最適化の効果を得るために実行状態情報が満たすべき条件は、コンピュータによって処理可能な形式で保持することができる。
条件付実行命令列記録部130はまた、動的コンパイル部120が生成した実行命令列内にオペランドとしてアドレスが含まれる場合、該実行命令列を、更に再配置情報に関連付けて共有プール135に記録する。ここで再配置情報とは、実行命令列が再利用される場合に上記アドレスを修正するための情報である。具体的には、再配置情報は、アドレスの実行命令列内での位置情報(より具体的には、アドレス値の実行命令列内で場所とバイト長)、該アドレスが指すデータを識別する識別情報とを含む。
例えば、アドレスの実行命令列内での位置情報として、「オフセット80バイト目からの4バイト」、アドレスが指すデータを識別する識別情報として、「java.lang.Stringクラスの内容を保持する構造体」を有する再配置情報が、共有プール135内の実行命令列に関連付けられていたとする。この場合、実行命令列の再利用を決定すると、動的コンパイラ100は、現在のプログラム実行環境90におけるjava.lang.Stringクラスの内容を保持する構造体のアドレス(32bit=4バイト)を取得し、再利用する実行命令列を共有プール135からメモリ105へコピーし、オフセット80バイト目からの4バイトを取得したアドレスで上書きする。
次に図4乃至図6を参照して、動的コンパイラ100の動作を説明する。図4は、本実施形態に係る動的コンパイラ100の動作フローの一例を示す。動的コンパイラ100は、プログラムに含まれる複数の部分プログラムのうち、次に実行すべき部分プログラムを順次コンパイルする。図4に示す動作フローは、実行部140のリクエストに応答して、動的コンパイラ100が次に実行すべき部分プログラムのコンパイルのリクエストを受けたところから開始する。
ステップ400において処理は開始し、実行情報取得部110は、例えばJava仮想マシン等のプログラム実行環境90が提供するAPIを呼び出したり、メモリ105を直接参照したりすることにより、現在の1以上の実行状態情報の各値を取得する。
次に判定部115は、共有プール135内に、コンパイル対象の部分プログラムに対応する再利用可能な実行命令列があるか否かを、実行情報取得部110から受け取った現在の1以上の実行状態情報の各値に基づいて判定する(ステップ405)。判定処理の詳細は、図5を参照して後述する。
続いて判定部115は、判定処理において再利用可能な実行命令列が見つかったか否かを判断する(ステップ410)。共有プール135内に再利用可能な実行命令列が見つからなかった場合(ステップ410:NO)、判定部115は、動的コンパイル部120にその旨通知し、動的コンパイル部120は次に実行すべき部分プログラムをコンパイルする(ステップ415)。動的コンパイル処理の詳細は、図6を参照して後述する。
続いて条件付実行命令記録部130は、部分プログラムをコンパイルして動的コンパイル部120により生成された実行命令列を、部分プログラムに適用した1以上の最適化の各々に関して参照された実行状態情報のリストと、該リスト内の各実行状態情報に関して最適化による効果が得られると判断するために動的コンパイル部120により利用された、各実行状態情報の値が満たすべき条件のリストとに関連付けて共有プール135に記録する(ステップ420)。
判定処理において再利用可能な実行命令列が見つかった場合(ステップ410:YES)、またはステップ420から、処理はステップ425へ進み、実行命令列記録部125は、動的コンパイル部120により生成された実行命令列又は判定部115により再利用が決定された共有プール135内の実行命令列をメモリ105に記録する。そして処理は終了する。
図5(a)は、図4に示すステップ405の判定処理の詳細な動作フローの一例を示す。処理はステップ500から開始し、判定部115は、共有プール135から、次のコンパイル対象の部分プログラムに対応する実行命令列を全て読み出す。続いて判定部115は、取得した各実行命令列について、現在の実行環境への適合度合いを示すスコアを算出する(ステップ505)。スコア算出処理の詳細は図5(b)を参照して後述する。続いて判定部115は、ステップ505において算出された適合度合いスコアが0を超える実行命令列があるか否かを判断する(ステップ510)。
算出されたスコアが0を超える実行命令列がある場合(ステップ510:YES)、判定部115は、スコアが最大の実行命令列を再利用する実行命令列として選択する(ステップ515)。一方、算出されたスコアが0を超える実行命令列がない場合(ステップ510:NO)、判定部115は、再利用可能な実行命令列は存在しないと判断する(ステップ520)。ステップ515及びステップ520の後処理は終了する。
図5(b)は、図5(a)に示すステップ505のスコア算出処理の詳細な動作フローの一例を示す。処理はステップ530から開始し、判定部115は、読み出した各実行命令列について、該実行命令列に関連付けられた条件のリストを取得する。続いて判定部115は、各実行命令列について取得したリスト内の1以上の条件の各々に、実行状態取得部110が取得した対応する現在の実行状態情報の値を代入し(ステップ535)、リスト内の全ての条件が、現在の実行状態情報の各値によって満たされるか否かを判定する(ステップ540)。
リスト内の全ての条件が満たされる実行命令列が1以上ある場合(ステップ540:YES)、該1以上の実行命令列に対して、処理はステップ545へ進む。そして判定部115は、1以上の実行命令列の各々に対し、該実行命令列に関連付けられたリスト内の条件の数の合計を、現在の実行環境への適合度合いを示すスコアとして算出する。一方、リスト内の一部または全部の条件が満たされない実行命令列が1以上ある場合(ステップ540:NO)、該1以上の実行命令列に対して、処理はステップ550へ進む。そして判定部115は、1以上の実行命令列の各々に対し、現在の実行環境への適合度合いを示すスコアを0に設定する。そして処理は終了する。
図6は、図4に示すステップ415の動的コンパイル処理の詳細な動作フローの一例を示す。処理はステップ600から開始し、動的コンパイル部120は、現在の最適化レベルによって決まる、適用する最適化の候補を決定する。続いて動的コンパイル部120は、コンパイル対象の部分プログラムを解析し、最適化の候補の中のいずれかを適用可能なコード列を検索する(ステップ605)。
続いて動的コンパイル部120は、最適化可能なコード列があったか否かを判定する(ステップ610)。最適化可能なコード列がない場合(ステップ610:NO)、処理は終了する。一方、最適化可能なコード列がある場合(ステップ610:YES)、処理はステップ615へ進み、動的コンパイル部120は、実行状態取得部110が取得した現在の1以上の実行状態情報を参照して、最適化の効果を見積もる。最適化の効果の見積もりは、具体的には、ステップ605で見つかったコード列に対し適用可能な最適化について、該最適化の効果を得るために実行状態情報が満たすべき1以上の条件を、対応する現在の1以上の実行状態情報の各値が満たすか否かによりなされる。
続いて動的コンパイル部120は、ステップ610における見積もりの結果が、最適化による効果が
得られることを示すか否かを判定する(ステップ620)。最適化による効果が得られると判断された場合(ステップ620:YES)、動的コンパイラは、該最適化の適用の検討に関して参照した実行状態情報の一覧と、最適化による効果を得るために各実行状態情報が満たすべき条件のリストとを、条件付実行命令列130に渡すために一旦保存する(ステップ625)。
続いて動的コンパイル部120は、最適化可能であり、かつ該最適化による効果が得られると現在の実行状態情報に基づいて判断したコード列を、該最適化を適用してコンパイルする(ステップ630)。そして処理は終了する。なお、ステップ610からステップ630の各ステップは、ステップ605で検索された最適化可能なコード列の各々に対して実行されることに留意されたい。
図7は、本実施形態に係るコンピュータ50のハードウェア構成の一例を示した図である。コンピュータ50は、バス2に接続されたメインCPU(中央処理装置)1とメインメモリ4を含んでいる。ハードディスク装置13、30、及びCD−ROM装置26、29、フレキシブル・ディスク装置20、MO装置28、DVD装置31のようなリムーバブル・ストレージ(記録メディアを交換可能な外部記憶システム)がフレキシブル・ディスクコントローラ19、IDEコントローラ25、SCSIコントローラ27などを経由してバス2へ接続されている。
フレキシブル・ディスク、MO、CD−ROM、DVD−ROMのような記憶メディアが、リムーバブル・ストレージに挿入される。これらの記憶メディアやハードディスク装置13、30、ROM14には、オペレーティング・システムと協働してCPU等に命令を与え、本発明を実施するためのコンピュータ・プログラムのコードを記録することができる。即ち、上記説明した数々の記憶装置には、コンピュータ50にインストールされ、コンピュータ50をコンパイラシステム80として機能させるコンパイラプログラムを記録することができる。
上記コンパイラプログラムは、動的コンパイラプログラム及び実行モジュールを含む。これらプログラム又はモジュールは、CPU1等に働きかけて、コンピュータ50を、動的コンパイラ100と、実行部140としてそれぞれ機能させる。動的コンパイラプログラムは、実行状態取得モジュール、判定モジュール、動的コンパイルモジュール、実行命令列記録モジュール、及び条件付実行命令列記録モジュールを含む。これらモジュールは、CPU1等に働きかけて、コンピュータ50を、実行状態取得部110、判定部115、動的コンパイル部120、実行命令記録部125、及び条件付実行命令記録部130としてそれぞれ機能させる。コンピュータ・プログラムは圧縮し、また複数に分割して複数の媒体に記録することもできる。
コンピュータ50は、キーボード/マウス・コントローラ5を経由して、キーボード6やマウス7のような入力デバイスからの入力を受ける。コンピュータ50は、オーディオコントローラ21を経由して、マイク24からの入力を受け、またスピーカー23から音声を出力する。コンピュータ50は、視覚データをユーザに提示するための表示装置11に、グラフィックスコントローラ10を経由して接続される。コンピュータ50は、ネットワーク・アダプタ18(イーサネット(登録商標)・カードやトークンリング・カード)等を介してネットワークに接続し、他のコンピュータ等と通信を行うことが可能である。
以上の説明により、本実施形態に係るコンピュータ50は、通常のパーソナルコンピュータ、ワークステーション、メインフレームなどの情報処理装置、又は、これらの組み合わせによって実現されることが容易に理解されるであろう。なお、上記説明した構成要素は例示であり、そのすべての構成要素が本発明の必須構成要素となるわけではない。
以上、実施形態を用いて本発明の説明をしたが、本発明の技術範囲は上記実施形態に記載の範囲には限定されない。上記の実施形態に、種々の変更又は改良を加えることが可能であることが当業者に明らかである。従って、そのような変更又は改良を加えた形態も当然に本発明の技術的範囲に含まれる。
なお、特許請求の範囲、明細書、及び図面中において示した装置、システム、プログラム、及び方法における動作、手順、ステップ、及び段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り任意の順序で実現しうることに留意すべきである。また、前の処理の出力を後の処理で用いる場合でも、前の処理と後の処理の間に他の処理が入ることは可能である場合があること、又は間に他の処理が入るように記載されていても前の処理を後の処理の直前に行うよう変更することも可能である場合があることも留意されたい。特許請求の範囲、明細書、及び図面中の動作フローに関して、便宜上「まず、」、「次に、」、「続いて、」等を用いて説明したとしても、この順で実施することが必須であることを必ずしも意味するとは限らない。

Claims (14)

  1. プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンピュータにコンパイルさせる動的コンパイラプログラムであって、
    前記コンピュータは、該コンピュータが実行するプログラムの1以上の部分プログラムの各々について、該部分プログラムをコンパイルして生成された実行命令列を、前記部分プログラムに適用された1以上の最適化の各々に関して参照された実行環境の状態情報である実行状態情報のリストと、該リスト内の各実行状態情報の値が対応する最適化の効果を得るために満たすべきとされた条件のリストとに関係付けて保存する共有プールを有し、
    前記動的コンパイラプログラムは前記コンピュータを、
    現在の1以上の実行状態情報の各値を取得する実行状態取得部と、
    前記共有プールから、コンパイル対象の部分プログラムと同じ部分プログラムをコンパイルして生成された実行命令列に関係付けられた前記条件のリストを読み出し、各条件を対応する現在の実行状態情報の値が満たすか否かを判定する判定部と、
    前記判定部による判定結果が否定的である場合に、前記コンパイル対象の部分プログラムをコンパイルして実行命令列を生成する動的コンパイル部として機能させ、
    前記コンパイラプログラムは、前記コンピュータに、前記判定部による判定が肯定的である場合は、前記条件のリストに関連付けられて前記共有プールに保存される前記実行命令列を再利用させる、動的コンパイラプログラム。
  2. 前記動的コンパイル部は、前記コンパイル対象の部分プログラムに適用可能な1以上の最適化のうち、前記現在の1以上の実行状態情報の各値を参照してその効果が得られると判断した最適化を適用して前記コンパイル対象の部分プログラムをコンパイルして実行命令列を生成し、前記動的コンパイラプログラムは、前記コンピュータを、前記部分プログラムに適用された1以上の最適化の各々に関して参照された実行状態情報のリストと、該リスト内の各実行状態情報に関して対応する最適化による効果が得られると判断するために利用された、前記各実行状態情報が満たすべき条件のリストとに関連付けて、前記動的コンパイル部により生成された実行命令列を前記共有プールに記録する条件付実行命令列記録部として更に機能させる、請求項1に記載の動的コンパイラプログラム。
  3. 前記共有プールは、前記コンピュータのメモリの一部であり、前記条件付実行命令列記録部は、前記部分プログラムに適用された前記1以上の最適化のすべてが、前記共有プールにアクセス可能な他のコンパイル装置における値との差が少ない実行状態情報のみを参照する最適化である場合にのみ、各最適化に関して参照された実行状態情報のリストと、該リスト内の各実行状態情報に関して対応する最適化による効果が得られると判断するために利用された、前記各実行状態情報が満たすべき条件のリストとに関連付けて、前記動的コンパイル部により生成された実行命令列を前記共有プールに記録する、請求項2に記載の動的コンパイラプログラム。
  4. 前記動的コンパイラプログラムは、前記コンピュータを、前記判定部による判定結果が肯定的である場合は、前記コンピュータのメモリ上に前記プログラムの作業領域として割り当てられた記憶領域に、前記共有プールから前記条件のリストに関連付けられた前記実行命令列を読み出して記録し、前記判定部による判定結果が否定的である場合は、前記記憶領域に、前記動的コンパイル部により生成された前記実行命令列を記録する実行命令列記録部として更に機能させる、請求項2に記載の動的コンパイラプログラム。
  5. 前記判定部は、前記コンパイル対象の部分プログラムに対応する実行命令列であって、かつ前記現在の1以上の実行状態情報の各値が満し得る前記条件のリストに関連付けられた前記実行命令列が、前記共有プール内に複数存在する場合、前記条件のリスト内の条件の数の合計が最大である前記実行命令列を再利用すべき前記実行命令列として決定する、請求項2に記載の動的コンパイラプログラム。
  6. 前記条件の数の合計は、最適化の種類ごとに予め設定された重み付けの値を用いて計算される、請求項5に記載の動的コンパイラプログラム。
  7. 前記判定部は、前記コンパイル対象の部分プログラムに対応する実行命令列であって、かつ前記現在の1以上の実行状態情報の各値が満し得る前記条件のリストに関連付けられた前記実行命令列が、前記共有プール内に複数存在する場合、前記実行命令列に適用された最適化の数の合計が最大である前記実行命令列を再利用すべき前記実行命令列として決定する、請求項2に記載の動的コンパイラプログラム。
  8. 前記最適化の数の合計は、最適化の種類ごとに予め設定された重み付けの値を用いて計算される、請求項7に記載の動的コンパイラプログラム。
  9. 前記条件付実行命令列記録部は、前記動的コンパイル部が生成した前記実行命令列内にオペランドとしてアドレスが含まれる場合に、前記アドレスの前記実行命令列内での位置情報と、該アドレスが指すデータを識別する識別情報とに更に関連付けて、前記実行命令列を前記共有プールに記録する、請求項2に記載の動的コンパイラプログラム。
  10. 前記共有プールは、前記コンピュータがアクセス可能な記憶装置であり、前記条件付実行命令列記録部は、前記部分プログラムに適用された前記1以上の最適化のすべてが、前記実行状態取得部による取得ごとの値の変化が少ない実行状態情報のみを参照して適用された最適化である場合にのみ、各最適化に関して参照された実行状態情報のリストと、該リスト内の各実行状態情報に関して対応する最適化による効果が得られると判断するために利用された、前記各実行状態情報が満たすべき条件のリストとに関連付けて、前記動的コンパイル部により生成された実行命令列を前記共有プールに記録する、請求項2に記載の動的コンパイラプログラム。
  11. コンピュータにおいて、プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンパイルする動的コンパイル方法であって、
    前記コンピュータは、該コンピュータが実行するプログラムの1以上部分プログラムの各々について、該部分プログラムをコンパイルして生成された実行命令列を、前記部分プログラムに適用された1以上の最適化の各々に関して参照された実行環境の状態情報である実行状態情報のリストと、該リスト内の各実行状態情報の値が対応する最適化の効果を得るために満たすべきとされた条件のリストとに関係付けて保存する共有プールを有し、
    前記コンピュータのプロセッサが、現在の1以上の実行状態情報の各値を取得するステップと、
    前記コンピュータのプロセッサが、前記共有プールから、コンパイル対象の部分プログラムと同じ部分プログラムをコンパイルして生成された実行命令列に関係付けられた前記条件のリストを読み出し、各条件を対応する現在の実行状態情報の値が満たすか否かを判定するステップと、
    前記コンピュータのプロセッサが、判定の結果が否定的であることに応じて、前記コンパイル対象の部分プログラムをコンパイルして実行命令列を生成するステップとを含み、
    前記判定が肯定的である場合は、前記条件のリストに関連付けられて前記共有プールに保存される前記実行命令列が再利用される、動的コンパイル方法。
  12. 前記実行命令列を生成するステップは、前記コンパイル対象の部分プログラムに適用可能な1以上の最適化のうち、前記現在の1以上の実行状態情報の各値を参照してその効果が得られると判断した最適化を適用して前記コンパイル対象の部分プログラムをコンパイルするステップを含み、前記コンピュータのプロセッサが、前記部分プログラムに適用された1以上の最適化のすべてが低い最適化レベルの最適化である場合にのみ、該最適化に関して参照された実行状態情報のリストと、該リスト内の各実行状態情報に関して最適化による効果が得られると判断するために利用された、前記各実行状態情報が満たすべき条件のリストとに関連付けて、生成された実行命令列を前記共有プールに記録するステップを更に含む、請求項11に記載の動的コンパイル方法。
  13. プログラムの実行中に、プログラムに含まれる複数の部分プログラムのうち実行すべき部分プログラムを順次コンパイルする動的コンパイル装置であって、
    該コンピュータが実行するプログラムの1以上の部分プログラムの各々について、該部分プログラムをコンパイルして生成された実行命令列を、前記部分プログラムに適用された1以上の最適化の各々に関して参照された実行環境の状態情報である実行状態情報のリストと、該リスト内の各実行状態情報の値が対応する最適化の効果を得るために満たすべきとされた条件のリストとに関係付けて保存する共有プールと、
    現在の1以上の実行状態情報の各値を取得する実行情報取得部と、
    前記共有プールから、コンパイル対象の部分プログラムと同じ部分プログラムをコンパイルして生成された実行命令列に関係付けられた前記条件のリストを読み出し、各条件を対応する現在の実行状態情報の値が満たすか否かを判定する判定部と、
    判定の結果が否定的であることに応答して、前記コンパイル対象の部分プログラムをコンパイルして実行命令列を生成する動的コンパイル部とを含み、
    前記判定が肯定的である場合は、前記条件のリストに関連付けられて前記共有プールに保存される前記実行命令列を再利用する、動的コンパイル装置。
  14. 前記動的コンパイル部は、前記コンパイル対象の部分プログラムに適用可能な1以上の最適化のうち、前記現在の1以上の実行状態情報の各値を参照してその効果が得られると判断した最適化を適用して前記コンパイル対象の部分プログラムをコンパイルし、前記部分プログラムに適用された1以上の最適化のすべてが低い最適化レベルの最適化である場合にのみ、該最適化に関して参照された実行状態情報のリストと、該リスト内の各実行状態情報に関して最適化による効果が得られると判断するために利用された、前記各実行状態情報が満たすべき条件のリストとに関連付けて、生成された実行命令列を前記共有プールに記録する条件付実行命令列記録部を更に含む、請求項13に記載の動的コンパイル装置。
JP2010087038A 2010-04-05 2010-04-05 動的コンパイラプログラム、動的コンパイル方法及び動的コンパイル装置 Expired - Fee Related JP5460430B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2010087038A JP5460430B2 (ja) 2010-04-05 2010-04-05 動的コンパイラプログラム、動的コンパイル方法及び動的コンパイル装置
US13/076,853 US8612948B2 (en) 2010-04-05 2011-03-31 Dynamic compiler program, dynamic compiling method and dynamic compiling device
US14/096,700 US8938728B2 (en) 2010-04-05 2013-12-04 Dynamic compiler program, dynamic compiling method and dynamic compiling device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010087038A JP5460430B2 (ja) 2010-04-05 2010-04-05 動的コンパイラプログラム、動的コンパイル方法及び動的コンパイル装置

Publications (2)

Publication Number Publication Date
JP2011221609A JP2011221609A (ja) 2011-11-04
JP5460430B2 true JP5460430B2 (ja) 2014-04-02

Family

ID=44711129

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010087038A Expired - Fee Related JP5460430B2 (ja) 2010-04-05 2010-04-05 動的コンパイラプログラム、動的コンパイル方法及び動的コンパイル装置

Country Status (2)

Country Link
US (1) US8612948B2 (ja)
JP (1) JP5460430B2 (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8843906B1 (en) * 2006-10-16 2014-09-23 The Mathworks, Inc. Inferring data types from compiler call site
US8959495B2 (en) * 2012-09-14 2015-02-17 Oracle International Corporation Unifying static and dynamic compiler optimizations in source-code bases
US9778917B2 (en) 2012-09-26 2017-10-03 International Business Machines Corporation Dynamically building subsections of locale objects at run-time
US9116680B2 (en) 2012-09-26 2015-08-25 International Business Machines Corporation Dynamically building locale objects or subsections of locale objects based on historical data
US9141352B2 (en) * 2012-09-26 2015-09-22 International Business Machines Corporation Dynamically building locale objects at run-time
US8881123B2 (en) 2012-11-30 2014-11-04 Oracle International Corporation Enabling symbol resolution of private symbols in legacy programs and optimizing access to the private symbols
US8972975B1 (en) 2013-04-01 2015-03-03 Google Inc. Bounded installation time optimization of applications
KR20150047940A (ko) * 2013-10-25 2015-05-06 삼성전자주식회사 어플리케이션 분석 방법 및 장치
US9411664B1 (en) 2015-12-03 2016-08-09 International Business Machines Corporation Fingerprint-based processor parameter management
US9495138B1 (en) * 2016-01-04 2016-11-15 International Business Machines Corporation Scheme for verifying the effects of program optimizations
US10108442B1 (en) * 2017-09-18 2018-10-23 International Business Machines Corporation Optimization and affinity for hypervisor-based just-in-time translator
CN110119274A (zh) * 2018-02-05 2019-08-13 北京智明星通科技股份有限公司 一种数据编译的方法、装置以及电子终端、计算机可读存储介质
CN111949272B (zh) * 2020-07-30 2023-12-22 百度在线网络技术(北京)有限公司 寄宿应用的编译优化方法、装置、电子设备及可读存储介质
US11379281B2 (en) * 2020-11-18 2022-07-05 Akamai Technologies, Inc. Detection and optimization of content in the payloads of API messages
CN115022375A (zh) * 2022-06-28 2022-09-06 雷沃工程机械集团有限公司 一种挖掘机Tbox设备下行指令编译方法

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002259135A (ja) 2001-02-28 2002-09-13 Internatl Business Mach Corp <Ibm> プログラムの最適化方法及びこれを用いたコンパイラ
JP3808755B2 (ja) 2001-11-07 2006-08-16 富士通株式会社 Jitコンパイラを備えた仮想計算機
JP2004078751A (ja) * 2002-08-21 2004-03-11 Nippon Telegr & Teleph Corp <Ntt> コンパイル済みプログラムコード再利用方法、装置およびプログラム
US7237064B2 (en) * 2003-10-10 2007-06-26 Intel Corporation Method and apparatus for feedback-based management of combined heap and compiled code caches
JP4086791B2 (ja) * 2004-01-28 2008-05-14 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラプログラム、動的コンパイラプログラム、再現コンパイラプログラム、再現コンパイラ、コンパイル方法、及び記録媒体
US7665075B1 (en) * 2004-03-17 2010-02-16 Sun Microsystems, Inc. Methods for sharing of dynamically compiled code across class loaders by making the compiled code loader reentrant
US7644402B1 (en) * 2004-03-17 2010-01-05 Sun Microsystems, Inc. Method for sharing runtime representation of software components across component loaders
US20060123398A1 (en) * 2004-12-08 2006-06-08 Mcguire James B Apparatus and method for optimization of virtual machine operation
US8381202B2 (en) * 2006-06-20 2013-02-19 Google Inc. Runtime system for executing an application in a parallel-processing computer system
US8413125B2 (en) * 2007-01-26 2013-04-02 Oracle International Corporation Asynchronous dynamic compilation based on multi-session profiling to produce shared native code
US9361078B2 (en) * 2007-03-19 2016-06-07 International Business Machines Corporation Compiler method of exploiting data value locality for computation reuse
US8321850B2 (en) * 2008-06-06 2012-11-27 Vmware, Inc. Sharing and persisting code caches
US9117071B2 (en) * 2009-06-03 2015-08-25 Apple Inc. Methods and apparatuses for secure compilation

Also Published As

Publication number Publication date
US20110246974A1 (en) 2011-10-06
US8612948B2 (en) 2013-12-17
JP2011221609A (ja) 2011-11-04

Similar Documents

Publication Publication Date Title
JP5460430B2 (ja) 動的コンパイラプログラム、動的コンパイル方法及び動的コンパイル装置
US8286152B2 (en) Systems, methods, and computer products for just-in-time compilation for virtual machine environments for fast application startup and maximal run-time performance
US8832672B2 (en) Ensuring register availability for dynamic binary optimization
US8281291B2 (en) System and method for embedded java memory footprint performance improvement
JP5583514B2 (ja) バイナリコードを最適化するコンパイル方法、及びそのコンパイラシステム、並びにコンピュータ・プログラム
US9323508B2 (en) Method and system for compiler optimization
EP3455736B1 (en) Dynamically sized locals with precise garbage collection reporting
US20040255279A1 (en) Block translation optimizations for program code conversation
JP2010532530A (ja) メモリトランザクションのグループ化
US9424004B2 (en) Execution guards in dynamic programming
JP2013235386A (ja) 最適化装置、最適化方法、及び最適化プログラム
JP2009528589A (ja) 適応コンパイルコード
JP5719278B2 (ja) 情報処理装置、プロファイル対象決定プログラム及び方法
US10572275B2 (en) Compatible dictionary layout
US8938728B2 (en) Dynamic compiler program, dynamic compiling method and dynamic compiling device
US20120005460A1 (en) Instruction execution apparatus, instruction execution method, and instruction execution program
US20050183077A1 (en) System and method for JIT memory footprint improvement for embedded java devices
US11210193B2 (en) Evaluating performance improvement of executing instructions in a first processor over execution on a second processor before compilation
CN104166633B (zh) 用于存储器访问保护的方法和系统

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20121003

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131217

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140114

R150 Certificate of patent or registration of utility model

Ref document number: 5460430

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees