JP6127639B2 - プログラム実行制御プログラム、プログラム実行制御方法 - Google Patents

プログラム実行制御プログラム、プログラム実行制御方法 Download PDF

Info

Publication number
JP6127639B2
JP6127639B2 JP2013065039A JP2013065039A JP6127639B2 JP 6127639 B2 JP6127639 B2 JP 6127639B2 JP 2013065039 A JP2013065039 A JP 2013065039A JP 2013065039 A JP2013065039 A JP 2013065039A JP 6127639 B2 JP6127639 B2 JP 6127639B2
Authority
JP
Japan
Prior art keywords
program
code
execution
profile
execution control
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.)
Active
Application number
JP2013065039A
Other languages
English (en)
Other versions
JP2014191493A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2013065039A priority Critical patent/JP6127639B2/ja
Priority to US14/156,748 priority patent/US9170830B2/en
Publication of JP2014191493A publication Critical patent/JP2014191493A/ja
Application granted granted Critical
Publication of JP6127639B2 publication Critical patent/JP6127639B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、プログラム実行制御プログラム、プログラム実行制御方法に関する。
特定のプラットフォームに依存することなくプログラムを実行する仮想計算機の代表的な技術の一つとして、Java(登録商標)言語を用いる技術がある。具体的に、例えば、Javaのバイトコードを解釈して実行するJavaVM(Java Virtual Machine:プログラム実行制御プログラム)が挙げられる。
しかしながら、バイトコードは、プロセッサが直接解釈可能なネイティブコードと比較して、オーバヘッドが大きく実行速度が劣る。そこで、例えば、プログラムの実行の際にJIT(Just In Time)コンパイラによって、バイトコードからネイティブコードへの動的コンパイルが行われる。これにより、バイトコードがネイティブコードに変換され、処理が高速化される(例えば、特許文献1、2)。
例えば、JavaVMにおけるバイトコードからネイティブコードへのコンパイルは、プログラムの実行回数が設定値を超えたときに行われる。このとき、JavaVMは、コンパイルの完了を待機し、コンパイルが完了すると生成されたネイティブコードを実行する。または、例えば、JavaVMにおいて、バイトコードによる処理の実行と、ネイティブコードへのコンパイルが並列に行われる。この場合、JavaVMは、コンパイルが完了するまではバイトコードを実行し、コンパイルが完了し次第、ネイティブコードを実行する。
特開平11−237989号公報 特開2004−355277号公報
しかしながら、JavaVMにおいて、ネイティブコードへのコンパイルにかかるオーバヘッドが大きい。金融や保険・証券のオンラインシステムでは、プログラムの初回の実行時から、プログラムがネイティブコードで提供されるC、C++、COBOL等の言語プログラムと同等の実行速度(オーバヘッド)が求められる。
また、プログラムのネイティブコードは、プログラムの実行を繰り返すことで最適化されるが、コンパイルを実行したJavaVMプロセスが動作している間についてのみ有効である。このため、JavaVMのプロセスは、別のJavaVMのプロセスとネイティブコードを共有できない。したがって、各JavaVMにおいて、それぞれ、バイトコードからネイティブコードへのコンパイル処理が行われる。
そこで、本発明は、プログラムの実行を効率化するプログラム実行制御プログラム、プログラム実行制御方法を提供する。
第1の側面は、バイトコードのプログラムについて、少なくとも一部をネイティブコードに変換して実行するプログラム実行制御処理を行うプログラム実行制御プログラムであって、前記プログラム実行制御処理は、実行対象である実行対象プログラムの実行時に、所定の条件に基づいて、当該実行対象プログラムにおける前記バイトコードを前記ネイティブコードに変換する第1の変換工程と、起動時に、同じまたは別の前記プログラム実行制御プログラムの実行時におけるプロファイルであって、最適化状態に変換された実績を有する最適化完了プログラムの識別情報と、当該最適化完了プログラムのネイティブコードに変換済みの最適化コード情報とを有するプロファイルを参照して、前記実行対象プログラムの前記識別情報に基づいて、当該実行対象プログラムが前記最適化完了プログラムに該当するか否かを判定する判定工程と、前記最適化完了プログラムに該当する場合、前記起動時に、前記実行対象プログラムのバイトコードのうち前記最適化コード情報に対応するバイトコードを前記ネイティブコードに変換する第2の変換工程と、を有する。
第1の側面によれば、プログラムの実行が効率化される。
本実施の形態例におけるプログラム実行制御プログラムが動作する装置のブロック図の一例である。 ネイティブコードとバイトコードについて説明する図である。 JavaVMのブロック図の詳細について説明する例図である。 一般的なJavaVMの処理概要について説明する図である。 本実施の形態例におけるJavaVMの処理概要について説明する図である。 Java言語で記述されたプログラムのソースコードの一例を示す図である。 図6のプログラムにおいて、ネイティブコード化されるコードの一例について説明する図である。 図7のプログラムに対応するプログラムプロファイルの一例を示す図である。 JavaVMの全体の処理について説明するフローチャート図である。 起動初期処理制御工程の処理について説明するフローチャート図である。 プログラムプロファイル制御工程の処理を説明するフローチャート図である。 実行制御処理工程の処理を説明するフローチャート図である。 実行制御処理工程によってネイティブコード化がさらに進められた図7のプログラムの例を示す図である。 図13のプログラムに対応したプログラムプロファイルの一例を示す図である。 異なるメソッドが記述されたバイトコードの示す図である。 プログラムプロファイルの共有形態の例について説明する図である。 より高精度なプログラムプロファイルの生成工程について説明する図である。 本実施の形態例におけるJavaVMによるプログラムの実行速度について説明する図である。 本実施の形態例におけるプログラム実行制御プログラムが動作する装置の構成図の一例である。
以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
[プログラムの実行制御装置の構成図]
図19は、本実施の形態例におけるプログラム実行制御プログラムが動作する装置100の構成の一例を示す図である。同図の実行制御装置100は、例えば、一般的なコンピュータであって、例えば、プロセッサ21、表示部22、入力部23、通信部24、メモリ25を有する。各部は、バス26を介して相互に接続される。
図19において、表示部22は、例えば、コンピュータの液晶モニタ等を示し、入力部23は、キーボードやマウス等を示す。通信部24は、他のコンピュータとの通信処理を制御する。また、同図の例において、RAM(Random Access Memory)等のメモリ25には、例えば、本実施の形態例におけるプログラム実行制御プログラム101、及び、実行対象のプログラムであるバイトコード104が記憶される。バイトコード104については、後述する。プログラム実行制御プログラム101は、JavaVMである。以下、プログラム実行制御プログラム101を、JavaVMと称する。プロセッサ21は、JavaVMプログラム101と協働して、本実施の形態例におけるプログラムの実行制御処理を実現する。
[プログラムの実行制御装置のブロック図]
図1は、本実施の形態例におけるプログラム実行制御装置100のブロック図の一例を示す図である。JavaVM101は、コンピュータ上で動作するOS80の制御下において実行される。
図1のJavaVM101は、例えば、インタプリタ105とJITコンパイラ107とを有する。インタプリタ105は、Java言語のプログラムを示すバイトコード104を逐次解釈して実行する。また、JITコンパイラ107は、バイトコード104をネイティブコード108にコンパイルして変換する(動的コンパイル)。また、本実施の形態例において、JavaVM101は、バイトコード104のネイティブコード108への変換情報が記憶されるプログラムプロファイル102を参照、更新する。プログラムプロファイル102は、例えば、コンピュータ100がアクセス可能な記憶媒体に記憶される。
ここでバイトコード104と、ネイティブコード108について説明する。
[バイトコードとネイティブコード]
バイトコード104は、Java言語で記述されたソースコード111が変換されることによって生成される。バイトコード104は、実行形式のプログラムであって、特定のOS80やハードウェアに依存することなく定義された命令の集合によって記述される。つまり、バイトコード104は、JavaVM101が動作する環境であれば、様々なOS80、ハードウェアで実行可能であって、OS80やハードウェアに依存することなく同一の処理を行う。
また、ネイティブコード108は、JITコンパイラ107によってバイトコード104がコンパイルされることによって生成される。ネイティブコード108は、OS80が実行可能な機械語で記述されたコードであって、特定のOS80やハードウェアに依存する。また、ネイティブコード108は、コンパイルを実行したJavaVM101プロセスのメモリ上に生成される。このため、ネイティブコード108はJavaVM101のプロセスが終了すると失われる。
図2は、ネイティブコード108とバイトコード104について説明する図である。同図の(A)は、複数の種類の異なるOS80A、80B、80Cそれぞれに対応して生成された各ネイティブコード108A、108B、108Cが、対応するOSに配布される例について説明する図である。また、同図の(B)は共通のバイトコード104が、複数の種類の異なるOS80A、80B、80Cに配布される例について説明する図である。この例において、複数の種類の異なるOS80A、80B、80Cとは、例えば、X86 Windows(登録商標)80A、Intel64 Redhat Enterprise Linux(登録商標)80B、SPARC Solaris(登録商標)80Cである。
図2の(A)では、同一のソースコード111が、各OS80A、80B、80Cに依存して変換されることによってネイティブコード108A、108B、108Cが生成され、対応するOSに配布される。ネイティブコード108A、108B、108Cは、それぞれ、ソースコード111内の全てのコードが、実行環境のプラットフォームである各OSに対応してコンパイルされることによって生成される。つまり、プラットフォームの種類毎に、当該プラットフォームに依存したフルコンパイル処理が行われ、ネイティブコードが生成される。このため、特定のOS用に生成されたネイティブコード108は、異なるOS上では動作しない。このため、同図の例において、X86 Windows用のネイティブコード108A、Intel64 Redhat Enterprise Linux用のネイティブコード108B、SPARC Solaris用のネイティブコード108Cがそれぞれ生成される。
また、図2の(A)において、ソースコード111内の全てのコードが変換される。このため、ソースコード111のコードのうち、実行頻度が低いコードについても、コンパイルの対象となる。即ち、ソースコード111内のコードの実行頻度に関わらず、一律に、ネイティブコードに変換される。したがって、ネイティブコード化するメリットの低いコードや、ネイティブコード化が不要なコードについても、コンパイルの対象となり、効率的ではない。このように、各OSに対応して生成されたネイティブコード108A、108B、108Cが配布される場合、OSの種別毎に、ソースコード111のフルコンパイル処理が行われると共に、ネイティブコード108A、108B、108Cは異なるOS上で動作しない。なお、ネイティブコード108は、プログラム内で呼び出される共有バイトコード群110を含む。共有バイトコード群110は、例えば、共通ライブラリ(ファイルI/Oメソッド、セキュリティメソッド等)や、共通の宣言等である。
一方、図2の(B)において、同一のバイトコード104が、それぞれのOS80A、80B、80Cに配布される。バイトコード104は、JavaVM101が動作しているOSであれば、いずれのOSでも同一の処理を実現する。ただし、バイトコード104は逐次解釈され実行されることから、実行速度は、ネイティブコード108A、108B、108Cに基づく処理の実行速度よりも遅い。なお、バイトコード104は、共有バイトコード群110を含まない。このため、バイトコード104の実行時、JavaVM101が有する共有バイトコード群110A、110B、110Cが使用される。
続いて、本実施の形態例におけるJavaVM101のより詳細なブロック図について説明する。
[JavaVMのブロック図]
図3は、JavaVM101のブロック図の詳細について説明する例図である。同図のJavaVM101は、図1に示したインタプリタ105、JITコンパイラ107に加え、プログラム実行制御部106、共有バイトコード群110、プログラムプロファイル参照・更新部103を有する。プログラム実行制御部106は、プログラムの実行に係る制御、JITコンパイラ107へコンパイル指示、プログラムプロファイル参照・更新部103への指示等を行う。共有バイトコード群110は、共通ライブラリや共通の宣言等であって、バイトコードによって記述される。プログラムプロファイル参照・更新部103は、プログラム実行制御部106の指示に基づいて、プログラムプロファイル102の参照処理、及び、更新処理を行う。
図3において、JavaVM101のインタプリタ105は、バイトコード104を逐次解釈し、プログラム実行制御部106に実行させる。また、プログラム実行制御部106は、バイトコードのうち、ネイティブコードへのコンパイルが有効なコードを所定の条件に基づいて検出し、検出されたコードをJITコンパイラ107によって、ネイティブコード108に変換させる。例えば、JITコンパイラ107は、基準回以上実行されるコードをネイティブコードに変換する。基準回は、1回であってもよいし、複数回であってもよい。例えば、JITコンパイラ107は、実行頻度の高いコードを、ネイティブコード108に変換してもよい。プログラムが繰り返し実行されると、JITコンパイラ107によるバイトコードのネイティブコード化が繰り返し行われることによって、プログラムの最適化が進められる。最適化の結果、プログラムのバイトコードのうち、ネイティブコード化が有効なコードについてネイティブコードに変換されたプログラムが生成される。
また、図3において、プログラム実行制御部106は、プログラムプロファイル参照・更新部103を介して、プログラムプロファイル102を参照、更新する。本実施の形態例におけるプログラム実行制御部106は、JavaVM101の起動時に、プログラムプロファイル102を参照し、実行対象のプログラムが最適化状態に変換された実績を有するか否かを判定する。実行対象のプログラムが最適化状態に変換された実績を有する場合、プログラム実行制御部106は、起動時に、実行対象のプログラムを、予め、JITコンパイラ107によって最適化状態に変換する。詳細については、後述する。
続いて、一般的なjavaVM、及び、本実施の形態例におけるjavaVMにおけるプログラムの処理の概要について説明する。
[一般的なJavaVMの処理概要]
図4は、一般的なJavaVM101a、101bにおけるプログラムの処理の概要について説明する図である。この例において、JavaVM101a、101bは、例えば、一回以上実行するバイトコード104を対象としてネイティブコード108に変換する。また、同図では、共通のOS80において、2つのJavaVM101a、101bのプロセスが動作する場合が例示される。また、以下、実行対象のプログラムをメソッドと称する。
図4のフローチャート図において、まず、JavaVM101aは、実行対象のメソッドにおける実行対象のコードがネイティブコード化されているか否かを判定する(S11)。ネイティブコード化されていない場合(S11のNO)、JavaVM101aは、バイトコード104をネイティブコード108に変換する(S12)。続いて、生成されたネイティブコード108に基づいてメソッドが実行される(S13)。同様の処理が、他のJavaVM101bにおいて実行される。
生成されるネイティブコード108は、JavaVM101a、101bそれぞれのメモリ上に生成される。このため、複数のJavaVM101a、101b間で、各javaVMで生成されたネイティブコード108や、ネイティブコード化されたコードの情報は共有されない。また、JavaVM101a、101bによって生成されたネイティブコード108は、JavaVM101a、101bの再起動を越えて保持されない。
[本実施の形態例におけるJavaVMの処理概要]
図5は、本実施の形態例のJavaVM101c、101dにおけるプログラムの処理の概要について説明する図である。図4の例と同様にして、JavaVM101c、101dは、一回以上実行するバイトコード104を対象としてネイティブコード108に変換する。また、この例では、共通のOS80において2つのJavaVM101c、101dのプロセスが動作する場合が例示される。
図5のフローチャート図において、本実施の形態例におけるJavaVM101cは、JavaVM101c自体の起動時に、プログラムプロファイル102に基づいて、実行対象のメソッドのネイティブコード化を行う(S21)。本実施の形態例におけるプログラムプロファイル102は、最適化状態に変換された実績を有するメソッドの識別情報と、当該メソッドのコードのうちネイティブコード108に変換された最適化コード情報とを有する。具体的に、JavaVM101cは、プログラムプロファイル102が、実行対象のメソッドについて、最適化状態に変換された実績を有する場合、プログラムプロファイル102が有する最適化コード情報に基づいて、予め、メソッドを最適化状態に変換する。
続いて、JavaVM101cは、メソッドにおける実行対象のコードが、ネイティブコード化されているか否かを判定する(S22)。ネイティブコード化されていない場合(S22のNO)、JavaVM101cは、バイトコード104をネイティブコード108に変換する(S23)。実行時のパラメータや、実行環境によって、メソッドにおける実行対象のコードは異なることがある。このため、最適化状態に変換済みのメソッドであっても、ネイティブコード化の処理が生じる。続いて、ネイティブコード108に基づいてメソッドが実行される(S24)。このとき、新たにネイティブコード化されたコード情報や、メソッドが最適化状態に変換されたか否かの情報等が、プログラムプロファイル102に更新される。他のJavaVM101dについても、JavaVM101cと共通のプログラムプロファイル102を参照、更新し、同様の処理を行う。
このように、本実施の形態例におけるJavaVM101c、101dは、起動時に、プログラムプロファイル102に基づいて、実行対象のメソッドについて、予め、最適化状態に変換する。これにより、JavaVM101c、101dは、メソッドの初回の実行時から、メソッドの処理速度を向上させることができる。また、本実施の形態例において、プログラムプロファイル102は、複数のJavaVM101c、101dによって共有される。これにより、JavaVM101cは、別のJavaVM101dの実行時に生成されたプログラムプロファイル102に基づいて、起動時に、実行対象のメソッドを最適化状態に変換できる。また、例えば、JavaVM101cが再起動される場合、JavaVM101cは、前回の実行時におけるプログラムプロファイル102を継続して使用することができる。
本実施の形態例におけるJavaVM101c、101dのより詳細な処理内容については、後述する。ここで、プログラムプロファイル102の一例について説明する。また、プログラムプロファイル102の例について説明する前に、プログラムプロファイル102に対応するメソッドの一例、及び、当該メソッドにおいてネイティブコード化されるコードの一例について説明する。
[プログラムの具体例]
図6は、Java言語で記述されたプログラムのソースコード111の一例を示す図である。同図のソースコード111が変換されることによって、バイトコード104が生成される。例えば、同図のソースコード111には、普通預金クラスにおける、残高照会メソッド(関数)M1及び入金メソッド(関数)M2の処理が記述される。残高照会メソッドM1は、パラメータidを入力として、パラメータidに示される普通口座の残高を照会するメソッドである。また、入金メソッドM2は、パラメータid、パラメータdepositAmountを入力として、パラメータidに示される普通口座に、パラメータdepositAmountの金額を入金するメソッドである。
図6のソースコード111のように、プログラムは、一般的に、if文や、try文等の分岐命令を有する。このため、実行対象のコードは、分岐命令の判定結果に基づいて変化する。また、プログラムは、for文等の命令を有する。このため、コードによっては1回のメソッドの実行を通して複数回実行される。一方、例外処理が記述されるコードは、実行対象になり難いため、実行頻度が低い。このように、同一のメソッド内のコードであっても、各コードの実行頻度は異なる。このため、例えば、複数回以上、実行されるコードを対象としてネイティブコードへの変換が行われる場合、同一のメソッド内のコードであっても、ネイティブコードに変換されるコードと、バイトコードのまま変換が行われないコードとがある。
[プログラムのネイティブコード化例]
図7は、図6のプログラムにおいて、ネイティブコード化されるコードの一例について説明する図である。同図において、破線で囲まれたコードについてブロック化され、各コードブロックに対して番号が付与される。そして、同図において、太線で囲まれたコードブロック内のコードは、JITコンパイラ107によってネイティブコード化されたコードである。この例において、メソッドM1にコードにおいて、ブロックB2〜B3、ブロックB6〜B8、ブロックB16、ブロックB18〜B19に対応するコードがネイティブコードに変換されている。
[プログラムプロファイルの例]
図8は、図7のプログラムに対応するプログラムプロファイル102−1の一例を示す図である。同図のプログラムプロファイル102−1は、例えば、メソッド識別子、実行回数、バイトコードサイズ、ネイティブコードサイズ、最適化ブロック情報、最適化完了フラグを有する。
メソッド識別子はメソッドを特定可能な情報であって、例えば、メソッド名を示す。また、実行回数は、JavaVM101の起動後、メソッドが実行された回数を示す。そして、バイトコードサイズは、メソッドのコードにおけるバイトコードのサイズ(byte)を、ネイティブコードサイズは、メソッドのコードにおけるネイティブコードのサイズ(byte)を示す。そして、最適化ブロック情報は、ネイティブコードに変換されたコードブロックの番号を示す。最適化完了フラグは、メソッドが最適化状態まで変換されたか否かを示す。
図8のプログラムプロファイル102−1は、残高照会メソッドM1について、javaVM101の起動後、100回実行された旨の情報を有する。また、プログラムプロファイル102−1は、残高照会メソッドM1について、バイトコードサイズ80byte、ネイティブコードサイズ1324byteの情報、及び、最適化状態に未変換である旨の最適化完了フラグNを有する。また、プログラムプロファイル102−1は、最適化ブロック情報として、ネイティブコードに変換されたコードブロック(図7)の番号2,3,6,7,8,16,18,19を有する。
このように、プログラムプロファイル102−1は、実行実績のある各メソッドについて、メソッドの識別情報、当該メソッドが最適化状態に変換されたか否かを示す最適化完了フラグ、及び、ネイティブコードに変換済みの最適化ブロック情報(最適化コード情報)等を有する。このようなプログラムプロファイル102−1に基づいて、javaVM101の起動時に最適化処理が行われる。
続いて、本実施の形態例におけるJavaVM101の処理の詳細について、フローチャート図に基づいて順次説明する。
[全体の処理を示すフローチャート]
図9は、JavaVM101の全体の処理について説明するフローチャート図である。JavaVM101のプログラム実行制御部106は、起動時に、JavaVM101の起動処理を行うと共に(S31)、起動初期処理制御を行う(S32)。具体的に、javaVM101は、起動初期処理制御として、プログラムプロファイル102に基づいて、実行対象のメソッドの最適化状態へ変換を行う。起動初期処理制御の詳細については、別のフローチャート図に基づいて後述する。続いて、プログラム実行制御部106は、プログラムプロファイル制御を行う(S33)。プログラム実行制御部106は、プログラムプロファイル制御として、実行対象のメソッドを実行すると共に、実行後のメソッドの情報に基づいて、プログラムプロファイル102を更新する。プログラムプロファイル制御の詳細についても、別のフローチャート図に基づいて後述する。
[起動初期処理制御のフローチャート]
図10は、起動初期処理制御工程の処理について説明するフローチャート図である。この処理は、図9のフローチャート図における工程S32の処理に対応する。
初めに、プログラム実行制御部106は、プログラムプロファイル102が存在するか否かを判定する(S41)。プログラムプロファイル102が存在する場合(S41のYES)、プログラム実行制御部106は、続いて、プログラムプロファイル102を参照し、実行対象メソッドを最適化するか否かを判定する(S42)。具体的に、プログラム実行制御部106は、実行対象メソッドについて、プログラムプロファイル102において最適化完了フラグがYを示す場合に、実行対象メソッドを最適化する。最適化完了フラグがYを示す場合、同じまたは別のJavaVM101の実行時において、実行対象メソッドが最適化状態にまで変換された実績を有することを示す。同じまたは別のJavaVM101の実行時とは、例えば、同一のOS上で動作する他のJavaVM101の実行時、別のOS上で動作するJavaVM101の実行時、JavaVM101の前回の実行時、等である。
実行対象メソッドの最適化完了フラグがYを示す場合(S42のYES)、JavaVM101のJITコンパイラ107は、プログラムプロファイル102における最適化ブロック情報に基づいて、実行対象メソッドを最適化状態に変換する。具体的に、javaVM101は、実行対象メソッドのバイトコードのうち最適化ブロック情報(最適化コード情報)に対応するバイトコードをネイティブコードに変換する。
一方、プログラムプロファイル102が存在しない場合(S41のNO)、または、実行対象メソッドの最適化完了フラグがNを示す場合(S42のNO)、JavaVM101の起動時における実行対象メソッドの変換処理は行われない。そして、プログラムプロファイル102の参照が最後まで終了すると、プログラム実行制御部106は、起動初期処理制御(図9のS32)を終了する。
[プログラムプロファイル制御工程のフローチャート]
図11は、プログラムプロファイル制御工程の処理について説明するフローチャート図である。この処理は、図9のフローチャート図における工程S33の処理に対応する。プログラム実行制御部106は、起動後、実行対象のメソッドが、プログラムプロファイル102に基づいて最適化状態に変換済みであるか否かを判定する(S51)。最適化状態に変換済みではない場合(S51のNO)、続いて、プログラム実行制御部106は、実行対象のメソッドの実行制御処理を行う(S52)。実行制御処理工程については、別のフローチャート図において後述する。
続いて、プログラム実行制御部106は、実行制御処理工程の後、プログラムプロファイル102を参照し、メソッドのコードサイズが実行制御処理前後で同一であるか否かを判定する(S53)。具体的に、プログラム実行制御部106は、メソッドについて、プログラムプロファイル102におけるコードサイズ(バイトコードサイズ、ネイティブコードサイズ)と、実行制御処理工程後のコードサイズとが同一であるか否か判定する。同一の場合(S53のYES)、プログラム実行制御部106は、メソッドのコードサイズが同一の場合にカウントアップされる実行回数が、閾値(基準実行回数)を超えたか否かを判定する(S54)。
閾値を超えた場合(S54のYES)、プログラム実行制御部106は、メソッドが最適化状態に変換されたとみなし、メソッドが最適化完了状態に到達したものと判定する(S55)。具体的に、プログラム実行制御部106は、閾値で指定される基準実行回、メソッドの実行制御処理工程の前後でメソッドのコードサイズが変化しない場合に、メソッドが最適化状態に変換され、最適化完了点に達したものとみなす。つまり、メソッドが繰り返し実行されることによって、メソッド内のコードが順次、ネイティブコード化され、新たに、ネイティブコード化されるコードがなくなったとき、メソッドのコードサイズの変化が収束し、メソッドが最適化状態に変換されたとみなされる。
一方、メソッドのコードサイズが実行制御処理の前後で同一であって(S53のYES)、実行回数が閾値を超えない場合(S54のNO)、プログラム実行制御部106は、実行回数をカウントアップする(S56)。また、メソッドのコードサイズが実行制御処理の前後で異なる場合(S53のNO)、プログラム実行制御部106は実行回数をリセットする(S57)。また、JavaVM101の起動時に、実行対象のメソッドがプログラムプロファイル102に基づいて最適化状態に変換済みである場合についても(S51のYES)、実行対象のメソッドの実行制御処理が行われる(S52)。また、このとき、最適化完了点に達しているものとみなされる(S55)。
続いて、プログラム実行制御部106は、プログラムプロファイル102を更新する(S56)。具体的に、プログラム実行制御部106は、メソッドの実行回数、バイトコードサイズ、ネイティブコードサイズ、最適化ブロック情報、最適化完了フラグについて、プログラムプロファイル102に更新する。なお、メソッドが最適化状態に変換された場合(S54のYES)、最適化完了フラグはNからYに更新される。また、プログラム実行制御部106は、メソッドがプログラムプロファイル102に登録されていない場合、メソッドの情報を、新たにプログラムプロファイル102に登録する。
[実行制御処理工程のフローチャート]
図12は、メソッドの実行制御処理工程の処理を説明するフローチャート図である。この処理は、図11のフローチャート図における工程S52に対応する。
まず、プログラム実行制御部106は、次の実行対象のメソッドを呼び出す(S61)。続いて、プログラム実行制御部106は、メソッド内の実行対象のコードがネイティブコードに変換されているか否かを判定する(S62)。実行対象のコードがネイティブコードに変換されていない場合であって(S62のNO)、動的コンパイルの対象とされる場合(S63のYES)、プログラム実行制御部106は、対象のバイトコードについて、インタプリタ105によって処理させ実行すると共に(S64)、JITコンパイラ107に動的コンパイルさせる(S65)。なお、実行対象のコードがコンパイルの対象とされる場合(S63のYES)とは、例えば、実行対象のコードの実行回数が基準回を超えた場合である。
一方、実行対象のコードがネイティブコードに変換されていない場合であって(S62のNO)、動的コンパイルの対象とされない場合(S63のNO)、プログラム実行制御部106はバイトコードをインタプリタ105に処理させ実行する(S64)。また、実行対象のコードが既にネイティブコードに変換済みである場合(S62のYES)、プログラム実行制御部106はネイティブコードを実行する(S66)。
続いて、実行制御処理工程によって、さらにネイティブコードへの変換処理が行われたプログラムのネイティブコード化の例、及び、プログラムプロファイル102の更新例を挙げる。
[プログラムのネイティブコード化例]
図13は、実行制御処理工程によってネイティブコード化がさらに進められた図7のプログラムの例を示す図である。同図において、点線で囲まれたコードブロックは、新たに、ネイティブコードに変換されたコードブロックを示す。具体的に、この例において、ブロックB2〜B3、ブロックB6〜B8、ブロックB16、ブロックB18〜B19に加えて、新たに、ブロックB9〜B12に対応するコードがネイティブコードに変換されている。このように、メソッドが繰り返し実行されることによって、ネイティブコードへの変換状態が変移する。
[プログラムプロファイルの例]
図14は、図13のメソッドに対応して更新されたプログラムプロファイル102−2の一例を示す図である。同図のプログラムプロファイル102−2は、図8のプログラムプロファイル102−1に対して、各メソッドの実行に伴って更新されている。
具体的に、残高照会メソッドM1について、図14のプログラムプロファイル102−2は、図7のプログラムプロファイル102−1に対して、最適化ブロック情報にブロック番号9〜12が追加されている。また、実行回数が1000回に、バイトコードサイズが80バイトに、ネイティブコードサイズが3304バイトに更新されていると共に、最適化完了フラグがNからYに更新されている。これは、残高照会メソッドM1のコードサイズの変化が収束し、最適化状態に変換されたとみなされたことを示す。また、入金メソッドM2についても、図8のプログラムプロファイル102−1に対して、実行回数が340回に更新されていると共に、ネイティブコードサイズが0バイトから2510バイトに更新されている。なお、入金メソッドM2については、最適化完了フラグはNのまま更新されていない。他のメソッドについても、同様に更新される。
このように、本実施の形態例におけるjavaVM101によって、メソッドが実行されることによって、最適化状態に変換された実績を有するメソッドの情報と、当該メソッドの最適化ブロック情報(最適化コード情報)とがプログラムプロファイル102−2に記憶される。即ち、本実施の形態例におけるjavaVM101によると、メソッドの実行を繰り返すことによって、最適化状態に変換された実績を有するメソッドの識別情報と最適化コード情報とを有するプログラムプロファイル102が自動的に生成される。
そして、本実施の形態例におけるJavaVM101は、JavaVM101の起動時に、プログラムプロファイル102を参照することによって、実行対象のメソッドのうち、最適化状態に変換された実績を有する実行対象のメソッドについて、予め、最適化状態に変換しておくことができる。これにより、本実施の形態例におけるjavaVM101は、実行対象のメソッドについて、繰り返し実行することによって徐々に変換していくのではなく、メソッドの実行前に最適化状態に変換することができる。これにより、メソッド実行時のオーバヘッドが最小限に抑えられ、初回実行時から処理が高速化される。
また、javaVMの起動時に、実行対象のメソッドにおける全てのコードを対象としてネイティブコード化する場合、ネイティブコード化するメリットの低いコードや、ネイティブコード化が不要なコードについても変換することになり、時間がかかる。これに対し、本実施の形態例におけるjavaVMは、起動時に、実行対象のメソッドにおける全てのコードではなく、ネイティブコード化が有効なコードを対象としてネイティブコードに変換する。例えば、メソッドにおけるコードのうち、実行頻度の高いコードについて、ネイティブコードに変換される。これにより、起動時におけるネイティブコードへの変換処理が最小限に抑えられ、起動時間が短く抑えられる。また、近年、プロセッサや外部記憶装置について、処理能力が大幅に向上しているため、javaVM起動時における大幅な負荷の増加や、起動時間の増大は生じ難い。
[異なるメソッドが実行される場合]
なお、本実施の形態例におけるjavaVM101は、プログラムプロファイル102を共有する複数のjavaVM101間で異なるメソッドが実行される場合についても有効である。
図15は、異なるメソッドMa、Mbがそれぞれ記述されるバイトコード104a、104bの示す図である。この例において、各メソッドMa、Mbにおいて、共通ライブラリが有する共通メソッドM11、M12が呼び出される。共通メソッドとは、図2で前述したとおり、共有バイトコード群110に含まれる共通メソッド(ファイルI/Oメソッドや、セキュリティメソッド等)である。共有バイトコード群110は、JavaVM101内にバイトコード104として保持される。
図15の例において、例えば、メソッドMaが実行されることによって、メソッドMaから呼び出される共通メソッドM11、M12が最適化状態に変換された場合、プログラムプロファイル102には共通メソッドM11、M12の最適化コード情報が記憶される。そして、メソッドMbの実行のために別のJavaVM101が新たに起動された場合、別のJavaVM101の起動時に、プログラムプロファイル102に基づいて、共通メソッドM11、M12が最適化状態に変換される。別のJavaVM101は、共通メソッドM11、M12が最適化状態にネイティブコード化されていることから、メソッドMbを高速に実行することができる。
このように、複数のjavaVM101において、異なるメソッドを実行する場合であっても、各javaVM101は、起動時に、呼び出し頻度が高い共通バイドコード群110を最適化状態に変換しておくことができる。これにより、メソッドから呼び出される共通バイドコード群110の処理が高速化されるため、メソッドの実行処理についても高速化される。また、最適化状態に変換された実績を有する共通メソッドは実行頻度が高い場合が多いことから、複数のメソッドから呼び出される可能性も大きい。これにより、javaVM101の起動時に、最適化状態に変換された実績を有する共通メソッドが最適化状態に変換されることにより、メソッドの処理についても高速化される。
続いて、プログラムプロファイルの共有形態の例について説明する。
[プログラムプロファイルの共有形態]
図16は、プログラムプロファイル102の共有形態の例について説明する図である。同図には、プログラムプロファイル102が共有される3つの事例が示される。同図の(A)は、同一のコンピュータ100XのOS上で動作する2つのJavaVM101a、101bのうち、1つのJavaVM101bが再起動される例を示す。この例において、再起動されたJavaVM101bは、起動時に、前回使用した共有のプログラムプロファイル102を参照することができる。つまり、JavaVM101bは、起動と終了を跨いで、プログラムプロファイル102を使用することができる。これにより、JavaVM101bは、実行対象のメソッドのうち、JavaVM101aの実行時、及び、javaVM101bの前回の実行時に最適化状態に変換された実績を有するメソッドについて、起動時に、最適化状態に変換することができる。
また、図16の(B)は、異なるコンピュータ100X、100Yにおいて実行中のJavaVM101a〜101dにおいて、1つのプログラムプロファイル102が参照、更新される場合を例示する図である。この例において、コンピュータ100XにおいてJavaVM101a、101b、コンピュータ100YにおいてJavaVM101c、101dが実行される。このように、本実施の形態例におけるプログラムプロファイル102は、異なるOS上で起動される複数のjavaVM101間で共有されてもよい。また、同図の(C)は、同一のコンピュータ100Xにおいて、新たに起動されたJavaVM101dによって、既に起動中のJavaVM101aが生成したプログラムプロファイル102が参照、更新される場合を例示する図である。このように、本実施の形態例におけるプログラムプロファイル102は、既存のjavaVM101aと、新たに起動されるjavaVM101dとの間で共有されてもよい。
このように、本実施の形態例におけるプログラムプロファイル102は、異なるOS上で動作する複数のjavaVM101や、異なる時間帯に実行される複数のJavaVM101によって、共有可能である。これにより、JavaVM101によるプログラム実行処理が効率化される。
[プログラムプロファイルの洗練]
また、本実施の形態例におけるjavaVM101は、メソッドの実行を繰り返すことによってプログラムプロファイル102を自動的に生成することができる。このため、ユーザは、プログラムプロファイル102の情報を一から生成する必要がない。例えば、開発環境において生成されたプログラムプロファイル102が、運用環境において使用されることにより、高精度なプログラムプロファイル102が生成される。
図17は、高精度なプログラムプロファイル102の生成工程について説明する図である。同図の例では、開発環境200におけるプログラムプロファイル102を、運用環境300に適用する場合について例示する。開発環境200では、一般的に、運用環境と同じシステム構成、及び、運用形態を想定してテスト等が行われる。このため、開発環境200におけるテスト等の実行を通して、運用環境300において有効なプログラムプロファイル102が自動生成される。これにより、運用環境300におけるプログラムプロファイル102の生成に係る手間が省略される。また、開発環境200及び運用環境300においてプログラムプロファイル102の更新を繰り返すことによって、プログラムプロファイル102の情報がより洗練され、さらに高精度なプログラムプロファイル102が生成可能になる。
[実行速度]
図18は、本実施の形態例におけるJavaVM101によるメソッドの実行速度について説明する図である。同図は、一般的なJavaVMによるメソッドの実行速度を表すグラフG1と、本実施の形態例におけるJavaVM101によるメソッドの実行速度を表すグラフG2を有する。各グラフG1、G2における横軸はメソッドの実行回数、縦軸はメソッドの実行時間(ms)を示す。グラフG1、G2は、JavaVMを起動し、同一のメソッドを連続して実行した場合における実行回数と実行時間との対応関係を示す。
一般的なJavaVMにおけるメソッドの実行速度を示すグラフG1において、プログラムの実行回数の増加に伴って、実行時間が指数関数的に低下している。具体的に、実行回数が約5000回のとき実行時間は1000ms程度であって、実行回数が約10000回を超えると、実行時間は約50ms程度で収束する。このように、一般的はJavaVM101によると、初期の実行回数における実行時間が長く、実行回数の増加に連れてコードの最適化が進むことにより実行時間が改善される。
一方、本実施の形態例のJavaVM101におけるメソッドの実行速度を示すグラフG2では、グラフG1に対して、初期の実行回数から実行時間が短い。このように、本実施の形態例におけるJavaVM101は、起動直後から、高速にメソッドを実行することができる。このように、本実施の形態例におけるjavaVM101によると、メソッドが効率的に実行される。なお、この例において、JavaVM101の起動時に、実行対象のメソッドについて、最適化状態に変換された実績と、その最適化コード情報とを有するプログラムプロファイル102が存在しているものとする。
以上のように、本実施の形態例におけるプログラム実行制御処理は、実行対象である実行対象プログラムの実行時に、所定の条件に基づいて、当該実行対象プログラムにおけるバイトコードをネイティブコードに変換する第1の変換工程を有する。また、プログラム実行制御処理は、起動時に、同じまたは別のプログラム実行制御プログラムの実行時におけるプロファイルであって、最適化状態に変換された実績を有する最適化完了プログラムの識別情報と、当該最適化完了プログラムのネイティブコードに変換済みの最適化コード情報とを有するプロファイルを参照して、実行対象プログラムの識別情報に基づいて、当該実行対象プログラムが最適化完了プログラムに該当するか否かを判定する判定工程を有する。また、プログラム実行制御処理は、最適化完了プログラムに該当する場合、起動時に、実行対象プログラムのバイトコードのうち最適化コード情報に対応するバイトコードをネイティブコードに変換する第2の変換工程と、を有する。
これにより、本実施の形態例におけるプログラム実行制御プログラムは、起動時に、プログラムプロファイルを参照することによって、実行対象プログラム(メソッド)のうち、最適化状態に変換された実績を有する実行対象プログラムについて、プログラムの実行前に、予め、最適化状態に変換しておくことができる。これにより、プログラム実行時のオーバヘッドが最小限に抑えられ、プログラムは初回の実行時から高速に実行可能になる。また、プログラム実行時の処理が効率化され負荷が軽減されることによって、プログラム実行時における計算機のシステムリソース(プロセッサやメモリ)の使用率が削減される。
また、本実施の形態例におけるプログラム実行制御プログラムは、起動時に、実行対象プログラムにおける全てのコードではなく、ネイティブコード化が有効なコードを対象としてネイティブコード化する。このため、本実施の形態例におけるプログラム実行制御プログラムは、汎用性があり事前にコンパイルが不要なバイトコードについて、その利便性を活かしながら、プログラムの実行前に最適化状態にネイティブコード化することができる。また、本実施の形態例において、プログラム実行制御プログラムの起動時におけるネイティブコード化処理は、必要最小限に抑えられる。このため、必要以上にネイティブコードへの変換処理が行われることが回避され、プログラム実行制御プログラムの起動時間が増大することが回避される。
また、本実施の形態例におけるプログラム実行制御プログラムにおいて、プロファイルは複数のプログラム実行制御プログラムによって共有可能である。このため、プログラム実行制御プログラムは、プログラム実行制御プログラムの起動と終了を跨いで、前回のプログラム実行時におけるプロファイルを継続使用することができる。また、プログラム実行制御プログラムは、他のプログラム実行制御プログラムによって生成されたプロファイルを利用することができる。これにより、プログラム実行制御プログラムは、動作環境の変化や、再起動の有無に因ることなく、プログラムを初回から高速に実行することができ、プログラムの実行を効率化することができる。
なお、プログラム実行制御プログラムでは、一般的に、メモリ領域(ヒープ領域)と非ヒープ領域の両方のメモリを開放するFull GC(フルガーベジコレクション)が行われる。本実施の形態例におけるプログラム実行制御プログラムよると、例えば、Full GCによるプログラム実行制御プログラムの切り替えが生じた場合に、プロファイルに基づいて、切り替え前の実行対象プログラムの最適化コード情報を引き継ぐことができる。これにより、本実施の形態例におけるプログラム実行制御プログラムは、Full GC等によるプログラム実行制御プログラムの切り替え制御が生じた場合であっても、切り替え直後から、実行対象のプログラムを高速に実行することができる。
また、本実施の形態例のプログラム実行制御処理における第1の変換工程では、実行対象プログラムが最適化状態に変換されたとき、当該実行対象プログラムの識別情報と最適化コード情報とを、プロファイルに記録する。
これにより、本実施の形態例におけるプログラム実行制御プログラムは、プログラムの実行を繰り返すことによって、プロファイルを自動的に生成することができる。これにより、プログラム実行制御プログラムは、プロファイルを一から生成する必要がない。また、プログラム実行制御プログラムは、例えば、運用形態の類似する複数の環境において、プロファイルを共有することによって、より高精度のプロファイルを生成することができる。即ち、プログラム実行制御プログラムは、プロファイルを共有、及び、継続して使用することによって、より高精度なプロファイルを生成することができる。
また、本実施の形態例のプログラム実行制御処理において、同じまたは別のプログラム実行制御プログラムの実行時は、同時に実行されるプログラム実行制御プログラムの実行時、または、異なる時間帯に実行されたプログラム実行制御プログラムの実行時のいずれかまたは両方である。これにより、本実施の形態例におけるプログラム実行制御プログラムは、前回のプログラム実行時におけるプロファイルを使用することができ、プログラム実行制御プログラムの再起動に基づく実行対象プログラムの実行速度の低下を最小限にすることができる。
本実施の形態例のプログラム実行制御処理において、同じまたは別のプログラム実行制御プログラムの実行時は、共通のオペレーションシステムで動作するプログラム実行制御プログラムの実行時、または、異なるオペレーションシステムで動作するプログラム実行制御プログラムの実行時のいずれかまたは両方である。これにより、本実施の形態例におけるプログラム実行制御プログラムは、同一のOS上、または、異なるOS上で動作する複数のプログラム実行制御プログラムと、プロファイルを共有することができる。
また、本実施の形態例のプログラム実行制御処理における第1の変換工程では、実行対象プログラムのコードサイズが収束したとき、実行対象プログラムが最適化状態に変換されたとみなす。これにより、プログラム実行制御プログラムは、プログラムのコードサイズに基づいて、プログラムが最適化状態に変換されたか否かを判定することができる。
また、本実施の形態例のプログラム実行制御処理における第1の変換工程では、基準実行回数、実行対象プログラムの実行の前後でコードサイズが変化しない場合に、実行対象プログラムのコードサイズが収束したことを示す。これにより、プログラム実行制御プログラムは、プログラムのコードサイズが収束したか否かを容易に判定することができる。
また、プログラム実行制御処理の第1の変換工程における所定の条件は、基準回以上実行されるバイトコードのネイティブコードへの変換である。これにより、プログラム実行制御プログラムは、プログラムのバイトコードのうち、ネイティブコードへのコンパイルが有効なコードを対象として、ネイティブコードに変換することができる。これにより、プログラム実行制御プログラムは、起動時におけるプログラムのコンパイル対象のコードを最小限に抑えることができる。
以上の実施の形態をまとめると、次の付記のとおりである。
(付記1)
バイトコードのプログラムについて、少なくとも一部をネイティブコードに変換して実行するプログラム実行制御処理を行うプログラム実行制御プログラムであって、
前記プログラム実行制御処理は、
実行対象である実行対象プログラムの実行時に、所定の条件に基づいて、当該実行対象プログラムにおける前記バイトコードを前記ネイティブコードに変換する第1の変換工程と、
起動時に、同じまたは別の前記プログラム実行制御プログラムの実行時におけるプロファイルであって、最適化状態に変換された実績を有する最適化完了プログラムの識別情報と、当該最適化完了プログラムのネイティブコードに変換済みの最適化コード情報とを有するプロファイルを参照して、前記実行対象プログラムの前記識別情報に基づいて、当該実行対象プログラムが前記最適化完了プログラムに該当するか否かを判定する判定工程と、
前記最適化完了プログラムに該当する場合、前記起動時に、前記実行対象プログラムのバイトコードのうち前記最適化コード情報に対応するバイトコードを前記ネイティブコードに変換する第2の変換工程と、を有するプログラム実行制御プログラム。
(付記2)
付記1において、
前記第1の変換工程では、前記実行対象プログラムが前記最適化状態に変換されたとき、当該実行対象プログラムの前記識別情報と前記最適化コード情報とを、前記プロファイルに記録するプログラム実行制御プログラム。
(付記3)
付記1または2において、
前記同じまたは別の前記プログラム実行制御プログラムの実行時は、同時に実行される前記プログラム実行制御プログラムの実行時、または、異なる時間帯に実行された前記プログラム実行制御プログラムの実行時のいずれかまたは両方であるプログラム実行制御プログラム。
(付記4)
付記1乃至3のいずれかにおいて、
前記同じまたは別の前記プログラム実行制御プログラムの実行時は、共通のオペレーションシステムで動作する前記プログラム実行制御プログラムの実行時、または、異なるオペレーションシステムで動作する前記プログラム実行制御プログラムの実行時のいずれかまたは両方であるプログラム実行制御プログラム。
(付記5)
付記1乃至4のいずれかにおいて、
前記第1の変換工程では、前記実行対象プログラムのコードサイズが収束したとき、前記実行対象プログラムが前記最適化状態に変換されたとみなすプログラム実行制御プログラム。
(付記6)
付記5において、
前記第1の変換工程では、基準実行回数、前記実行対象プログラムの実行の前後で前記コードサイズが変化しない場合に、前記実行対象プログラムの前記コードサイズが収束したことを示すプログラム実行制御プログラム。
(付記7)
付記1乃至6のいずれかにおいて、
前記第1の変換工程における前記所定の条件は、基準回以上実行される前記バイトコードの前記ネイティブコードへの変換であるプログラム実行制御プログラム。
(付記8)
バイトコードのプログラムについて、少なくとも一部をネイティブコードに変換して実行するプログラム実行制御方法であって、
実行対象である実行対象プログラムの実行時に、所定の条件に基づいて、当該実行対象プログラムにおける前記バイトコードを前記ネイティブコードに変換する第1の変換工程と、
起動時に、同じまたは別の前記プログラム実行制御プログラムの実行時におけるプロファイルであって、最適化状態に変換された実績を有する最適化完了プログラムの識別情報と、当該最適化完了プログラムのネイティブコードに変換済みの最適化コード情報とを有するプロファイルを参照して、前記実行対象プログラムの前記識別情報に基づいて、当該実行対象プログラムが前記最適化完了プログラムに該当するか否かを判定する判定工程と、
前記最適化完了プログラムに該当する場合、前記起動時に、前記実行対象プログラムのバイトコードのうち前記最適化コード情報に対応するバイトコードを前記ネイティブコードに変換する第2の変換工程と、を有するプログラム実行制御方法。
100:コンピュータ、101:プログラム実行制御プログラム(JavaVM)、102:プログラムプロファイル、103:プログラムプロファイル参照・更新部、104:バイトコード、105:インタプリタ、106:プログラム実行制御部、107:JITコンパイラ、108:ネイティブコード

Claims (8)

  1. 実行対象のプログラムの実行時に、該プログラムに含まれる少なくとも一部のバイトコードをネイティブコードに変換するプログラム実行制御プログラムにおいて、
    前記実行対象のプログラムを起動する際に、プログラムの識別情報と、該プログラムの、ネイティブコードに変換されたバイトコードの識別情報とを含むプロファイルを参照して、前記実行対象のプログラムの識別情報が、前記プロファイルに含まれる前記プログラムの識別情報と一致するか否かの判定を行い、
    一致する場合、前記実行対象のプログラムに含まれるバイトコードのうち、前記プロファイルに含まれる前記バイトコードの識別情報に対応するバイトコードをネイティブコードに変換し、
    変換した前記ネイティブコードを実行する
    処理をコンピュータに実行させるプログラム実行制御プログラム。
  2. 請求項1において、
    前記実行対象のプログラムの実行時に、所定の条件に基づいて、前記実行対象のプログラムの一部のバイトコードをネイティブコードに変換し、前記実行対象のプログラムが最適化状態に変換されたとき、当該実行対象のプログラムの前記識別情報と前記変換した前記バイトコードの識別情報とを、前記プロファイルに記録するプログラム実行制御プログラム。
  3. 請求項1または2において、
    前記プロファイルは、同時に実行される前記プログラム実行制御プログラム、または、異なる時間帯に実行される前記プログラム実行制御プログラムのプロファイルのいずれかまたは両方であるプログラム実行制御プログラム。
  4. 請求項1乃至3のいずれかにおいて、
    前記プロファイルは、共通のオペレーションシステムで動作する前記プログラム実行制御プログラム、または、異なるオペレーションシステムで動作する前記プログラム実行制御プログラムのプロファイルのいずれかまたは両方であるプログラム実行制御プログラム。
  5. 請求項2において、
    前記記録は、前記実行対象のプログラムのコードサイズが収束したとき、前記実行対象のプログラムが前記最適化状態に変換されたとみなすプログラム実行制御プログラム。
  6. 請求項5において、
    前記記録は、基準実行回数、前記実行対象のプログラムの実行の前後で前記コードサイズが変化しない場合に、前記実行対象のプログラムの前記コードサイズが収束したことを示すプログラム実行制御プログラム。
  7. 請求項において、
    前記所定の条件は、基準回以上実行される場合であるプログラム実行制御プログラム。
  8. 実行対象のプログラムの実行時に、該プログラムに含まれる少なくとも一部のバイトコードをネイティブコードに変換するプログラム実行制御方法において、
    前記実行対象のプログラムを起動する際に、プログラムの識別情報と、該プログラムの、ネイティブコードに変換されたバイトコードの識別情報とを含むプロファイルを参照して、前記実行対象のプログラムの識別情報が、前記プロファイルに含まれる前記プログラムの識別情報と一致するか否かの判定を行い、
    一致する場合、前記実行対象のプログラムに含まれるバイトコードのうち、前記プロファイルに含まれる前記バイトコードの識別情報に対応するバイトコードをネイティブコードに変換し、
    変換した前記ネイティブコードを実行する、
    プログラム実行制御方法。
JP2013065039A 2013-03-26 2013-03-26 プログラム実行制御プログラム、プログラム実行制御方法 Active JP6127639B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2013065039A JP6127639B2 (ja) 2013-03-26 2013-03-26 プログラム実行制御プログラム、プログラム実行制御方法
US14/156,748 US9170830B2 (en) 2013-03-26 2014-01-16 Method for controlling program execution

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013065039A JP6127639B2 (ja) 2013-03-26 2013-03-26 プログラム実行制御プログラム、プログラム実行制御方法

Publications (2)

Publication Number Publication Date
JP2014191493A JP2014191493A (ja) 2014-10-06
JP6127639B2 true JP6127639B2 (ja) 2017-05-17

Family

ID=51622155

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013065039A Active JP6127639B2 (ja) 2013-03-26 2013-03-26 プログラム実行制御プログラム、プログラム実行制御方法

Country Status (2)

Country Link
US (1) US9170830B2 (ja)
JP (1) JP6127639B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101569142B1 (ko) * 2014-11-18 2015-11-13 성균관대학교산학협력단 프로그램의 최적화 실행을 위한 장치 및 방법
CN106557350B (zh) * 2015-09-30 2019-12-13 北京金山安全软件有限公司 应用程序安装包中java字节码转换方法、装置及设备
JP6954256B2 (ja) * 2018-11-02 2021-10-27 横河電機株式会社 エンジニアリング装置、エンジニアリング装置の制御方法及びプログラム
CN112445487B (zh) * 2019-09-02 2024-11-22 深圳Tcl新技术有限公司 一种dex优化方法、系统、智能终端及存储介质

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5970249A (en) 1997-10-06 1999-10-19 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
JP2000330792A (ja) * 1999-05-18 2000-11-30 Matsushita Electric Ind Co Ltd バイトコードプログラム実行制御システム
US20010042241A1 (en) * 2000-01-21 2001-11-15 Fujitsu Limited Apparatus and method for executing program using just-in time-compiler system
US7039910B2 (en) * 2001-11-28 2006-05-02 Sun Microsystems, Inc. Technique for associating execution characteristics with instructions or operations of program code
US7146607B2 (en) * 2002-09-17 2006-12-05 International Business Machines Corporation Method and system for transparent dynamic optimization in a multiprocessing environment
KR100506522B1 (ko) 2003-02-24 2005-08-03 삼성전자주식회사 자바 프로그램에서 바이트 코드의 컴파일 시간 단축시스템 및 방법
US7624387B2 (en) 2003-04-10 2009-11-24 Panasonic Corporation Compiler, program product, compilation device, communication terminal device, and compilation method
JP4473626B2 (ja) 2003-04-10 2010-06-02 パナソニック株式会社 コンパイラ、記録媒体、コンパイル装置、通信端末装置及びコンパイル方法
JP4713820B2 (ja) 2003-05-28 2011-06-29 パナソニック株式会社 プログラム実行制御装置、プログラム実行制御方法
US7770157B2 (en) * 2005-08-08 2010-08-03 International Business Machines Corporation System and method for improving virtual machine performance using an offline profile repository
JP2007334643A (ja) 2006-06-15 2007-12-27 Renesas Technology Corp プログラム実行方法、プログラム、およびプログラム実行システム
US7814486B2 (en) * 2006-06-20 2010-10-12 Google Inc. Multi-thread runtime system
US7934208B2 (en) * 2006-10-13 2011-04-26 International Business Machines Corporation Method for transparent on-line dynamic binary optimization
US8370823B2 (en) * 2007-08-27 2013-02-05 International Business Machines Corporation Device, system, and method of computer program optimization
US8453129B2 (en) * 2008-04-24 2013-05-28 International Business Machines Corporation Using hardware interrupts to drive dynamic binary code recompilation
JP2011002976A (ja) 2009-06-18 2011-01-06 Panasonic Corp プログラム実行制御装置
CA2672337C (en) * 2009-07-15 2017-01-03 Ibm Canada Limited - Ibm Canada Limitee Compiler instrumentation infrastructure to facilitate multiple pass and multiple purpose dynamic analysis
US8359435B2 (en) * 2009-12-16 2013-01-22 International Business Machines Corporation Optimization of software instruction cache by line re-ordering
US8826249B2 (en) * 2010-02-18 2014-09-02 Oracle International Corporation Method and system for optimizing code for a multi-threaded application
US9256410B2 (en) * 2012-08-09 2016-02-09 Apple Inc. Failure profiling for continued code optimization

Also Published As

Publication number Publication date
JP2014191493A (ja) 2014-10-06
US9170830B2 (en) 2015-10-27
US20140298305A1 (en) 2014-10-02

Similar Documents

Publication Publication Date Title
US9104433B2 (en) Trace generation method, trace generation device, trace generation program product, and multi-level compilation using trace generation method
JP5460430B2 (ja) 動的コンパイラプログラム、動的コンパイル方法及び動的コンパイル装置
US8984497B2 (en) Source code converting, method program, and systems for first programming language to a code in a second programming language
US9684493B2 (en) R-language integration with a declarative machine learning language
CN103729235A (zh) Java虚拟机的编译方法和Java虚拟机
JP2023539594A (ja) コンパイラの最適化のためのプロファイルデータの導出
JP6127639B2 (ja) プログラム実行制御プログラム、プログラム実行制御方法
JP2015519646A (ja) マルチテナント型アプリケーション・ドメイン及びメモリの管理を伴う修正されたjvm
US7765527B2 (en) Per thread buffering for storing profiling data
CN111768183A (zh) 一种执行智能合约的方法、区块链节点和存储介质
US9027008B2 (en) Method, computer, and computer program for speculatively optimizing code
US10684873B2 (en) Efficient data decoding using runtime specialization
Aslam et al. Optimized java binary and virtual machine for tiny motes
US9870240B2 (en) Dynamic code injection
US20240338365A1 (en) Processing a user query
US9141414B2 (en) Preferred compilation
WO2022046198A1 (en) Thread-local return structure for asynchronous state machine
WO2017206302A1 (zh) 一种应用程序的运行方法和运行装置
CN107817972B (zh) 缓存代码处理方法、装置、存储介质及电子设备
CN111190693A (zh) 一种基于鲲鹏平台搭建云平台的方法及装置
US9495274B1 (en) Adaptive runtime for a multiprocessing API
Wen et al. Wasmslim: Optimizing webassembly binary distribution via automatic module splitting
US11669312B2 (en) Profiling and optimization of compiler-generated code
US11157252B2 (en) Assessment of the benefit of post-inlining program transformation in inlining decisions
You et al. A static region‐based compiler for the Dalvik virtual machine

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20151106

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160713

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160719

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160916

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170221

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170227

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: 20170314

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170327

R150 Certificate of patent or registration of utility model

Ref document number: 6127639

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150