JP2002163115A - 仮想機械用プログラムのコンパイル対象指定方法、同プログラムのコンパイル対象判定方法、仮想機械実行方法、事前コンパイル方法、コンピュータ、記録媒体、及びプログラム製品 - Google Patents

仮想機械用プログラムのコンパイル対象指定方法、同プログラムのコンパイル対象判定方法、仮想機械実行方法、事前コンパイル方法、コンピュータ、記録媒体、及びプログラム製品

Info

Publication number
JP2002163115A
JP2002163115A JP2000363349A JP2000363349A JP2002163115A JP 2002163115 A JP2002163115 A JP 2002163115A JP 2000363349 A JP2000363349 A JP 2000363349A JP 2000363349 A JP2000363349 A JP 2000363349A JP 2002163115 A JP2002163115 A JP 2002163115A
Authority
JP
Japan
Prior art keywords
program
execution
compilation
target
compiled
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.)
Pending
Application number
JP2000363349A
Other languages
English (en)
Inventor
Ryuji Sakai
隆二 境
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.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2000363349A priority Critical patent/JP2002163115A/ja
Publication of JP2002163115A publication Critical patent/JP2002163115A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】本発明は、組み込みシステムのようなメモリ容
量の少ないシステム上に、オブジェクト指向プログラム
を実行する仮想機械を実現するにあたって、コンパイル
範囲を最小プログラム単位を含む任意の範囲で容易に指
定し判定できる方法及び仮想機械を提供することを課題
とする。 【解決手段】指定リストのエントリサイズ分の、判定リ
スト用の領域(配列)を確保し、指定リストを順番に逐
一読み出して、判定リストの先頭から、表現とフラグを
設定してゆく(701〜704)。ここで、フラグは、
指定リストの文字が「+」の場合は、TRUEを、
「−」の場合はFALSEを設定する。次に、表現(文
字列)によって、配列をソートし、各エントリについ
て、上位の階層の表現へのエントリへのインデックスを
設定する(705〜712)。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、仮想命令コード列
のインタプリタによる実行環境と、プログラム実行時あ
るいは実行以前に仮想命令コード列を目的機械コードに
コンパイルして実行する実行環境とを備えたオブジェク
ト指向プログラムを実行する仮想機械を対象とした、仮
想機械用プログラムのコンパイル対象指定方法、同プロ
グラムのコンパイル対象判定方法、仮想機械実行方法、
事前コンパイル方法、コンピュータ、記録媒体、及びプ
ログラム製品に関する。
【0002】
【従来の技術】仮想機械とは、コンピュータの命令セッ
トアーキテクチャに依存しない、仮想的な命令コードに
よって実現されたコンピュータプログラムを、解釈実行
するためのソフトウェアである。ここで、プログラムを
実際に実行するコンピュータを目的機械という。
【0003】仮想的な命令コードとしては、例えばJA
VA(登録商標)のバイトコードのように、抽象的な命
令セットの場合もあるし、目的機械とは別のコンピュー
タの命令セットアーキテクチャの命令コードであること
もある。
【0004】このような仮想機械は、通常、1.プログ
ラムの仮想命令コードを逐一読みだし、2.命令種別を
判定し、3.その命令の機能を実現する処理を行う、と
いうことを繰り返し実行する「インタプリタ」と呼ばれ
る方法によって実現されるが、プログラムを実行する前
に、仮想命令コード列を、目的機械の命令コード列にコ
ンパイルしてから実行する「ジャストインタイムコンパ
イル(またはバイナリトランスレーション)」という方
法もある。
【0005】インタプリタは、命令を解釈し実行する一
つのループによって実装される。このループの中には、
仮想命令をメモリからロードし命令の種類を判別して、
その命令に相当する処理へ分岐する命令ディスパッチ処
理と、各命令毎に、命令の機能を実行する部分があり、
同等の処理を目的機械の機械語命令にコンパイルして動
作するプログラムと比較すると、数倍から十数倍遅くな
る。
【0006】一方、ジャストインタイムコンパイルで
は、プログラム実行時に命令列をコンパイルしなければ
ならないため、このコンパイル処理のためにプログラム
の起動時間が掛かるという問題や、コンパイラの実行の
ために余分にメモリ領域を必要としたり、仮想コードに
比べて目的コードの方がプログラムのコードサイズが大
きくなってしまうという問題がある。とくに、仮想機械
のような環境を、メモリサイズに制限のある組み込みシ
ステムのようなプラットフォームで実現しようとする
と、コンパイラのためのメモリ領域や、コードサイズの
増大にともなうメモリ消費の増大は大きな問題となる。
【0007】このため、実行時にコンパイルするのでは
なく、事前に目的機械の命令コード列にコンパイルする
「アヘッドオブタイムコンパイル」という方法によっ
て、コンパイラ実行のための時間とコンパイラのために
必要なメモリ領域を、実行時の環境から取り除くことが
行われる。たたし、この場合は、仮想機械さえあれば、
どのような種類の目的機械であっても、同じ仮想命令で
構成されたプログラムが実行できるという、仮想機械の
特性を失ってしまうことになる。
【0008】また、一般的にプログラムの中で実行時間
の多くを費しているのは、プログラムコードの極く一部
であることが知られているが、この性質から、多くの時
間を費している一部の部分のみを、目的機械の命令コー
ド列に選択的にコンパイルし、残りをインタプリタで実
行することによって、メモリ消費量を節約する技術もあ
る(特開2000−172512)。
【0009】仮想的な命令コードを目的機械の命令コー
ド列に選択的にコンパイルためには、選択的にコンパイ
ルするプログラムの部分を指定するための記述が必要と
なるが、この際、従来では、コンパイルするべきプログ
ラムの部分をユーザが一つずつ記述していた。ここで、
選択的にコンパイルするべきプログラムの部分を指定す
るのは、メソッド単位で細かく指定できればよいが、そ
れらを一つ一つ記述するのは非常に手間の掛かる作業で
あり、多くの時間と労力を要する。
【0010】また、指定した部分が呼び出すメソッドに
ついてもコンパイルしなければ、十分な効果が得られな
い。例えば、高速化したいメソッドが、システムで共通
に使用するクラスライブラリの多くのメソッドを、直接
または間接的に呼び出しているケースでは、これらのメ
ソッドを全てコンパイル対象としなければ、十分な性能
向上は得られない。
【0011】さらに、このように、共通に使用するクラ
スライブラリのメソッドをコンパイルした場合、コンパ
イル対象に指定されなかったインタプリタで実行する部
分から、この共通のクラスライブラリのコンパイルした
メソッドを呼び出すことになってしまう。このようなイ
ンタプリタで実行する部分から、コンパイルしたメソッ
ドを呼び出す場合や、コンパイルした部分からインタプ
リタで実行する部分を呼び出す場合には、それぞれにお
互いの環境を調整するための処理が必要であり、インタ
プリタでの実行と、コンパイル済みコードの実行を頻繁
に行き来するような場合には、かえって性能が劣化する
ケースもある。
【0012】
【発明が解決しようとする課題】上述したように、オブ
ジェクト指向プログラムについて、仮想的な命令コード
を目的機械の命令コード列に選択的にコンパイルため
に、従来では、コンパイルするべきプログラムの部分を
ユーザが一つずつ記述しなければならず、従って選択的
にコンパイルするべきプログラムの部分をメソッド単位
で細かく指定しようとすると、その作業に非常に多くの
時間と労力を要するという問題があった。また、処理性
能の面から、上記指定した部分が呼び出すメソッドにつ
いてもコンパイル対象としなければ十分な性能向上は得
られないが、これらの指定についても、従来では、作業
が煩雑で、かつ多くの時間と労力を要するという問題が
あった。さらに、プログラム実行面では、共通に使用す
るクラスライブラリのメソッドをコンパイルした場合、
インタプリタで実行する部分からコンパイルしたメソッ
ドを呼び出す場合や、コンパイルした部分からインタプ
リタで実行する部分を呼び出す場合に、それぞれにお互
いの環境を調整するための処理が必要であり、インタプ
リタでの実行と、コンパイル済みコードの実行とを頻繁
に切替制御するような場合に性能劣化を招来する場合が
あるという問題があった。
【0013】本発明は上記実情に鑑みなされたもので、
組み込みシステムのようなメモリ容量の少ないシステム
上に、オブジェクト指向プログラムを実行する仮想機械
を実現するにあたって、コンパイル範囲を最小プログラ
ム単位を含む任意の範囲で容易に指定し判定でき、これ
により、仮想命令コード列のインタプリタによる実行環
境とプログラム実行時あるいは実行以前に仮想命令コー
ド列を目的機械コード列にコンパイルして実行する実行
環境をサポートする仮想機械の著しい高性能化が図れ
る、仮想機械用プログラムのコンパイル対象指定方法、
同プログラムのコンパイル対象判定方法、仮想機械実行
方法、事前コンパイル方法、コンピュータ、記録媒体、
及びプログラム製品を提供することを目的とする。
【0014】本発明は、オブジェクト指向のプログラム
に於いて、目的機械の命令コード列にコンパイルする部
分を最小プログラム単位を含めた任意の範囲で容易に指
定することのできる仮想機械用プログラムのコンパイル
対象指定方法、及びコンパイル対象を効率的に判定する
仮想機械用プログラムのコンパイル対象判定方法を提供
することを目的とする。
【0015】本発明は、上記コンパイル対象指定方法を
適用したプログラムの実行処理に於いて、指定したプロ
グラム部分が呼び出すメソッドを再帰的に辿ってコンパ
イルすることのできる事前コンパイル方法を提供するこ
とを目的とする。
【0016】本発明は、上記コンパイル対象指定方法を
適用したプログラムの実行処理に於いて、インタプリタ
による実行とコンパイル済み目的機械のコード実行とが
頻繁に切り替わる実行環境での性能劣化を排除して処理
の高効率化並びに高性能化を実現した仮想機械が提供で
きる仮想機械実行方法を提供することを目的とする。
【0017】
【課題を解決するための手段】本発明は、仮想命令コー
ド列のインタプリタによる実行環境と、プログラム実行
時あるいは実行以前に仮想命令コード列を目的機械コー
ド列にコンパイルして実行する実行環境をサポートする
仮想機械に於いて、コンパイルして実行したいメソッド
を全て指定するのではなく、パッケージや、クラスの階
層構造を用いて指定することにより、より少ない記述
で、多くのメソッドをコンパイル対象として容易に指定
できるとともに、コンパイル対象範囲外の部分を容易に
除外できる仮想機械用プログラムのコンパイル対象指定
方法を提供する。
【0018】また、上記指定方法に於ける階層構造をも
つデータ集合の、部分集合を定義する指定形式を使っ
て、特定のデータが、この部分集合のメンバか否かを判
定するための効率的な判定処理を実現した仮想機械用プ
ログラムのコンパイル対象判定方法を提供する。
【0019】また、上記指定方法を適用した際に、再帰
的なコンパイルにより、コンパイル対象メソッドが呼び
出す全てのメソッドを指定しなくても、高速化したい処
理のメソッドのうち基のメソッドのみを指定すること
で、そのメソッドが直接、間接的に呼び出す全てのメソ
ッドをコンパイルすることをコンパイル機能を実現した
事前コンパイル方法を提供する。
【0020】また、上記指定方法を適用した際に、イン
タプリタによる実行部分から、再帰的なコンパイルによ
りコンパイルされた、システム共通のクラスライブラリ
のメソッドを呼び出す場合は、そのままインタプリタに
よる実行とすることで、インタプリタによる実行からコ
ンパイル済目的機械命令コード列の実行への制御切替え
のオーバーヘッドを削減し、インタプリタによる実行と
コンパイル済みコードの実行とによるハイブリッドな仮
想機械の実行環境での性能劣化を排除できる仮想機械実
行方法を提供する。
【0021】
【発明の実施の形態】以下、図面を参照して本発明の実
施形態を説明する。ここでは、オブジェクト指向のプロ
グラムで、目的機械の命令コード列にコンパイルする部
分を容易に指定するための実施形態を第1実施形態と
し、上記コンパイル範囲指定によって、特定のメソッド
がコンパイル対象となるかどうかを効率的に判定するた
めの実施形態を第2実施形態とし、上記コンパイル範囲
指定の際の指定したプログラムの部分が呼び出すメソッ
ドを再帰的に辿ってコンパイルするための実施形態を第
3実施形態とし、上記コンパイル範囲指定の際のインタ
プリタによる実行とコンパイル済み目的機械のコード実
行を繁雑に行き来する不具合を排除するための実施形態
を第4実施形態として説明する。
【0022】1.第1実施形態(コンパイル対象となる
メソッドの指定) 先ず、図1乃至図3を参照して本発明の第1実施形態に
ついて説明する。
【0023】この第1実施形態では、仮想命令コード列
のインタプリタによる実行環境と、プログラム実行時あ
るいは実行以前に仮想命令コード列を目的機械コードに
コンパイルして実行する実行環境との2つの実行環境を
サポートする仮想機械において、コンパイルして実行し
たいメソッドを全て指定するのではなく、パッケージ
や、クラスの階層構造を使って、より少ない記述で、多
くのメソッドを指定することを可能とし、その中からコ
ンパイルしたくないものを容易に除外することができる
指定形式を実現している。
【0024】JAVAのようなオブジェクト指向プログ
ラムでは、パッケージ、クラス、メソッドのような階層
構造を持っている。ここでパッケージは、その階層が存
在しない場合もあるし、パッケージの下層にサブパッケ
ージが存在し、さらにその下層にまたサブパッケージが
存在するような複数階層のサブパッケージが存在する階
層構造で構成される場合もある。ここでは、目的機械の
命令コード列にコンパイルしたいプログラムの部分を指
定するために、この階層構造を利用する。あるパッケー
ジに含まれる全てのメソッド、あるいは、あるサブパッ
ケージに含まれる全てのメソッド、あるいは、あるクラ
スに含まれる全てのメソッド、あるいは、ある特定のメ
ソッドを表現するために、パッケージ名[.サブパッケ
ージ名・・・[.クラス名[.メソッド名]]・・・]
という表現を使う。
【0025】また、サブパッケージ名を持たない場合
は、パッケージ名[.クラス名[.メソッド名]]とい
う表現を使う。
【0026】パッケージ名をもたない場合は、クラス名
[.メソッド名]という表現を使う。
【0027】ここで[ ]は、省略可能であり、省略さ
れた場合には、その表現が示す各階層以下に含まれる全
てのメソッドを意味する。
【0028】サブパッケージの階層がより深い場合は、
サブパッケージの各階層の途中までを指定することによ
り、そのサブパッケージに含まれる全てのメソッドを表
現する。
【0029】コンパイル対象となるメソッドの部分集合
を、この表現の前に、例えば文字「+」か「−」を付与
したもののリストによって記述する。「+」の意味は、
この表現に含まれるメソッドを「コンパイル対象とす
る」という意味であり、「−」の意味は、この表現に含
まれるメソッドを「コンパイル対象から除外する」とい
う意味である。従って「−」に続く表現に対しては、そ
の表現よりも上の階層の表現に「+」が付与されたもの
がリストになければ、意味をなさない。また、「−」に
よって除外されたパッケージやクラスであっても、さら
に下の階層で「+」という記述があれば、その下の階層
に含まれるメソッドはコンパイル対象となり、さらに下
の階層で「−」という記述があれば、その下の階層に含
まれるメソッドはコンパイル対象から除外される。この
ように、「+」「−」の規則は、より下の階層による指
定が優先される。
【0030】この指定形式は、図1に示すように、木構
造のデータ(同図(a)参照)に対する部分集合の指定
(同図(b)参照)に一般化でき、部分集合の元を逐一
指定するよりも効率的である。
【0031】上記したコンパイル対象の指定例を図2、
及び図3に示す。
【0032】図2は、PAKAGE1.CLASS12
(パッケージ1のクラス12)に含まれるメソッドのう
ち「METHOD122とMETHOD123以外をコ
ンパイル対象とする」という意味であり、図3は、「P
AKAGE1とPAKAGE2.CLASS22以外の
メソッドと、PAKAGE1.CLASS11に含まれ
るメソッドのうちMETHOD123以外のメソッドを
コンパイル対象とする」という意味である。
【0033】このような指定をファイルに記述してお
き、ジャストインタイムコンパイルや、事前コンパイル
を行う処理が、このファイルを参照して、コンパイルす
るか否かの判定を行う。この指定は、ファイルに記述す
ることに限定するものではなく、コマンドラインより与
えることも可能であるし、プロファイラなどによって収
集されたデータから自動生成され、メモリ上に記述され
ることもあり得る。以降、この指定を「指定リスト」と
呼ぶことにする。
【0034】この際の指定リストの記述例と、その指定
リストの有用性について以下に示す。
【0035】ここでは以下の形式の指定リストを記述し
たファイルを作成し、事前コンパイラの実行時オプショ
ンとしてこのファイルを指定することによって、コンパ
イル対象範囲を指定できるようにした。
【0036】 指定リスト: DESCRIPTIONのリスト(改行で区切る) EXPRESSION: TOPPACKAGENAME[.SUBPACKAGENAME・・ ・[.CLASSNAME[.METHODNAME]]・・・] TOPPACKAGENAME[.CLASSNAME[.METHO DNAME]] CLASSNAME[.METHODNAME] DESCRIPTION: +EXPRESSION −EXPRESSION 上記の表現(EXPRESSION)の定義で[ ]が
省略された場合は、その表現が示す階層以下に含まれる
全てのメソッドを意味する。また、サブパッケージの階
層がより深い場合には、サブパッケージの各階層の途中
までの記述によって、その階層以下に含まれる全てのメ
ソッドを意味するものとする。
【0037】指定(DESCRIPTION)は、表現
の前に「+」または「−」を付与したものであり、
「+」の意味は、この表現に含まれるメソッドをコンパ
イル対象とする、という意味であり、「−」の意味は、
この表現に含まれるメソッドをコンパイル対象から除外
する、という意味である。
【0038】従って、「−」に続く表現に対しては、そ
の表現よりも上の階層の表現に「+」が付与されたもの
がリストになければ、意味をなさない。また、「−」に
よって除外されたパッケージやクラスであっても、さら
に下の階層で「+」という記述があれば、その下の階層
に含まれるメソッドはコンパイル対象となり、さらに下
の階層で「−」という記述があれば、その下の階層に含
まれるメソッドはコンパイル対象から除外される。この
ように、「+」「−」の規則は、より下の階層による指
定が優先される。
【0039】この指定形式は、階層構造をもつデータ集
合の部分集合の指定に一般化できるので、一般化した形
で、この方式が効率よく機能することを以下に説明す
る。
【0040】Bを集合とし、Bの部分集合を元とする集
合Sで、以下の性質を持つものを考える。
【0041】任意のSの元X,Yについて、X≠Y ⇒
X⊂Y OR Y⊃X OR X∩Y=Φ 階層構造を持つデータ集合について、基底データの集合
をB、階層構造をSとして考えると上記の性質を持つこ
とがわかる。
【0042】ここで、Sの部分集合Eを指定リストに含
まれる表現の集合として考えると、任意のBの元Bにつ
いてBを含むEの元が存在するなら、上記の性質X≠Y
⇒X⊂Y OR Y⊃X OR X∩Y=Φにより、
Bを含むEの元の中で最小の元X∈Eが存在する。この
場合、この表現Xの符号が「+」なら、Bは指定した集
合に含まれることになるし、符号が「−」であるか、あ
るいは、Bを含むEの元が存在しないなら、指定した集
合に含まれないことになる。このようにして、階層構造
Sの表現を使った指定リストEによって、集合Bの部分
集合を効率よく指定することができる。
【0043】上記したような記述形式による指定リスト
を参照して、メソッドがコンパイル対象か否かを効率よ
く判定することができる。この際の具体的な判定方法に
ついては後述する。
【0044】2.第2実施形態(コンパイル対象として
指定されたメソッドであるか否かの判定) この第2実施形態では、上記した第1実施形態による指
定形式を使って、特定のメソッドがコンパイル対象であ
るか否かを効率的に判定するコンパイル範囲判定機能を
実現する。
【0045】また、ジャストインタイムコンパイルする
メソッドを上記した第1実施形態による指定形式を使っ
て指定し、クラスローディング時に、そのクラスに属す
るメソッドをジャストインタイムコンパイルするか否か
を上記指定リストにより判定して、メソッド呼び出しの
ためのエントリに情報を設定するコンパイル範囲判定機
能を実現する。
【0046】また、ジャストインタイムコンパイルする
メソッドを上記した第1実施形態による指定形式を使っ
て指定し、メソッド呼び出し時に、そのクラスに属する
メソッドをジャストインタイムコンパイルするか否かを
判定するコンパイル範囲判定機能を実現する。
【0047】また、上記仮想機械上で実行するプログラ
ム開発に於いて、開発したプログラムのメソッドの中
で、事前コンパイルするメソッドを上記した第1実施形
態による指定形式を使って指定し、事前コンパイル時に
コンパイルするか否かを判定して、メソッドのコンパイ
ルを制御するコンパイル範囲判定機能を実現する。
【0048】上述した第1実施形態によるコンパイル対
象範囲の指定リストを用いて、メソッドがコンパイル対
象か否かを判定するアルゴリズムは、上述した指定リス
トの構成に於けるBに対するXを見つけるという手順で
行う。そのために、予め上記指定リストを、表現と符号
および上の階層へのポインタをメンバに持つ構造体の配
列で、表現の文字列でソートした状態で内部データとし
て構成しておく。そして判定するメソッドについて、そ
のメソッドが属する「TOPPACKAGENAME」
から「METHODNAME」までの完全な表現を構成
し、この表現をキーとして、上記の配列をバイナリサー
チする。見つかれば、その表現の符号によってコンパイ
ル対象か否かを判定する。見つからなければ、キーより
も小さいもので最も近い表現のエントリがバイナリサー
チによって得られる。このエントリの表現が、キーのサ
ブストリングであれば、そのエントリの符号によって判
定し、サブストリングでなければ、そのエントリが示す
上の階層へのポインタをたどって、同じことを繰り返
す。上の階層へのポインタがなくなれば、そのメソッド
はコンパイル対象でないと判定する。
【0049】上述した第1実施形態に於ける指定リスト
を用いて、特定のメソッドがコンパイル対象であるか否
かを判定する効率的な方法を示す。この方法は、指定リ
ストから判定を行うためのデータ構造を生成する処理部
分(2−1.判定リストの生成)と、特定のメソッドが
コンパイル対象であるか否かを判定する処理部分(2−
2.メソッドの判定処理)とでなる、2つの処理手段に
より実現される。ここでは、この際の判定用のデータ構
造を「判定リスト」と呼ぶ。
【0050】2−1.判定リストの生成 上記判定リストは、図4に示すように、エントリとして
上記第1実施形態で示した表現(文字列)401と、そ
の表現401がコンパイル対象であるか除外対象である
かを示すフラグ402と、その表現より上の階層の表現
をもつエントリを指す上位階層へのインデックス403
とでなる、データのリスト(配列)であり、第一のエン
トリである表現によってソートされている。この判定リ
ストの具体例を図5と図6にそれぞれ示す。尚、図5は
上記第1実施形態の図2に示した指定リストに対応する
判定リスト構造を示し、図6は同じく第1実施形態の図
3に示した指定リストに対応する判定リスト構造を示し
ている。
【0051】上記判定リストを生成する処理手順を図7
にフローチャートで示す。ここで、入力は、上記指定リ
ストであり、出力は上記判定リストである。
【0052】先ず、指定リストのエントリサイズ分の、
判定リスト用の領域(配列)を確保し、指定リストを順
番に逐一読み出して、判定リストの先頭から、表現とフ
ラグを設定してゆく(図7ステップ701〜704)。
【0053】ここで、フラグは、指定リストの文字が
「+」の場合は、TRUE(真)を、「−」の場合はF
ALSE(偽)を設定する。
【0054】次に、表現(文字列)によって、配列をソ
ートし、各エントリについて、上位の階層の表現へのエ
ントリへのインデックスを設定する(図7ステップ70
5〜712)。
【0055】この際のインデックスの設定は、以下の手
順で行う。
【0056】先ず、該当エントリの表現から一つ上の表
現を生成し、これを上表現とする。この上表現が該当エ
ントリより小さい配列のインデックスに存在すれば、そ
のインデックスを設定する。存在しなければ、上表現の
上表現を、新たに上表現として、同様の手順を繰り返
す。空文字の上表現が見付からなかった場合は、インデ
ックスを−1に設定する。配列は、表現でソートされて
いるので、上表現の探索は、バイナリサーチで行うこと
ができる。また、バイナリサーチでは、見つからなかっ
た場合に、検索中の値の境界のインデックスが分かるの
で、上表現の上表現で探索し直す場合に、この0からこ
の境界のインデックスまでを対象とすればよい。本発明
の実施形態では、バイナリサーチで見つからなかった場
合の最後のインデックスは、検索中の値が、この最後の
インデックスの値と、最後のインデックス−1の値の間
にあるように検索する。
【0057】2−2.メソッドの判定処理 メソッドがコンパイル対象か否かを判定する処理手順を
図8にフローチャートで示す。ここでは、先ず、メソッ
ドデータをもとに、そのパッケージ名からメソッド名ま
での「表現」に相当する文字列を構成し、バイナリサー
チで判定リストを探索する(図8ステップ801〜80
3)。ここで、上記「表現」に相当する文字列(EX
P)が見付かれば、見付かったエントリのフラグを判定
結果として返す(図8ステップ804)。また上記文字
列(EXP)が見付からなければ、バイナリサーチ後の
境界のインデックス−1をカレントのインデックスとす
る(図8ステップ805,806)。このインデックス
のエントリの表現が、現在探索中の表現の上位の階層の
表現である(候補(CAND)が変数=文字列(EX
P)の上位階層の表現である)か否かをチェックし、上
位の表現であれば、そのエントリのフラグを返す(図8
ステップ807,804)。上位の表現でなければ、そ
のエントリのインデックスを調べ、−1なら「コンパイ
ルしない」フラグを返す(図8ステップ807〜81
0)。また、−1でなければ新たにカレントインデック
スとし、上記同様の処理を繰り返す(図8ステップ80
9,806,…)。
【0058】上記した第2実施形態によれば、上述の第
1実施形態による指定形式を使って、特定のメソッドが
コンパイル対象であるか否かを効率的に判定する機能を
容易に実現することができる。また、ジャストインタイ
ムコンパイルするメソッドを上記した第1実施形態によ
る指定形式を使って指定し、クラスローディング時に、
そのクラスに属するメソッドをジャストインタイムコン
パイルするか否かを上記指定リストにより判定すること
で、メソッド呼び出しのためのエントリに情報を設定す
る機能を容易に実現することができる。また、ジャスト
インタイムコンパイルするメソッドを上記した第1実施
形態による指定形式を使って指定し、メソッド呼び出し
時に、そのクラスに属するメソッドをジャストインタイ
ムコンパイルするか否かを判定する機能を容易に実現す
ることができる。また、上記仮想機械上で実行するプロ
グラム開発に於いて、開発したプログラムのメソッドの
中で、事前コンパイルするメソッドを上記した第1実施
形態による指定形式を使って指定し、事前コンパイル時
にコンパイルするか否かを判定して、メソッドのコンパ
イルを制御する機能を容易に実現することができる。
【0059】3.第3実施形態(指定したメソッドから
の再帰的なコンパイル) この第3実施形態では、上記仮想機械上で実行するプロ
グラム開発に於いて、指定されたメソッドの事前コンパ
イル時に、指定されたメソッドが直接、または間接的に
呼び出す全てのメソッドを再帰的にコンパイルする事前
コンパイル機能を実現する。
【0060】また、上記仮想機械上で実行するプログラ
ム開発に於いて、指定されたメソッドの事前コンパイル
時に、指定されたメソッドが直接、または間接的に呼び
出すメソッドがバーチャルメソッドである場合、そのメ
ソッドをオーバライドしている全てのサブクラスの対応
するメソッドを再帰的にコンパイルする事前コンパイル
機能を実現する。
【0061】また、上記仮想機械上で実行するプログラ
ム開発に於いて、指定されたメソッドの事前コンパイル
時に、指定されたメソッドが直接、または間接的に呼び
出すメソッドがインターフェイスメソッドである場合、
そのインターフェイスクラスを実装している全てのクラ
スの中の対応するメソッドを再帰的にコンパイルする事
前コンパイル機能を実現する。
【0062】また、上記仮想機械の実行環境でジャスト
インタイムコンパイルによって高速化する実行環境にお
いて、メソッドデータに、インタプリタからのメソッド
呼び出しのためのエントリと、目的機械の命令コード列
からのメソッド呼び出しのためのエントリの2つを設け
て、上述した第1実施形態による指定方法によって指定
されたメソッドについては、環境を変更しジャストイン
タイムコンパイルしてコンパイル済みコードを呼び出す
処理を、インタプリタからのメソッド呼び出しのための
エントリへ登録し、目的機械の命令コード列からのメソ
ッド呼び出しのためのエントリについては、メソッドを
ジャストインタイムコンパイルしてコンパイル済コード
を呼び出す処理を登録する再帰的なコンパイル機能を実
現する。
【0063】特定のメソッドを高速化したい場合に、そ
のメソッドと、そのメソッドが呼び出す全てのメソッド
を、上記の指定リストに登録する手間を省くために、高
速化したいメソッドのみを指定リストに登録し、そのメ
ソッドが呼び出すメソッドは、自動的にコンパイルして
しまうことにすれば、呼び出すメソッド全てを指定リス
トに登録しなくてもよい。図9に示すように、ジャスト
インタイムコンパイルで再帰的にコンパイルするのは、
コンパイル済みメソッドが呼び出すメソッドを次々と、
ジャストインタイムコンパイルして行けばよい。指定リ
ストに含まれるメソッドをコンパイルするのは、そのク
ラスローディング時に、そのクラスに属するメソッドの
それぞれについて、上述した第2実施形態に示した判定
手段を用いて、コンパイルするメソッドであるか否かを
判定し、コンパイルするメソッドである場合には、イン
タプリタからの呼び出しのためのエントリに、ジャスト
インタイムコンパイルしてコンパイルしたメソッド実行
に移る処理を登録しておき、そうでない場合は、インタ
プリタでの実行を続行するための処理を登録しておく。
この際の実行時のメソッド呼び出しの方法については後
述する第4実施形態で詳しく説明する。
【0064】この際のメソッドを事前コンパイルする処
理手順の一例を図9と、図10乃至図14のフローチャ
ートに示す。事前コンパイルで指定メソッドから再帰的
にコンパイルする際は、図9に示すように、先ず指定リ
ストでコンパイル対象に指定された全てのメソッドを事
前コンパイルし(図9ステップ9a)、続いてその各メ
ソッドから呼ばれる全てのメソッドについて事前コンパ
イルする(図9ステップ9b)。
【0065】事前コンパイルで再帰的にコンパイルする
のは、スタティクメソッド10aの場合は、呼び出され
るメソッドが確定できるので、そのメソッドをコンパイ
ルすればよい(図11、図14)。バーチャルメソッド
や、インターフェイスメソッドなどのメソッド呼び出し
では、呼び出されるメソッドの実体が、実行時にしか断
定できない。バーチャルメソッド10b呼び出しについ
ては、実際に呼び出されるメソッドの実体は、そのメソ
ッドのオブジェクトの宣言のクラスの対応するメソッド
と、そのサブクラスによってオーバライドされたメソッ
ドの可能性があるので、これらの全てをコンパイルする
(図12、図14)。またインターフェイスメソッド1
0cの場合は、そのインターフェイスをインプリメント
する全てのクラスの対応するメソッドをコンパイルする
(図13、図14)。
【0066】上記した第3実施形態によれば、指定され
たメソッドの事前コンパイル時に、指定されたメソッド
が直接、または間接的に呼び出す全てのメソッドを再帰
的にコンパイルする事前コンパイル機能を実現すること
ができる。また、指定されたメソッドの事前コンパイル
時に、指定されたメソッドが直接、または間接的に呼び
出すメソッドがバーチャルメソッドである場合に、その
メソッドをオーバライドしている全てのサブクラスの対
応するメソッドを再帰的にコンパイルする事前コンパイ
ル機能を実現することができる。また、指定されたメソ
ッドの事前コンパイル時に、指定されたメソッドが直
接、または間接的に呼び出すメソッドがインターフェイ
スメソッドである場合、そのインターフェイスクラスを
実装している全てのクラスの中の対応するメソッドを再
帰的にコンパイルする事前コンパイル機能を実現するこ
とができる。
【0067】4.第4実施形態(インタプリタの実行と
コンパイル済みコードの実行の頻繁な切替抑止) この第4実施形態では、仮想機械の実行環境でジャスト
インタイムコンパイルによって高速化する実行環境に於
いて、メソッドデータに、インタプリタからのメソッド
呼び出しのためのエントリと、目的機械の命令コード列
からのメソッド呼び出しのためのエントリとでなる2つ
のエントリを設けて、上述した第1実施形態による指定
方法によって指定されたメソッドについては、環境を変
更しジャストインタイムコンパイルしてコンパイル済み
コードを呼び出す処理を、インタプリタからのメソッド
呼び出しのためのエントリへ登録し、目的機械の命令コ
ード列からのメソッド呼び出しのためのエントリについ
ては、メソッドをジャストインタイムコンパイルしてコ
ンパイル済コードを呼び出す処理を登録する、再帰的な
コンパイル機能を実現する。
【0068】また上記実行環境に於いて、上記2つのエ
ントリに対して、上述した第1実施形態による指定方法
によって指定されていないメソッドについて、インタプ
リタからのメソッド呼び出しのためのエントリに、イン
タプリタによる実行を続ける処理を登録することによっ
て、システム共通のクラスライブラリのメソッドが、再
帰的にコンパイルされてしまった場合でも、インタプリ
タによる実行からコンパイル済み目的機械命令コード列
の実行への制御切替えのオーバーヘッドを削減し、イン
タプリタによる実行とコンパイル済コードの実行という
ハイブリッドな仮想機械の実行環境での性能の劣化を回
避する機能を実現する。
【0069】また上記実行環境に於いて、上記2つのエ
ントリに対して、上述した第1実施形態による指定方法
によって指定されたメソッドについては、目的機械の命
令コード列からのメソッド呼び出しのためのエントリ
に、事前コンパイル済の目的機械の命令コード列の先頭
アドレスを登録し、インタプリタからの呼び出しのため
のエントリには、環境を変更してコンパイル済コードを
呼び出す処理を登録するが、再帰的にコンパイルされた
メソッドについては、インタプリタからの呼び出しのた
めのエントリに、インタプリタによる実行を続行する処
理を登録することによって、再帰的にコンパイルされて
しまった場合であってもインタプリタによる実行からコ
ンパイル済み目的機械命令コード列の実行への制御切替
えのオーバーヘッドを削減し、インタプリタによる実行
とコンパイル済コードの実行というハイブリッドな仮想
機械の実行環境での性能の劣化を回避する機能を実現す
る。
【0070】インタプリタ実行とコンパイル済みコード
の実行とが頻繁に切り替わる不具合を解消するために、
ここでは、上述した第1実施形態により取得される指定
リストによって指定されたメソッドがインタプリタから
呼び出されるときは、コンパイル済み目的機械のコード
実行へ移ってもよいが、再帰的にコンパイルされたメソ
ッドをインタプリタから呼び出す場合は、そのままイン
タプリタによる実行にすることで、インタプリタ実行と
コンパイル済みコードの実行の行き来(切替頻度)を削
減する。
【0071】この機能を実現するために、図15に示す
ように、クラス(Ci)に含まれるメソッドデータ(m
i)に、インタプリタによる実行からメソッドを呼び出
すためのエントリを保持する領域(EA1)と、コンパ
イル済みコードの実行からメソッドを呼び出すためのエ
ントリを保持する領域(EA2)とでなる2つのエント
リ保持領域を設ける。この2つのエントリ保持領域(E
A1,EA2)に於ける登録内容の一例を図16に示
す。
【0072】ジャストインタイムコンパイラの場合は、
クラスローディング時に、クラスに含まれるメソッドに
ついて、上述の第2実施形態で説明した判定方法を使
い、コンパイル対象の場合は、インタプリタからの呼び
出しのためのエントリを保持する領域(EA1)に、メ
ソッドをジャストインコンパイルしてコンパイルしたコ
ードの実行へ移るための処理を登録する。このエントリ
へ登録される処理には、インタプリタからの環境(アー
ギュメントスタックなど)をコンパイル済みコードの実
行のための環境に変換したり、メソッドがコンパイル済
であれば、コンパイルせずにコンパイル済みコードを取
り出すという処理が含まれる。また、コンパイル済みコ
ードからの呼び出しのためのエントリを保持する領域
(EA2)に、上記の処理から環境を変換する処理を省
いたものを登録しておき、一度呼び出されると、コンパ
イルされるので、コンパイルされた目的機械のコード列
の先頭アドレスを登録しなおす。
【0073】コンパイル対象で無い場合は、インタプリ
タからの呼び出しのためのエントリを保持する領域(E
A1)に、インタプリタによる実行を続行するための処
理を登録し、コンパイル済みコードからの呼び出しのた
めのエントリを保持する領域(EA2)に、コンパイル
対象の場合と同じ処理を登録する。
【0074】以上により、コンパイル済みコードから、
コンパイル対象として指定されなかったメソッドを呼ぶ
場合においても、ジャストインタイムコンパイルされ、
再帰的に呼び出されるメソッドがコンパイルされる。一
方、インタプリタによる実行から呼び出される場合は、
コンパイル対象として指定された場合には、コンパイル
済み目的コードの実行になるが、そうでない場合は、イ
ンタプリタによる実行となる。
【0075】事前コンパイルの場合には、図9に示すフ
ローチャートの2つのループ(9a,9b)について、
最初のループ(9a)でコンパイルされるのが、指定リ
ストによってコンパイル対象となったメソッドであるか
ら、このメソッドデータのインタプリタからの呼び出し
のためのエントリを保持する領域(EA1)に、環境を
変更してコンパイル済みコードの先頭アドレスを呼び出
す、一連の処理を登録し、コンパイル済み目的コードの
実行からの呼び出しのためのエントリを保持する領域
(EA2)に、事前コンパイル済みの目的コード列の先
頭アドレスを登録する。第2のループ(9b)によって
コンパイルされるメソッドについては、インタプリタか
らの呼び出しのためのエントリを保持する領域(EA
1)に、インタプリタによる実行をそのまま続けるため
の処理を登録し、コンパイル済みコードからの呼び出し
のためのエントリを保持する領域(EA2)に、事前コ
ンパイル済の目的コード列の先頭アドレスを登録する。
どちらのループでもコンパイルされないメソッドについ
ては、インタプリタからの呼び出しのためのエントリに
は、インタプリタによる実行をそのまま続けるための処
理を登録し、コンパイル済コードからの呼び出しのため
のエントリには、インタプリタによる実行へ戻るための
処理を登録する。この最後の設定は、再帰的なコンパイ
ルを抑制したいようなメソッドについて適用可能であ
り、その場合はジャストインタイムコンパイルのケース
も同様である。
【0076】このようにして、インタプリタ実行とコン
パイル済みコードの実行の頻繁な切替を抑止することに
より、インタプリタによる実行からコンパイル済み目的
機械命令コード列の実行への制御切替えのオーバーヘッ
ドを削減し、インタプリタによる実行とコンパイル済コ
ードの実行というハイブリッドな仮想機械の実行環境で
の性能の劣化を防ぐことができる。
【0077】尚、上記した各実施形態に於ける処理プロ
グラム並びに各処理の成果物(データ)等は、それぞれ
個別に若しくは合体して、例えば、目的機械を構成する
コンピュータの内部メモリに格納される。若しくは、ハ
ードディスク装置、フロッピィディスク、メモリカード
等の各種外部記憶装置等に記憶し、若しくはデータ通信
手段等を介して、一定の条件下で、例えばプログラム製
品、記憶媒体等として扱うことも可能である。
【0078】
【発明の効果】以上詳記したように本発明によれば、仮
想命令コード列のインタプリタによる実行環境と、プロ
グラム実行時あるいは実行以前に仮想命令コード列を目
的機械コード列にコンパイルして実行する実行環境とに
よる2つの実行環境をサポートする仮想機械に於いて、
コンパイルして実行したいメソッドを全て指定するので
はなく、パッケージや、クラスの階層構造を使って、よ
り少ない記述で、多くのメソッドを指定することを可能
とし、コンパイルしたくないプログラム部分を容易に除
外することができる。
【0079】また、上記階層構造をもつデータ集合の、
部分集合を定義する指定形式を使って、特定のデータ
が、この部分集合のメンバであるか否かを判定するため
の効率的な判定処理機能を実現できる。
【0080】また、再帰的なコンパイルにより、コンパ
イル対象メソッドが呼び出す全てのメソッドを指定しな
くても、高速化したい処理のメソッドの基のメソッドの
みを指定することで、そのメソッドが直接、間接的に呼
び出す全てのメソッドをコンパイルすることができる。
【0081】また、インタプリタによる実行部分から、
再帰的なコンパイルによりコンパイルされた、システム
共通のクラスライブラリのメソッドを呼び出す場合は、
そのままインタプリタによる実行とすることで、インタ
プリタによる実行からコンパイル済目的機械命令コード
列の実行への制御切替えのオーバーヘッドを削減し、イ
ンタプリタによる実行とコンパイル済コードの実行とい
うハイブリッドな仮想機械の実行環境での性能の劣化を
防ぐことができる。
【図面の簡単な説明】
【図1】本発明の第1実施形態に係るプログラム階層構
造を用いたコンパイル対象範囲の指定方法を説明するた
めの、階層構造(木構造)とそのデータ集合の領域を示
す図。
【図2】上記第1実施形態に於けるコンパイル対象の一
指定例を示す図。
【図3】上記第1実施形態に於けるコンパイル対象の他
の指定例を示す図。
【図4】本発明の第2実施形態に係るコンパイル対象判
定方法を説明するためのデータ構造を示す図。
【図5】上記第2実施形態に於ける判定リストの一構成
例を示す図。
【図6】上記第2実施形態に於ける判定リストの他の構
成例を示す図。
【図7】上記第2実施形態に於ける判定リストを生成す
る処理手順を示すフローチャート。
【図8】上記第2実施形態に於けるコンパイル対象を判
定する処理手順を示すフローチャート。
【図9】本発明の第3実施形態に係る、事前コンパイル
で指定メソッドから再帰的にコンパイルする処理手順を
示すフローチャート。
【図10】上記第3実施形態に於けるメッセージの事前
コンパイル処理手順を示すフローチャート。
【図11】上記第3実施形態に於けるメッセージの事前
コンパイル処理手順を示すフローチャート。
【図12】上記第3実施形態に於けるメッセージの事前
コンパイル処理手順を示すフローチャート。
【図13】上記第3実施形態に於けるメッセージの事前
コンパイル処理手順を示すフローチャート。
【図14】本発明の第4実施形態に係るメソッドデータ
の構造を示す図。
【図15】上記第4実施形態に於ける、メソッドデータ
に設けられたインタプリタによる実行からメソッドを呼
び出すためのエントリを保持する領域(EA1)と、コ
ンパイル済みコードの実行からメソッドを呼び出すため
のエントリを保持する領域(EA2)を示す図。
【図16】上記第4実施形態に於ける2つのエントリ保
持領域(EA1,EA2)の登録内容を示す図。
【符号の説明】
401…エントリデータの表現(文字列) 402…エントリデータのフラグ 403…上位階層へのインデックス EA1…インタプリタによる実行からメソッドを呼び出
すためのエントリを保持する領域 EA2…コンパイル済みコードの実行からメソッドを呼
び出すためのエントリを保持する領域

Claims (19)

    【特許請求の範囲】
  1. 【請求項1】 コンパイル対象となるメソッド若しくは
    コンパイル対象から除外したいメソッドをプログラムの
    階層構造を使って指定することを特徴とする仮想機械用
    プログラムのコンパイル対象指定方法。
  2. 【請求項2】 仮想命令コード列のインタプリタによる
    実行機能と、プログラム実行時あるいは実行以前に仮想
    命令コード列を目的機械コードにコンパイルして実行す
    る実行機能とをサポートする仮想機械の実行環境に於い
    て、コンパイルして実行したいメソッド若しくはコンパ
    イル対象から除外したいメソッドをプログラムのパッケ
    ージ、クラス等の階層構造を使って記述し、コンパイル
    対象範囲を指定することを特徴とする仮想機械用プログ
    ラムのコンパイル対象指定方法。
  3. 【請求項3】 仮想命令コード列のインタプリタによる
    実行機能と、プログラム実行時あるいは実行以前に仮想
    命令コード列を目的機械コードにコンパイルして実行す
    る実行機能とをサポートする仮想機械の実行環境に於い
    て、コンパイルして実行したいメソッド若しくはコンパ
    イル対象から除外したいメソッドをプログラムのパッケ
    ージ、クラス等の階層構造を使って記述したリストをも
    とに、特定のメソッドがコンパイル対象であるか否かを
    判定することを特徴とする仮想機械用プログラムのコン
    パイル対象判定方法。
  4. 【請求項4】 仮想命令コード列のインタプリタによる
    実行機能と、プログラム実行時あるいは実行以前に仮想
    命令コード列を目的機械コードにコンパイルして実行す
    る実行機能とをサポートする仮想機械の実行環境に於い
    て、コンパイルして実行したいメソッド若しくはコンパ
    イル対象から除外したいメソッドをプログラムのパッケ
    ージ、クラス等の階層構造をもとに記述したリストによ
    りジャストインタイムコンパイルするメソッドを指定
    し、クラスローディング時に、当該クラスに属するメソ
    ッドをジャストインタイムコンパイルするか否かを上記
    リストをもとに判定してメソッド呼び出しのためのエン
    トリに情報を設定することを特徴とする仮想機械実行方
    法。
  5. 【請求項5】 仮想命令コード列のインタプリタによる
    実行機能と、プログラム実行時あるいは実行以前に仮想
    命令コード列を目的機械コードにコンパイルして実行す
    る実行機能とをサポートする仮想機械の実行環境に於い
    て、コンパイルして実行したいメソッド若しくはコンパ
    イル対象から除外したいメソッドをプログラムのパッケ
    ージ、クラス等の階層構造をもとに記述したリストによ
    りジャストインタイムコンパイルするメソッドを指定
    し、メソッド呼び出し時に、そのクラスに属するメソッ
    ドをジャストインタイムコンパイルするか否かを上記リ
    ストをもとに判定することを特徴とする仮想機械実行方
    法。
  6. 【請求項6】 仮想命令コード列のインタプリタによる
    実行機能と、プログラム実行時あるいは実行以前に仮想
    命令コード列を目的機械コードにコンパイルして実行す
    る実行機能とをサポートする仮想機械上で実行するプロ
    グラムのメソッドのうち、事前コンパイルするメソッド
    を、プログラムのパッケージ、クラス等の階層構造をも
    とに記述したリスト形式により指定し、事前コンパイル
    時に、前記リストを参照してコンパイルするか否かを判
    定することを特徴とする事前コンパイル方法。
  7. 【請求項7】 前記指定されたメソッドの事前コンパイ
    ル時に、指定されたメソッドが直接若しくは間接的に呼
    び出す全てのメソッドを再帰的にコンパイルすることを
    特徴とする請求項6記載の事前コンパイル方法。
  8. 【請求項8】 前記指定されたメソッドの事前コンパイ
    ル時に、指定されたメソッドが直接若しくは間接的に呼
    び出すメソッドがバーチャルメソッドであるとき、その
    メソッドをオーバライドしている全てのサブクラスの対
    応するメソッドを再帰的にコンパイルすることを特徴と
    する請求項6記載の事前コンパイル方法。
  9. 【請求項9】 前記指定されたメソッドの事前コンパイ
    ル時に、指定されたメソッドが直接若しくは間接的に呼
    び出すメソッドがインターフェイスメソッドであると
    き、そのインターフェイスクラスを実装している全ての
    クラスの中の対応するメソッドを再帰的にコンパイルす
    ることを特徴とする請求項6記載の事前コンパイル方
    法。
  10. 【請求項10】 仮想命令コード列のインタプリタによ
    る実行機能と、プログラム実行時あるいは実行以前に仮
    想命令コード列を目的機械コードにコンパイルして実行
    する実行機能とをサポートする仮想機械に於いて、コン
    パイルして実行したいメソッド若しくはコンパイル対象
    から除外したいメソッドをプログラムのパッケージ、ク
    ラス等の階層構造を使って記述したリストを有し、前記
    メソッドデータに、インタプリタからのメソッド呼び出
    しのための第1のエントリと、目的機械の命令コード列
    からのメソッド呼び出しのための第2のエントリとを設
    けて、前記リストにより指定されたメソッドについて、
    前記各エントリの設定内容により、インタプリタによる
    実行とコンパイル済み目的機械のコード実行との実行環
    境の切替を制御することを特徴とする仮想機械実行方
    法。
  11. 【請求項11】 前記リストにより指定されたメソッド
    については、環境を変更してジャストインタイムコンパ
    イルしてコンパイル済コードを呼び出す処理を前記第1
    のエントリに登録し、第2のエントリにはメソッドをジ
    ャストインタイムコンパイルしてコンパイル済コードを
    呼び出す処理を登録することを特徴とする請求項10記
    載の仮想機械実行方法。
  12. 【請求項12】 前記リストで指定されていないメソッ
    ドについて、前記第1のエントリに、インタプリタによ
    る実行を続ける処理を登録することことを特徴とする請
    求項10記載の仮想機械実行方法。
  13. 【請求項13】 前記リストで指定されたメソッドにつ
    いて、前記第2のエントリには、事前コンパイル済の目
    的機械の命令コード列の先頭アドレスを登録し、前記第
    1のエントリには、環境を変更してコンパイル済コード
    を呼び出す処理を登録するが、再帰的にコンパイルされ
    たメソッドについてはインタプリタによる実行を続行す
    る処理を登録することを特徴とする請求項10記載の仮
    想機械実行方法。
  14. 【請求項14】 仮想命令コード列のインタプリタによ
    る実行環境と、プログラム実行時あるいは実行以前に仮
    想命令コード列を目的機械コードにコンパイルして実行
    する実行環境とを備えたオブジェクト指向プログラムを
    実行する仮想機械を実現するコンピュータに於いて、 コンパイルして実行したいメソッド若しくはコンパイル
    対象から除外したいメソッドをプログラムのパッケー
    ジ、クラス等の階層構造を使って記述したコンパイル対
    象範囲を指定するリストを生成する手段と、 前記生成されたリストを参照して実行対象メソッドがコ
    ンパイル対象であるか否かを判定する手段とを具備する
    ことを特徴とするオブジェクト指向プログラムを実行す
    る仮想機械を実現するコンピュータ。
  15. 【請求項15】 仮想命令コード列のインタプリタによ
    る実行環境と、プログラム実行時あるいは実行以前に仮
    想命令コード列を目的機械コードにコンパイルして実行
    する実行環境とを備えたオブジェクト指向プログラムを
    実行する仮想機械を実現するコンピュータにより読み取
    り可能な記録媒体であって、コンパイルして実行したい
    メソッド若しくはコンパイル対象から除外したいメソッ
    ドをプログラムのパッケージ、クラス等の階層構造を使
    って記述した、コンパイル対象範囲を指定するリストを
    作成する機能を実現させるためのプログラムを記録した
    機械読み取り可能な記録媒体。
  16. 【請求項16】 仮想命令コード列のインタプリタによ
    る実行環境と、プログラム実行時あるいは実行以前に仮
    想命令コード列を目的機械コードにコンパイルして実行
    する実行環境とを備えたオブジェクト指向プログラムを
    実行する仮想機械を実現するコンピュータにより読み取
    り可能な記録媒体であって、コンパイルして実行したい
    メソッド若しくはコンパイル対象から除外したいメソッ
    ドをプログラムのパッケージ、クラス等の階層構造を使
    って記述したリストを参照してコンパイル対象範囲を判
    定する機能を実現させるためのプログラムを記録した機
    械読み取り可能な記録媒体。
  17. 【請求項17】 仮想命令コード列のインタプリタによ
    る実行環境と、プログラム実行時あるいは実行以前に仮
    想命令コード列を目的機械コードにコンパイルして実行
    する実行環境とを備えたオブジェクト指向プログラムを
    実行する仮想機械を実現するコンピュータにより読み取
    り可能な記録媒体であって、コンパイルして実行したい
    メソッド若しくはコンパイル対象から除外したいメソッ
    ドをプログラムのパッケージ、クラス等の階層構造を使
    って記述したコンパイル対象範囲を指定するリストを作
    成する機能と、前記リストを参照してコンパイル対象範
    囲を判定する機能とを実現させるためのプログラムを記
    録した機械読み取り可能な記録媒体。
  18. 【請求項18】 仮想命令コード列のインタプリタによ
    る実行環境と、プログラム実行時あるいは実行以前に仮
    想命令コード列を目的機械コードにコンパイルして実行
    する実行環境とを備えたオブジェクト指向プログラムを
    実行する仮想機械としてコンピュータを機能させるため
    のプログラム製品であって、コンパイルして実行したい
    メソッド若しくはコンパイル対象から除外したいメソッ
    ドをプログラムのパッケージ、クラス等の階層構造を使
    って記述したコンパイル対象範囲を指定するリストを作
    成する機能をコンピュータに実現させるためのプログラ
    ム製品。
  19. 【請求項19】 仮想命令コード列のインタプリタによ
    る実行環境と、プログラム実行時あるいは実行以前に仮
    想命令コード列を目的機械コードにコンパイルして実行
    する実行環境とを備えたオブジェクト指向プログラムを
    実行する仮想機械としてコンピュータを機能させるため
    のプログラム製品であって、コンパイルして実行したい
    メソッド若しくはコンパイル対象から除外したいメソッ
    ドをプログラムのパッケージ、クラス等の階層構造を使
    って記述したコンパイル対象範囲を指定するリストを参
    照してコンパイル対象を判定する機能をコンピュータに
    実現させるためのプログラム製品。
JP2000363349A 2000-11-29 2000-11-29 仮想機械用プログラムのコンパイル対象指定方法、同プログラムのコンパイル対象判定方法、仮想機械実行方法、事前コンパイル方法、コンピュータ、記録媒体、及びプログラム製品 Pending JP2002163115A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2000363349A JP2002163115A (ja) 2000-11-29 2000-11-29 仮想機械用プログラムのコンパイル対象指定方法、同プログラムのコンパイル対象判定方法、仮想機械実行方法、事前コンパイル方法、コンピュータ、記録媒体、及びプログラム製品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2000363349A JP2002163115A (ja) 2000-11-29 2000-11-29 仮想機械用プログラムのコンパイル対象指定方法、同プログラムのコンパイル対象判定方法、仮想機械実行方法、事前コンパイル方法、コンピュータ、記録媒体、及びプログラム製品

Publications (1)

Publication Number Publication Date
JP2002163115A true JP2002163115A (ja) 2002-06-07

Family

ID=18834473

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000363349A Pending JP2002163115A (ja) 2000-11-29 2000-11-29 仮想機械用プログラムのコンパイル対象指定方法、同プログラムのコンパイル対象判定方法、仮想機械実行方法、事前コンパイル方法、コンピュータ、記録媒体、及びプログラム製品

Country Status (1)

Country Link
JP (1) JP2002163115A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004107170A1 (ja) * 2003-05-28 2004-12-09 Matsushita Electric Industrial Co., Ltd. プログラム実行制御装置
JP2010191734A (ja) * 2009-02-19 2010-09-02 Hitachi Software Eng Co Ltd 画像再生装置及び中間語プログラム実行方法
EP2945057A1 (en) 2014-05-15 2015-11-18 Fujitsu Limited Process execution method and information processing apparatus

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004107170A1 (ja) * 2003-05-28 2004-12-09 Matsushita Electric Industrial Co., Ltd. プログラム実行制御装置
JP2004355277A (ja) * 2003-05-28 2004-12-16 Matsushita Electric Ind Co Ltd プログラム実行制御装置、プログラム実行制御方法
US7958499B2 (en) 2003-05-28 2011-06-07 Panasonic Corporation Program execution control device, program execution control method, control program, and recording medium
JP4713820B2 (ja) * 2003-05-28 2011-06-29 パナソニック株式会社 プログラム実行制御装置、プログラム実行制御方法
KR101051872B1 (ko) 2003-05-28 2011-07-25 파나소닉 주식회사 프로그램 실행제어장치
JP2010191734A (ja) * 2009-02-19 2010-09-02 Hitachi Software Eng Co Ltd 画像再生装置及び中間語プログラム実行方法
EP2945057A1 (en) 2014-05-15 2015-11-18 Fujitsu Limited Process execution method and information processing apparatus
US9672016B2 (en) 2014-05-15 2017-06-06 Fujitsu Limited Process execution method and information processing apparatus

Similar Documents

Publication Publication Date Title
US7739676B1 (en) Function values in computer programming languages having dynamic types and overloading
EP0902363B1 (en) Method and apparatus for efficient operations on primary type values without static overloading
US7185327B2 (en) System and method for optimizing operations via dataflow analysis
US6286134B1 (en) Instruction selection in a multi-platform environment
US7409678B2 (en) Compiler, compilation and storage
US5586328A (en) Module dependency based incremental compiler and method
US8631219B2 (en) Method and system for dynamic memory management
US6633313B1 (en) Event routing mechanism in a computer system
US7401331B2 (en) Method to add new software features without modifying existing code
EP0943990A2 (en) Method and system of providing dynamic optimization information in a code interpretive runtime environment
US7299462B2 (en) Relocation format for linking
US5960197A (en) Compiler dispatch function for object-oriented C
US8214812B2 (en) Method of interpreting method bytecode and system operated by the same
US7143402B2 (en) Method and apparatus for precision optimization in compiled programs
US20040143825A1 (en) Dynamic compiler apparatus and method that stores and uses persistent execution statistics
JPH02114335A (ja) マルチ・プロセツシング方式
US20030149967A1 (en) Information processing method and system
JP2002163115A (ja) 仮想機械用プログラムのコンパイル対象指定方法、同プログラムのコンパイル対象判定方法、仮想機械実行方法、事前コンパイル方法、コンピュータ、記録媒体、及びプログラム製品
US7194736B2 (en) Dynamic division optimization for a just-in-time compiler
US11435989B2 (en) Thread-local return structure for asynchronous state machine
US20020073133A1 (en) Register allocation method and software development method for various execution environments and LSI for executing developed software
US7451299B2 (en) System and method for generating multi-way branches
CA2387200A1 (en) Implementation of thread-static data in multi-threaded computer systems
JPH0683597A (ja) オブジェクト指向プログラム開発装置およびオブジェクト指向プログラム開発方法
US20230195727A1 (en) Processing a user query