JP2003140909A - Jitコンパイラを備えた仮想計算機 - Google Patents

Jitコンパイラを備えた仮想計算機

Info

Publication number
JP2003140909A
JP2003140909A JP2001341577A JP2001341577A JP2003140909A JP 2003140909 A JP2003140909 A JP 2003140909A JP 2001341577 A JP2001341577 A JP 2001341577A JP 2001341577 A JP2001341577 A JP 2001341577A JP 2003140909 A JP2003140909 A JP 2003140909A
Authority
JP
Japan
Prior art keywords
code
processing
compiled
native code
bytecode
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.)
Granted
Application number
JP2001341577A
Other languages
English (en)
Other versions
JP3808755B2 (ja
Inventor
Hiroya Shimura
浩也 志村
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 JP2001341577A priority Critical patent/JP3808755B2/ja
Priority to KR10-2004-7006877A priority patent/KR20040063923A/ko
Priority to EP02775508A priority patent/EP1445695A4/en
Priority to CNB028267303A priority patent/CN100354826C/zh
Priority to PCT/JP2002/011599 priority patent/WO2003040918A1/ja
Publication of JP2003140909A publication Critical patent/JP2003140909A/ja
Priority to US10/839,310 priority patent/US20040210865A1/en
Application granted granted Critical
Publication of JP3808755B2 publication Critical patent/JP3808755B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • 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

Landscapes

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

Abstract

(57)【要約】 【課題】本発明はJITコンパイラを備えた仮想計算機
に関し、限られたメモリ容量で処理の高速化を図り、応
答性能の向上を図る。 【解決手段】仮想計算機のバイトコードをソフトウェア
で解釈・実行する機能を有し、メモリ上に容量の制限さ
れたネイティブコードの格納領域としてコードキャッシ
ュを持ち、バイトコードを実行する際にバイトコードを
仮想計算機が直接実行できるネイティブコードにコンパ
イルしてコードキャッシュ3に格納した後、そのネイテ
ィブコードを実行するJITコンパイラを備え、バイト
コードのアドレスから、コンパイルされているか否かを
判断するための情報と、コンパイルされたネイティブコ
ードのアドレスを検索する検索テーブル2を備えた。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、携帯電話機や無線
通信機能を有する携帯情報端末(PDA)等の携帯型無
線通信機器に利用可能なJITコンパイラを備えた仮想
計算機に関する。
【0002】近年、インターネットの普及によりネット
ワークを介してプログラムを実行するシステムが実用化
されている。特に、Java言語は、携帯電話機上で
「i−aPPli」としてプログラムを実行させること
のできるものとして急速に広まってきている。
【0003】しかし、Java言語は実行させるプラッ
トホームを選ばない仮想計算機のプログラム(以下「バ
イトコード」と記す)として配付されるため、携帯型無
線通信機器のプロセッサでは直接実行することができ
ず、エミュレーション等の技術により実行を行ってい
る。
【0004】本発明は、Javaのような仮想計算機の
バイトコードを携帯電話機、PDA等に利用し、メモリ
が少ない携帯型無線通信機器上で高速に動作させること
の可能なJITコンパイラを備えた仮想計算機に関す
る。
【0005】
【従来の技術】以下、従来例について説明する。
【0006】(1) :インタプリタの説明 図12は、仮想計算機のコードであるバイトコードを解
釈、実行するインタプリタの処理フローチャートであ
る。以下、図12に基づいて、インタプリタの処理を説
明する。なお、S1〜S6は各処理ステップを示す。
【0007】従来、仮想計算機のバイトコードを実行す
る手段として、ソフトウェアによりバイトコードを逐次
解釈、実行するインタプリタ方式が知られていた。しか
し、このインタプリタ方式では、バイトコードの命令を
1つずつ実行するため、処理速度が遅い。具体的には次
の通りである。
【0008】先ず、バイトコードの命令フェッチを行い
(S1)、フェッチした命令をデコードする(S2)。
そして、デコードした結果が命令の実行であれば、その
命令を実行し(S3、S4)、S1の処理へ移行する。
また、デコードした結果が分岐であれば分岐処理を行い
(S5)、S1の処理へ移行する。更に、デコードした
結果がメソッド呼び出しであれば(S6)、メソッド呼
び出しを行い(S6)、S1の処理へ移行する。以降、
同様にして、命令毎に処理を行う。
【0009】(2) :従来一般に使用されているJITコ
ンパイラの説明 図13は、インタプリタとJITコンパイラを組み合わ
せた時の処理フローチャートである。以下、図13に基
づき、インタプリタと、従来一般に使用されているJI
Tコンパイラ(携帯電話機では使用されておらず、パー
ソナルコンピュータ等で使用されている)を組み合わせ
た時の処理を説明する。なお、S11〜S20は各処理
ステップを示す。また、S11〜S16はインタプリタ
の処理であり、S17〜S20がJITコンパイラの処
理である。
【0010】前記インタプリタの処理速度が遅いことを
解決する方法として、JIT(Just-IN-Compiler) コン
パイラを使う手法が一般に使用されていた。このJIT
コンパイラはバイトコードをネイティブコードにコンパ
イルする。これにより、アプリケーションは直接そのマ
シンのプロセッサで実行できるようになり、高速な実行
が可能になる。
【0011】一般に、JITコンパイラは、ダウンロー
ドしたクラス、又は実行を開始したメソッドという単位
でコンパイルを行う。すなわち、メソッドのバイトコー
ド全体をコンパイルする。また、コンパイルしたネイテ
ィブコードは、メモリ(プログラム上の格納領域)上に
格納され、再び実行を行う時は再利用され、1度目の実
行時には、コンパイルのオーバヘッドがあるが、2度目
からはこのオーバヘッド無しに高速に実行できる。具体
的には次のようになる。
【0012】先ず、バイトコードの命令フェッチを行い
(S11)、フェッチした命令をデコードする(S1
2)。そして、デコードした結果が実行であれば、その
命令を実行し(S13、S14)、S11の処理へ移行
する。また、デコードした結果が分岐であれば、分岐処
理を行い(S15)、S11の処理へ移行する。更に、
デコードした結果がメソッド呼び出しであれば、メソッ
ド呼び出しを行い(S16)、コンパイル済みか否かを
判断する(S17)。
【0013】その結果、コンパイル済みでなければ、コ
ンパイルすべきか否かを判断し(S18)、コンパイル
すべきでなければ、S11の処理へ移行するが、コンパ
イルすべきであれば、メソッドで呼び出したコードをJ
ITコンパイラによりコンパイルしてネイティブコード
を生成し、ネイティブコードの格納領域に格納し(S1
9)、ネイティブコードを実行する(S20)。ネイテ
ィブコードの実行中、メソッド呼び出しがあれば、S1
6の処理へ移行し、メソッドの処理が終了すれば、S1
1へ移行する。また、S17の処理において、コンパイ
ル済みであれば、S20の処理へ移行する。以降、同様
にして処理を行う。
【0014】なお、前記バイトコード(bytecode)と
は、Javaで開発したソフトのバイナリ表現形式とし
て米サン・マイクロシステムズが定めたJava仮想マ
シン(仮想計算機)のマシン・コードのことを言う。ま
た、バイトコードをマシンが直接実行できるネイティブ
コードへ変換するソフトを「JIT(Just-in-time)コ
ンパイラ」と呼ぶ。
【0015】また、「メソッド」(Method)とは、オブ
ジェクト指向プログラミングにおいて、オブジェクトの
実行する操作の方法を記述したプログラム(サブルーチ
ンと同じ意味)のことを言う。
【0016】
【発明が解決しようとする課題】前記のような従来のも
のにおいては、次のような課題があった。
【0017】すなわち、携帯電話機やPDA等の携帯型
無線通信機器では使用できるメモリ容量が限られてお
り、コンパイルしたコードを全てメモリ上に格納するこ
とはできない。また、前記携帯型無線通信機器でのソフ
トウェアの実行は、ゲームなどの対話型のアプリケーシ
ョンが多く、応答性を高めるためには、コンパイルにあ
まり時間をかけることはできない。
【0018】特に、前記携帯型無線通信機器に搭載され
たプロセッサでは処理能力が比較的低いため、大きなプ
ログラムをコンパイルすると、実行中のプログラムが一
瞬止まって見えることもある。また、一度しか実行され
ないようなバイトコードの場合、コンパイルする時間の
オーバーヘッドのため、インタプリタで実行するよりも
遅くなる。
【0019】本発明は、このような従来の課題を解決
し、限られたメモリ容量で処理の高速化を図り、応答性
能の向上を図ることを目的とする。
【0020】
【課題を解決するための手段】本発明は前記の目的を達
成するため、次のように構成した。
【0021】(1) :仮想計算機のバイトコードをソフト
ウェアで解釈・実行する機能を有し、メモリ上に、容量
の制限されたネイティブコードの格納領域としてコード
キャッシュを持ち、前記バイトコードを実行する際に、
JITコンパイラによりバイトコードを仮想計算機が直
接実行できるネイティブコードにコンパイルして前記コ
ードキャッシュに格納した後、そのネイティブコードを
実行するJITコンパイラを備えた仮想計算機におい
て、前記バイトコードのアドレスから、コンパイルされ
ているか否かを判断するための情報と、コンパイルされ
たネイティブコードのアドレスを検索する検索テーブル
を備えていることを特徴とする。
【0022】(2) :前記(1) の仮想計算機において、前
記検索テーブル上、又は前記コードキャッシュ上に、命
令の実行回数を計数するための実行カウンタを設け、バ
イトコードを実行する際に、前記実行カウンタの値を調
べ、予め決めた特定回数より小さい場合はインタプリタ
で実行し、前記特定回数以上の場合は、JITコンパイ
ラによりバイトコードをコンパイルしてから実行する選
択処理手段を備えていることを特徴とする。
【0023】(3) :前記(1) の仮想計算機において、前
記検索テーブルに、1度目の実行時にバイトコードのア
ドレスだけ登録し、ネイティブコードのアドレスの登録
は特別な値、又は数字の0を登録にしておく検索テーブ
ル情報登録手段と、1度目はインタプリタで実行し、2
度目はJITコンパイルによりコンパイルして実行する
実行制御手段を備えていることを特徴とする。
【0024】(4) :前記(1) の仮想計算機において、コ
ンパイル時間を短縮するために、コンパイルする範囲を
制限し、処理の途中であっても、バイトコードの特定の
命令を検出したら、そこまでをコンパイルして処理を中
断する命令を生成し、残りはコンパイルしないように処
理を制限する処理制限手段を備えていることを特徴とす
る。
【0025】(5) :前記(1) の仮想計算機において、前
記コードキャッシュに空きがなくなった時、コードキャ
ッシュの先頭から順にネイティブコードを破棄する第1
の破棄手段と、FILO方式で最も昔にコンパイルした
コードから順に破棄する第2の破棄手段を備えているこ
とを特徴とする。
【0026】(作用) (a) :前記(1) では、バイトコードのアドレスから、コ
ンパイルされているか否かを判断するための情報と、コ
ンパイルされたネイティブコードのアドレスを検索する
検索テーブルを備えている。
【0027】従って、前記検索テーブルを検索すること
でコンパイルされているか否かを判断したり、コンパイ
ルされている場合に、該当するネイティブコードの格納
アドレスを検索することが容易になる。その結果、バイ
トコードをネイティブコードにコンパイルすることで、
アプリケーションプログラムの実行時間を速くすること
が可能になる。また、従来のJITコンパイラがネイテ
ィブコードを生成し格納するために使用するメモリが制
限され、少ないメモリでも処理が高速化できる。
【0028】(b) :前記(2) では、選択処理手段が、バ
イトコードを実行する際に、実行カウンタの値を調べ、
予め決めた特定回数より小さい場合はインタプリタで実
行し、前記特定回数以上の場合は、JITコンパイラに
よりバイトコードをコンパイルしてから実行する。
【0029】この場合、コンパイル処理は時間を要する
ため、一度しか実行はないようなバイトコードはコンパ
イルして実行するよりもインタプリタで実行する方が速
い。そこで、前記のように処理を行うことで、アプリケ
ーションプログラムの全体の実行速度を速くすることが
できる。
【0030】(c) :前記(3) では、検索テーブル情報登
録手段は、検索テーブルに、1度目の実行時にバイトコ
ードのアドレスだけ登録し、ネイティブコードのアドレ
スの登録は特別な値、又は数字の0を登録しておく。ま
た、実行制御手段は、1度目はインタプリタで実行し、
2度目はJITコンパイルによりコンパイルして実行す
るように制御する。
【0031】この場合、コンパイル処理は時間を要する
ため、一度しか実行はないようなバイトコードはコンパ
イルして実行するよりもインタプリタで実行する方が速
い。そこで、前記のように処理を行うことで、アプリケ
ーションプログラムの全体の実行速度を速くすることが
できる。また、前記(2) と比較して、実行カウンタのた
めの領域が必要なく、メモリを節約できる。
【0032】(d) :前記(4) では、処理制限手段は、コ
ンパイル時間を短縮するために、コンパイルする範囲を
制限し、処理の途中であっても、バイトコードの特定の
命令を検出したら、そこまでをコンパイルして処理を中
断する命令を生成し、残りはコンパイルしないように処
理を制限する。
【0033】この場合、従来は、メソッド全体をコンパ
イルしていたので、全く実行しない部分もコンパイルし
ていた。これに対して本発明の前記(4) では、必ず実行
する部分だけをコンパイルするので、コンパイルに消費
する時間の無駄がなく高速である。
【0034】また、従来は、メソッド全体をコンパイル
していたので、全く実行しない部分のネイティブコード
も生成していた。しかし、本発明の前記(4) では、必ず
実行する部分だけをコンパイルするので、生成するネイ
ティブコードに無駄がなく、メモリの消費が抑えられ
る。また、アプリケーションプログラムの応答性を向上
させることができる。すなわち、コンパイルしている最
中はアプリケーションプログラムの実行は停止するの
で、この停止している時間が短縮する。
【0035】(e) :前記(5) では、第1の破棄手段は、
コードキャッシュに空きがなくなった時、コードキャッ
シュの先頭から順にネイティブコードを破棄する。そし
て、第2の破棄手段は、FILO方式で最も昔にコンパ
イルしたコードから順に破棄する。
【0036】このようにすれば、ネイティブコードの破
棄の方式が簡単なため、実現し易く、ネイティブコード
の断片化が起きない。
【0037】
【発明の実施の形態】以下、本発明の実施の形態を図面
に基づいて詳細に説明する。なお、以下に説明する仮想
計算機は、プログラム上だけで実現される仮想的な計算
機であり、前記携帯型無線通信機器内のメモリに格納さ
れたプログラムを、内部のプロセッサ(CPU、又はM
PU)が実行することで実現される仮想マシンである。
【0038】従って、以下に説明するフローチャートで
表現された処理は、全て前記プログラム上で実行される
ものである。そのため、仮想計算機上のメモリ、コード
キャッシュ、検索テーブル等は、全て前記プログラム上
で実現されるものである。
【0039】(1) :例1の詳細な説明 :例1の内容 例1は、仮想計算機のバイトコードをソフトウェアで解
釈・実行する機能を有し、メモリ上に、容量の制限され
たネイティブコードの格納領域としてコードキャッシュ
を持ち、バイトコードを実行する際に、JITコンパイ
ラによりバイトコードを仮想計算機が直接実行できるネ
イティブコードにコンパイルしてコードキャッシュに格
納した後、そのネイティブコードを実行するJITコン
パイラ(以下、単に「コンパイラ」とも記す)を備えた
仮想計算機に関するものであり、バイトコードのアドレ
スから、コンパイルされているか否かを判断するための
情報(後述する)と、コンパイルされたネイティブコー
ドのアドレスを検索する検索テーブルを備えている。
【0040】そして、コンパイルを行う時にネイティブ
コードの格納領域に空きがなければ、既に格納済みのコ
ンパイルコードを破棄して前記格納領域に空き領域を作
り、検索テーブルを更新するものである。
【0041】:フローチャートによる処理(その1)
の説明 図1は例1の処理フローチャート(その1)である。以
下、図1に基づいて、例1の処理(その1)を説明す
る。なお、S31〜S40は各処理ステップを示す。こ
の処理では、全てのバイトコードを対象としてコンパイ
ルされているかどうかをチェックする例であり、仮想計
算機上の処理である。
【0042】先ず、全てのバイトコードに対して、検索
テーブル上のタグ(tag)情報を利用して(詳細は後
述する)コンパイル済みか否かを判断し(S31)、コ
ンパイル済みでなければ、コンパイルすべきか否かを判
断し(S32)、コンパイルすべきでないと判断した場
合には、バイトコード命令のフェッチを行い(S3
3)、フェッチされた命令のデコードを行う(S3
4)。
【0043】その結果、実行であれば(S35、S3
6)その命令を実行し、S31の処理へ移行する。ま
た、分岐であれば(S37)分岐処理を行い、S31の
処理へ移行する。更に、メソッド呼び出しであれば(S
38)、メソッド呼び出しを行い、S31の処理へ移行
する。
【0044】また、前記S32の処理で、コンパイルす
べきであると判断した場合には、部分的にコンパイル
し、ネイティブコードを生成してネイティブコード格納
領域へ格納し(S39)、ネイティブコードを実行し
(S40)、S31の処理へ移行する。また、S31の
処理で、コンパイル済みであれば、S40の処理へ移行
する。前記処理において、S31〜S38はインタプリ
タの処理であり、S39、S40がJITコンパイラに
よる処理である。
【0045】:フローチャートによる処理(その2)
の説明 図2は例1の処理フローチャート(その2)である。以
下、図2に基づいて、例1の処理(その2)を説明す
る。なお、S41〜S50は各処理ステップを示す。
【0046】この処理では、分岐、メソッド呼び出しな
どの実行制御が途切れる地点で、コンパイルのチェック
を行う。一般のJITコンパイラとの違いとしては、コ
ンパイルをメソッド単位で行わず、以下に説明する例
5、例6、例7、例8等の条件で、コンパイルを中断す
ることが特徴である。
【0047】先ず、バイトコード命令のフェッチを行い
(S41)、命令デコードを行う(S42)。その結
果、実行であれば(S43、S44)、その命令を実行
し、S41の処理へ移行する。また、分岐であれば(S
45)、分岐処理を行い(S45)、メソッド呼び出し
であれば(S46)メソッド呼び出しを行う。
【0048】そして、分岐又はメソッド呼び出しを行っ
た場合、コンパイル済みか否かを判断し(S47)、コ
ンパイル済みでなければ、コンパイルすべきか否かを判
断する(S48)。その結果、コンパイルすべきでない
と判断した場合には、S41の処理へ移行する。
【0049】また、コンパイルすべきであると判断した
場合は、途中までコンパイルを行い、ネイティブコード
を生成しネイティブコード格納領域へ格納する(S4
9)。そして、ネイティブコードを実行し(S50)、
S47の処理、又はS46の処理へ移行する。
【0050】:検索テーブルの説明 図3は例1の検索テーブル例である。前記のようにコン
パイル済みか否かを調べて判断するために、検索テーブ
ルを使用するが、その検索テーブルの1例を図3に示
す。図3において、1はコンパレータ、2は検索テーブ
ル、3はコードキャッシュである。
【0051】この検索テーブル2は、タグ(tag)
と、ネイティブコードのアドレス(コードキャッシュ3
内のネイティブコード領域のアドレス)との対応情報が
登録できるようになっており、ネイティブコードのアド
レスからコードキャッシュ3のネイティブコード領域の
データが検索できるようになっている。
【0052】また、検索テーブル2は、バイトコードア
ドレス(上位Mビット+下位Nビットとする)の下位N
ビットを利用してタグ(tag)を検索することで、ネ
イティブコードのアドレスが検索できるようになってい
る。そして、バイトコードアドレスの上位Mビットをコ
ンパレータ1に入力すると共に、検索テーブルのタグ
(tag)情報をコンパレータ1に入力し、両者が一致
するか否かの比較を自動的に行うようになっている。
【0053】前記比較の結果、両者が一致(hit)し
た場合、コンパレータ1から一致出力が出され、この一
致出力信号によりコンパイル済みと判断できるようにな
っている。
【0054】:例1の特徴 前記図3の検索テーブルを検索することでコンパイルさ
れているか否かを判断したり、コンパイルされている場
合に、該当するネイティブコードの格納アドレス(コー
ドキャッシュ3内のネイティブコード領域のアドレス)
を検索することが容易になる。
【0055】その結果、バイトコードをネイティブコー
ドにコンパイルすることで、アプリケーションプログラ
ムの実行時間を速くすることが可能になる。また、従来
のJITコンパイラがネイティブコードを生成し、格納
するために使用するメモリが制限され、少ないメモリ容
量でも処理が高速化できる。
【0056】(2) :例2の詳細な説明 :例2の内容 例2は、例1において、検索テーブル2上、又はコード
キャッシュ3上に命令の実行回数を計数する実行カウン
タを設け、仮想計算機のコードであるバイトコードを実
行する際に、実行カウンタの値が、予め決めた特定回数
より小さければインタプリタで実行し、前記特定回数よ
り大きく、頻繁に実行されるバイトコードはJITコン
パイラによりコンパイルして実行する例である。
【0057】:検索テーブルの説明 図4は例2の検索テーブル例である。図4に示したよう
に、検索テーブル2は、タグ(tag)と、実行カウン
タと、ネイティブコードのアドレスを対応させた情報が
格納されており、ネイティブコードのアドレスから、コ
ードキャッシュ3のネイティブコード領域のアドレスが
検索できるようになっている。
【0058】また、検索テーブル2は、バイトコードア
ドレス(上位Mビット+下位Nビットとする)の下位N
ビットを利用してタグ(tag)を検索することで、ネ
イティブコードアドレスが検索できるようになってい
る。そして、バイトコードアドレスの上位Mビットをコ
ンパレータ1に入力すると共に、検索テーブルのタグ
(tag)情報をコンパレータ1に入力し、両者が一致
する(hit)か否かの比較を行う。
【0059】前記比較の結果、両者が一致(hit)し
た場合、コンパレータ1から一致出力が出され、この一
致出力信号によりコンパイル済みと判断する。このよう
な検索テーブルを利用し、バイトコードを実行する際に
実行カウンタの値が特定回数より小さければインタプリ
タ(従来の処理)で実行し、特定回数より大きく頻繁に
実行されるバイトコードはコンパイルして実行する。な
お、前記実行カウンタは、コードキャッシュ3に設けて
も良い。
【0060】:フローチャートによる処理の説明 図5は、例2のコンパイル選択処理フローチャートであ
る。以下、図5に基づいて、例2のコンパイルの選択処
理を説明する。なお、S61〜S75は各処理ステップ
を示す。
【0061】この処理は、インタプリタの処理(S61
〜S67)と、JITコンパイラによるコンパイラの処
理(S71〜S75)とに分かれている。インタプリタ
の処理では、コンパイル済みか否かを判断し(S6
1)、コンパイル済みでなければ、テーブル登録済み
(図4の検索テーブル2のtagに登録されているか否
か)を判断する(S62)。その結果、テーブル登録済
みでなければ、タグ(tag)にアドレス登録を行い
(S63)、実行カウンタをクリアする(S64)。次
に、命令フェッチを行い(S65)、デコードを行って
(S66)、実行する(S67)。そして、S61の処
理に移行する。
【0062】S62の処理でテーブル登録済みであると
判断した場合には、検索テーブル2の実行カウンタをU
P(+1)し(S71)、予め決めた特定回数より大き
いか否かを判断する(S72)。その結果、特定回数よ
り小さければ、S65に移行しインタプリタで実行し、
特定回数以上の場合は、S73に移行してJITコンパ
イラによりバイトコードをコンパイルしてネイティブコ
ードを生成し、コードキャッシュ3に登録する。また、
この時、検索テーブル2にも必要な情報(ネイティブコ
ードのアドレス)を登録する(S74)。
【0063】次に、前記ネイティブコードを実行し(S
75)、S61へ移行する。また、S61の処理でコン
パイル済みであると判断した場合には、S75へ移行す
る。
【0064】:例2の特徴 コンパイル処理は時間を要するため、あまり実行されな
いバイトコードはコンパイルして実行するよりも、イン
タプリタで実行する方が、全体の処理速度が上がる。
【0065】(3) :例3の詳細な説明 :例3の内容 例3は、例2のような実行カウンタを使用しないでコン
パイルの選択を行う例であり、例1の処理において、検
索テーブルに1度目の実行時にはバイトコードアドレス
だけを登録(検索テーブル2のtagに登録)し、ネイ
ティブコードのアドレスの登録は特別なコンパイルの処
理を行う関数(コンパイル又は処理の先頭アドレス)、
又は数字の0にしておき、1度目はインタプリタで実行
し、2度目はコンパイルして実行する例である。
【0066】:フローチャートによる処理の説明 図6は、例3のコンパイル選択処理フローチャートであ
る。以下、図6に基づいて、例3のコンパイルの選択処
理を説明する。なお、S81〜S94は各処理ステップ
を示す。
【0067】この処理は、インタプリタの処理(S81
〜S86)と、コンパイラの処理(S91〜S94)と
に分かれている。インタプリタの処理では、先ず、Aか
ら始まりテーブル登録済み(検索テーブル2に登録され
ている)か否かを判断し(S81)、登録済みでなけれ
ば(1度目)、インタプリタによる処理を行う。この場
合、検索テーブル2のタグ(tag)にバイトコードア
ドレス(バイトコードのアドレスのみ)を登録する(S
82)。
【0068】次に、ネイティブコードアドレスに、エン
トリBを登録して(S83)、命令フェッチを行い(S
84)、デコードを行う(S85)。そして、デコード
した命令を実行し(S86)、S81の処理へ移行す
る。
【0069】また、S81の処理で、テーブル登録済み
であると判断した場合(2度目)は、JITコンパイラ
による処理を行う。この場合、ネイティブコードアドレ
スへジャンプし(S91)、エントリBからJITコン
パイラによるコンパイルを行い(S92)、ネイティブ
コードアドレス登録を行う(S93)。そして、ネイテ
ィブコードを実行し(S94)、S81の処理へ移行す
る。
【0070】また、前記S91の処理結果により、S9
4に移行してネイティブコードを実行し(S94)、S
81の処理へ移行する。
【0071】:例3の特徴 コンパイル処理は時間を要するため、一度しか実行はな
いようなバイトコードはコンパイルして実行するよりも
インタプリタで実行する方が速い。そこで、前記のよう
に処理を行うことで、アプリケーションプログラムの全
体の実行速度を速くすることができる。また、前記例2
と比較して、実行カウンタのための領域が必要なく、メ
モリを節約できる。
【0072】(4) :例4の詳細な説明 :例4の内容 例4は、例1において、検索テーブルはコンパイルされ
ているかどうかだけの情報(タグの情報)を持ち、ネイ
ティブコードのアドレスはバイトコードのアドレスから
計算する例である。
【0073】:検索テーブルとコードキャッシュの構
成例 図7は例4の検索テーブルとコードキャッシュの構成例
である。この検索テーブル2には、タグ(tag)のみ
格納されている。この場合、バイトコードアドレスの下
位Nビットを利用して検索テーブル2をアクセスすると
共に、前記Nビットの下位アドレスを演算器4により整
数倍、例えば、8倍(×8)した値によりコードキャッ
シュ3のネイティブコード領域のアドレスへアクセスで
きるようになっている。
【0074】また、検索テーブル2は、バイトコードア
ドレス(上位Mビット+下位Nビットとする)の下位N
ビットを利用してタグ(tag)を検索できるようにな
っている。そして、バイトコードアドレスの上位Mビッ
トをコンパレータ1に入力すると共に、検索テーブルの
タグ(tag)情報をコンパレータ1に入力し、両者が
一致するか否かの比較を行う。前記比較の結果、両者が
一致した場合、コンパレータ1から一致出力が出される
が、この一致出力信号によりコンパイル済みと判断す
る。
【0075】:例4の特徴 バイトコードのアドレスに対し、コンパイルされるネイ
ティブコードのメモリ上の位置が一意に決まるため、テ
ーブルからネイティブコードのアドレスを索引する必要
がなくなる。また、置換の際には、破棄すべきネイティ
ブコードを探す必要がなく単純に処理できる。
【0076】(5) :例5の詳細な説明 :例5の内容 例5は、例1において、コンパイル時間を短縮(応答性
を向上)するために、コンパイルする範囲を制限する。
処理の途中であっても、バイトコードの特定の命令(分
岐命令、メソッド呼び出しなど)を検出したら、そこま
でをコンパイルし、処理を中断する命令(ネイティブコ
ードの分岐命令や割り込み命令)を生成し(ネイティブ
コードの最終コードの後に、分岐命令や割り込み命令を
生成し)、残りはコンパイルしない例である。
【0077】すなわち、仮想計算機において、コンパイ
ル時間を短縮するために、コンパイルする範囲を制限
し、処理の途中であっても、バイトコードの特定の命令
を検出したら、そこまでをコンパイルして処理を中断す
る命令を生成し、残りはコンパイルしないように処理を
制限する処理制限手段を備えている。
【0078】:例5の特徴 必ず実行する部分だけがコンパイルされ効率が良い。例
えば、“IF条件THEN処理”のようなバイトコード
の列をコンパイルするとき、「条件」を処理する部分だ
けコンパイルを行い、「処理」の部分はコンパイルしな
い。
【0079】この場合、従来は、メソッド全体をコンパ
イルしていたので、全く実行しない部分もコンパイルし
ていた。これに対して例5では、必ず実行する部分だけ
をコンパイルするので、コンパイルに消費する時間の無
駄がなく高速である。
【0080】また、従来は、メソッド全体をコンパイル
していたので、全く実行しない部分のネイティブコード
も生成していた。しかし、例5では、必ず実行する部分
だけをコンパイルするので、生成するネイティブコード
に無駄がなく、メモリの消費が抑えられる。また、アプ
リケーションプログラムの応答性を向上させることがで
きる。すなわち、コンパイルしている最中はアプリケー
ションプログラムの実行は停止するので、この停止して
いる時間が短縮する。
【0081】(6) :例6の詳細な説明 :例6の内容 例6は、コンパイル時間の短縮を行う例であり、例5に
おいて、特定な命令の検出のほかに、バイトコードの量
でコンパイルを中断する。例えば、100命令コンパイ
ルしたところでコンパイルを中断する例である。なお、
例6は、例4と同様に、例1の処理におけるコンパイル
を中断させる条件を提供するものである。
【0082】:例6の特徴 例5と同じように、必ず実行する部分だけをコンパイル
するので、生成するネイティブコードに無駄がなく、メ
モリの消費が抑えられる。また、アプリケーションプロ
グラムの応答性を向上させることができる。すなわち、
コンパイルしている最中はアプリケーションプログラム
の実行は停止するので、この停止している時間が短縮す
る。
【0083】(7) :例7の詳細な説明 :例7の内容 例7はコンパイル時間の短縮を行う例であり、例5にお
いて、特定な命令の検出のほかに、生成したネイティブ
コードの量でコンパイルを中断する。例えば、コンパイ
ルが128ワード分だけネイティブコードを生成した
ら、コンパイルを中断する。なお、例7は、例4と同様
に、例1の処理におけるコンパイルを中断させる条件を
提供するものである。
【0084】:例7の特徴 例5と同じように、必ず実行する部分だけをコンパイル
するので、生成するネイティブコードに無駄がなく、メ
モリの消費が抑えられる。また、アプリケーションプロ
グラムの応答性を向上させることができる。すなわち、
コンパイルしている最中はアプリケーションプログラム
の実行は停止するので、この停止している時間が短縮す
る。
【0085】(8) :例8の詳細な説明 :例8の内容 例8はコンパイル時間の短縮を行う例であり、特定な命
令の検出のほかに、時間によってコンパイルを中断す
る。例えば、コンパイラがコンパイルの処理に100ミ
リセカンド消費したら、コンパイルを中断する。なお、
例8は、例4と同様に、例1の処理におけるコンパイル
を中断させる条件を提供するものである。
【0086】:例8の特徴 例5と同じように、必ず実行する部分だけをコンパイル
するので、生成するネイティブコードに無駄がなく、メ
モリの消費が抑えられる。また、アプリケーションプロ
グラムの応答性を向上させることができる。すなわち、
コンパイルしている最中はアプリケーションプログラム
の実行は停止するので、この停止している時間が短縮す
る。
【0087】(9) :例9の詳細な説明 :例9の内容 例9は、コードキャッシュの置換を行う例であり、例1
において、コードキャッシュに空きがなくなったとき、
コードキャッシュの先頭から順にネイティブコードを破
棄する。この処理では、FILO(First In Last Out
)方式で最も昔にコンパイルしたコードから順に破棄
する。
【0088】:コードキャッシュの置換の説明 図8は例9のコードキャッシュの置換処理説明図であ
る。この例では、初期値として、P1:命令生成ポイン
タはコードキャッシュの先頭、P2:解放ポインタはコ
ードキャッシュの末尾を指しておく。実行が進む(コン
パイルが何度も行われる)につれて、コードキャッシュ
3は小さなブロックに分けられ、ブロックの先頭にタグ
(tag)ポインタ(検索テーブルへのポインタ)と、
ネクスト(next)ポインタ(次のブロックを指すポ
インタ)が格納される。
【0089】ブロックの残り部分はネイティブコードを
格納する命令領域である。ネクスト(next)ポイン
タはポインタである必要はなく、ブロックの切れ目が判
れば良い。
【0090】:フローチャートによる処理の説明 図9は、例9のコードキャッシュ置換処理フローチャー
トである。以下、図9に基づいて、例9の処理を説明す
る。なお、S101〜S111は各処理ステップを示
す。
【0091】この処理は、コンパイルの処理の最中にコ
ードキャッシュ3の置換処理を行う例である。先ず、生
成する領域のタグ(tag)ポインタに検索テーブル2
へのタグ(tag)ポインタを設定する(S101)。
設定する領域は図8のP1(命令生成ポインタ)によっ
て指示される。S102、S103、S104、S10
5がコンパイル処理のメインループであり、バイトコー
ドからネイティブコードを生成する処理である。
【0092】次に、JITコンパイルのコンパイル処理
により、バイトコードからネイティブコードへの変換を
行う(S102)。変換後のネイティブコードをコード
キャッシュ3に格納する前に、命令生成ポインタと解放
ポインタの値を比較(命令生成ポインタ<解放ポインタ
の条件を満たしているか否かを比較)する(S103)
ことで、有効なコードを上書きしてしまわないかチェッ
クする。
【0093】その結果、命令生成ポインタが解放ポイン
タより小さければ、全て解放済みの領域なので、コード
キャッシュ3にネイティブコードを生成して書き込む
(S104)。この時、命令生成ポインタを進める。次
に、コンパイル終了条件を満たしたか否かを判断する
(S105)。
【0094】その結果、コンパイル終了条件を満たさな
ければ、S102の処理へ移行し、コンパイル処理を継
続する。また、コンパイル終了条件を満たしたら、生成
したネイティブコードを1つのブロックとして構成す
る。この場合、生成した領域のネクストポインタに、命
令生成ポインタの値を設定する(S106)。
【0095】また、S103の処理で、前記条件を満た
していない場合、すなわち、命令生成ポインタが解放ポ
インタと等しいか、又は大きい場合、有効なブロックを
解放する必要がある。そこで、解放ポインタがコードキ
ャッシュの最後を指している(解放ポインタ<コードキ
ャッシュの末尾の条件を満たしている)か否かをチェッ
クする(S107)。
【0096】その結果、解放ポインタがコードキャッシ
ュの最後を指している場合は、解放ポインタをコードキ
ャッシュ3の先頭に設定し(S108)、命令生成ポイ
ンタをコードキャッシュ3の先頭のブロックの命令領域
に設定する(S109)。この処理により、コードキャ
ッシュ3の先頭に戻ってブロックの解放を行う。
【0097】次に、解放ポインタが示すタグ(tag)
ポインタから検索テーブル2のタグ(tag)をクリア
する(S110)。そして、前記S110の処理によ
り、検索テーブルのタグ(tag)が無効化され、解放
ポインタが示すブロックが実際に解放される。次に、解
放ポインタを次のポインタ(nextポインタ)に設定
して(S111)、S104の処理へ移行する。この処
理で、解放ポインタが次のブロックを指すようになる。
【0098】:特徴 コードキャッシュから検索テーブルへのポインタを持つ
ことによって、キャッシュブロックのサイズを可変長に
でき、メモリを有効に活用することが可能になる。この
ポインタがない場合でも、検索テーブル全体を調べてキ
ャッシュを無効化することができるが、検索テーブル全
体を調べるのは処理量が多く、コンパイルに時間を浪費
するが、例9の処理により、キャッシュの無効化を高速
に行うことができる。
【0099】(10):例10の詳細な説明 :例10の内容 図10は例10のコードキャッシュの置換処理説明図で
ある。例10は、コードキャッシュの置換を行う例であ
り、コードキャッシュ3に空きがなくなったとき、検索
テーブル2の実行カウンタを値の小さいものをスキャン
し、実行カウンタの値の小さなものから順に破棄する。
実行カウンタはコンパイル直後は適当な大きな値を設定
しておき、実行する度に実行したコードに対応するカウ
ンタを増加するようにし、置換が必要となったときに、
全体のカウンタを減少するようにする。
【0100】:フローチャートによる処理の説明 図11は例10の処理フローチャートである。以下、図
11に基づいて例10の処理を説明する。なお、S12
1〜S136は各処理ステップを示す。また、S121
〜S131の処理は、図5に示した例2のS61〜S7
5の処理と同じである。
【0101】インタプリタの処理では、コンパイル済み
か否かを判断し(S121)、コンパイル済みでなけれ
ば、テーブル登録済み(図4の検索テーブル2のtag
に登録されているか否か)を判断する(S122)。そ
の結果、テーブル登録済みでなければ、タグ(tag)
にアドレス登録を行い(S123)、実行カウンタをク
リアする(S124)。
【0102】次に、命令フェッチを行い(S125)、
デコードを行って(S126)、前記処理と同様にして
命令を実行する(S127)。そして、S121の処理
に移行する。
【0103】また、前記S122の処理でテーブル登録
済みであると判断した場合には、検索テーブル2の実行
カウンタをUP(+1)し(S129)、予め決めた特
定回数より大きいか否かを判断する(S130)。その
結果、特定回数より小さければ、S125に移行しイン
タプリタで実行し、特定回数以上の場合は、JITコン
パイラによりバイトコードをコンパイルしてネイティブ
コードを生成し(S131)、生成したネイティブコー
ドをコードキャッシュ3に登録する(S132)。
【0104】また、この時、検索テーブル2の実行カウ
ンタを設定する。次に、前記S132の処理で登録した
ネイティブコードを実行し(S133)、S121の処
理へ移行する。また、S121の処理で、コンパイル済
みであると判断した場合は、検索テーブル2の実行カウ
ンタをUP(+1)して(S128)、S133の処理
へ移行する。
【0105】一方、前記S131の処理において、ネイ
ティブコードを生成した場合、コードキャッシュ3に空
きがあるか否かを判断し(S134)、空きがあれば、
S131の処理へ戻る。しかし、コードキャッシュ3に
空きがなければ、実行カウンタ全体をスキャンし、個々
の実行カウンタを減少させる(S135)。そして、実
行回数が少ないエントリを破棄して、コードキャッシュ
3に空きを作成し(S136)、S131の処理に戻
る。
【0106】:例10の特徴 頻繁に実行されるネイティブコードが破棄されにくくな
る。しかし、空き領域が断片化し、ネイティブコード上
で断片化した箇所への無駄な分岐命令が必要となる。
【0107】(11):例11の詳細な説明 :例11の内容 例11は、コードキャッシュ3のコンパクションの例で
あり、例10において、コードキャッシュ3の空き領域
の断片化が起きる。この時に、ネイティブコードのかた
まりを移動(リロケーション)することで、コンパイラ
が一度に生成するコードを一塊にまとめる。
【0108】:例11の特徴 断片化により分断された命令の間に無駄な分岐命令を挿
入する必要がなくなる。実行する命令列がコードキャッ
シュ上に分断されることがなくなり、一塊となるため、
命令キャッシュが効率的に使われ、性能が向上する。
【0109】(12):例12の詳細な説明 :例12の内容 例12は、検索テーブルのヒット率の向上を図る例であ
り、例5において、コンパイルした全てのバイトコード
の命令を検索テーブルに登録せず、コンパイルした命令
シーケンスの先頭だけ検索テーブルに登録する。
【0110】:例12の特徴 検索テーブルのエントリ数にも制限があり、コンパイル
した全てのバイトコード命令のアドレスを登録すると、
検索テーブル2を上書きする機会が増えるため、コンパ
イル済みにもかかわらず、検索ミスする率が大きくな
り、無駄なコンパイルを行う。これを防ぐため、コンパ
イルした命令シーケンスの先頭だけを登録する。
【0111】前記の説明に対し、次の構成を付記する。
【0112】(付記1)仮想計算機のバイトコードをソ
フトウェアで解釈・実行する機能を有し、メモリ上に、
容量の制限されたネイティブコードの格納領域としてコ
ードキャッシュを持ち、前記バイトコードを実行する際
に、JITコンパイラによりバイトコードを仮想計算機
が直接実行できるネイティブコードにコンパイルして前
記コードキャッシュに格納した後、そのネイティブコー
ドを実行するJITコンパイラを備えた仮想計算機にお
いて、前記バイトコードのアドレスから、コンパイルさ
れているか否かを判断するための情報と、コンパイルさ
れたネイティブコードのアドレスを検索する検索テーブ
ルを備えていることを特徴とするJITコンパイラを備
えた仮想計算機。
【0113】(付記2)前記検索テーブル上、又は前記
コードキャッシュ上に、命令の実行回数を計数するため
の実行カウンタを設け、前記バイトコードを実行する際
に、実行カウンタの値を調べ、予め決めた特定回数より
小さい場合はインタプリタで実行し、前記特定回数以上
の場合は、JITコンパイラによりバイトコードをコン
パイルしてから実行する選択処理手段を備えていること
を特徴とする(付記1)記載のJITコンパイラを備え
た仮想計算機。
【0114】(付記3)前記検索テーブルに、1度目の
実行時にバイトコードのアドレスだけ登録し、ネイティ
ブコードのアドレスの登録は特別な値、又は数字の0に
しておく検索テーブル情報登録手段と、1度目はインタ
プリタで実行し、2度目はJITコンパイルによりコン
パイルして実行する実行制御手段を備えていることを特
徴とする(付記1)記載のJITコンパイラを備えた仮
想計算機。
【0115】(付記4)前記検索テーブルは、コンパイ
ルされているかどうかを判断するだけの情報を持ち、ネ
イティブコードのアドレスは、バイトコードのアドレス
から計算して求める演算手段を備えていることを特徴と
する(付記1)記載の仮想計算機。
【0116】(付記5)コンパイル時間を短縮するため
に、コンパイルする範囲を制限し、処理の途中であって
も、バイトコードの特定の命令を検出したら、そこまで
をコンパイルし、処理を中断する命令を生成し、残りは
コンパイルしないように処理を制限する処理制限手段を
備えていることを特徴とする(付記1)記載のJITコ
ンパイラを備えた仮想計算機。
【0117】(付記6)処理制限手段は、特定な命令の
検出の他に、バイトコードの量でコンパイルを中断する
ことを特徴とする(付記5)記載の仮想計算機。
【0118】(付記7)処理制限手段は、特定な命令の
検出の他に、生成したネイティブコードの量でコンパイ
ルを中断することを特徴とする(付記5)記載の仮想計
算機。
【0119】(付記8)処理制限手段は、特定な命令の
検出の他に、時間によってコンパイルを中断することを
特徴とする(付記5)記載の仮想計算機。
【0120】(付記9)前記コードキャッシュに空きが
なくなった時、コードキャッシュの先頭から順にネイテ
ィブコードを破棄する第1の破棄手段と、FILO方式
で最も昔にコンパイルしたコードから順に破棄する第2
の破棄手段を備えていることを特徴とする(付記1)記
載のJITコンパイラを備えた仮想計算機。
【0121】
【発明の効果】以上説明したように、本発明によれば次
のような効果がある。
【0122】(1) :請求項1では、バイトコードのアド
レスから、コンパイルされているか否かを判断するため
の情報と、コンパイルされたネイティブコードのアドレ
スを検索する検索テーブルを備えている。
【0123】従って、前記検索テーブルを検索すること
でコンパイルされているか否かを判断したり、コンパイ
ルされている場合に、該当するネイティブコードの格納
アドレスを検索することが容易になる。その結果、バイ
トコードをネイティブコードにコンパイルすることで、
アプリケーションプログラムの実行時間を速くすること
が可能になる。また、従来のJITコンパイラがネイテ
ィブコードを生成し、格納するために使用するメモリが
制限され、少ないメモリでも処理が高速化できる。
【0124】(2) :請求項2では、選択処理手段がバイ
トコードを実行する際に、実行カウンタの値を調べ、予
め決めた特定回数より小さい場合はインタプリタで実行
し、前記特定回数以上の場合は、JITコンパイラによ
りバイトコードをコンパイルしてから実行する。
【0125】この場合、コンパイル処理は時間を要する
ため、一度しか実行はないようなバイトコードはコンパ
イルして実行するよりもインタプリタで実行する方が速
い。そこで、前記のように処理を行うことで、アプリケ
ーションプログラムの全体の実行速度を速くすることが
できる。
【0126】(3) :請求項3では、検索テーブル情報登
録手段は、検索テーブルに、1度目の実行時にバイトコ
ードのアドレスだけ登録し、ネイティブコードのアドレ
スの登録は特別な値、又は数字の0を登録にしておく。
また、実行制御手段は、1度目はインタプリタで実行
し、2度目はJITコンパイルによりコンパイルして実
行するように制御する。
【0127】この場合、コンパイル処理は時間を要する
ため、一度しか実行しないようなバイトコードはコンパ
イルして実行するよりもインタプリタで実行する方が速
い。そこで、前記のように処理を行うことで、アプリケ
ーションプログラムの全体の実行速度を速くすることが
できる。また、前記(2) と比較して、実行カウンタのた
めの領域が必要なく、メモリを節約できる。
【0128】(4) :請求項4では、処理制限手段は、コ
ンパイル時間を短縮するために、コンパイルする範囲を
制限し、処理の途中であっても、バイトコードの特定の
命令を検出したら、そこまでをコンパイルして処理を中
断する命令を生成し、残りはコンパイルしないように処
理を制限する。
【0129】この場合、従来は、メソッド全体をコンパ
イルしていたので、全く実行しない部分もコンパイルし
ていた。これに対して請求項4では、必ず実行する部分
だけをコンパイルするので、コンパイルに消費する時間
の無駄がなく高速である。
【0130】また、従来は、メソッド全体をコンパイル
していたので、全く実行しない部分のネイティブコード
も生成していた。しかし、請求項4では、必ず実行する
部分だけをコンパイルするので、生成するネイティブコ
ードに無駄がなく、メモリの消費が抑えられる。また、
アプリケーションプログラムの応答性を向上させること
ができる。すなわち、コンパイルしている最中はアプリ
ケーションプログラムの実行は停止するので、この停止
している時間が短縮する。
【0131】(5) :請求項5では、第1の破棄手段は、
コードキャッシュに空きがなくなった時、コードキャッ
シュの先頭から順にネイティブコードを破棄する。そし
て、第2の破棄手段は、FILO方式で最も昔にコンパ
イルしたコードから順に破棄する。このようにすれば、
ネイティブコードの破棄の方式が簡単なため、実現し易
く、ネイティブコードの断片化が起きない。
【図面の簡単な説明】
【図1】本発明の実施の形態における例1の処理フロー
チャート(その1)である。
【図2】本発明の実施の形態における例1の処理フロー
チャート(その2)である。
【図3】本発明の実施の形態における例1の検索テーブ
ル例である。
【図4】本発明の実施の形態における例2の検索テーブ
ル例である。
【図5】本発明の実施の形態における例2のコンパイル
選択処理フローチャートである。
【図6】本発明の実施の形態における例3のコンパイル
選択処理フローチャートである。
【図7】本発明の実施の形態における例4の検索テーブ
ルとコードキャッシュの構成例である。
【図8】本発明の実施の形態における例9のコードキャ
ッシュの置換処理説明図である。
【図9】本発明の実施の形態における例9のコードキャ
ッシュの置換処理フローチャートである。
【図10】本発明の実施の形態における例10のコード
キャッシュの置換処理説明図である。
【図11】本発明の実施の形態における例10の処理フ
ローチャートである。
【図12】従来のインタプリタの処理フローチャートで
ある。
【図13】従来のインタプリタとJITコンパイラを組
み合わせた時の処理フローチャートである。
【符号の説明】
1 コンパイラ 2 検索テーブル 3 コードキャッシュ 4 演算器

Claims (5)

    【特許請求の範囲】
  1. 【請求項1】仮想計算機のバイトコードをソフトウェア
    で解釈・実行する機能を有し、メモリ上に、容量の制限
    されたネイティブコードの格納領域としてコードキャッ
    シュを持ち、 前記バイトコードを実行する際に、JITコンパイラに
    よりバイトコードを仮想計算機が直接実行できるネイテ
    ィブコードにコンパイルして前記コードキャッシュに格
    納した後、そのネイティブコードを実行するJITコン
    パイラを備えた仮想計算機において、 前記バイトコードのアドレスから、コンパイルされてい
    るか否かを判断するための情報と、コンパイルされたネ
    イティブコードのアドレスを検索する検索テーブルを備
    えていることを特徴とするJITコンパイラを備えた仮
    想計算機。
  2. 【請求項2】前記検索テーブル上、又は前記コードキャ
    ッシュ上に、命令の実行回数を計数するための実行カウ
    ンタを設け、 バイトコードを実行する際に、前記実行カウンタの値を
    調べ、予め決めた特定回数より小さい場合はインタプリ
    タで実行し、 前記特定回数以上の場合は、JITコンパイラによりバ
    イトコードをコンパイルしてから実行する選択処理手段
    を備えていることを特徴とする請求項1記載のJITコ
    ンパイラを備えた仮想計算機。
  3. 【請求項3】前記検索テーブルに、1度目の実行時にバ
    イトコードのアドレスだけ登録し、ネイティブコードの
    アドレスの登録は特別な値、又は数字の0を登録にして
    おく検索テーブル情報登録手段と、 1度目はインタプリタで実行し、2度目はJITコンパ
    イルによりコンパイルして実行する実行制御手段を備え
    ていることを特徴とする請求項1記載のJITコンパイ
    ラを備えた仮想計算機。
  4. 【請求項4】コンパイル時間を短縮するために、コンパ
    イルする範囲を制限し、処理の途中であっても、バイト
    コードの特定の命令を検出したら、そこまでをコンパイ
    ルして処理を中断する命令を生成し、残りはコンパイル
    しないように処理を制限する処理制限手段を備えている
    ことを特徴とする請求項1記載のJITコンパイラを備
    えた仮想計算機。
  5. 【請求項5】前記コードキャッシュに空きがなくなった
    時、コードキャッシュの先頭から順にネイティブコード
    を破棄する第1の破棄手段と、 FILO方式で最も昔にコンパイルしたコードから順に
    破棄する第2の破棄手段を備えていることを特徴とする
    請求項1記載のJITコンパイラを備えた仮想計算機。
JP2001341577A 2001-11-07 2001-11-07 Jitコンパイラを備えた仮想計算機 Expired - Fee Related JP3808755B2 (ja)

Priority Applications (6)

Application Number Priority Date Filing Date Title
JP2001341577A JP3808755B2 (ja) 2001-11-07 2001-11-07 Jitコンパイラを備えた仮想計算機
KR10-2004-7006877A KR20040063923A (ko) 2001-11-07 2002-11-07 Jit 컴파일러를 구비한 가상 계산기, 그 동작 방법 및그 가상 계산기를 구비한 단말 장치
EP02775508A EP1445695A4 (en) 2001-11-07 2002-11-07 VIRTUAL COMPUTER EQUIPPED WITH A JIT COMPILER, CORRESPONDING METHOD OF OPERATION, AND TERMINAL DEVICE COMPRISING THE VIRTUAL COMPUTER
CNB028267303A CN100354826C (zh) 2001-11-07 2002-11-07 配有jit编译器的虚拟计算机及其方法
PCT/JP2002/011599 WO2003040918A1 (fr) 2001-11-07 2002-11-07 Ordinateur virtuel equipe d'un compilateur jit, procede de fonctionnement correspondant, et dispositif terminal comprenant cet ordinateur virtuel
US10/839,310 US20040210865A1 (en) 2001-11-07 2004-05-06 Virtual computer comprising JIT compiler, method of the computer, and terminal apparatus comprising the computer

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001341577A JP3808755B2 (ja) 2001-11-07 2001-11-07 Jitコンパイラを備えた仮想計算機

Related Child Applications (3)

Application Number Title Priority Date Filing Date
JP2005371745A Division JP2006134351A (ja) 2005-12-26 2005-12-26 Jitコンパイラを備えた仮想計算機
JP2005371746A Division JP2006164294A (ja) 2005-12-26 2005-12-26 Jitコンパイラを備えた仮想計算機
JP2006054249A Division JP2006202317A (ja) 2006-03-01 2006-03-01 Jitコンパイラを備えた仮想計算機

Publications (2)

Publication Number Publication Date
JP2003140909A true JP2003140909A (ja) 2003-05-16
JP3808755B2 JP3808755B2 (ja) 2006-08-16

Family

ID=19155584

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001341577A Expired - Fee Related JP3808755B2 (ja) 2001-11-07 2001-11-07 Jitコンパイラを備えた仮想計算機

Country Status (6)

Country Link
US (1) US20040210865A1 (ja)
EP (1) EP1445695A4 (ja)
JP (1) JP3808755B2 (ja)
KR (1) KR20040063923A (ja)
CN (1) CN100354826C (ja)
WO (1) WO2003040918A1 (ja)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005202614A (ja) * 2004-01-15 2005-07-28 Hitachi Ltd 動的変換方式のエミュレータ向けメモリ管理方法
JP2005251208A (ja) * 2004-03-05 2005-09-15 Sun Microsyst Inc バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置
JP2006126947A (ja) * 2004-10-26 2006-05-18 Hitachi Software Eng Co Ltd 情報処理装置、情報処理方法、およびプログラム
JP2008299833A (ja) * 2007-06-04 2008-12-11 Samsung Electronics Co Ltd 作業遂行速度を向上させる装置および方法
JP2010140233A (ja) * 2008-12-11 2010-06-24 Nec Computertechno Ltd エミュレーションシステム及びエミュレーション方法
JP2013061810A (ja) * 2011-09-13 2013-04-04 Fujitsu Ltd 情報処理装置、情報処理装置制御方法及び中間コード命令実行プログラム
US8612948B2 (en) 2010-04-05 2013-12-17 International Business Machines Corporation Dynamic compiler program, dynamic compiling method and dynamic compiling device
US8938728B2 (en) 2010-04-05 2015-01-20 International Business Machines Corporation Dynamic compiler program, dynamic compiling method and dynamic compiling device
JP2016018469A (ja) * 2014-07-10 2016-02-01 富士通株式会社 シミュレーション方法、シミュレーションプログラム
US9336052B2 (en) 2011-02-01 2016-05-10 Fujitsu Limited Program executing method
JP2016515735A (ja) * 2013-03-29 2016-05-30 インテル・コーポレーション ランタイムにおけるソフトウェアパイプライン
JP7467802B2 (ja) 2019-09-27 2024-04-16 インテル・コーポレーション Webブラウザ環境内で機械学習モデルを処理するための方法および装置
JP7483950B2 (ja) 2020-06-22 2024-05-15 アップル インコーポレイテッド バイナリ変換を実行するためのシステム及び方法

Families Citing this family (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040044988A1 (en) * 2002-08-29 2004-03-04 Schene Christopher Robin Generation of compiled code for simulator speed up
GB0410151D0 (en) * 2004-05-07 2004-06-09 Zeus Technology Ltd Load balancing & traffic management
DE102004056006B3 (de) * 2004-11-19 2006-03-23 Fujitsu Siemens Computers Gmbh Verfahren zur Emulation eines für einen Ursprungsprozessor in einem Ursprungscode erstellten Programms auf einem Zielprozessor
US7707547B2 (en) * 2005-03-11 2010-04-27 Aptana, Inc. System and method for creating target byte code
US7844958B2 (en) * 2005-03-11 2010-11-30 Aptana, Inc. System and method for creating target byte code
DE102005015746A1 (de) * 2005-04-06 2006-10-12 Man Roland Druckmaschinen Ag Druckmaschinensimulator
KR100763199B1 (ko) * 2006-02-20 2007-10-04 삼성전자주식회사 가상 머신 환경에서의 메소드 호출 방법 및 상기 방법을수행하는 가상 머신이 탑재된 시스템
US7784041B2 (en) * 2006-03-30 2010-08-24 Oracle America, Inc. Mechanism for reducing detectable pauses in dynamic output caused by dynamic compilation
US7963839B2 (en) * 2006-09-19 2011-06-21 Mudalla Technology, Inc. Regulated gaming exchange
US8341609B2 (en) * 2007-01-26 2012-12-25 Oracle International Corporation Code generation in the presence of paged memory
US8037460B2 (en) * 2007-01-26 2011-10-11 Oracle International Corporation Code persistence and dependency management for dynamic compilation in a database management 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
KR101407629B1 (ko) * 2007-06-04 2014-06-13 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 자바 변환 가속 장치 및 방법
US8914774B1 (en) 2007-11-15 2014-12-16 Appcelerator, Inc. System and method for tagging code to determine where the code runs
US8954989B1 (en) 2007-11-19 2015-02-10 Appcelerator, Inc. Flexible, event-driven JavaScript server architecture
US8260845B1 (en) 2007-11-21 2012-09-04 Appcelerator, Inc. System and method for auto-generating JavaScript proxies and meta-proxies
US8719451B1 (en) 2007-11-23 2014-05-06 Appcelerator, Inc. System and method for on-the-fly, post-processing document object model manipulation
US8566807B1 (en) 2007-11-23 2013-10-22 Appcelerator, Inc. System and method for accessibility of document object model and JavaScript by other platforms
US8819539B1 (en) 2007-12-03 2014-08-26 Appcelerator, Inc. On-the-fly rewriting of uniform resource locators in a web-page
US8756579B1 (en) 2007-12-03 2014-06-17 Appcelerator, Inc. Client-side and server-side unified validation
US8806431B1 (en) 2007-12-03 2014-08-12 Appecelerator, Inc. Aspect oriented programming
US8527860B1 (en) 2007-12-04 2013-09-03 Appcelerator, Inc. System and method for exposing the dynamic web server-side
US8938491B1 (en) 2007-12-04 2015-01-20 Appcelerator, Inc. System and method for secure binding of client calls and server functions
US8285813B1 (en) 2007-12-05 2012-10-09 Appcelerator, Inc. System and method for emulating different user agents on a server
US8335982B1 (en) 2007-12-05 2012-12-18 Appcelerator, Inc. System and method for binding a document object model through JavaScript callbacks
US8639743B1 (en) 2007-12-05 2014-01-28 Appcelerator, Inc. System and method for on-the-fly rewriting of JavaScript
US8516459B2 (en) * 2008-03-25 2013-08-20 Intel Corporation XSLT-specific XJIT compiler
US8490077B2 (en) * 2008-05-15 2013-07-16 Microsoft Corporation Runtime versioning and distribution of dynamic web-elements
US8291079B1 (en) 2008-06-04 2012-10-16 Appcelerator, Inc. System and method for developing, deploying, managing and monitoring a web application in a single environment
US8880678B1 (en) 2008-06-05 2014-11-04 Appcelerator, Inc. System and method for managing and monitoring a web application using multiple cloud providers
GB2475648A (en) 2008-08-05 2011-05-25 Wms Gaming Inc Mash-up wagering game creation
US7596620B1 (en) 2008-11-04 2009-09-29 Aptana, Inc. System and method for developing, deploying, managing and monitoring a web application in a single environment
US9250938B2 (en) * 2008-10-15 2016-02-02 Microsoft Technology Licensing, Llc Caching runtime generated code
KR100930831B1 (ko) * 2009-03-24 2009-12-10 주식회사 에이디칩스 바이트코드 변환 가속 장치 및 그 방법
CN101957770B (zh) * 2010-10-09 2015-09-02 中兴通讯股份有限公司 一种移动设备上应用程序的启动方法及装置
CN103092618A (zh) * 2013-01-15 2013-05-08 东南大学 基于软件Cache的Dalvik虚拟机JIT加速方法
US9003382B2 (en) * 2013-02-18 2015-04-07 Red Hat, Inc. Efficient just-in-time compilation
CN103984531B (zh) * 2014-05-30 2016-09-28 龙芯中科技术有限公司 超长分支跳转处理方法及装置
US9696973B1 (en) * 2016-02-24 2017-07-04 Semmle Limited Compilation cache with imports scanner
US9934051B1 (en) * 2017-04-17 2018-04-03 Futurewei Technologies, Inc. Adaptive code generation with a cost model for JIT compiled execution in a database system
US10783082B2 (en) 2019-08-30 2020-09-22 Alibaba Group Holding Limited Deploying a smart contract
US10802854B2 (en) * 2019-08-30 2020-10-13 Alibaba Group Holding Limited Method and apparatus for interpreting bytecode instruction stream
CN112925523B (zh) * 2021-03-02 2024-06-21 京东科技控股股份有限公司 对象比较方法、装置、设备及计算机可读介质
US11972240B2 (en) * 2021-12-03 2024-04-30 Samsung Electronics Co., Ltd. Systems and methods for automapping source code to machine code

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5768593A (en) * 1996-03-22 1998-06-16 Connectix Corporation Dynamic cross-compilation system and method
JPH11272476A (ja) * 1997-10-06 1999-10-08 Sun Microsyst Inc バイトコードされたプログラムを動的に最適化するための方法及び装置

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5560013A (en) * 1994-12-06 1996-09-24 International Business Machines Corporation Method of using a target processor to execute programs of a source architecture that uses multiple address spaces
US6226789B1 (en) * 1996-01-29 2001-05-01 Compaq Computer Corporation Method and apparatus for data flow analysis
JPH09282174A (ja) * 1996-04-10 1997-10-31 Hitachi Ltd プログラム実行方法
JPH1097431A (ja) * 1996-07-31 1998-04-14 Fujitsu Ltd シミュレーション装置及びシミュレーション方法並びにコンピュータ読取可能な記録媒体
JP3632344B2 (ja) * 1997-01-06 2005-03-23 日産自動車株式会社 半導体装置
US5933635A (en) * 1997-10-06 1999-08-03 Sun Microsystems, Inc. Method and apparatus for dynamically deoptimizing compiled activations
US6170083B1 (en) * 1997-11-12 2001-01-02 Intel Corporation Method for performing dynamic optimization of computer code
US6760907B2 (en) * 1998-06-30 2004-07-06 Sun Microsystems, Inc. Code generation for a bytecode compiler
US6324687B1 (en) * 1998-12-03 2001-11-27 International Business Machines Corporation Method and apparatus to selectively control processing of a method in a java virtual machine
JP2000215181A (ja) * 1999-01-21 2000-08-04 Fujitsu Ltd ネットワ―クコンピュ―タシステム及び代理コンパイルサ―バ装置
JP3470948B2 (ja) * 1999-01-28 2003-11-25 インターナショナル・ビジネス・マシーンズ・コーポレーション 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ
US6295642B1 (en) * 1999-04-29 2001-09-25 International Business Machines Corporation Method and apparatus for partial just in time compiling in a data processing system
GB9921720D0 (en) * 1999-09-14 1999-11-17 Tao Group Ltd Loading object-oriented computer programs
US6880152B1 (en) * 1999-10-13 2005-04-12 Transmeta Corporation Method of determining a mode of code generation
US7290254B2 (en) * 2003-03-25 2007-10-30 Intel Corporation Combining compilation and instruction set translation
US7257657B2 (en) * 2003-11-06 2007-08-14 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses for specific types of instructions

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5768593A (en) * 1996-03-22 1998-06-16 Connectix Corporation Dynamic cross-compilation system and method
JPH11272476A (ja) * 1997-10-06 1999-10-08 Sun Microsyst Inc バイトコードされたプログラムを動的に最適化するための方法及び装置

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005202614A (ja) * 2004-01-15 2005-07-28 Hitachi Ltd 動的変換方式のエミュレータ向けメモリ管理方法
JP4701611B2 (ja) * 2004-01-15 2011-06-15 株式会社日立製作所 動的変換方式のエミュレータ向けメモリ管理方法
JP2005251208A (ja) * 2004-03-05 2005-09-15 Sun Microsyst Inc バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置
JP2012038359A (ja) * 2004-03-05 2012-02-23 Oracle America Inc バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置
JP2006126947A (ja) * 2004-10-26 2006-05-18 Hitachi Software Eng Co Ltd 情報処理装置、情報処理方法、およびプログラム
JP2008299833A (ja) * 2007-06-04 2008-12-11 Samsung Electronics Co Ltd 作業遂行速度を向上させる装置および方法
US9235397B2 (en) 2007-06-04 2016-01-12 Samsung Electronics Co., Ltd. Method and apparatus for increasing task-execution speed
JP2010140233A (ja) * 2008-12-11 2010-06-24 Nec Computertechno Ltd エミュレーションシステム及びエミュレーション方法
US8612948B2 (en) 2010-04-05 2013-12-17 International Business Machines Corporation Dynamic compiler program, dynamic compiling method and dynamic compiling device
US8938728B2 (en) 2010-04-05 2015-01-20 International Business Machines Corporation Dynamic compiler program, dynamic compiling method and dynamic compiling device
US9336052B2 (en) 2011-02-01 2016-05-10 Fujitsu Limited Program executing method
JP2013061810A (ja) * 2011-09-13 2013-04-04 Fujitsu Ltd 情報処理装置、情報処理装置制御方法及び中間コード命令実行プログラム
JP2016515735A (ja) * 2013-03-29 2016-05-30 インテル・コーポレーション ランタイムにおけるソフトウェアパイプライン
JP2016018469A (ja) * 2014-07-10 2016-02-01 富士通株式会社 シミュレーション方法、シミュレーションプログラム
JP7467802B2 (ja) 2019-09-27 2024-04-16 インテル・コーポレーション Webブラウザ環境内で機械学習モデルを処理するための方法および装置
JP7483950B2 (ja) 2020-06-22 2024-05-15 アップル インコーポレイテッド バイナリ変換を実行するためのシステム及び方法

Also Published As

Publication number Publication date
EP1445695A1 (en) 2004-08-11
KR20040063923A (ko) 2004-07-14
EP1445695A4 (en) 2005-05-04
WO2003040918A1 (fr) 2003-05-15
CN1613058A (zh) 2005-05-04
US20040210865A1 (en) 2004-10-21
CN100354826C (zh) 2007-12-12
JP3808755B2 (ja) 2006-08-16

Similar Documents

Publication Publication Date Title
JP3808755B2 (ja) Jitコンパイラを備えた仮想計算機
US6453411B1 (en) System and method using a hardware embedded run-time optimizer
Gal et al. HotpathVM: An effective JIT compiler for resource-constrained devices
EP0997816B1 (en) Method and apparatus for selecting ways to compile at runtime
US8024554B2 (en) Modifying an instruction stream using one or more bits to replace an instruction or to replace an instruction and to subsequently execute the replaced instruction
US7137123B2 (en) Inline database for receiver types in object-oriented systems
US20040194076A1 (en) Combining compilation and instruction set translation
JP2000040007A (ja) バイトコ―ド・コンパイラのためのコ―ド生成
KR20040111163A (ko) 명령의 시맨틱의 동적 변경
US7823140B2 (en) Java bytecode translation method and Java interpreter performing the same
JP2000222220A (ja) 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ
EP1589425B1 (en) Method and apparatus for determining frequency of execution for compiled methods within a virtual machine
US6931638B2 (en) Method and apparatus to facilitate sharing optimized instruction code in a multitasking virtual machine
US6553426B2 (en) Method apparatus for implementing multiple return sites
JPWO2009004709A1 (ja) 間接分岐処理プログラムおよび間接分岐処理方法
US11204767B2 (en) Context switching locations for compiler-assisted context switching
JP2006164294A (ja) Jitコンパイラを備えた仮想計算機
JP2006202317A (ja) Jitコンパイラを備えた仮想計算機
Brandner et al. Embedded JIT compilation with CACAO on YARI
JP2006134351A (ja) Jitコンパイラを備えた仮想計算機
JP2001056764A (ja) 仮想計算機の実行方法および装置
US8839274B2 (en) Accelerated class check
JP2005063165A (ja) 仮想計算機の高速エミュレータ
Zhang The predictability of load address
Beckmann et al. Prefetching Java Objects

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040524

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050621

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050822

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20051025

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051226

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20060131

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060301

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20060412

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060518

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090526

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100526

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100526

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110526

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120526

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130526

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140526

Year of fee payment: 8

LAPS Cancellation because of no payment of annual fees