JP2005501334A - Javaコンピューティング環境におけるJavaマクロインストラクションの生成のためのフレームワーク - Google Patents
Javaコンピューティング環境におけるJavaマクロインストラクションの生成のためのフレームワーク Download PDFInfo
- Publication number
- JP2005501334A JP2005501334A JP2003523363A JP2003523363A JP2005501334A JP 2005501334 A JP2005501334 A JP 2005501334A JP 2003523363 A JP2003523363 A JP 2003523363A JP 2003523363 A JP2003523363 A JP 2003523363A JP 2005501334 A JP2005501334 A JP 2005501334A
- Authority
- JP
- Japan
- Prior art keywords
- java
- instructions
- instruction
- macro instruction
- stream
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4434—Reducing the memory space required by the program code
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
【課題】Javaコンピューティング環境において用いられるのに適するJavaマクロインストラクションを生成する技術を提供する。
【解決手段】よってこの技術は、Javaインストラクションを効率的に実行するためにJava仮想マシンにおいて実現されえる。理解されるように、Javaマクロインストラクションは、2つ以上のJavaバイトコードインストラクションと置き換えられえる。これはさらにインタプリタによって実行されるJavaインストラクションの数を減らす。その結果、仮想マシン、特に限られたリソースで動作する仮想マシンのパフォーマンスは改善される。Javaマクロインストラクションは、従来のJavaインストラクションシーケンスまたはインストラクションの小さくされたセットの中で提供されるJavaインストラクションのシーケンスについて生成されえる。いずれの場合も頻繁に遭遇されるシーケンスがJavaマクロインストラクションによって置換されえる。これらのシーケンスは典型的には、プログラミングループのあいだJavaオブジェクトがインスタンス化されるとき、および局所変数に値が割り当てられるときに遭遇される。
【選択図】図3
【解決手段】よってこの技術は、Javaインストラクションを効率的に実行するためにJava仮想マシンにおいて実現されえる。理解されるように、Javaマクロインストラクションは、2つ以上のJavaバイトコードインストラクションと置き換えられえる。これはさらにインタプリタによって実行されるJavaインストラクションの数を減らす。その結果、仮想マシン、特に限られたリソースで動作する仮想マシンのパフォーマンスは改善される。Javaマクロインストラクションは、従来のJavaインストラクションシーケンスまたはインストラクションの小さくされたセットの中で提供されるJavaインストラクションのシーケンスについて生成されえる。いずれの場合も頻繁に遭遇されるシーケンスがJavaマクロインストラクションによって置換されえる。これらのシーケンスは典型的には、プログラミングループのあいだJavaオブジェクトがインスタンス化されるとき、および局所変数に値が割り当てられるときに遭遇される。
【選択図】図3
Description
【技術分野】
【0001】
本発明は、大きくはJavaプログラミング環境に関し、より具体的にはJavaコンピューティング環境においてJavaマクロインストラクションを生成するフレームワークに関する。
【背景技術】
【0002】
高級言語の一つのゴールは、コンピュータプログラムが容易に他のコンピュータプラットフォームに移植できるような可搬性のあるプログラミング環境を提供することにある。「C」のような高級言語は、根底にあるコンピュータアーキテクチャからの抽象化のレベルを提供し、これら言語の成功は多くのコンピュータアプリケーションが今や高級言語で書かれる事実によってよく証明されている。
【0003】
可搬性は、グラフィカルインタフェースを通してさまざまなコンピュータプラットフォーム間での通信を可能にするインターネットのインタフェースプロトコルであるワールドワイドウェブ(「ウェブ」)の出現とともに新たな頂へと導かれた。ウェブ上で通信するコンピュータは、アプレットと呼ばれる小さなアプリケーションをダウンロードし実行することができる。アプレットがコンピュータプラットフォームのさまざまな組み合わせの上で実行されえることを仮定すれば、アプレットは典型的にはJava(商標)仮想マシンによって実行される。
【0004】
近年、Javaプログラミング環境はかなり人気が出てきた。Javaプログラミング言語は、小さなデバイス(例えば、ポケットベル、携帯電話およびスマートカード)からスーパコンピュータに至るまで広い範囲のコンピュータ上で実行されえるだけ充分に可搬性を持つよう設計される言語である。Javaで書かれたコンピュータプログラミング(および他の言語)は、Java仮想マシンの実装によって実行されるのに適したJavaバイトコードインストラクションにコンパイルされえる。Java仮想マシンはふつうソフトウェア中でJava仮想マシンインストラクションセットのためのインタプリタとしてインプリメントされるが、一般にはソフトウェア、ハードウェア、またはその両方でありえる。特定のJava仮想マシンのインプリメンテーションおよび対応するサポートライブラリは共にJavaランタイム環境を構成する。
【0005】
Javaプログラミング言語によるコンピュータプログラムは、1つ以上のクラスまたはインタフェース(ここでは併せてクラスまたはクラスファイルと呼ばれる)に組まれる。このようなプログラムは一般にプラットフォーム、すなわちハードウェアおよびオペレーティングシステムに依存しない。よってこれらのコンピュータプログラムは修正することなく、Javaランタイム環境のインプリメンテーションを走らせることができるどのようなコンピュータ上でも実行されえる。
【0006】
Javaプログラミング言語で書かれたオブジェクト指向のクラスは、「クラスファイルフォーマット」と呼ばれる特定のバイナリフォーマットでコンパイルされる。このクラスファイルは、単一のクラスに関連付けられたさまざまな要素を含む。これらの要素は例えばクラスに関連付けられたメソッドおよび/またはインタフェースでありえる。さらにクラスファイルフォーマットはクラスに関連付けられるかなりの量の補助的な情報を含みえる。クラスファイルフォーマット(Java仮想マシンの一般的な動作と共に)は、Tim LindholmおよびFrank Yellinによる「The Java Virtual Machine Specification」第2版にある程度詳細に記載され、ここで参照によって援用される。
【0007】
図1Aは、インタプリタであるJava仮想マシンによる実行を通して、簡単な一つのJavaソースコード101の処理の進行を示す。Javaソースコード101は、Javaで書かれた古典的なハローワールドのプログラムを含む。このソースコードはそれから、ソースコードをバイトコードにコンパイルするバイトコードコンパイラ103に入力される。バイトコードは、ソフトウェアでエミュレートされたコンピュータによって実行されるので、仮想マシンインストラクションである。典型的には仮想マシンインストラクションは汎用である(すなわち特定のマイクロプロセッサまたはコンピュータアーキテクチャのために設計されてはいない)が、これは必要ではない。バイトコードコンパイラは、Javaプログラムのバイトコードを含むJavaクラスファイル105を出力する。JavaクラスファイルはJava仮想マシン107に入力される。Java仮想マシンは、Javaクラスファイル中のバイトコードをデコードし実行するインタプリタである。Java仮想マシンはインタプリタであるが、ソフトウェアでマイクロプロセッサまたはコンピュータアーキテクチャをエミュレートする(例えばマイクロプロセッサまたはコンピュータアーキテクチャはハードウェアとしては存在しないかもしれない)のでふつうは仮想マシンと呼ばれる。
【0008】
図1Bは、簡略化されたクラスファイル100を示す。図1Bに示されるように、クラスファイル100は、コンスタントプール102の部分、インタフェース部分104、フィールド部分106、メソッド部分108、および属性部分110を含む。メソッド部分108は、クラスファイル100中で表現されるJavaクラスに関連付けられたいくつかのJavaメソッドを含むか、またはそのようなJavaメソッドへの参照を含みえる。これらメソッドのうちの1つは、仮想マシンによってクラスファイルがロードされた後であって、他のメソッドが起動される前に、Javaクラスを初期化するのに用いられる初期化メソッドである。換言すれば、典型的には、初期化メソッドが用いられて、クラスが使用される前にJavaクラスを初期化する。
【0009】
従来の仮想マシンのインタプリタは、Javaバイトコードインストラクションをデコードし実行するが、これは実行中のある時刻において、例えば「ランタイムにおいて」、1つのインストラクションだけ実行する。Javaインストラクションを実行するのに必要な情報を得るためには、典型的にはいくつかの操作が実行されなければならない。さらにバイトコードインストラクションをディスパッチするのに関連付けられたかなりのオーバヘッドが存在する。換言すれば、Javaインタプリタは、あるインストラクションから次のインストラクションへとスイッチするために大量の処理を実行しなければならない。
【発明の開示】
【発明が解決しようとする課題】
【0010】
したがってインタプリタがインストラクションをディスパッチしなければならない回数を低減することが非常に望ましい。これは結果として仮想マシン、特に限られたリソースで動作する仮想マシンのパフォーマンスを改善しえる。
【0011】
上述を鑑みて、Javaバイトコードインストラクションの実行のための改良されたフレームワークが必要とされる。
【課題を解決するための手段】
【0012】
本発明は、大きくはJavaプログラミング環境に関し、より具体的にはJavaコンピューティング環境においてJavaマクロインストラクションを生成するフレームワークに関する。Javaコンピューティング環境において用いられるのに適するJavaマクロインストラクションを生成する技術が開示される。よってこの技術は、Javaインストラクションを効率的に実行するためにJava仮想マシンにおいて実現されえる。理解されるように、Javaマクロインストラクションは、2つ以上のJavaバイトコードインストラクションと置き換えられえる。これはさらにインタプリタによって実行されるJavaインストラクションの数を減らす。その結果、仮想マシン、特に限られたリソースで動作する仮想マシンのパフォーマンスは改善される。
【0013】
本発明は、方法、装置、コンピュータで読み取り可能な媒体、およびデータベースシステムを含むさまざまな形態で実現可能である。本発明のいくつかの実施形態が以下に説明される。
【0014】
1つ以上のJavaバイトコードインストラクションに対応するJavaマクロインストラクションを生成する方法として、本発明のある実施形態は、Javaバイトコードインストラクションのストリームを読み出すこと、前記Javaバイトコードストリーム中の2つ以上のJavaバイトコードインストラクションが1つのインストラクションによって表現できるかどうかを決定すること、前記決定することが、前記Javaバイトコードストリーム中の2つ以上のJavaバイトコードインストラクションが1つのインストラクションによって表現できると決定するとき、前記2つ以上のJavaバイトコードインストラクションを表現するJavaマクロインストラクションを生成すること、を含む。前記JavaマクロインストラクションはJava仮想マシンによる実行に適し、実行されるとき前記Javaマクロインストラクションは、前記2つ以上のJavaバイトコードインストラクションによって実行される1つ以上の操作を実行するように動作可能である。
【0015】
1つ以上のJavaバイトコードインストラクションに対応するJavaマクロインストラクションを生成する方法として、本発明のある実施形態は、Javaバイトコードインストラクションのストリームを読み出すこと、前記JavaバイトコードインストラクションのストリームにJavaバイトコードインストラクションのシーケンスが現れる回数をカウントすることであって、前記Javaバイトコードインストラクションのシーケンスは、前記ストリーム中のシーケンスにある2つ以上のJavaバイトコードインストラクションを含む、カウントすること、前記Javaバイトコードインストラクションのシーケンスが1つのインストラクションによって表現されるべきかどうかを決定すること、前記決定することが、前記Javaバイトコードインストラクションの前記シーケンスが前記1つのインストラクションによって表現されえると決定するとき、前記Javaバイトコードインストラクションのシーケンスを表現するJavaマクロインストラクションを生成すること、を含む。前記JavaマクロインストラクションはJava仮想マシンによる実行に適する。実行されるとき前記Javaマクロインストラクションは、前記Javaバイトコードインストラクションのシーケンスによって実行される1つ以上の操作を実行するように動作可能である。
【0016】
本発明の他の実施形態は、Javaコンピューティング環境において、Javaマクロインストラクションの生成に適するJavaマクロインストラクションジェネレータを提供し、それぞれのJavaマクロインストラクションは1つ以上のJavaバイトコードインストラクションに対応する。前記Javaマクロインストラクションジェネレータは、Javaバイトコードインストラクションのストリームを読み出し、前記Javaバイトコードストリーム中の2つ以上のJavaバイトコードインストラクションが1つのインストラクションによって表現できるかどうかを決定し、前記決定することが、前記Javaバイトコードストリーム中の2つ以上のJavaバイトコードインストラクションが1つのインストラクションによって表現できると決定するとき、前記2つ以上のJavaバイトコードインストラクションを表現するJavaマクロインストラクションを生成するよう動作する。前記JavaマクロインストラクションはJava仮想マシンによる実行に適し、実行されるとき前記Javaマクロインストラクションは、前記2つ以上のJavaバイトコードインストラクションによって実行される1つ以上の操作を実行するように動作可能である。
【0017】
本発明のこれらや他の局面および利点は、以下の詳細な説明が添付図面と共に読まれればより明らかになろう。
【発明を実施するための最良の形態】
【0018】
本発明は添付の図面を参照して以下の詳細な説明によって容易に理解されるだろう。図面において同様の参照番号は同様の要素を表す。
【0019】
背景技術において述べられたように、Javaプログラミング環境は大きく広がった成功を収めた。したがってJavaコンパチブルなデバイスの幅を広げ、そのようなデバイスのパフォーマンスを改善しようとする努力が続いている。特定のプラットフォーム上でのJavaベースのプログラムのパフォーマンスに最も影響を与えるファクタの一つは、基礎になる仮想マシンのパフォーマンスである。典型的には仮想マシンは、Javaオブジェクトのクラスに関連付けられた情報を内部において表現し格納する。しかし従来の技術を用いてこの情報にアクセスするのには貴重な処理時間をとる。これは特に計算パワーおよび/またはメモリが制限されているシステムにおいては、仮想マシンのパフォーマンスを深刻に低下しえる。したがってJavaに従う仮想マシンのパフォーマンスを改善するための努力が多くの団体によって精力的になされてきた。
【0020】
この目的や他の目的を達成するために、Javaコンピューティング環境において用いられるのに適するJavaマクロインストラクションを生成する技術が開示される。よってこの技術は、Javaインストラクションを効率的に実行するためにJava仮想マシンにおいて実現されえる。理解されるように、Javaマクロインストラクションは、2つ以上のJavaバイトコードインストラクションと置き換えられえる。これはさらにインタプリタによって実行されるJavaインストラクションの数を減らす。その結果、仮想マシン、特に限られたリソースで動作する仮想マシンのパフォーマンスは改善される。
【0021】
本発明の実施形態は、以下に図2A〜13Cを参照して説明される。しかしこれらの図を参照してここで与えられた詳細な説明は説明の目的だけであって、本発明はこれらの限定された実施形態を超えるものであることが当業者には容易に理解されよう。
【0022】
図2Aは、本発明のある実施形態によるJavaコンピューティング環境200を示す。Javaコンピューティング環境200は、インタプリタによる実行に適するマクロインストラクションの生成に適するJavaマクロインストラクションジェネレータ202を含む。図2Aに示されるように、Javaマクロインストラクションジェネレータ202は、Javaバイトコードインストラクション204(Javaバイトコードインストラクション1〜N)のストリームを読むことができる。さらにJavaマクロインストラクションジェネレータ202は、ストリーム204中の2つ以上のJavaバイトコードインストラクションを表すJavaマクロインストラクション206を作ることができる。
【0023】
ストリーム204中のJavaバイトコードインストラクションは、従来のJavaバイトコードインストラクション、例えば、Javaオブジェクトをインスタンス化するためにシーケンス中に典型的に現れる従来のインストラクション「new」および「dup」でありえる。当業者には理解されるように、ある種のシーケンスは、Javaプログラムの実行中に頻繁に現れる。このようなシーケンスを単一のマクロインストラクションに置き換えることは、Javaバイトコードインストラクションをディスパッチすることに関連付けられたオーバヘッドを低減しえる。その結果、仮想マシン、特に限られたリソースで動作する仮想マシンのパフォーマンスは向上する。
【0024】
Javaマクロインストラクションジェネレータ202は、本発明のある好ましい実施形態によるJavaバイトコードトランスレータと共に用いられもする。こんどは図2Bを参照して、Javaバイトコードトランスレータ230は、従来のJavaインストラクション1〜Mを本発明のJavaインストラクション234(1〜N)にトランスレートするよう動作し、ここでNは整数Mより小さい整数である。Javaバイトコードトランスレータ230およびJavaインストラクション1〜Nのさらなる詳細は、「REDUCED INSTRUCTION SET FOR JAVA VIRTUAL MACHINES」と題された米国特許出願第09/819,120号(弁護士整理番号SUN1P811/P5512)、および「ENHANCED VIRTUAL MACHINE INSTRUCTIONS」と題された米国特許出願第09/820,097号(弁護士整理番号SUN1P827/P6095)に記載されている。理解されるように、本発明のJavaインストラクションをJavaマクロインストラクションジェネレータと共に使用すれば、仮想マシンのパフォーマンスをさらに向上させることができる。
【0025】
Javaマクロインストラクションは、本発明のある実施形態によれば、Javaストリームのペアとして仮想マシン内で内部表現されてもよいことに注意されたい。Javaストリームのペアは、コードストリームおよびデータストリームでありえる。コードストリームはJavaマクロインストラクションのコード部分を含むのに適し、データストリームはJavaマクロインストラクションのデータ部分を含むのに適する。インストラクションをストリームのペアとして表すことについてのさらなる詳細は、「IMPROVED FRAMEWORKS FOR LOADING AND EXECUTION OF OBJECT-BASED PROGRAMS」と題された米国特許出願第09/703,449号(弁護士整理番号SUN1P814/P5417)に見られる。
【0026】
図3は、本発明のある実施形態によるJavaマクロインストラクションを生成する方法300を示す。この方法300は、例えば図2A〜BのJavaマクロインストラクションジェネレータ202によって使用されえる。まず操作302において、Javaバイトコードインストラクションのストリームが読み出される。理解されるように、Javaバイトコードインストラクションのストリームは、バイトコードベリフィケーションフェーズのあいだに読み出されえる。Javaバイトコードベリフィケーションは典型的にはJavaインストラクションの正確さを確実にするために実行される。そのため操作302は、バイトコードベリフィケーションのあいだに効率的に実行されえるが、これは典型的にはバイトコードインストラクションをベリファイする必要があるからである。
【0027】
次に操作304において、2つ以上のJavaバイトコードインストラクションの所定のシーケンスが見つかったかどうかについて決定がなされる。もし操作304において、2つ以上のJavaバイトコードインストラクションの所定のシーケンスが見つからなかったら、方法300は終わる。しかしもし操作304において、2つ以上のJavaバイトコードインストラクションの所定のシーケンスが見つかったら、方法300は操作306に進み、ここでこの2つ以上のJavaバイトコードインストラクションのシーケンスを表すJavaマクロインストラクションが生成される。方法300は操作306に続いて終わる。操作304および306はJavaバイトコードベリフィケーションフェーズのあいだにも実行されえることに注意されたい。
【0028】
図4は、本発明の他の実施形態によるJavaマクロインストラクションを生成する方法400を示す。方法400は例えば、図2A〜BのJavaマクロインストラクションジェネレータ202によって使用されえる。最初に操作402において、Javaバイトコードインストラクションのストリームが読み出される。再び操作402は、バイトコードベリフィケーションのあいだに効率的に実行されえるが、これはバイトコードベリフィケーションが典型的にはいずれにしても実行されるからである。
【0029】
次に操作404において、JavaバイトコードインストラクションのシーケンスがJavaバイトコードインストラクションのストリーム中に現れる回数がカウントされる。その後、操作406において、シーケンスが少なくとも所定の回数だけカウントされたかどうかについての決定がなされる。もし操作406においてシーケンスが少なくとも所定の回数だけカウントされなかったと決定されるなら、方法400は終了する。しかしもし操作406においてシーケンスが少なくとも所定の回数だけカウントされたと決定されるなら、方法400は操作408に進み、ここでJavaバイトコードインストラクションのシーケンスを表すJavaマクロインストラクションが生成される。方法400は操作408に続いて終わる。
【0030】
図5は、本発明のある実施形態によるJavaバイトコードベリファイア500を示す。Javaバイトコードベリファイア500は、Javaバイトコード504のストリームを分析するのに適するシーケンスアナライザ502を含む。図5に示されるように、Javaバイトコード504のストリームは、Javaバイトコードインストラクション1〜Nのシーケンスからなる。Javaバイトコードベリファイア500は、2つ以上のJavaバイトコードインストラクションが1つのJavaマクロインストラクションとして表現されえるかどうかを決定するために動作する。もしバイトコードベリファイア500が2つ以上のJavaバイトコードインストラクションがJavaマクロインストラクションとして表現されえると決定するなら、バイトコードベリファイア500はJavaマクロインストラクションを作る。Javaマクロインストラクションは2つ以上のJavaバイトコードインストラクションのシーケンスに対応する。したがってJavaマクロインストラクションは、Javaストリーム中の2つ以上のJavaバイトコードインストラクションのシーケンスを置き換えることができる。
【0031】
図5を参照して、ストリーム504中の2つ以上のJavaバイトコードインストラクション506のシーケンスは、Javaバイトコードベリファイア500によって識別されえる。2つ以上のJavaバイトコードインストラクションのシーケンス506(インストラクションI1〜IM)は、ストリーム504中の位置Kから(K+M−1)に位置しえる。2つ以上のJavaバイトコードインストラクション506のシーケンスを識別した後、Javaバイトコードベリファイア500は、このシーケンスをJavaマクロインストラクション508(I1〜IM)で置き換えるように動作しえる。その結果、ストリーム504は、(N−M)のJavaバイトコードインストラクションからなるストリーム510へと小さくされる。理解されるように、Javaバイトコードベリファイア500は、Javaバイトコードインストラクションの多くの所定のシーケンスを識別し、それらを適切なJavaマクロインストラクションと置き換えることができる。Javaバイトコードベリファイア500は、ストリーム504中に現れるシーケンスを分析し、ある判断基準を満たすもの(例えば所定回数を超えて現れたシーケンス)だけを置き換えるようにインプリメントされえる。いずれの場合も、入力ストリーム504(例えばストリーム504)中のJavaバイトコードインストラクションの個数は、大幅に減少されえる。よって仮想マシン、特に限られたリソースで動作するもののパフォーマンスは向上されえる。
【0032】
上述のようにストリーム中で置き換えられたJavaバイトコードインストラクションは、シーケンス中でしばしば現れる従来のJavaバイトコードインストラクションでありえる。そのような一例は、Javaオブジェクトをインスタンス化するためにシーケンス中に典型的には現れる「Newx」および「Dupx」を表す従来のインストラクション(例えばNew-Dup, Newarray-Dup_x1, Anewarray-Dup_x2など)のさまざまな組み合わせである。
【0033】
図6Aは、本発明のある実施形態によるJavaマクロインストラクションジェネレータ602を含むJavaコンピューティング環境600を示す。今度は図6Aを参照して、従来のJavaバイトコードインストラクション「Newx」および「Dupx」がシーケンス610の中で描かれる。シーケンス610は、Javaマクロインストラクションジェネレータ602によって単一のJavaマクロインストラクション「New−Dup」で置換されえる。当業者には理解されるように、シーケンス610は、Javaプログラムの実行中にしばしば出現しえる。よってこのシーケンスを単一のマクロインストラクションによって置換することは、Javaバイトコードインストラクションをディスパッチするのに関連付けられたオーバヘッドを低減しえる。
【0034】
再び、Javaマクロインストラクション602は、本発明のある好ましい実施形態においてはJavaバイトコードトランスレータと共に使用されてもよいことに注意されたい。Javaバイトコードトランスレータおよび新規なJavaバイトコードインストラクションのさらなる詳細は、「REDUCED INSTRUCTION SET FOR JAVA VIRTUAL MACHINES」と題された米国特許出願第09/819,120号(弁護士整理番号SUN1P811/P5512)、および「ENHANCED VIRTUAL MACHINE INSTRUCTIONS」と題された米国特許出願第09/820,097号(弁護士整理番号SUN1P827/P6095)に記載される。
【0035】
図6Bは、本発明のある実施形態によるJavaマクロインストラクションジェネレータ602およびJavaバイトコードトランスレータ622を含むJavaコンピューティング環境620を示す。今度は図6Bを参照して、Javaバイトコードトランスレータ622は、従来のJavaインストラクション610を本発明のJavaインストラクション630に翻訳するよう動作する。Javaマクロインストラクションジェネレータ602は、本発明のJavaインストラクション630を受け取り、対応するJavaマクロインストラクション「New−Dup」624を生成しえる。
【0036】
本発明のJavaインストラクション630は、Java仮想マシンによって実行するのに適切なJavaインストラクションの小さくされたセットを表現することに注意されたい。これは、本発明の縮小されたセット中のインストラクションの数が従来のJavaバイトコードインストラクションセット中のインストラクションの数よりもはるかに少ないことを意味する。さらに本発明のJavaインストラクションは、従来のJavaバイトコードインストラクションによって実行されえない新規な操作を提供する。例として、本発明の仮想マシン操作「DUP」(シーケンス630として示される)は、本発明のある実施形態によって提供されえる。本発明の仮想マシンインストラクションDUPは、実行スタック上のさまざまな位置における値が実行スタックの上に複製されることを可能にする。
【0037】
図7Aは、本発明のある実施形態によるスタック上の値を複製するのに適する本発明の「DUP」インストラクション702の内部表現701を含むコンピューティング環境700を示す。内部表現701は、ストリームのペア、つまりコードストリーム706およびデータストリーム708を含む。記載された実施形態において、コードストリーム706およびデータストリーム708におけるそれぞれのエントリーは1バイトを表す。本発明の仮想マシンインストラクションDUP702は、コードストリーム706中のデータパラメータAと関連付けられる。データパラメータAはまたデータストリーム708においてインプリメントされてもよいことに注意されたい。いずれの場合もデータパラメータAは、実行スタック704上のどの4バイト値(ワード値)が実行スタック704の最上部に複製されるべきかを示す。データパラメータAは、例えば、実行スタック704の最上部からのオフセットを示しえる。図7Aに示されるように、データパラメータAは、実行スタック上のワード(4バイト)値である「Wi」への参照でありえる。したがって実行時において、仮想マシンは「DUP」コマンド702を実行できる。その結果、Wiワードは、スタックの最上部に複製される。よって本発明の「DUP」インストラクションは、4バイト値を実行スタックの最上部へ複製するよう動作するさまざまなJavaバイトコードインストラクションを効率的に置換できる。図7Bは、これらのJavaバイトコードインストラクションのいくつかを示す。同様に図7Cに示されるように、本発明の「DUPL」インストラクションは、8バイト値(2ワード)を実行スタックの最上部へ複製するよう動作するさまざまなJavaバイトコードインストラクションを効率的に置換するよう提供されえる。
【0038】
従来のバイトコード「Dupx」インストラクションは、実行スタック上のある位置に存在する値の複製しかできなかった(すなわち従来のインストラクションDup、Dup_x1およびDup_x2は、それぞれ実行スタック上の第1、第2および第3ワードの複製を可能にする)。しかし本発明のインストラクション「DUP」および「DUPL」は、実行スタック上のより幅広い範囲(例えばW4、Wi、WNなど)を複製するのに使用されえる。
【0039】
図6Bに戻って、他の本発明によるインストラクション、Javaバイトコードインストラクション「New」がシーケンス630中に示される。Javaバイトコードインストラクション「New」は、インスタンス化に用いられるさまざまな従来のJavaバイトコードを効率的に置換できる。
【0040】
図8は、Javaバイトコードインスタンス化インストラクションの、本発明のある実施形態によって提供される仮想マシンインストラクションへのマッピングを示す。理解されるように、4つの従来のJavaバイトコードインストラクションは、単一の仮想マシンインストラクション(例えばNEW)に効率的にマッピングされえる。仮想マシンインストラクションNEWは、さまざまなタイプのオブジェクトおよびアレイをインスタンス化するように働く。ある実施形態において、本発明の仮想マシンインストラクションNEWは、Javaバイトコードインスタンス化インストラクションのパラメータ値に基づいてオブジェクトまたはアレイのタイプを決定するよう働く。理解されるように、インスタンス化のためのJavaバイトコードインストラクションの後には、タイプを表すパラメータ値が典型的には続く。よってパラメータ値は、容易に利用可能であり、NEW仮想マシンインストラクションが実行時に適切なタイプをインスタンス化することが可能になるよう利用されえる。
【0041】
図9Aは、Javaインタプリタによってしばしば実行されえる従来のJavaバイトコードの他のシーケンス902を示す。シーケンス902は、ループをプログラムするのに用いられる例示的なインストラクションのシーケンスを表す。よってシーケンス902のようなシーケンスは、Javaバイトコードインストラクションの実行中に何度も繰り返して反復されえる。図9Aに示されるように、Javaマクロインストラクションジェネレータ202は、従来のJavaインストラクション「iinc」、「iload」、および「if_cmplt」のシーケンスをJavaマクロインストラクション「Loop1」で置換することができる。
【0042】
図9Bは、本発明のある実施形態によるJavaマクロインストラクションジェネレータ902およびJavaバイトコードトランスレータ904を含むJavaコンピューティング環境900を示す。今度は図9Bを参照して、Javaバイトコードトランスレータ904は、従来のJavaインストラクション910を本発明のJavaインストラクション920に翻訳するよう動作する。Javaマクロインストラクションジェネレータ902は、本発明のJavaインストラクション920を受け取り、対応するJavaマクロインストラクション「Loop1」940を生成できる。
【0043】
シーケンス920中の本発明のインストラクションのうちの1つは、本発明のインストラクション「Load」である。図10Aは、本発明の他の実施形態による、局所変数から値をロードするのに適するJava「Load」インストラクションのセットの内部表現1000を示す。記載された実施形態において、内部表現1000のコードストリーム1002は、1つ以上のJava「局所変数からのLoad」バイトコードインストラクションの表現に適する本発明の仮想マシンインストラクションを表すLoadコマンド1006を含む。Loadコマンド1006はそれに関連付けられた1バイトのパラメータ、つまりインデックスi1008をデータストリーム1004の中に持つことに注意されたい。理解されるようにランタイムにおいて、Loadコマンド1006は、実行スタック1020の最上部にある局所変数をロード(またはプッシュ)するために仮想マシンによって実行されえる。例としてオフセット1022は、実行スタック1020上に格納された局所変数についての開始オフセットを示しえる。したがってオフセットi1024は、インデックスi1008に対応する実行スタック1020中の位置を特定する。
【0044】
記載された実施形態において、Loadコマンド1006は、局所変数を4バイト(1ワード)でロードするのに使用されることに注意されたい。その結果、4バイトA、B、CおよびD(オフセットi1024で始まる)によって示される値は、Loadコマンド1006が実行されるときに実行スタック1020の最上部にロードされる。このように、Loadコマンド1006およびインデックスi1008は、ランタイムにおいて実行スタックの最上部にある4バイトの局所変数をロード(またはプッシュ)するのに用いられえる。理解されるように、Loadコマンド1006は、さまざまな従来のJavaバイトコードインストラクションを効率的に表現できる。図10Bは、本発明のある実施形態によって本発明の「Load」コマンドによって表現されえる4バイトの局所変数をロードするJavaバイトコードインストラクションのセットを示す。
【0045】
4バイトによって表現された値を持たない局所変数をロードするためにも本発明は提供されえることに注意されたい。例えば図10Cは、本発明のある実施形態によって8バイトの局所変数をロードするJavaバイトコードインストラクションのセットを示す。理解されるように、図10Cに列挙されたJavaバイトコードインストラクションの全ては、単一の仮想マシンインストラクション(例えば「LoadL」コマンド)によって表現されえる。この「LoadL」コマンドは例えば上述と同様にして動作しえる。
【0046】
図9Bに戻って、Javaバイトコードトランスレータ904は、シーケンス910中の従来のバイトコードインストラクション「if_cmplt」を、Javaバイトコードインストラクションの縮小されたセット中の2つのバイトコードインストラクション「OP_ISUB」および「OP_JMPLT」に置換するよう動作する。理解されるように、本発明の仮想マシンインストラクションの2つ以上は、本発明のある実施形態によれば比較的より複雑な操作を実行するために結合されえる。例示として、Javaバイトコードインストラクション「lcmp」(スタック上の2つの長い値を比較し、その比較に基づいて、スタック上に0または1をプッシュする)によって実行される従来のフロー制御操作は、本発明の仮想マシンインストラクション「LSUB」(長いサブディビジョン)と、それに続く他の本発明の仮想マシンインストラクションJMPEQ(等しいならジャンプ)とを実行することによって効率的に実行される。図11Aおよび11Bは、本発明のある実施形態による2つの本発明の仮想マシンインストラクションによって表現されえる条件付きフロー制御操作を実行するいくつかの従来のJavaバイトコードインストラクションを示す。
【0047】
図12Aは、Javaインタプリタによってしばしば実行されえる従来のJavaバイトコードのさらに他のシーケンス1210を示す。シーケンス1210は、フィールド値を得て、それを実行スタック上に置くことを実行するインストラクションの例示的なシーケンスを示す。図12Aに示されるように、Javaマクロインストラクションジェネレータ602は、Javaインストラクション「Getfield」および「Astorex」の従来のシーケンス1210をJavaマクロインストラクション「Get_Store」1212で置換できる。従来のインストラクション「Astorex」は、実行スタック上の値を格納するのに用いられるさまざまな従来のJavaインストラクションを表現する。
【0048】
図12Bは、本発明のある実施形態によるJavaマクロインストラクションジェネレータ602およびJavaバイトコードトランスレータ622を含むJavaコンピューティング環境1200を示す。今度は図12Bを参照して、Javaバイトコードトランスレータ622は、従来のJavaインストラクション1210を本発明のJavaインストラクション1220に翻訳するよう動作する。Javaマクロインストラクションジェネレータ602は、本発明のJavaインストラクション1220を受け取り、対応するJavaマクロインストラクション「Resolve_Astore」1222を生成することができる。
【0049】
本発明のインストラクション「Astore」は、アレイに値を格納するのに適する仮想マシンインストラクションを表す。例示として、図13Aは、本発明のある実施形態によるコンピューティング環境1320を示す。本発明のAStore1322(アレイにストアする)仮想マシンインストラクションは、本発明のある実施形態によって実行スタック1304からのさまざまな値を異なるタイプのアレイに格納するのに用いられえる。再び、アレイ1302のヘッダ1310は、アレイのタイプを決定するために読み出しされえる。アレイのタイプに基づいて、適切な値(すなわち実行スタック1304上の適切なバイト数N)が決定されえる。この値は、アレイインデックス1326を使うことによってそれからアレイ1302中に格納される。よって本発明の仮想マシンインストラクションAStoreは、値をアレイに格納するのに用いられるさまざまなJavaバイトコードインストラクションを効率的に表現できる。図13Bおよび13Cは、本発明のある実施形態による本発明の仮想マシンインストラクションによって表現されえるアレイに格納するための従来のJavaバイトコードインストラクション(Astore)を示す。
【0050】
表Aは、従来のJavaバイトコードインストラクションのセットの、右カラムに列挙された1つ以上の本発明の仮想マシンインストラクションへのマッピングを示す。
【表A】
【0051】
本発明の多くの特徴および利点は詳細な説明から明らかであり、よって添付の特許請求の範囲は本発明の全てのそのような特徴および利点を含むと意図される。さらに多くの改変および変更が当業者には容易に可能であるので、本発明は図示され記載されたのとまったく同一の構成および動作に限定されるべきではない。したがって全ての適切な変更および等価物は本発明の範囲に含まれるように解される。
【図面の簡単な説明】
【0052】
【図1A】インタプリタであるJava仮想マシンによる実行を通したJavaソースコードの簡単なものの進行を示す図である。
【図1B】簡略化されたクラスファイルを示す図である。
【図2A】Javaマクロインストラクションジェネレータを含むJavaコンピューティング環境を示す図である。
【図2B】Javaマクロインストラクションジェネレータを含むJavaコンピューティング環境を示す図である。
【図3】本発明のある実施形態によるJavaマクロインストラクションを生成する方法を示す図である。
【図4】本発明の他の実施形態によるJavaマクロインストラクションを生成する方法を示す図である。
【図5】本発明のある実施形態によるJavaバイトコードベリファイアを示す図である。
【図6A】本発明のある実施形態によるJavaマクロインストラクションジェネレータを含むJavaコンピューティング環境を示す図である。
【図6B】本発明のある実施形態によるJavaバイトコードトランスレータを含むJavaコンピューティング環境を示す図である。
【図7A】本発明のある実施形態によるスタック上の値を複製するのに適する本発明の「DUP」インストラクションの内部表現を含むコンピューティング環境を示す図である。
【図7B】図7Aで示されたJavaバイトコードインストラクションのいくつかを示す図である。
【図7C】図7Aで示されたJavaバイトコードインストラクションのいくつかを示す図である。
【図8】Javaバイトコードインスタンス化インストラクションの、本発明のある実施形態によって提供される仮想マシンインストラクションへのマッピングを示す図である。
【図9A】Javaインタプリタによってしばしば実行されえる従来のJavaバイトコードの他のシーケンスを示す図である。
【図9B】本発明のある実施形態によるJavaマクロインストラクションジェネレータおよびJavaバイトコードトランスレータを含むJavaコンピューティング環境を示す図である。
【図10A】本発明の他の実施形態による、局所変数から値をロードするのに適するJava「Load」インストラクションのセットの内部表現を示す図である。
【図10B】本発明のある実施形態によって本発明の「Load」コマンドによって表現されえる4バイトの局所変数をロードするJavaバイトコードインストラクションのセットを示す図である。
【図10C】本発明のある実施形態によって8バイトの局所変数をロードするJavaバイトコードインストラクションのセットを示す図である。
【図11A】本発明のある実施形態による2つの本発明の仮想マシンインストラクションによって表現されえる条件付きフロー制御操作を実行するいくつかの従来のJavaバイトコードインストラクションを示す図である。
【図11B】本発明のある実施形態による2つの本発明の仮想マシンインストラクションによって表現されえる条件付きフロー制御操作を実行するいくつかの従来のJavaバイトコードインストラクションを示す図である。
【図12A】Javaインタプリタによってしばしば実行されえる従来のJavaバイトコードのさらに他のシーケンスを示す図である。
【図12B】従来のJavaインストラクションを本発明のJavaインストラクションに翻訳するよう動作するJavaバイトコードトランスレータを示す図である。
【図13A】本発明のある実施形態によるコンピューティング環境を示す図である。
【図13B】本発明のある実施形態による本発明の仮想マシンインストラクション(例えばAstore)によって表現されえるアレイに格納するための従来のJavaバイトコードインストラクションのセットを示す図である。
【図13C】本発明のある実施形態による本発明の仮想マシンインストラクション(例えばAstore)によって表現されえるアレイに格納するための従来のJavaバイトコードインストラクションのセットを示す図である。
【0001】
本発明は、大きくはJavaプログラミング環境に関し、より具体的にはJavaコンピューティング環境においてJavaマクロインストラクションを生成するフレームワークに関する。
【背景技術】
【0002】
高級言語の一つのゴールは、コンピュータプログラムが容易に他のコンピュータプラットフォームに移植できるような可搬性のあるプログラミング環境を提供することにある。「C」のような高級言語は、根底にあるコンピュータアーキテクチャからの抽象化のレベルを提供し、これら言語の成功は多くのコンピュータアプリケーションが今や高級言語で書かれる事実によってよく証明されている。
【0003】
可搬性は、グラフィカルインタフェースを通してさまざまなコンピュータプラットフォーム間での通信を可能にするインターネットのインタフェースプロトコルであるワールドワイドウェブ(「ウェブ」)の出現とともに新たな頂へと導かれた。ウェブ上で通信するコンピュータは、アプレットと呼ばれる小さなアプリケーションをダウンロードし実行することができる。アプレットがコンピュータプラットフォームのさまざまな組み合わせの上で実行されえることを仮定すれば、アプレットは典型的にはJava(商標)仮想マシンによって実行される。
【0004】
近年、Javaプログラミング環境はかなり人気が出てきた。Javaプログラミング言語は、小さなデバイス(例えば、ポケットベル、携帯電話およびスマートカード)からスーパコンピュータに至るまで広い範囲のコンピュータ上で実行されえるだけ充分に可搬性を持つよう設計される言語である。Javaで書かれたコンピュータプログラミング(および他の言語)は、Java仮想マシンの実装によって実行されるのに適したJavaバイトコードインストラクションにコンパイルされえる。Java仮想マシンはふつうソフトウェア中でJava仮想マシンインストラクションセットのためのインタプリタとしてインプリメントされるが、一般にはソフトウェア、ハードウェア、またはその両方でありえる。特定のJava仮想マシンのインプリメンテーションおよび対応するサポートライブラリは共にJavaランタイム環境を構成する。
【0005】
Javaプログラミング言語によるコンピュータプログラムは、1つ以上のクラスまたはインタフェース(ここでは併せてクラスまたはクラスファイルと呼ばれる)に組まれる。このようなプログラムは一般にプラットフォーム、すなわちハードウェアおよびオペレーティングシステムに依存しない。よってこれらのコンピュータプログラムは修正することなく、Javaランタイム環境のインプリメンテーションを走らせることができるどのようなコンピュータ上でも実行されえる。
【0006】
Javaプログラミング言語で書かれたオブジェクト指向のクラスは、「クラスファイルフォーマット」と呼ばれる特定のバイナリフォーマットでコンパイルされる。このクラスファイルは、単一のクラスに関連付けられたさまざまな要素を含む。これらの要素は例えばクラスに関連付けられたメソッドおよび/またはインタフェースでありえる。さらにクラスファイルフォーマットはクラスに関連付けられるかなりの量の補助的な情報を含みえる。クラスファイルフォーマット(Java仮想マシンの一般的な動作と共に)は、Tim LindholmおよびFrank Yellinによる「The Java Virtual Machine Specification」第2版にある程度詳細に記載され、ここで参照によって援用される。
【0007】
図1Aは、インタプリタであるJava仮想マシンによる実行を通して、簡単な一つのJavaソースコード101の処理の進行を示す。Javaソースコード101は、Javaで書かれた古典的なハローワールドのプログラムを含む。このソースコードはそれから、ソースコードをバイトコードにコンパイルするバイトコードコンパイラ103に入力される。バイトコードは、ソフトウェアでエミュレートされたコンピュータによって実行されるので、仮想マシンインストラクションである。典型的には仮想マシンインストラクションは汎用である(すなわち特定のマイクロプロセッサまたはコンピュータアーキテクチャのために設計されてはいない)が、これは必要ではない。バイトコードコンパイラは、Javaプログラムのバイトコードを含むJavaクラスファイル105を出力する。JavaクラスファイルはJava仮想マシン107に入力される。Java仮想マシンは、Javaクラスファイル中のバイトコードをデコードし実行するインタプリタである。Java仮想マシンはインタプリタであるが、ソフトウェアでマイクロプロセッサまたはコンピュータアーキテクチャをエミュレートする(例えばマイクロプロセッサまたはコンピュータアーキテクチャはハードウェアとしては存在しないかもしれない)のでふつうは仮想マシンと呼ばれる。
【0008】
図1Bは、簡略化されたクラスファイル100を示す。図1Bに示されるように、クラスファイル100は、コンスタントプール102の部分、インタフェース部分104、フィールド部分106、メソッド部分108、および属性部分110を含む。メソッド部分108は、クラスファイル100中で表現されるJavaクラスに関連付けられたいくつかのJavaメソッドを含むか、またはそのようなJavaメソッドへの参照を含みえる。これらメソッドのうちの1つは、仮想マシンによってクラスファイルがロードされた後であって、他のメソッドが起動される前に、Javaクラスを初期化するのに用いられる初期化メソッドである。換言すれば、典型的には、初期化メソッドが用いられて、クラスが使用される前にJavaクラスを初期化する。
【0009】
従来の仮想マシンのインタプリタは、Javaバイトコードインストラクションをデコードし実行するが、これは実行中のある時刻において、例えば「ランタイムにおいて」、1つのインストラクションだけ実行する。Javaインストラクションを実行するのに必要な情報を得るためには、典型的にはいくつかの操作が実行されなければならない。さらにバイトコードインストラクションをディスパッチするのに関連付けられたかなりのオーバヘッドが存在する。換言すれば、Javaインタプリタは、あるインストラクションから次のインストラクションへとスイッチするために大量の処理を実行しなければならない。
【発明の開示】
【発明が解決しようとする課題】
【0010】
したがってインタプリタがインストラクションをディスパッチしなければならない回数を低減することが非常に望ましい。これは結果として仮想マシン、特に限られたリソースで動作する仮想マシンのパフォーマンスを改善しえる。
【0011】
上述を鑑みて、Javaバイトコードインストラクションの実行のための改良されたフレームワークが必要とされる。
【課題を解決するための手段】
【0012】
本発明は、大きくはJavaプログラミング環境に関し、より具体的にはJavaコンピューティング環境においてJavaマクロインストラクションを生成するフレームワークに関する。Javaコンピューティング環境において用いられるのに適するJavaマクロインストラクションを生成する技術が開示される。よってこの技術は、Javaインストラクションを効率的に実行するためにJava仮想マシンにおいて実現されえる。理解されるように、Javaマクロインストラクションは、2つ以上のJavaバイトコードインストラクションと置き換えられえる。これはさらにインタプリタによって実行されるJavaインストラクションの数を減らす。その結果、仮想マシン、特に限られたリソースで動作する仮想マシンのパフォーマンスは改善される。
【0013】
本発明は、方法、装置、コンピュータで読み取り可能な媒体、およびデータベースシステムを含むさまざまな形態で実現可能である。本発明のいくつかの実施形態が以下に説明される。
【0014】
1つ以上のJavaバイトコードインストラクションに対応するJavaマクロインストラクションを生成する方法として、本発明のある実施形態は、Javaバイトコードインストラクションのストリームを読み出すこと、前記Javaバイトコードストリーム中の2つ以上のJavaバイトコードインストラクションが1つのインストラクションによって表現できるかどうかを決定すること、前記決定することが、前記Javaバイトコードストリーム中の2つ以上のJavaバイトコードインストラクションが1つのインストラクションによって表現できると決定するとき、前記2つ以上のJavaバイトコードインストラクションを表現するJavaマクロインストラクションを生成すること、を含む。前記JavaマクロインストラクションはJava仮想マシンによる実行に適し、実行されるとき前記Javaマクロインストラクションは、前記2つ以上のJavaバイトコードインストラクションによって実行される1つ以上の操作を実行するように動作可能である。
【0015】
1つ以上のJavaバイトコードインストラクションに対応するJavaマクロインストラクションを生成する方法として、本発明のある実施形態は、Javaバイトコードインストラクションのストリームを読み出すこと、前記JavaバイトコードインストラクションのストリームにJavaバイトコードインストラクションのシーケンスが現れる回数をカウントすることであって、前記Javaバイトコードインストラクションのシーケンスは、前記ストリーム中のシーケンスにある2つ以上のJavaバイトコードインストラクションを含む、カウントすること、前記Javaバイトコードインストラクションのシーケンスが1つのインストラクションによって表現されるべきかどうかを決定すること、前記決定することが、前記Javaバイトコードインストラクションの前記シーケンスが前記1つのインストラクションによって表現されえると決定するとき、前記Javaバイトコードインストラクションのシーケンスを表現するJavaマクロインストラクションを生成すること、を含む。前記JavaマクロインストラクションはJava仮想マシンによる実行に適する。実行されるとき前記Javaマクロインストラクションは、前記Javaバイトコードインストラクションのシーケンスによって実行される1つ以上の操作を実行するように動作可能である。
【0016】
本発明の他の実施形態は、Javaコンピューティング環境において、Javaマクロインストラクションの生成に適するJavaマクロインストラクションジェネレータを提供し、それぞれのJavaマクロインストラクションは1つ以上のJavaバイトコードインストラクションに対応する。前記Javaマクロインストラクションジェネレータは、Javaバイトコードインストラクションのストリームを読み出し、前記Javaバイトコードストリーム中の2つ以上のJavaバイトコードインストラクションが1つのインストラクションによって表現できるかどうかを決定し、前記決定することが、前記Javaバイトコードストリーム中の2つ以上のJavaバイトコードインストラクションが1つのインストラクションによって表現できると決定するとき、前記2つ以上のJavaバイトコードインストラクションを表現するJavaマクロインストラクションを生成するよう動作する。前記JavaマクロインストラクションはJava仮想マシンによる実行に適し、実行されるとき前記Javaマクロインストラクションは、前記2つ以上のJavaバイトコードインストラクションによって実行される1つ以上の操作を実行するように動作可能である。
【0017】
本発明のこれらや他の局面および利点は、以下の詳細な説明が添付図面と共に読まれればより明らかになろう。
【発明を実施するための最良の形態】
【0018】
本発明は添付の図面を参照して以下の詳細な説明によって容易に理解されるだろう。図面において同様の参照番号は同様の要素を表す。
【0019】
背景技術において述べられたように、Javaプログラミング環境は大きく広がった成功を収めた。したがってJavaコンパチブルなデバイスの幅を広げ、そのようなデバイスのパフォーマンスを改善しようとする努力が続いている。特定のプラットフォーム上でのJavaベースのプログラムのパフォーマンスに最も影響を与えるファクタの一つは、基礎になる仮想マシンのパフォーマンスである。典型的には仮想マシンは、Javaオブジェクトのクラスに関連付けられた情報を内部において表現し格納する。しかし従来の技術を用いてこの情報にアクセスするのには貴重な処理時間をとる。これは特に計算パワーおよび/またはメモリが制限されているシステムにおいては、仮想マシンのパフォーマンスを深刻に低下しえる。したがってJavaに従う仮想マシンのパフォーマンスを改善するための努力が多くの団体によって精力的になされてきた。
【0020】
この目的や他の目的を達成するために、Javaコンピューティング環境において用いられるのに適するJavaマクロインストラクションを生成する技術が開示される。よってこの技術は、Javaインストラクションを効率的に実行するためにJava仮想マシンにおいて実現されえる。理解されるように、Javaマクロインストラクションは、2つ以上のJavaバイトコードインストラクションと置き換えられえる。これはさらにインタプリタによって実行されるJavaインストラクションの数を減らす。その結果、仮想マシン、特に限られたリソースで動作する仮想マシンのパフォーマンスは改善される。
【0021】
本発明の実施形態は、以下に図2A〜13Cを参照して説明される。しかしこれらの図を参照してここで与えられた詳細な説明は説明の目的だけであって、本発明はこれらの限定された実施形態を超えるものであることが当業者には容易に理解されよう。
【0022】
図2Aは、本発明のある実施形態によるJavaコンピューティング環境200を示す。Javaコンピューティング環境200は、インタプリタによる実行に適するマクロインストラクションの生成に適するJavaマクロインストラクションジェネレータ202を含む。図2Aに示されるように、Javaマクロインストラクションジェネレータ202は、Javaバイトコードインストラクション204(Javaバイトコードインストラクション1〜N)のストリームを読むことができる。さらにJavaマクロインストラクションジェネレータ202は、ストリーム204中の2つ以上のJavaバイトコードインストラクションを表すJavaマクロインストラクション206を作ることができる。
【0023】
ストリーム204中のJavaバイトコードインストラクションは、従来のJavaバイトコードインストラクション、例えば、Javaオブジェクトをインスタンス化するためにシーケンス中に典型的に現れる従来のインストラクション「new」および「dup」でありえる。当業者には理解されるように、ある種のシーケンスは、Javaプログラムの実行中に頻繁に現れる。このようなシーケンスを単一のマクロインストラクションに置き換えることは、Javaバイトコードインストラクションをディスパッチすることに関連付けられたオーバヘッドを低減しえる。その結果、仮想マシン、特に限られたリソースで動作する仮想マシンのパフォーマンスは向上する。
【0024】
Javaマクロインストラクションジェネレータ202は、本発明のある好ましい実施形態によるJavaバイトコードトランスレータと共に用いられもする。こんどは図2Bを参照して、Javaバイトコードトランスレータ230は、従来のJavaインストラクション1〜Mを本発明のJavaインストラクション234(1〜N)にトランスレートするよう動作し、ここでNは整数Mより小さい整数である。Javaバイトコードトランスレータ230およびJavaインストラクション1〜Nのさらなる詳細は、「REDUCED INSTRUCTION SET FOR JAVA VIRTUAL MACHINES」と題された米国特許出願第09/819,120号(弁護士整理番号SUN1P811/P5512)、および「ENHANCED VIRTUAL MACHINE INSTRUCTIONS」と題された米国特許出願第09/820,097号(弁護士整理番号SUN1P827/P6095)に記載されている。理解されるように、本発明のJavaインストラクションをJavaマクロインストラクションジェネレータと共に使用すれば、仮想マシンのパフォーマンスをさらに向上させることができる。
【0025】
Javaマクロインストラクションは、本発明のある実施形態によれば、Javaストリームのペアとして仮想マシン内で内部表現されてもよいことに注意されたい。Javaストリームのペアは、コードストリームおよびデータストリームでありえる。コードストリームはJavaマクロインストラクションのコード部分を含むのに適し、データストリームはJavaマクロインストラクションのデータ部分を含むのに適する。インストラクションをストリームのペアとして表すことについてのさらなる詳細は、「IMPROVED FRAMEWORKS FOR LOADING AND EXECUTION OF OBJECT-BASED PROGRAMS」と題された米国特許出願第09/703,449号(弁護士整理番号SUN1P814/P5417)に見られる。
【0026】
図3は、本発明のある実施形態によるJavaマクロインストラクションを生成する方法300を示す。この方法300は、例えば図2A〜BのJavaマクロインストラクションジェネレータ202によって使用されえる。まず操作302において、Javaバイトコードインストラクションのストリームが読み出される。理解されるように、Javaバイトコードインストラクションのストリームは、バイトコードベリフィケーションフェーズのあいだに読み出されえる。Javaバイトコードベリフィケーションは典型的にはJavaインストラクションの正確さを確実にするために実行される。そのため操作302は、バイトコードベリフィケーションのあいだに効率的に実行されえるが、これは典型的にはバイトコードインストラクションをベリファイする必要があるからである。
【0027】
次に操作304において、2つ以上のJavaバイトコードインストラクションの所定のシーケンスが見つかったかどうかについて決定がなされる。もし操作304において、2つ以上のJavaバイトコードインストラクションの所定のシーケンスが見つからなかったら、方法300は終わる。しかしもし操作304において、2つ以上のJavaバイトコードインストラクションの所定のシーケンスが見つかったら、方法300は操作306に進み、ここでこの2つ以上のJavaバイトコードインストラクションのシーケンスを表すJavaマクロインストラクションが生成される。方法300は操作306に続いて終わる。操作304および306はJavaバイトコードベリフィケーションフェーズのあいだにも実行されえることに注意されたい。
【0028】
図4は、本発明の他の実施形態によるJavaマクロインストラクションを生成する方法400を示す。方法400は例えば、図2A〜BのJavaマクロインストラクションジェネレータ202によって使用されえる。最初に操作402において、Javaバイトコードインストラクションのストリームが読み出される。再び操作402は、バイトコードベリフィケーションのあいだに効率的に実行されえるが、これはバイトコードベリフィケーションが典型的にはいずれにしても実行されるからである。
【0029】
次に操作404において、JavaバイトコードインストラクションのシーケンスがJavaバイトコードインストラクションのストリーム中に現れる回数がカウントされる。その後、操作406において、シーケンスが少なくとも所定の回数だけカウントされたかどうかについての決定がなされる。もし操作406においてシーケンスが少なくとも所定の回数だけカウントされなかったと決定されるなら、方法400は終了する。しかしもし操作406においてシーケンスが少なくとも所定の回数だけカウントされたと決定されるなら、方法400は操作408に進み、ここでJavaバイトコードインストラクションのシーケンスを表すJavaマクロインストラクションが生成される。方法400は操作408に続いて終わる。
【0030】
図5は、本発明のある実施形態によるJavaバイトコードベリファイア500を示す。Javaバイトコードベリファイア500は、Javaバイトコード504のストリームを分析するのに適するシーケンスアナライザ502を含む。図5に示されるように、Javaバイトコード504のストリームは、Javaバイトコードインストラクション1〜Nのシーケンスからなる。Javaバイトコードベリファイア500は、2つ以上のJavaバイトコードインストラクションが1つのJavaマクロインストラクションとして表現されえるかどうかを決定するために動作する。もしバイトコードベリファイア500が2つ以上のJavaバイトコードインストラクションがJavaマクロインストラクションとして表現されえると決定するなら、バイトコードベリファイア500はJavaマクロインストラクションを作る。Javaマクロインストラクションは2つ以上のJavaバイトコードインストラクションのシーケンスに対応する。したがってJavaマクロインストラクションは、Javaストリーム中の2つ以上のJavaバイトコードインストラクションのシーケンスを置き換えることができる。
【0031】
図5を参照して、ストリーム504中の2つ以上のJavaバイトコードインストラクション506のシーケンスは、Javaバイトコードベリファイア500によって識別されえる。2つ以上のJavaバイトコードインストラクションのシーケンス506(インストラクションI1〜IM)は、ストリーム504中の位置Kから(K+M−1)に位置しえる。2つ以上のJavaバイトコードインストラクション506のシーケンスを識別した後、Javaバイトコードベリファイア500は、このシーケンスをJavaマクロインストラクション508(I1〜IM)で置き換えるように動作しえる。その結果、ストリーム504は、(N−M)のJavaバイトコードインストラクションからなるストリーム510へと小さくされる。理解されるように、Javaバイトコードベリファイア500は、Javaバイトコードインストラクションの多くの所定のシーケンスを識別し、それらを適切なJavaマクロインストラクションと置き換えることができる。Javaバイトコードベリファイア500は、ストリーム504中に現れるシーケンスを分析し、ある判断基準を満たすもの(例えば所定回数を超えて現れたシーケンス)だけを置き換えるようにインプリメントされえる。いずれの場合も、入力ストリーム504(例えばストリーム504)中のJavaバイトコードインストラクションの個数は、大幅に減少されえる。よって仮想マシン、特に限られたリソースで動作するもののパフォーマンスは向上されえる。
【0032】
上述のようにストリーム中で置き換えられたJavaバイトコードインストラクションは、シーケンス中でしばしば現れる従来のJavaバイトコードインストラクションでありえる。そのような一例は、Javaオブジェクトをインスタンス化するためにシーケンス中に典型的には現れる「Newx」および「Dupx」を表す従来のインストラクション(例えばNew-Dup, Newarray-Dup_x1, Anewarray-Dup_x2など)のさまざまな組み合わせである。
【0033】
図6Aは、本発明のある実施形態によるJavaマクロインストラクションジェネレータ602を含むJavaコンピューティング環境600を示す。今度は図6Aを参照して、従来のJavaバイトコードインストラクション「Newx」および「Dupx」がシーケンス610の中で描かれる。シーケンス610は、Javaマクロインストラクションジェネレータ602によって単一のJavaマクロインストラクション「New−Dup」で置換されえる。当業者には理解されるように、シーケンス610は、Javaプログラムの実行中にしばしば出現しえる。よってこのシーケンスを単一のマクロインストラクションによって置換することは、Javaバイトコードインストラクションをディスパッチするのに関連付けられたオーバヘッドを低減しえる。
【0034】
再び、Javaマクロインストラクション602は、本発明のある好ましい実施形態においてはJavaバイトコードトランスレータと共に使用されてもよいことに注意されたい。Javaバイトコードトランスレータおよび新規なJavaバイトコードインストラクションのさらなる詳細は、「REDUCED INSTRUCTION SET FOR JAVA VIRTUAL MACHINES」と題された米国特許出願第09/819,120号(弁護士整理番号SUN1P811/P5512)、および「ENHANCED VIRTUAL MACHINE INSTRUCTIONS」と題された米国特許出願第09/820,097号(弁護士整理番号SUN1P827/P6095)に記載される。
【0035】
図6Bは、本発明のある実施形態によるJavaマクロインストラクションジェネレータ602およびJavaバイトコードトランスレータ622を含むJavaコンピューティング環境620を示す。今度は図6Bを参照して、Javaバイトコードトランスレータ622は、従来のJavaインストラクション610を本発明のJavaインストラクション630に翻訳するよう動作する。Javaマクロインストラクションジェネレータ602は、本発明のJavaインストラクション630を受け取り、対応するJavaマクロインストラクション「New−Dup」624を生成しえる。
【0036】
本発明のJavaインストラクション630は、Java仮想マシンによって実行するのに適切なJavaインストラクションの小さくされたセットを表現することに注意されたい。これは、本発明の縮小されたセット中のインストラクションの数が従来のJavaバイトコードインストラクションセット中のインストラクションの数よりもはるかに少ないことを意味する。さらに本発明のJavaインストラクションは、従来のJavaバイトコードインストラクションによって実行されえない新規な操作を提供する。例として、本発明の仮想マシン操作「DUP」(シーケンス630として示される)は、本発明のある実施形態によって提供されえる。本発明の仮想マシンインストラクションDUPは、実行スタック上のさまざまな位置における値が実行スタックの上に複製されることを可能にする。
【0037】
図7Aは、本発明のある実施形態によるスタック上の値を複製するのに適する本発明の「DUP」インストラクション702の内部表現701を含むコンピューティング環境700を示す。内部表現701は、ストリームのペア、つまりコードストリーム706およびデータストリーム708を含む。記載された実施形態において、コードストリーム706およびデータストリーム708におけるそれぞれのエントリーは1バイトを表す。本発明の仮想マシンインストラクションDUP702は、コードストリーム706中のデータパラメータAと関連付けられる。データパラメータAはまたデータストリーム708においてインプリメントされてもよいことに注意されたい。いずれの場合もデータパラメータAは、実行スタック704上のどの4バイト値(ワード値)が実行スタック704の最上部に複製されるべきかを示す。データパラメータAは、例えば、実行スタック704の最上部からのオフセットを示しえる。図7Aに示されるように、データパラメータAは、実行スタック上のワード(4バイト)値である「Wi」への参照でありえる。したがって実行時において、仮想マシンは「DUP」コマンド702を実行できる。その結果、Wiワードは、スタックの最上部に複製される。よって本発明の「DUP」インストラクションは、4バイト値を実行スタックの最上部へ複製するよう動作するさまざまなJavaバイトコードインストラクションを効率的に置換できる。図7Bは、これらのJavaバイトコードインストラクションのいくつかを示す。同様に図7Cに示されるように、本発明の「DUPL」インストラクションは、8バイト値(2ワード)を実行スタックの最上部へ複製するよう動作するさまざまなJavaバイトコードインストラクションを効率的に置換するよう提供されえる。
【0038】
従来のバイトコード「Dupx」インストラクションは、実行スタック上のある位置に存在する値の複製しかできなかった(すなわち従来のインストラクションDup、Dup_x1およびDup_x2は、それぞれ実行スタック上の第1、第2および第3ワードの複製を可能にする)。しかし本発明のインストラクション「DUP」および「DUPL」は、実行スタック上のより幅広い範囲(例えばW4、Wi、WNなど)を複製するのに使用されえる。
【0039】
図6Bに戻って、他の本発明によるインストラクション、Javaバイトコードインストラクション「New」がシーケンス630中に示される。Javaバイトコードインストラクション「New」は、インスタンス化に用いられるさまざまな従来のJavaバイトコードを効率的に置換できる。
【0040】
図8は、Javaバイトコードインスタンス化インストラクションの、本発明のある実施形態によって提供される仮想マシンインストラクションへのマッピングを示す。理解されるように、4つの従来のJavaバイトコードインストラクションは、単一の仮想マシンインストラクション(例えばNEW)に効率的にマッピングされえる。仮想マシンインストラクションNEWは、さまざまなタイプのオブジェクトおよびアレイをインスタンス化するように働く。ある実施形態において、本発明の仮想マシンインストラクションNEWは、Javaバイトコードインスタンス化インストラクションのパラメータ値に基づいてオブジェクトまたはアレイのタイプを決定するよう働く。理解されるように、インスタンス化のためのJavaバイトコードインストラクションの後には、タイプを表すパラメータ値が典型的には続く。よってパラメータ値は、容易に利用可能であり、NEW仮想マシンインストラクションが実行時に適切なタイプをインスタンス化することが可能になるよう利用されえる。
【0041】
図9Aは、Javaインタプリタによってしばしば実行されえる従来のJavaバイトコードの他のシーケンス902を示す。シーケンス902は、ループをプログラムするのに用いられる例示的なインストラクションのシーケンスを表す。よってシーケンス902のようなシーケンスは、Javaバイトコードインストラクションの実行中に何度も繰り返して反復されえる。図9Aに示されるように、Javaマクロインストラクションジェネレータ202は、従来のJavaインストラクション「iinc」、「iload」、および「if_cmplt」のシーケンスをJavaマクロインストラクション「Loop1」で置換することができる。
【0042】
図9Bは、本発明のある実施形態によるJavaマクロインストラクションジェネレータ902およびJavaバイトコードトランスレータ904を含むJavaコンピューティング環境900を示す。今度は図9Bを参照して、Javaバイトコードトランスレータ904は、従来のJavaインストラクション910を本発明のJavaインストラクション920に翻訳するよう動作する。Javaマクロインストラクションジェネレータ902は、本発明のJavaインストラクション920を受け取り、対応するJavaマクロインストラクション「Loop1」940を生成できる。
【0043】
シーケンス920中の本発明のインストラクションのうちの1つは、本発明のインストラクション「Load」である。図10Aは、本発明の他の実施形態による、局所変数から値をロードするのに適するJava「Load」インストラクションのセットの内部表現1000を示す。記載された実施形態において、内部表現1000のコードストリーム1002は、1つ以上のJava「局所変数からのLoad」バイトコードインストラクションの表現に適する本発明の仮想マシンインストラクションを表すLoadコマンド1006を含む。Loadコマンド1006はそれに関連付けられた1バイトのパラメータ、つまりインデックスi1008をデータストリーム1004の中に持つことに注意されたい。理解されるようにランタイムにおいて、Loadコマンド1006は、実行スタック1020の最上部にある局所変数をロード(またはプッシュ)するために仮想マシンによって実行されえる。例としてオフセット1022は、実行スタック1020上に格納された局所変数についての開始オフセットを示しえる。したがってオフセットi1024は、インデックスi1008に対応する実行スタック1020中の位置を特定する。
【0044】
記載された実施形態において、Loadコマンド1006は、局所変数を4バイト(1ワード)でロードするのに使用されることに注意されたい。その結果、4バイトA、B、CおよびD(オフセットi1024で始まる)によって示される値は、Loadコマンド1006が実行されるときに実行スタック1020の最上部にロードされる。このように、Loadコマンド1006およびインデックスi1008は、ランタイムにおいて実行スタックの最上部にある4バイトの局所変数をロード(またはプッシュ)するのに用いられえる。理解されるように、Loadコマンド1006は、さまざまな従来のJavaバイトコードインストラクションを効率的に表現できる。図10Bは、本発明のある実施形態によって本発明の「Load」コマンドによって表現されえる4バイトの局所変数をロードするJavaバイトコードインストラクションのセットを示す。
【0045】
4バイトによって表現された値を持たない局所変数をロードするためにも本発明は提供されえることに注意されたい。例えば図10Cは、本発明のある実施形態によって8バイトの局所変数をロードするJavaバイトコードインストラクションのセットを示す。理解されるように、図10Cに列挙されたJavaバイトコードインストラクションの全ては、単一の仮想マシンインストラクション(例えば「LoadL」コマンド)によって表現されえる。この「LoadL」コマンドは例えば上述と同様にして動作しえる。
【0046】
図9Bに戻って、Javaバイトコードトランスレータ904は、シーケンス910中の従来のバイトコードインストラクション「if_cmplt」を、Javaバイトコードインストラクションの縮小されたセット中の2つのバイトコードインストラクション「OP_ISUB」および「OP_JMPLT」に置換するよう動作する。理解されるように、本発明の仮想マシンインストラクションの2つ以上は、本発明のある実施形態によれば比較的より複雑な操作を実行するために結合されえる。例示として、Javaバイトコードインストラクション「lcmp」(スタック上の2つの長い値を比較し、その比較に基づいて、スタック上に0または1をプッシュする)によって実行される従来のフロー制御操作は、本発明の仮想マシンインストラクション「LSUB」(長いサブディビジョン)と、それに続く他の本発明の仮想マシンインストラクションJMPEQ(等しいならジャンプ)とを実行することによって効率的に実行される。図11Aおよび11Bは、本発明のある実施形態による2つの本発明の仮想マシンインストラクションによって表現されえる条件付きフロー制御操作を実行するいくつかの従来のJavaバイトコードインストラクションを示す。
【0047】
図12Aは、Javaインタプリタによってしばしば実行されえる従来のJavaバイトコードのさらに他のシーケンス1210を示す。シーケンス1210は、フィールド値を得て、それを実行スタック上に置くことを実行するインストラクションの例示的なシーケンスを示す。図12Aに示されるように、Javaマクロインストラクションジェネレータ602は、Javaインストラクション「Getfield」および「Astorex」の従来のシーケンス1210をJavaマクロインストラクション「Get_Store」1212で置換できる。従来のインストラクション「Astorex」は、実行スタック上の値を格納するのに用いられるさまざまな従来のJavaインストラクションを表現する。
【0048】
図12Bは、本発明のある実施形態によるJavaマクロインストラクションジェネレータ602およびJavaバイトコードトランスレータ622を含むJavaコンピューティング環境1200を示す。今度は図12Bを参照して、Javaバイトコードトランスレータ622は、従来のJavaインストラクション1210を本発明のJavaインストラクション1220に翻訳するよう動作する。Javaマクロインストラクションジェネレータ602は、本発明のJavaインストラクション1220を受け取り、対応するJavaマクロインストラクション「Resolve_Astore」1222を生成することができる。
【0049】
本発明のインストラクション「Astore」は、アレイに値を格納するのに適する仮想マシンインストラクションを表す。例示として、図13Aは、本発明のある実施形態によるコンピューティング環境1320を示す。本発明のAStore1322(アレイにストアする)仮想マシンインストラクションは、本発明のある実施形態によって実行スタック1304からのさまざまな値を異なるタイプのアレイに格納するのに用いられえる。再び、アレイ1302のヘッダ1310は、アレイのタイプを決定するために読み出しされえる。アレイのタイプに基づいて、適切な値(すなわち実行スタック1304上の適切なバイト数N)が決定されえる。この値は、アレイインデックス1326を使うことによってそれからアレイ1302中に格納される。よって本発明の仮想マシンインストラクションAStoreは、値をアレイに格納するのに用いられるさまざまなJavaバイトコードインストラクションを効率的に表現できる。図13Bおよび13Cは、本発明のある実施形態による本発明の仮想マシンインストラクションによって表現されえるアレイに格納するための従来のJavaバイトコードインストラクション(Astore)を示す。
【0050】
表Aは、従来のJavaバイトコードインストラクションのセットの、右カラムに列挙された1つ以上の本発明の仮想マシンインストラクションへのマッピングを示す。
【表A】
【0051】
本発明の多くの特徴および利点は詳細な説明から明らかであり、よって添付の特許請求の範囲は本発明の全てのそのような特徴および利点を含むと意図される。さらに多くの改変および変更が当業者には容易に可能であるので、本発明は図示され記載されたのとまったく同一の構成および動作に限定されるべきではない。したがって全ての適切な変更および等価物は本発明の範囲に含まれるように解される。
【図面の簡単な説明】
【0052】
【図1A】インタプリタであるJava仮想マシンによる実行を通したJavaソースコードの簡単なものの進行を示す図である。
【図1B】簡略化されたクラスファイルを示す図である。
【図2A】Javaマクロインストラクションジェネレータを含むJavaコンピューティング環境を示す図である。
【図2B】Javaマクロインストラクションジェネレータを含むJavaコンピューティング環境を示す図である。
【図3】本発明のある実施形態によるJavaマクロインストラクションを生成する方法を示す図である。
【図4】本発明の他の実施形態によるJavaマクロインストラクションを生成する方法を示す図である。
【図5】本発明のある実施形態によるJavaバイトコードベリファイアを示す図である。
【図6A】本発明のある実施形態によるJavaマクロインストラクションジェネレータを含むJavaコンピューティング環境を示す図である。
【図6B】本発明のある実施形態によるJavaバイトコードトランスレータを含むJavaコンピューティング環境を示す図である。
【図7A】本発明のある実施形態によるスタック上の値を複製するのに適する本発明の「DUP」インストラクションの内部表現を含むコンピューティング環境を示す図である。
【図7B】図7Aで示されたJavaバイトコードインストラクションのいくつかを示す図である。
【図7C】図7Aで示されたJavaバイトコードインストラクションのいくつかを示す図である。
【図8】Javaバイトコードインスタンス化インストラクションの、本発明のある実施形態によって提供される仮想マシンインストラクションへのマッピングを示す図である。
【図9A】Javaインタプリタによってしばしば実行されえる従来のJavaバイトコードの他のシーケンスを示す図である。
【図9B】本発明のある実施形態によるJavaマクロインストラクションジェネレータおよびJavaバイトコードトランスレータを含むJavaコンピューティング環境を示す図である。
【図10A】本発明の他の実施形態による、局所変数から値をロードするのに適するJava「Load」インストラクションのセットの内部表現を示す図である。
【図10B】本発明のある実施形態によって本発明の「Load」コマンドによって表現されえる4バイトの局所変数をロードするJavaバイトコードインストラクションのセットを示す図である。
【図10C】本発明のある実施形態によって8バイトの局所変数をロードするJavaバイトコードインストラクションのセットを示す図である。
【図11A】本発明のある実施形態による2つの本発明の仮想マシンインストラクションによって表現されえる条件付きフロー制御操作を実行するいくつかの従来のJavaバイトコードインストラクションを示す図である。
【図11B】本発明のある実施形態による2つの本発明の仮想マシンインストラクションによって表現されえる条件付きフロー制御操作を実行するいくつかの従来のJavaバイトコードインストラクションを示す図である。
【図12A】Javaインタプリタによってしばしば実行されえる従来のJavaバイトコードのさらに他のシーケンスを示す図である。
【図12B】従来のJavaインストラクションを本発明のJavaインストラクションに翻訳するよう動作するJavaバイトコードトランスレータを示す図である。
【図13A】本発明のある実施形態によるコンピューティング環境を示す図である。
【図13B】本発明のある実施形態による本発明の仮想マシンインストラクション(例えばAstore)によって表現されえるアレイに格納するための従来のJavaバイトコードインストラクションのセットを示す図である。
【図13C】本発明のある実施形態による本発明の仮想マシンインストラクション(例えばAstore)によって表現されえるアレイに格納するための従来のJavaバイトコードインストラクションのセットを示す図である。
Claims (20)
- 1つ以上のJavaバイトコードインストラクションに対応するJavaマクロインストラクションを生成する方法であって、
Javaバイトコードインストラクションのストリームを読み出すこと、
前記Javaバイトコードストリーム中の2つ以上のJavaバイトコードインストラクションが1つのインストラクションによって表現できるかどうかを決定すること、
前記決定することが、前記Javaバイトコードストリーム中の2つ以上のJavaバイトコードインストラクションが1つのインストラクションによって表現できると決定するとき、前記2つ以上のJavaバイトコードインストラクションを表現するJavaマクロインストラクションを生成すること、
を含み、
前記JavaマクロインストラクションはJava仮想マシンによる実行に適し、
実行されるとき前記Javaマクロインストラクションは、前記2つ以上のJavaバイトコードインストラクションによって実行される1つ以上の操作を実行するように動作可能である
方法。 - 請求項1に記載の方法であって、前記決定することは、2つ以上のJavaバイトコードインストラクションの所定のシーケンスが見つかったかどうかを決定するよう動作する方法。
- 請求項1に記載の方法であって、前記読み出すことは、Javaバイトコードベリフィケーションのあいだに前記仮想マシンによって実行される方法。
- 請求項1に記載の方法であって、前記2つ以上のJavaバイトコードインストラクションを前記Javaマクロインストラクションで置換することをさらに含み、
前記マクロインストラクションは前記仮想マシンの内部で表現される方法。 - 請求項4に記載の方法であって、前記内部表現はストリームのペアを含む方法。
- 請求項5に記載の方法であって、
前記ストリームのペアはコードストリームおよびデータストリームであり、
前記コードストリームは、前記Javaマクロインストラクションのコード部分を含むのに適し、
前記データストリームは、前記Javaマクロインストラクションのデータ部分を含むのに適する方法。 - 1つ以上のJavaバイトコードインストラクションに対応するJavaマクロインストラクションを生成する方法であって、
Javaバイトコードインストラクションのストリームを読み出すこと、
前記JavaバイトコードインストラクションのストリームにJavaバイトコードインストラクションのシーケンスが現れる回数をカウントすることであって、前記Javaバイトコードインストラクションのシーケンスは、前記ストリーム中のシーケンスにある2つ以上のJavaバイトコードインストラクションを含む、カウントすること、
前記Javaバイトコードインストラクションのシーケンスが1つのインストラクションによって表現されるべきかどうかを決定すること、
前記決定することが、前記Javaバイトコードインストラクションの前記シーケンスが前記1つのインストラクションによって表現されえると決定するとき、前記Javaバイトコードインストラクションのシーケンスを表現するJavaマクロインストラクションを生成すること、
を含み、
前記JavaマクロインストラクションはJava仮想マシンによる実行に適し、
実行されるとき前記Javaマクロインストラクションは、前記Javaバイトコードインストラクションのシーケンスによって実行される1つ以上の操作を実行するように動作可能である
方法。 - 請求項7に記載の方法であって、前記Javaバイトコードインストラクションのシーケンスが1つのインストラクションによって表現されるべきかどうかを決定することは、前記シーケンスが少なくとも所定の回数だけカウントされたかどうかを決定するよう動作する方法。
- 請求項8に記載の方法であって、前記カウントすることは、バイトコードベリフィケーションのあいだに実行される方法。
- 請求項9に記載の方法であって、前記2つ以上のJavaバイトコードインストラクションを前記Javaマクロインストラクションで置換することをさらに含み、
前記マクロインストラクションは前記仮想マシンの内部で表現される方法。 - 請求項10に記載の方法であって、前記内部表現はストリームのペアを含む方法。
- 請求項11に記載の方法であって、
前記ストリームのペアはコードストリームおよびデータストリームであり、
前記コードストリームは、前記Javaマクロインストラクションのコード部分を含むのに適し、
前記データストリームは、前記Javaマクロインストラクションのデータ部分を含むのに適する方法。 - 1つ以上のJavaバイトコードインストラクションに対応するJavaマクロインストラクションを生成する方法であって、
JavaバイトコードベリフィケーションのあいだにJavaバイトコードインストラクションのストリームを読み出すこと、
前記Javaバイトコードストリーム中の2つ以上のJavaバイトコードインストラクションが1つのインストラクションによって表現できるかどうかを決定すること、
前記決定することが、前記Javaバイトコードストリーム中の2つ以上のJavaバイトコードインストラクションが1つのインストラクションによって表現できると決定するとき、前記2つ以上のJavaバイトコードインストラクションを表現するJavaマクロインストラクションを生成すること、
を含み、
前記JavaマクロインストラクションはJava仮想マシンによる実行に適し、
実行されるとき前記Javaマクロインストラクションは、前記2つ以上のJavaバイトコードインストラクションによって実行される1つ以上の操作を実行するように動作可能である
方法。 - 請求項13に記載の方法であって、
前記決定することは、2つ以上のJavaバイトコードインストラクションの所定のシーケンスが見つかったかどうかを決定するよう動作する方法。 - 請求項13に記載の方法は、前記ストリームにJavaバイトコードインストラクションのシーケンスが現れる回数をカウントすることをさらに含み、
前記決定することは、シーケンスが少なくとも所定の回数だけカウントされたかどうかを決定するよう動作する方法。 - Javaコンピューティング環境において、Javaマクロインストラクションの生成に適するJavaマクロインストラクションジェネレータであって、
それぞれのJavaマクロインストラクションは1つ以上のJavaバイトコードインストラクションに対応し、
前記Javaマクロインストラクションジェネレータは、
Javaバイトコードインストラクションのストリームを読み出し、
前記Javaバイトコードストリーム中の2つ以上のJavaバイトコードインストラクションが1つのインストラクションによって表現できるかどうかを決定し、
前記決定することが、前記Javaバイトコードストリーム中の2つ以上のJavaバイトコードインストラクションが1つのインストラクションによって表現できると決定するとき、前記2つ以上のJavaバイトコードインストラクションを表現するJavaマクロインストラクションを生成するよう動作し、
前記JavaマクロインストラクションはJava仮想マシンによる実行に適し、
実行されるとき前記Javaマクロインストラクションは、前記2つ以上のJavaバイトコードインストラクションによって実行される1つ以上の操作を実行するように動作可能である
Javaマクロインストラクションジェネレータ。 - 請求項16に記載のJavaマクロインストラクションジェネレータであって、前記JavaマクロインストラクションジェネレータはJavaバイトコードベリフィケーションのあいだ動作するJavaマクロインストラクションジェネレータ。
- 請求項16に記載のJavaマクロインストラクションジェネレータであって、前記Javaマクロインストラクションジェネレータは、2つ以上のJavaバイトコードインストラクションの所定のシーケンスが見つかったかどうかを決定するよう動作するJavaマクロインストラクションジェネレータ。
- 請求項16に記載のJavaマクロインストラクションジェネレータであって、
前記2つ以上のJavaバイトコードインストラクションを前記Javaマクロインストラクションで置換するよう動作し、
前記マクロインストラクションは前記仮想マシンの内部で表現されるJavaマクロインストラクションジェネレータ。 - 請求項19に記載のJavaマクロインストラクションジェネレータであって、前記内部表現はストリームのペアを含むJavaマクロインストラクションジェネレータ。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/939,122 US6988261B2 (en) | 2001-08-24 | 2001-08-24 | Frameworks for generation of Java macro instructions in Java computing environments |
PCT/US2002/027003 WO2003019367A1 (en) | 2001-08-24 | 2002-08-23 | Replacing java bytecode sequences by macro instructions |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005501334A true JP2005501334A (ja) | 2005-01-13 |
Family
ID=25472579
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003523363A Pending JP2005501334A (ja) | 2001-08-24 | 2002-08-23 | Javaコンピューティング環境におけるJavaマクロインストラクションの生成のためのフレームワーク |
Country Status (4)
Country | Link |
---|---|
US (1) | US6988261B2 (ja) |
EP (1) | EP1419440A1 (ja) |
JP (1) | JP2005501334A (ja) |
WO (1) | WO2003019367A1 (ja) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7543288B2 (en) | 2001-03-27 | 2009-06-02 | Sun Microsystems, Inc. | Reduced instruction set for Java virtual machines |
US20050028132A1 (en) * | 2003-07-31 | 2005-02-03 | Srinivasamurthy Venugopal K. | Application specific optimization of interpreters for embedded systems |
US7263690B1 (en) * | 2003-11-14 | 2007-08-28 | Sun Microsystems, Inc. | Mechanism for safe byte code in a tracing framework |
US8020141B2 (en) * | 2004-12-06 | 2011-09-13 | Microsoft Corporation | Operating-system process construction |
US7882317B2 (en) * | 2004-12-06 | 2011-02-01 | Microsoft Corporation | Process isolation using protection domains |
US7600232B2 (en) * | 2004-12-07 | 2009-10-06 | Microsoft Corporation | Inter-process communications employing bi-directional message conduits |
US8849968B2 (en) * | 2005-06-20 | 2014-09-30 | Microsoft Corporation | Secure and stable hosting of third-party extensions to web services |
KR100678912B1 (ko) * | 2005-10-18 | 2007-02-05 | 삼성전자주식회사 | 메소드 바이트코드 해석 방법 및 상기 방법에 의해동작하는 시스템 |
US8074231B2 (en) * | 2005-10-26 | 2011-12-06 | Microsoft Corporation | Configuration of isolated extensions and device drivers |
US20070094495A1 (en) * | 2005-10-26 | 2007-04-26 | Microsoft Corporation | Statically Verifiable Inter-Process-Communicative Isolated Processes |
US8032898B2 (en) | 2006-06-30 | 2011-10-04 | Microsoft Corporation | Kernel interface with categorized kernel objects |
US8789063B2 (en) | 2007-03-30 | 2014-07-22 | Microsoft Corporation | Master and subordinate operating system kernels for heterogeneous multiprocessor systems |
JP5533538B2 (ja) * | 2010-10-12 | 2014-06-25 | 富士通株式会社 | 情報処理装置、エミュレーション処理プログラム及びエミュレーション処理方法 |
US20150220310A1 (en) * | 2014-02-03 | 2015-08-06 | International Business Machines Corporation | Object field optimization |
CN112631724A (zh) * | 2020-12-24 | 2021-04-09 | 北京握奇数据股份有限公司 | 一种字节码指令集精简方法和系统 |
Family Cites Families (73)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4086626A (en) | 1974-10-07 | 1978-04-25 | Fairchild Camera And Instrument Corporation | Microprocessor system |
US4199811A (en) * | 1977-09-02 | 1980-04-22 | Sperry Corporation | Microprogrammable computer utilizing concurrently operating processors |
US4667290A (en) | 1984-09-10 | 1987-05-19 | 501 Philon, Inc. | Compilers using a universal intermediate language |
US4910731A (en) | 1987-07-15 | 1990-03-20 | Hitachi, Ltd. | Switching system and method of construction thereof |
US6285048B1 (en) | 1991-12-13 | 2001-09-04 | Symetrix Corporation | Barium strontium titanate integrated circuit capacitors and process for making the same |
EP0546682A3 (en) | 1991-12-12 | 1993-12-08 | Ibm | Parent class shadowing |
US5838980A (en) | 1994-01-18 | 1998-11-17 | Sybase, Inc. | Compilation and virtual machine arrangement and process for source code including pre-runtime executable language structure constructs |
US5694546A (en) | 1994-05-31 | 1997-12-02 | Reisman; Richard R. | System for automatic unattended electronic information transport between a server and a client by a vendor provided transport software with a manifest list |
US5748964A (en) * | 1994-12-20 | 1998-05-05 | Sun Microsystems, Inc. | Bytecode program interpreter apparatus and method with pre-verification of data type restrictions |
US6704923B1 (en) * | 1994-12-20 | 2004-03-09 | Sun Microsystems, Inc. | System and method for pre-verification of stack usage in bytecode program loops |
US5600726A (en) | 1995-04-07 | 1997-02-04 | Gemini Systems, L.L.C. | Method for creating specific purpose rule-based n-bit virtual machines |
US6151618A (en) | 1995-12-04 | 2000-11-21 | Microsoft Corporation | Safe general purpose virtual machine computing system |
GB9526129D0 (en) | 1995-12-21 | 1996-02-21 | Philips Electronics Nv | Machine code format translation |
US5970242A (en) | 1996-01-24 | 1999-10-19 | Sun Microsystems, Inc. | Replicating code to eliminate a level of indirection during execution of an object oriented computer program |
US6026485A (en) | 1996-01-24 | 2000-02-15 | Sun Microsystems, Inc. | Instruction folding for a stack-based machine |
US5899997A (en) | 1996-04-03 | 1999-05-04 | Transparency Systems, Inc. | Object-oriented query mechanism |
US6151703A (en) | 1996-05-20 | 2000-11-21 | Inprise Corporation | Development system with methods for just-in-time compilation of programs |
US5815718A (en) | 1996-05-30 | 1998-09-29 | Sun Microsystems, Inc. | Method and system for loading classes in read-only memory |
US5920720A (en) | 1997-02-25 | 1999-07-06 | Microsoft Corporation | Efficient computer based virtual machine object structure |
US5978585A (en) * | 1997-03-27 | 1999-11-02 | Inprise Corporation | Development system with improved methods for recompiling dependent code modules |
US6003038A (en) | 1997-03-31 | 1999-12-14 | Sun Microsystems, Inc. | Object-oriented processor architecture and operating method |
US6101580A (en) | 1997-04-23 | 2000-08-08 | Sun Microsystems, Inc. | Apparatus and method for assisting exact garbage collection by using a stack cache of tag bits |
US6513156B2 (en) | 1997-06-30 | 2003-01-28 | Sun Microsystems, Inc. | Interpreting functions utilizing a hybrid of virtual and native machine instructions |
US6317872B1 (en) | 1997-07-11 | 2001-11-13 | Rockwell Collins, Inc. | Real time processor optimized for executing JAVA programs |
US6442753B1 (en) | 1997-08-28 | 2002-08-27 | International Business Machines Corporation | Apparatus and method for checking dependencies among classes in an object-oriented program |
US6072953A (en) | 1997-09-30 | 2000-06-06 | International Business Machines Corporation | Apparatus and method for dynamically modifying class files during loading for execution |
US6047125A (en) * | 1997-10-01 | 2000-04-04 | Sun Microsystems, Inc. | Garbage collection system for improved use of memory by removal of reference conflicts |
US6163780A (en) | 1997-10-01 | 2000-12-19 | Hewlett-Packard Company | System and apparatus for condensing executable computer software code |
EP0950216B1 (en) | 1997-10-02 | 2003-11-26 | Koninklijke Philips Electronics N.V. | A processing device for executing virtual machine instructions |
DE69836902T2 (de) | 1997-10-02 | 2007-10-18 | Koninklijke Philips Electronics N.V. | Auf variable instruktionen eingestellter computer |
US6072951A (en) | 1997-10-15 | 2000-06-06 | International Business Machines Corporation | Profile driven optimization of frequently executed paths with inlining of code fragment (one or more lines of code from a child procedure to a parent procedure) |
US5903761A (en) | 1997-10-31 | 1999-05-11 | Preemptive Solutions, Inc. | Method of reducing the number of instructions in a program code sequence |
US6182202B1 (en) | 1997-10-31 | 2001-01-30 | Oracle Corporation | Generating computer instructions having operand offset length fields for defining the length of variable length operand offsets |
US6118940A (en) | 1997-11-25 | 2000-09-12 | International Business Machines Corp. | Method and apparatus for benchmarking byte code sequences |
US6349344B1 (en) | 1997-12-16 | 2002-02-19 | Microsoft Corporation | Combining multiple java class files into a run-time image |
US6081665A (en) * | 1997-12-19 | 2000-06-27 | Newmonics Inc. | Method for efficient soft real-time execution of portable byte code computer programs |
US6704803B2 (en) | 1998-01-26 | 2004-03-09 | International Business Machines Corporation | Method and system for distributing data events over an information bus |
US6324685B1 (en) * | 1998-03-18 | 2001-11-27 | Becomm Corporation | Applet server that provides applets in various forms |
US6658492B1 (en) | 1998-03-20 | 2003-12-02 | Sun Microsystems, Inc. | System and method for reducing the footprint of preloaded classes |
US6330709B1 (en) | 1998-03-30 | 2001-12-11 | International Business Machines Corporation | Virtual machine implementation for shared persistent objects |
US6374286B1 (en) | 1998-04-06 | 2002-04-16 | Rockwell Collins, Inc. | Real time processor capable of concurrently running multiple independent JAVA machines |
US6096095A (en) | 1998-06-04 | 2000-08-01 | Microsoft Corporation | Producing persistent representations of complex data structures |
US6223202B1 (en) | 1998-06-05 | 2001-04-24 | International Business Machines Corp. | Virtual machine pooling |
US6434694B1 (en) | 1998-06-29 | 2002-08-13 | Sun Microsystems, Inc. | Security for platform-independent device drivers |
US6467037B1 (en) | 1998-06-30 | 2002-10-15 | Sun Microsystems, Inc. | Utilizing a program counter with one or more data counters for executing instructions |
US6496871B1 (en) | 1998-06-30 | 2002-12-17 | Nec Research Institute, Inc. | Distributed agent software system and method having enhanced process mobility and communication in a computer network |
US6205578B1 (en) | 1998-08-14 | 2001-03-20 | Ati International Srl | Interpreter for stack-based languages |
US6260187B1 (en) | 1998-08-20 | 2001-07-10 | Wily Technology, Inc. | System for modifying object oriented code |
US6446084B1 (en) | 1998-09-22 | 2002-09-03 | Sun Microsystems, Inc. | Optimizing symbol table lookups in platform-independent virtual machines |
US6202208B1 (en) | 1998-09-29 | 2001-03-13 | Nortel Networks Limited | Patching environment for modifying a Java virtual machine and method |
GB2343021A (en) | 1998-10-19 | 2000-04-26 | Ibm | Class loading model for object oriented programming |
US6338160B1 (en) | 1998-12-08 | 2002-01-08 | Nazomi Communications, Inc. | Constant pool reference resolution method |
US6332215B1 (en) | 1998-12-08 | 2001-12-18 | Nazomi Communications, Inc. | Java virtual machine hardware for RISC and CISC processors |
CA2262316A1 (en) | 1999-02-22 | 2000-08-22 | Ibm Canada Limited-Ibm Canada Limitee | System and method for detecting release-to-release binary compatibility in compiled object code |
US6571388B1 (en) | 1999-03-09 | 2003-05-27 | Hewlett-Packard Development Company, L.P. | Building a custom software environment including pre-loaded classes |
CA2267477C (en) * | 1999-03-30 | 2003-10-14 | Object Technology International Inc. | Packaging memory image files |
US6553565B2 (en) | 1999-04-23 | 2003-04-22 | Sun Microsystems, Inc | Method and apparatus for debugging optimized code |
US6393491B1 (en) | 1999-04-26 | 2002-05-21 | Sun Microsystems, Inc. | Method and apparatus for dispatch table construction |
US6412108B1 (en) * | 1999-05-06 | 2002-06-25 | International Business Machines Corporation | Method and apparatus for speeding up java methods prior to a first execution |
US6427228B1 (en) | 1999-05-12 | 2002-07-30 | International Business Machines Corporation | Combining a meta data file and java source code to dynamically create java classes and javabeans |
US6557023B1 (en) | 1999-05-28 | 2003-04-29 | Sun Microsystems, Inc. | Method and apparatus for avoiding array class creation in virtual machines |
US6434625B1 (en) | 1999-07-13 | 2002-08-13 | International Business Machines Corporation | Generalizing data streams to overcome differences in word length and byte order |
US6584612B1 (en) | 1999-07-15 | 2003-06-24 | International Business Machines Corporation | Transparent loading of resources from read-only memory for an application program |
US6560774B1 (en) * | 1999-09-01 | 2003-05-06 | Microsoft Corporation | Verifier to check intermediate language |
GB9920905D0 (en) | 1999-09-03 | 1999-11-10 | Sgs Thomson Microelectronics | A relocation format for linking |
WO2001022213A2 (en) | 1999-09-21 | 2001-03-29 | Koninklijke Philips Electronics N.V. | Optimized bytecode interpreter of virtual machine instructions |
US6738977B1 (en) | 2000-05-31 | 2004-05-18 | International Business Machines Corporation | Class sharing between multiple virtual machines |
US20020170034A1 (en) * | 2000-06-16 | 2002-11-14 | Reeve Chris L. | Method for debugging a dynamic program compiler, interpreter, or optimizer |
AU2001278329A1 (en) | 2000-11-20 | 2002-05-27 | Zucotto Wireless, Inc. | System and methods providing runtime byte code simplification for platform independent languages |
US6851111B2 (en) * | 2000-12-15 | 2005-02-01 | International Business Machines Corporation | System and method for class loader constraint checking |
GB0031750D0 (en) | 2000-12-28 | 2001-02-07 | Sgs Thomson Microelectronics | Retrieval of symbol attributes |
US7543288B2 (en) | 2001-03-27 | 2009-06-02 | Sun Microsystems, Inc. | Reduced instruction set for Java virtual machines |
US20020188726A1 (en) | 2001-06-08 | 2002-12-12 | Schick Andrew N. | Data object mark and send procedure |
-
2001
- 2001-08-24 US US09/939,122 patent/US6988261B2/en not_active Expired - Lifetime
-
2002
- 2002-08-23 WO PCT/US2002/027003 patent/WO2003019367A1/en active Application Filing
- 2002-08-23 JP JP2003523363A patent/JP2005501334A/ja active Pending
- 2002-08-23 EP EP02757363A patent/EP1419440A1/en not_active Ceased
Also Published As
Publication number | Publication date |
---|---|
US20030041321A1 (en) | 2003-02-27 |
EP1419440A1 (en) | 2004-05-19 |
WO2003019367A1 (en) | 2003-03-06 |
US6988261B2 (en) | 2006-01-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20030041317A1 (en) | Frameworks for generation of java macro instructions for storing values into local variables | |
US7941802B2 (en) | Reduced instruction set for java virtual machines | |
JP2005501334A (ja) | Javaコンピューティング環境におけるJavaマクロインストラクションの生成のためのフレームワーク | |
US7003778B2 (en) | Exception handling in java computing environments | |
US7228533B2 (en) | Frameworks for generation of Java macro instructions for performing programming loops | |
US6948156B2 (en) | Type checking in java computing environments | |
JP2005507103A (ja) | Javaヒープを実現するフレームワーク | |
JP2005501331A (ja) | Javaオブジェクトをインスタンス化するためのJavaマクロインストラクションを生成するフレームワーク | |
US6957428B2 (en) | Enhanced virtual machine instructions | |
US7036120B2 (en) | Two tier clusters for representation of objects in Java programming environments | |
US20020199169A1 (en) | Representation of Java data types in virtual machines | |
US6961933B2 (en) | Representation of Java data types in virtual machines | |
US7197750B2 (en) | Java Bytecode instruction for determining hashcode values | |
US7082597B2 (en) | Representation of objects in a Java programming environment | |
US20030041319A1 (en) | Java bytecode instruction for retrieving string representations of java objects |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050823 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080902 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20090310 |