(57)【要約】【課題】Ｊａｖａコンピューティング環境において用いられるのに適するＪａｖａマクロインストラクションを生成する技術を提供する。【解決手段】よってこの技術は、Ｊａｖａインストラクションを効率的に実行するためにＪａｖａ仮想マシンにおいて実現されえる。理解されるように、Ｊａｖａマクロインストラクションは、２つ以上のＪａｖａバイトコードインストラクションと置き換えられえる。これはさらにインタプリタによって実行されるＪａｖａインストラクションの数を減らす。その結果、仮想マシン、特に限られたリソースで動作する仮想マシンのパフォーマンスは改善される。Ｊａｖａマクロインストラクションは、従来のＪａｖａインストラクションシーケンスまたはインストラクションの小さくされたセットの中で提供されるＪａｖａインストラクションのシーケンスについて生成されえる。いずれの場合も頻繁に遭遇されるシーケンスがＪａｖａマクロインストラクションによって置換されえる。これらのシーケンスは典型的には、プログラミングループのあいだＪａｖａオブジェクトがインスタンス化されるとき、および局所変数に値が割り当てられるときに遭遇される。【選択図】図３
2005501334.tif 000002
【特許請求の範囲】
【請求項１】
１つ以上のＪａｖａバイトコードインストラクションに対応するＪａｖａマクロインストラクションを生成する方法であって、
Ｊａｖａバイトコードインストラクションのストリームを読み出すこと、
前記Ｊａｖａバイトコードストリーム中の２つ以上のＪａｖａバイトコードインストラクションが１つのインストラクションによって表現できるかどうかを決定すること、
前記決定することが、前記Ｊａｖａバイトコードストリーム中の２つ以上のＪａｖａバイトコードインストラクションが１つのインストラクションによって表現できると決定するとき、前記２つ以上のＪａｖａバイトコードインストラクションを表現するＪａｖａマクロインストラクションを生成すること、
を含み、
前記ＪａｖａマクロインストラクションはＪａｖａ仮想マシンによる実行に適し、
実行されるとき前記Ｊａｖａマクロインストラクションは、前記２つ以上のＪａｖａバイトコードインストラクションによって実行される１つ以上の操作を実行するように動作可能である
方法。
【請求項２】
請求項１に記載の方法であって、前記決定することは、２つ以上のＪａｖａバイトコードインストラクションの所定のシーケンスが見つかったかどうかを決定するよう動作する方法。
【請求項３】
請求項１に記載の方法であって、前記読み出すことは、Ｊａｖａバイトコードベリフィケーションのあいだに前記仮想マシンによって実行される方法。
【請求項４】
請求項１に記載の方法であって、前記２つ以上のＪａｖａバイトコードインストラクションを前記Ｊａｖａマクロインストラクションで置換することをさらに含み、
前記マクロインストラクションは前記仮想マシンの内部で表現される方法。
【請求項５】
請求項４に記載の方法であって、前記内部表現はストリームのペアを含む方法。
【請求項６】
請求項５に記載の方法であって、
前記ストリームのペアはコードストリームおよびデータストリームであり、
前記コードストリームは、前記Ｊａｖａマクロインストラクションのコード部分を含むのに適し、
前記データストリームは、前記Ｊａｖａマクロインストラクションのデータ部分を含むのに適する方法。
【請求項７】
１つ以上のＪａｖａバイトコードインストラクションに対応するＪａｖａマクロインストラクションを生成する方法であって、
Ｊａｖａバイトコードインストラクションのストリームを読み出すこと、
前記ＪａｖａバイトコードインストラクションのストリームにＪａｖａバイトコードインストラクションのシーケンスが現れる回数をカウントすることであって、前記Ｊａｖａバイトコードインストラクションのシーケンスは、前記ストリーム中のシーケンスにある２つ以上のＪａｖａバイトコードインストラクションを含む、カウントすること、
前記Ｊａｖａバイトコードインストラクションのシーケンスが１つのインストラクションによって表現されるべきかどうかを決定すること、
前記決定することが、前記Ｊａｖａバイトコードインストラクションの前記シーケンスが前記１つのインストラクションによって表現されえると決定するとき、前記Ｊａｖａバイトコードインストラクションのシーケンスを表現するＪａｖａマクロインストラクションを生成すること、
を含み、
前記ＪａｖａマクロインストラクションはＪａｖａ仮想マシンによる実行に適し、
実行されるとき前記Ｊａｖａマクロインストラクションは、前記Ｊａｖａバイトコードインストラクションのシーケンスによって実行される１つ以上の操作を実行するように動作可能である
方法。
【請求項８】
請求項７に記載の方法であって、前記Ｊａｖａバイトコードインストラクションのシーケンスが１つのインストラクションによって表現されるべきかどうかを決定することは、前記シーケンスが少なくとも所定の回数だけカウントされたかどうかを決定するよう動作する方法。
【請求項９】
請求項８に記載の方法であって、前記カウントすることは、バイトコードベリフィケーションのあいだに実行される方法。
【請求項１０】
請求項９に記載の方法であって、前記２つ以上のＪａｖａバイトコードインストラクションを前記Ｊａｖａマクロインストラクションで置換することをさらに含み、
前記マクロインストラクションは前記仮想マシンの内部で表現される方法。
【請求項１１】
請求項１０に記載の方法であって、前記内部表現はストリームのペアを含む方法。
【請求項１２】
請求項１１に記載の方法であって、
前記ストリームのペアはコードストリームおよびデータストリームであり、
前記コードストリームは、前記Ｊａｖａマクロインストラクションのコード部分を含むのに適し、
前記データストリームは、前記Ｊａｖａマクロインストラクションのデータ部分を含むのに適する方法。
【請求項１３】
１つ以上のＪａｖａバイトコードインストラクションに対応するＪａｖａマクロインストラクションを生成する方法であって、
ＪａｖａバイトコードベリフィケーションのあいだにＪａｖａバイトコードインストラクションのストリームを読み出すこと、
前記Ｊａｖａバイトコードストリーム中の２つ以上のＪａｖａバイトコードインストラクションが１つのインストラクションによって表現できるかどうかを決定すること、
前記決定することが、前記Ｊａｖａバイトコードストリーム中の２つ以上のＪａｖａバイトコードインストラクションが１つのインストラクションによって表現できると決定するとき、前記２つ以上のＪａｖａバイトコードインストラクションを表現するＪａｖａマクロインストラクションを生成すること、
を含み、
前記ＪａｖａマクロインストラクションはＪａｖａ仮想マシンによる実行に適し、
実行されるとき前記Ｊａｖａマクロインストラクションは、前記２つ以上のＪａｖａバイトコードインストラクションによって実行される１つ以上の操作を実行するように動作可能である
方法。
【請求項１４】
請求項１３に記載の方法であって、
前記決定することは、２つ以上のＪａｖａバイトコードインストラクションの所定のシーケンスが見つかったかどうかを決定するよう動作する方法。
【請求項１５】
請求項１３に記載の方法は、前記ストリームにＪａｖａバイトコードインストラクションのシーケンスが現れる回数をカウントすることをさらに含み、
前記決定することは、シーケンスが少なくとも所定の回数だけカウントされたかどうかを決定するよう動作する方法。
【請求項１６】
Ｊａｖａコンピューティング環境において、Ｊａｖａマクロインストラクションの生成に適するＪａｖａマクロインストラクションジェネレータであって、
それぞれのＪａｖａマクロインストラクションは１つ以上のＪａｖａバイトコードインストラクションに対応し、
前記Ｊａｖａマクロインストラクションジェネレータは、
Ｊａｖａバイトコードインストラクションのストリームを読み出し、
前記Ｊａｖａバイトコードストリーム中の２つ以上のＪａｖａバイトコードインストラクションが１つのインストラクションによって表現できるかどうかを決定し、
前記決定することが、前記Ｊａｖａバイトコードストリーム中の２つ以上のＪａｖａバイトコードインストラクションが１つのインストラクションによって表現できると決定するとき、前記２つ以上のＪａｖａバイトコードインストラクションを表現するＪａｖａマクロインストラクションを生成するよう動作し、
前記ＪａｖａマクロインストラクションはＪａｖａ仮想マシンによる実行に適し、
実行されるとき前記Ｊａｖａマクロインストラクションは、前記２つ以上のＪａｖａバイトコードインストラクションによって実行される１つ以上の操作を実行するように動作可能である
Ｊａｖａマクロインストラクションジェネレータ。
【請求項１７】
請求項１６に記載のＪａｖａマクロインストラクションジェネレータであって、前記ＪａｖａマクロインストラクションジェネレータはＪａｖａバイトコードベリフィケーションのあいだ動作するＪａｖａマクロインストラクションジェネレータ。
【請求項１８】
請求項１６に記載のＪａｖａマクロインストラクションジェネレータであって、前記Ｊａｖａマクロインストラクションジェネレータは、２つ以上のＪａｖａバイトコードインストラクションの所定のシーケンスが見つかったかどうかを決定するよう動作するＪａｖａマクロインストラクションジェネレータ。
【請求項１９】
請求項１６に記載のＪａｖａマクロインストラクションジェネレータであって、
前記２つ以上のＪａｖａバイトコードインストラクションを前記Ｊａｖａマクロインストラクションで置換するよう動作し、
前記マクロインストラクションは前記仮想マシンの内部で表現されるＪａｖａマクロインストラクションジェネレータ。
【請求項２０】
請求項１９に記載のＪａｖａマクロインストラクションジェネレータであって、前記内部表現はストリームのペアを含むＪａｖａマクロインストラクションジェネレータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、大きくはＪａｖａプログラミング環境に関し、より具体的にはＪａｖａコンピューティング環境においてＪａｖａマクロインストラクションを生成するフレームワークに関する。
【背景技術】
【０００２】
高級言語の一つのゴールは、コンピュータプログラムが容易に他のコンピュータプラットフォームに移植できるような可搬性のあるプログラミング環境を提供することにある。「Ｃ」のような高級言語は、根底にあるコンピュータアーキテクチャからの抽象化のレベルを提供し、これら言語の成功は多くのコンピュータアプリケーションが今や高級言語で書かれる事実によってよく証明されている。
【０００３】
可搬性は、グラフィカルインタフェースを通してさまざまなコンピュータプラットフォーム間での通信を可能にするインターネットのインタフェースプロトコルであるワールドワイドウェブ（「ウェブ」）の出現とともに新たな頂へと導かれた。ウェブ上で通信するコンピュータは、アプレットと呼ばれる小さなアプリケーションをダウンロードし実行することができる。アプレットがコンピュータプラットフォームのさまざまな組み合わせの上で実行されえることを仮定すれば、アプレットは典型的にはＪａｖａ（商標）仮想マシンによって実行される。
【０００４】
近年、Ｊａｖａプログラミング環境はかなり人気が出てきた。Ｊａｖａプログラミング言語は、小さなデバイス（例えば、ポケットベル、携帯電話およびスマートカード）からスーパコンピュータに至るまで広い範囲のコンピュータ上で実行されえるだけ充分に可搬性を持つよう設計される言語である。Ｊａｖａで書かれたコンピュータプログラミング（および他の言語）は、Ｊａｖａ仮想マシンの実装によって実行されるのに適したＪａｖａバイトコードインストラクションにコンパイルされえる。Ｊａｖａ仮想マシンはふつうソフトウェア中でＪａｖａ仮想マシンインストラクションセットのためのインタプリタとしてインプリメントされるが、一般にはソフトウェア、ハードウェア、またはその両方でありえる。特定のＪａｖａ仮想マシンのインプリメンテーションおよび対応するサポートライブラリは共にＪａｖａランタイム環境を構成する。
【０００５】
Ｊａｖａプログラミング言語によるコンピュータプログラムは、１つ以上のクラスまたはインタフェース（ここでは併せてクラスまたはクラスファイルと呼ばれる）に組まれる。このようなプログラムは一般にプラットフォーム、すなわちハードウェアおよびオペレーティングシステムに依存しない。よってこれらのコンピュータプログラムは修正することなく、Ｊａｖａランタイム環境のインプリメンテーションを走らせることができるどのようなコンピュータ上でも実行されえる。
【０００６】
Ｊａｖａプログラミング言語で書かれたオブジェクト指向のクラスは、「クラスファイルフォーマット」と呼ばれる特定のバイナリフォーマットでコンパイルされる。このクラスファイルは、単一のクラスに関連付けられたさまざまな要素を含む。これらの要素は例えばクラスに関連付けられたメソッドおよび／またはインタフェースでありえる。さらにクラスファイルフォーマットはクラスに関連付けられるかなりの量の補助的な情報を含みえる。クラスファイルフォーマット（Ｊａｖａ仮想マシンの一般的な動作と共に）は、Tim LindholmおよびFrank Yellinによる「The Java Virtual Machine Specification」第２版にある程度詳細に記載され、ここで参照によって援用される。
【０００７】
図１Ａは、インタプリタであるＪａｖａ仮想マシンによる実行を通して、簡単な一つのＪａｖａソースコード１０１の処理の進行を示す。Ｊａｖａソースコード１０１は、Ｊａｖａで書かれた古典的なハローワールドのプログラムを含む。このソースコードはそれから、ソースコードをバイトコードにコンパイルするバイトコードコンパイラ１０３に入力される。バイトコードは、ソフトウェアでエミュレートされたコンピュータによって実行されるので、仮想マシンインストラクションである。典型的には仮想マシンインストラクションは汎用である（すなわち特定のマイクロプロセッサまたはコンピュータアーキテクチャのために設計されてはいない）が、これは必要ではない。バイトコードコンパイラは、Ｊａｖａプログラムのバイトコードを含むＪａｖａクラスファイル１０５を出力する。ＪａｖａクラスファイルはＪａｖａ仮想マシン１０７に入力される。Ｊａｖａ仮想マシンは、Ｊａｖａクラスファイル中のバイトコードをデコードし実行するインタプリタである。Ｊａｖａ仮想マシンはインタプリタであるが、ソフトウェアでマイクロプロセッサまたはコンピュータアーキテクチャをエミュレートする（例えばマイクロプロセッサまたはコンピュータアーキテクチャはハードウェアとしては存在しないかもしれない）のでふつうは仮想マシンと呼ばれる。
【０００８】
図１Ｂは、簡略化されたクラスファイル１００を示す。図１Ｂに示されるように、クラスファイル１００は、コンスタントプール１０２の部分、インタフェース部分１０４、フィールド部分１０６、メソッド部分１０８、および属性部分１１０を含む。メソッド部分１０８は、クラスファイル１００中で表現されるＪａｖａクラスに関連付けられたいくつかのＪａｖａメソッドを含むか、またはそのようなＪａｖａメソッドへの参照を含みえる。これらメソッドのうちの１つは、仮想マシンによってクラスファイルがロードされた後であって、他のメソッドが起動される前に、Ｊａｖａクラスを初期化するのに用いられる初期化メソッドである。換言すれば、典型的には、初期化メソッドが用いられて、クラスが使用される前にＪａｖａクラスを初期化する。
【０００９】
従来の仮想マシンのインタプリタは、Ｊａｖａバイトコードインストラクションをデコードし実行するが、これは実行中のある時刻において、例えば「ランタイムにおいて」、１つのインストラクションだけ実行する。Ｊａｖａインストラクションを実行するのに必要な情報を得るためには、典型的にはいくつかの操作が実行されなければならない。さらにバイトコードインストラクションをディスパッチするのに関連付けられたかなりのオーバヘッドが存在する。換言すれば、Ｊａｖａインタプリタは、あるインストラクションから次のインストラクションへとスイッチするために大量の処理を実行しなければならない。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
したがってインタプリタがインストラクションをディスパッチしなければならない回数を低減することが非常に望ましい。これは結果として仮想マシン、特に限られたリソースで動作する仮想マシンのパフォーマンスを改善しえる。
【００１１】
上述を鑑みて、Ｊａｖａバイトコードインストラクションの実行のための改良されたフレームワークが必要とされる。
【課題を解決するための手段】
【００１２】
本発明は、大きくはＪａｖａプログラミング環境に関し、より具体的にはＪａｖａコンピューティング環境においてＪａｖａマクロインストラクションを生成するフレームワークに関する。Ｊａｖａコンピューティング環境において用いられるのに適するＪａｖａマクロインストラクションを生成する技術が開示される。よってこの技術は、Ｊａｖａインストラクションを効率的に実行するためにＪａｖａ仮想マシンにおいて実現されえる。理解されるように、Ｊａｖａマクロインストラクションは、２つ以上のＪａｖａバイトコードインストラクションと置き換えられえる。これはさらにインタプリタによって実行されるＪａｖａインストラクションの数を減らす。その結果、仮想マシン、特に限られたリソースで動作する仮想マシンのパフォーマンスは改善される。
【００１３】
本発明は、方法、装置、コンピュータで読み取り可能な媒体、およびデータベースシステムを含むさまざまな形態で実現可能である。本発明のいくつかの実施形態が以下に説明される。
【００１４】
１つ以上のＪａｖａバイトコードインストラクションに対応するＪａｖａマクロインストラクションを生成する方法として、本発明のある実施形態は、Ｊａｖａバイトコードインストラクションのストリームを読み出すこと、前記Ｊａｖａバイトコードストリーム中の２つ以上のＪａｖａバイトコードインストラクションが１つのインストラクションによって表現できるかどうかを決定すること、前記決定することが、前記Ｊａｖａバイトコードストリーム中の２つ以上のＪａｖａバイトコードインストラクションが１つのインストラクションによって表現できると決定するとき、前記２つ以上のＪａｖａバイトコードインストラクションを表現するＪａｖａマクロインストラクションを生成すること、を含む。前記ＪａｖａマクロインストラクションはＪａｖａ仮想マシンによる実行に適し、実行されるとき前記Ｊａｖａマクロインストラクションは、前記２つ以上のＪａｖａバイトコードインストラクションによって実行される１つ以上の操作を実行するように動作可能である。
【００１５】
１つ以上のＪａｖａバイトコードインストラクションに対応するＪａｖａマクロインストラクションを生成する方法として、本発明のある実施形態は、Ｊａｖａバイトコードインストラクションのストリームを読み出すこと、前記ＪａｖａバイトコードインストラクションのストリームにＪａｖａバイトコードインストラクションのシーケンスが現れる回数をカウントすることであって、前記Ｊａｖａバイトコードインストラクションのシーケンスは、前記ストリーム中のシーケンスにある２つ以上のＪａｖａバイトコードインストラクションを含む、カウントすること、前記Ｊａｖａバイトコードインストラクションのシーケンスが１つのインストラクションによって表現されるべきかどうかを決定すること、前記決定することが、前記Ｊａｖａバイトコードインストラクションの前記シーケンスが前記１つのインストラクションによって表現されえると決定するとき、前記Ｊａｖａバイトコードインストラクションのシーケンスを表現するＪａｖａマクロインストラクションを生成すること、を含む。前記ＪａｖａマクロインストラクションはＪａｖａ仮想マシンによる実行に適する。実行されるとき前記Ｊａｖａマクロインストラクションは、前記Ｊａｖａバイトコードインストラクションのシーケンスによって実行される１つ以上の操作を実行するように動作可能である。
【００１６】
本発明の他の実施形態は、Ｊａｖａコンピューティング環境において、Ｊａｖａマクロインストラクションの生成に適するＪａｖａマクロインストラクションジェネレータを提供し、それぞれのＪａｖａマクロインストラクションは１つ以上のＪａｖａバイトコードインストラクションに対応する。前記Ｊａｖａマクロインストラクションジェネレータは、Ｊａｖａバイトコードインストラクションのストリームを読み出し、前記Ｊａｖａバイトコードストリーム中の２つ以上のＪａｖａバイトコードインストラクションが１つのインストラクションによって表現できるかどうかを決定し、前記決定することが、前記Ｊａｖａバイトコードストリーム中の２つ以上のＪａｖａバイトコードインストラクションが１つのインストラクションによって表現できると決定するとき、前記２つ以上のＪａｖａバイトコードインストラクションを表現するＪａｖａマクロインストラクションを生成するよう動作する。前記ＪａｖａマクロインストラクションはＪａｖａ仮想マシンによる実行に適し、実行されるとき前記Ｊａｖａマクロインストラクションは、前記２つ以上のＪａｖａバイトコードインストラクションによって実行される１つ以上の操作を実行するように動作可能である。
【００１７】
本発明のこれらや他の局面および利点は、以下の詳細な説明が添付図面と共に読まれればより明らかになろう。
【発明を実施するための最良の形態】
【００１８】
本発明は添付の図面を参照して以下の詳細な説明によって容易に理解されるだろう。図面において同様の参照番号は同様の要素を表す。
【００１９】
背景技術において述べられたように、Ｊａｖａプログラミング環境は大きく広がった成功を収めた。したがってＪａｖａコンパチブルなデバイスの幅を広げ、そのようなデバイスのパフォーマンスを改善しようとする努力が続いている。特定のプラットフォーム上でのＪａｖａベースのプログラムのパフォーマンスに最も影響を与えるファクタの一つは、基礎になる仮想マシンのパフォーマンスである。典型的には仮想マシンは、Ｊａｖａオブジェクトのクラスに関連付けられた情報を内部において表現し格納する。しかし従来の技術を用いてこの情報にアクセスするのには貴重な処理時間をとる。これは特に計算パワーおよび／またはメモリが制限されているシステムにおいては、仮想マシンのパフォーマンスを深刻に低下しえる。したがってＪａｖａに従う仮想マシンのパフォーマンスを改善するための努力が多くの団体によって精力的になされてきた。
【００２０】
この目的や他の目的を達成するために、Ｊａｖａコンピューティング環境において用いられるのに適するＪａｖａマクロインストラクションを生成する技術が開示される。よってこの技術は、Ｊａｖａインストラクションを効率的に実行するためにＪａｖａ仮想マシンにおいて実現されえる。理解されるように、Ｊａｖａマクロインストラクションは、２つ以上のＪａｖａバイトコードインストラクションと置き換えられえる。これはさらにインタプリタによって実行されるＪａｖａインストラクションの数を減らす。その結果、仮想マシン、特に限られたリソースで動作する仮想マシンのパフォーマンスは改善される。
【００２１】
本発明の実施形態は、以下に図２Ａ〜１３Ｃを参照して説明される。しかしこれらの図を参照してここで与えられた詳細な説明は説明の目的だけであって、本発明はこれらの限定された実施形態を超えるものであることが当業者には容易に理解されよう。
【００２２】
図２Ａは、本発明のある実施形態によるＪａｖａコンピューティング環境２００を示す。Ｊａｖａコンピューティング環境２００は、インタプリタによる実行に適するマクロインストラクションの生成に適するＪａｖａマクロインストラクションジェネレータ２０２を含む。図２Ａに示されるように、Ｊａｖａマクロインストラクションジェネレータ２０２は、Ｊａｖａバイトコードインストラクション２０４（Ｊａｖａバイトコードインストラクション１〜Ｎ）のストリームを読むことができる。さらにＪａｖａマクロインストラクションジェネレータ２０２は、ストリーム２０４中の２つ以上のＪａｖａバイトコードインストラクションを表すＪａｖａマクロインストラクション２０６を作ることができる。
【００２３】
ストリーム２０４中のＪａｖａバイトコードインストラクションは、従来のＪａｖａバイトコードインストラクション、例えば、Ｊａｖａオブジェクトをインスタンス化するためにシーケンス中に典型的に現れる従来のインストラクション「ｎｅｗ」および「ｄｕｐ」でありえる。当業者には理解されるように、ある種のシーケンスは、Ｊａｖａプログラムの実行中に頻繁に現れる。このようなシーケンスを単一のマクロインストラクションに置き換えることは、Ｊａｖａバイトコードインストラクションをディスパッチすることに関連付けられたオーバヘッドを低減しえる。その結果、仮想マシン、特に限られたリソースで動作する仮想マシンのパフォーマンスは向上する。
【００２４】
Ｊａｖａマクロインストラクションジェネレータ２０２は、本発明のある好ましい実施形態によるＪａｖａバイトコードトランスレータと共に用いられもする。こんどは図２Ｂを参照して、Ｊａｖａバイトコードトランスレータ２３０は、従来のＪａｖａインストラクション１〜Ｍを本発明のＪａｖａインストラクション２３４（１〜Ｎ）にトランスレートするよう動作し、ここでＮは整数Ｍより小さい整数である。Ｊａｖａバイトコードトランスレータ２３０およびＪａｖａインストラクション１〜Ｎのさらなる詳細は、「REDUCED INSTRUCTION SET FOR JAVA VIRTUAL MACHINES」と題された米国特許出願第０９／８１９，１２０号（弁護士整理番号ＳＵＮ１Ｐ８１１／Ｐ５５１２）、および「ENHANCED VIRTUAL MACHINE INSTRUCTIONS」と題された米国特許出願第０９／８２０，０９７号（弁護士整理番号ＳＵＮ１Ｐ８２７／Ｐ６０９５）に記載されている。理解されるように、本発明のＪａｖａインストラクションをＪａｖａマクロインストラクションジェネレータと共に使用すれば、仮想マシンのパフォーマンスをさらに向上させることができる。
【００２５】
Ｊａｖａマクロインストラクションは、本発明のある実施形態によれば、Ｊａｖａストリームのペアとして仮想マシン内で内部表現されてもよいことに注意されたい。Ｊａｖａストリームのペアは、コードストリームおよびデータストリームでありえる。コードストリームはＪａｖａマクロインストラクションのコード部分を含むのに適し、データストリームはＪａｖａマクロインストラクションのデータ部分を含むのに適する。インストラクションをストリームのペアとして表すことについてのさらなる詳細は、「IMPROVED FRAMEWORKS FOR LOADING AND EXECUTION OF OBJECT-BASED PROGRAMS」と題された米国特許出願第０９／７０３，４４９号（弁護士整理番号ＳＵＮ１Ｐ８１４／Ｐ５４１７）に見られる。
【００２６】
図３は、本発明のある実施形態によるＪａｖａマクロインストラクションを生成する方法３００を示す。この方法３００は、例えば図２Ａ〜ＢのＪａｖａマクロインストラクションジェネレータ２０２によって使用されえる。まず操作３０２において、Ｊａｖａバイトコードインストラクションのストリームが読み出される。理解されるように、Ｊａｖａバイトコードインストラクションのストリームは、バイトコードベリフィケーションフェーズのあいだに読み出されえる。Ｊａｖａバイトコードベリフィケーションは典型的にはＪａｖａインストラクションの正確さを確実にするために実行される。そのため操作３０２は、バイトコードベリフィケーションのあいだに効率的に実行されえるが、これは典型的にはバイトコードインストラクションをベリファイする必要があるからである。
【００２７】
次に操作３０４において、２つ以上のＪａｖａバイトコードインストラクションの所定のシーケンスが見つかったかどうかについて決定がなされる。もし操作３０４において、２つ以上のＪａｖａバイトコードインストラクションの所定のシーケンスが見つからなかったら、方法３００は終わる。しかしもし操作３０４において、２つ以上のＪａｖａバイトコードインストラクションの所定のシーケンスが見つかったら、方法３００は操作３０６に進み、ここでこの２つ以上のＪａｖａバイトコードインストラクションのシーケンスを表すＪａｖａマクロインストラクションが生成される。方法３００は操作３０６に続いて終わる。操作３０４および３０６はＪａｖａバイトコードベリフィケーションフェーズのあいだにも実行されえることに注意されたい。
【００２８】
図４は、本発明の他の実施形態によるＪａｖａマクロインストラクションを生成する方法４００を示す。方法４００は例えば、図２Ａ〜ＢのＪａｖａマクロインストラクションジェネレータ２０２によって使用されえる。最初に操作４０２において、Ｊａｖａバイトコードインストラクションのストリームが読み出される。再び操作４０２は、バイトコードベリフィケーションのあいだに効率的に実行されえるが、これはバイトコードベリフィケーションが典型的にはいずれにしても実行されるからである。
【００２９】
次に操作４０４において、ＪａｖａバイトコードインストラクションのシーケンスがＪａｖａバイトコードインストラクションのストリーム中に現れる回数がカウントされる。その後、操作４０６において、シーケンスが少なくとも所定の回数だけカウントされたかどうかについての決定がなされる。もし操作４０６においてシーケンスが少なくとも所定の回数だけカウントされなかったと決定されるなら、方法４００は終了する。しかしもし操作４０６においてシーケンスが少なくとも所定の回数だけカウントされたと決定されるなら、方法４００は操作４０８に進み、ここでＪａｖａバイトコードインストラクションのシーケンスを表すＪａｖａマクロインストラクションが生成される。方法４００は操作４０８に続いて終わる。
【００３０】
図５は、本発明のある実施形態によるＪａｖａバイトコードベリファイア５００を示す。Ｊａｖａバイトコードベリファイア５００は、Ｊａｖａバイトコード５０４のストリームを分析するのに適するシーケンスアナライザ５０２を含む。図５に示されるように、Ｊａｖａバイトコード５０４のストリームは、Ｊａｖａバイトコードインストラクション１〜Ｎのシーケンスからなる。Ｊａｖａバイトコードベリファイア５００は、２つ以上のＪａｖａバイトコードインストラクションが１つのＪａｖａマクロインストラクションとして表現されえるかどうかを決定するために動作する。もしバイトコードベリファイア５００が２つ以上のＪａｖａバイトコードインストラクションがＪａｖａマクロインストラクションとして表現されえると決定するなら、バイトコードベリファイア５００はＪａｖａマクロインストラクションを作る。Ｊａｖａマクロインストラクションは２つ以上のＪａｖａバイトコードインストラクションのシーケンスに対応する。したがってＪａｖａマクロインストラクションは、Ｊａｖａストリーム中の２つ以上のＪａｖａバイトコードインストラクションのシーケンスを置き換えることができる。
【００３１】
図５を参照して、ストリーム５０４中の２つ以上のＪａｖａバイトコードインストラクション５０６のシーケンスは、Ｊａｖａバイトコードベリファイア５００によって識別されえる。２つ以上のＪａｖａバイトコードインストラクションのシーケンス５０６（インストラクションＩ１〜ＩＭ）は、ストリーム５０４中の位置Ｋから（Ｋ＋Ｍ−１）に位置しえる。２つ以上のＪａｖａバイトコードインストラクション５０６のシーケンスを識別した後、Ｊａｖａバイトコードベリファイア５００は、このシーケンスをＪａｖａマクロインストラクション５０８（Ｉ１〜ＩＭ）で置き換えるように動作しえる。その結果、ストリーム５０４は、（Ｎ−Ｍ）のＪａｖａバイトコードインストラクションからなるストリーム５１０へと小さくされる。理解されるように、Ｊａｖａバイトコードベリファイア５００は、Ｊａｖａバイトコードインストラクションの多くの所定のシーケンスを識別し、それらを適切なＪａｖａマクロインストラクションと置き換えることができる。Ｊａｖａバイトコードベリファイア５００は、ストリーム５０４中に現れるシーケンスを分析し、ある判断基準を満たすもの（例えば所定回数を超えて現れたシーケンス）だけを置き換えるようにインプリメントされえる。いずれの場合も、入力ストリーム５０４（例えばストリーム５０４）中のＪａｖａバイトコードインストラクションの個数は、大幅に減少されえる。よって仮想マシン、特に限られたリソースで動作するもののパフォーマンスは向上されえる。
【００３２】
上述のようにストリーム中で置き換えられたＪａｖａバイトコードインストラクションは、シーケンス中でしばしば現れる従来のＪａｖａバイトコードインストラクションでありえる。そのような一例は、Ｊａｖａオブジェクトをインスタンス化するためにシーケンス中に典型的には現れる「Ｎｅｗx」および「Ｄｕｐx」を表す従来のインストラクション（例えばNew-Dup, Newarray-Dup_x1, Anewarray-Dup_x2など）のさまざまな組み合わせである。
【００３３】
図６Ａは、本発明のある実施形態によるＪａｖａマクロインストラクションジェネレータ６０２を含むＪａｖａコンピューティング環境６００を示す。今度は図６Ａを参照して、従来のＪａｖａバイトコードインストラクション「Ｎｅｗx」および「Ｄｕｐx」がシーケンス６１０の中で描かれる。シーケンス６１０は、Ｊａｖａマクロインストラクションジェネレータ６０２によって単一のＪａｖａマクロインストラクション「Ｎｅｗ−Ｄｕｐ」で置換されえる。当業者には理解されるように、シーケンス６１０は、Ｊａｖａプログラムの実行中にしばしば出現しえる。よってこのシーケンスを単一のマクロインストラクションによって置換することは、Ｊａｖａバイトコードインストラクションをディスパッチするのに関連付けられたオーバヘッドを低減しえる。
【００３４】
再び、Ｊａｖａマクロインストラクション６０２は、本発明のある好ましい実施形態においてはＪａｖａバイトコードトランスレータと共に使用されてもよいことに注意されたい。Ｊａｖａバイトコードトランスレータおよび新規なＪａｖａバイトコードインストラクションのさらなる詳細は、「REDUCED INSTRUCTION SET FOR JAVA VIRTUAL MACHINES」と題された米国特許出願第０９／８１９，１２０号（弁護士整理番号ＳＵＮ１Ｐ８１１／Ｐ５５１２）、および「ENHANCED VIRTUAL MACHINE INSTRUCTIONS」と題された米国特許出願第０９／８２０，０９７号（弁護士整理番号ＳＵＮ１Ｐ８２７／Ｐ６０９５）に記載される。
【００３５】
図６Ｂは、本発明のある実施形態によるＪａｖａマクロインストラクションジェネレータ６０２およびＪａｖａバイトコードトランスレータ６２２を含むＪａｖａコンピューティング環境６２０を示す。今度は図６Ｂを参照して、Ｊａｖａバイトコードトランスレータ６２２は、従来のＪａｖａインストラクション６１０を本発明のＪａｖａインストラクション６３０に翻訳するよう動作する。Ｊａｖａマクロインストラクションジェネレータ６０２は、本発明のＪａｖａインストラクション６３０を受け取り、対応するＪａｖａマクロインストラクション「Ｎｅｗ−Ｄｕｐ」６２４を生成しえる。
【００３６】
本発明のＪａｖａインストラクション６３０は、Ｊａｖａ仮想マシンによって実行するのに適切なＪａｖａインストラクションの小さくされたセットを表現することに注意されたい。これは、本発明の縮小されたセット中のインストラクションの数が従来のＪａｖａバイトコードインストラクションセット中のインストラクションの数よりもはるかに少ないことを意味する。さらに本発明のＪａｖａインストラクションは、従来のＪａｖａバイトコードインストラクションによって実行されえない新規な操作を提供する。例として、本発明の仮想マシン操作「ＤＵＰ」（シーケンス６３０として示される）は、本発明のある実施形態によって提供されえる。本発明の仮想マシンインストラクションＤＵＰは、実行スタック上のさまざまな位置における値が実行スタックの上に複製されることを可能にする。
【００３７】
図７Ａは、本発明のある実施形態によるスタック上の値を複製するのに適する本発明の「ＤＵＰ」インストラクション７０２の内部表現７０１を含むコンピューティング環境７００を示す。内部表現７０１は、ストリームのペア、つまりコードストリーム７０６およびデータストリーム７０８を含む。記載された実施形態において、コードストリーム７０６およびデータストリーム７０８におけるそれぞれのエントリーは１バイトを表す。本発明の仮想マシンインストラクションＤＵＰ７０２は、コードストリーム７０６中のデータパラメータＡと関連付けられる。データパラメータＡはまたデータストリーム７０８においてインプリメントされてもよいことに注意されたい。いずれの場合もデータパラメータＡは、実行スタック７０４上のどの４バイト値（ワード値）が実行スタック７０４の最上部に複製されるべきかを示す。データパラメータＡは、例えば、実行スタック７０４の最上部からのオフセットを示しえる。図７Ａに示されるように、データパラメータＡは、実行スタック上のワード（４バイト）値である「Ｗｉ」への参照でありえる。したがって実行時において、仮想マシンは「ＤＵＰ」コマンド７０２を実行できる。その結果、Ｗｉワードは、スタックの最上部に複製される。よって本発明の「ＤＵＰ」インストラクションは、４バイト値を実行スタックの最上部へ複製するよう動作するさまざまなＪａｖａバイトコードインストラクションを効率的に置換できる。図７Ｂは、これらのＪａｖａバイトコードインストラクションのいくつかを示す。同様に図７Ｃに示されるように、本発明の「ＤＵＰＬ」インストラクションは、８バイト値（２ワード）を実行スタックの最上部へ複製するよう動作するさまざまなＪａｖａバイトコードインストラクションを効率的に置換するよう提供されえる。
【００３８】
従来のバイトコード「Ｄｕｐx」インストラクションは、実行スタック上のある位置に存在する値の複製しかできなかった（すなわち従来のインストラクションDup、Dup_x1およびDup_x2は、それぞれ実行スタック上の第１、第２および第３ワードの複製を可能にする）。しかし本発明のインストラクション「ＤＵＰ」および「ＤＵＰＬ」は、実行スタック上のより幅広い範囲（例えばＷ４、Ｗｉ、ＷＮなど）を複製するのに使用されえる。
【００３９】
図６Ｂに戻って、他の本発明によるインストラクション、Ｊａｖａバイトコードインストラクション「Ｎｅｗ」がシーケンス６３０中に示される。Ｊａｖａバイトコードインストラクション「Ｎｅｗ」は、インスタンス化に用いられるさまざまな従来のＪａｖａバイトコードを効率的に置換できる。
【００４０】
図８は、Ｊａｖａバイトコードインスタンス化インストラクションの、本発明のある実施形態によって提供される仮想マシンインストラクションへのマッピングを示す。理解されるように、４つの従来のＪａｖａバイトコードインストラクションは、単一の仮想マシンインストラクション（例えばＮＥＷ）に効率的にマッピングされえる。仮想マシンインストラクションＮＥＷは、さまざまなタイプのオブジェクトおよびアレイをインスタンス化するように働く。ある実施形態において、本発明の仮想マシンインストラクションＮＥＷは、Ｊａｖａバイトコードインスタンス化インストラクションのパラメータ値に基づいてオブジェクトまたはアレイのタイプを決定するよう働く。理解されるように、インスタンス化のためのＪａｖａバイトコードインストラクションの後には、タイプを表すパラメータ値が典型的には続く。よってパラメータ値は、容易に利用可能であり、ＮＥＷ仮想マシンインストラクションが実行時に適切なタイプをインスタンス化することが可能になるよう利用されえる。
【００４１】
図９Ａは、Ｊａｖａインタプリタによってしばしば実行されえる従来のＪａｖａバイトコードの他のシーケンス９０２を示す。シーケンス９０２は、ループをプログラムするのに用いられる例示的なインストラクションのシーケンスを表す。よってシーケンス９０２のようなシーケンスは、Ｊａｖａバイトコードインストラクションの実行中に何度も繰り返して反復されえる。図９Ａに示されるように、Ｊａｖａマクロインストラクションジェネレータ２０２は、従来のＪａｖａインストラクション「ｉｉｎｃ」、「ｉｌｏａｄ」、および「ｉｆ＿ｃｍｐｌｔ」のシーケンスをＪａｖａマクロインストラクション「Ｌｏｏｐ１」で置換することができる。
【００４２】
図９Ｂは、本発明のある実施形態によるＪａｖａマクロインストラクションジェネレータ９０２およびＪａｖａバイトコードトランスレータ９０４を含むＪａｖａコンピューティング環境９００を示す。今度は図９Ｂを参照して、Ｊａｖａバイトコードトランスレータ９０４は、従来のＪａｖａインストラクション９１０を本発明のＪａｖａインストラクション９２０に翻訳するよう動作する。Ｊａｖａマクロインストラクションジェネレータ９０２は、本発明のＪａｖａインストラクション９２０を受け取り、対応するＪａｖａマクロインストラクション「Ｌｏｏｐ１」９４０を生成できる。
【００４３】
シーケンス９２０中の本発明のインストラクションのうちの１つは、本発明のインストラクション「Ｌｏａｄ」である。図１０Ａは、本発明の他の実施形態による、局所変数から値をロードするのに適するＪａｖａ「Ｌｏａｄ」インストラクションのセットの内部表現１０００を示す。記載された実施形態において、内部表現１０００のコードストリーム１００２は、１つ以上のＪａｖａ「局所変数からのＬｏａｄ」バイトコードインストラクションの表現に適する本発明の仮想マシンインストラクションを表すＬｏａｄコマンド１００６を含む。Ｌｏａｄコマンド１００６はそれに関連付けられた１バイトのパラメータ、つまりインデックスｉ１００８をデータストリーム１００４の中に持つことに注意されたい。理解されるようにランタイムにおいて、Ｌｏａｄコマンド１００６は、実行スタック１０２０の最上部にある局所変数をロード（またはプッシュ）するために仮想マシンによって実行されえる。例としてオフセット１０２２は、実行スタック１０２０上に格納された局所変数についての開始オフセットを示しえる。したがってオフセットｉ１０２４は、インデックスｉ１００８に対応する実行スタック１０２０中の位置を特定する。
【００４４】
記載された実施形態において、Ｌｏａｄコマンド１００６は、局所変数を４バイト（１ワード）でロードするのに使用されることに注意されたい。その結果、４バイトＡ、Ｂ、ＣおよびＤ（オフセットｉ１０２４で始まる）によって示される値は、Ｌｏａｄコマンド１００６が実行されるときに実行スタック１０２０の最上部にロードされる。このように、Ｌｏａｄコマンド１００６およびインデックスｉ１００８は、ランタイムにおいて実行スタックの最上部にある４バイトの局所変数をロード（またはプッシュ）するのに用いられえる。理解されるように、Ｌｏａｄコマンド１００６は、さまざまな従来のＪａｖａバイトコードインストラクションを効率的に表現できる。図１０Ｂは、本発明のある実施形態によって本発明の「Ｌｏａｄ」コマンドによって表現されえる４バイトの局所変数をロードするＪａｖａバイトコードインストラクションのセットを示す。
【００４５】
４バイトによって表現された値を持たない局所変数をロードするためにも本発明は提供されえることに注意されたい。例えば図１０Ｃは、本発明のある実施形態によって８バイトの局所変数をロードするＪａｖａバイトコードインストラクションのセットを示す。理解されるように、図１０Ｃに列挙されたＪａｖａバイトコードインストラクションの全ては、単一の仮想マシンインストラクション（例えば「ＬｏａｄＬ」コマンド）によって表現されえる。この「ＬｏａｄＬ」コマンドは例えば上述と同様にして動作しえる。
【００４６】
図９Ｂに戻って、Ｊａｖａバイトコードトランスレータ９０４は、シーケンス９１０中の従来のバイトコードインストラクション「ｉｆ＿ｃｍｐｌｔ」を、Ｊａｖａバイトコードインストラクションの縮小されたセット中の２つのバイトコードインストラクション「ＯＰ＿ＩＳＵＢ」および「ＯＰ＿ＪＭＰＬＴ」に置換するよう動作する。理解されるように、本発明の仮想マシンインストラクションの２つ以上は、本発明のある実施形態によれば比較的より複雑な操作を実行するために結合されえる。例示として、Ｊａｖａバイトコードインストラクション「ｌｃｍｐ」（スタック上の２つの長い値を比較し、その比較に基づいて、スタック上に０または１をプッシュする）によって実行される従来のフロー制御操作は、本発明の仮想マシンインストラクション「ＬＳＵＢ」（長いサブディビジョン）と、それに続く他の本発明の仮想マシンインストラクションＪＭＰＥＱ（等しいならジャンプ）とを実行することによって効率的に実行される。図１１Ａおよび１１Ｂは、本発明のある実施形態による２つの本発明の仮想マシンインストラクションによって表現されえる条件付きフロー制御操作を実行するいくつかの従来のＪａｖａバイトコードインストラクションを示す。
【００４７】
図１２Ａは、Ｊａｖａインタプリタによってしばしば実行されえる従来のＪａｖａバイトコードのさらに他のシーケンス１２１０を示す。シーケンス１２１０は、フィールド値を得て、それを実行スタック上に置くことを実行するインストラクションの例示的なシーケンスを示す。図１２Ａに示されるように、Ｊａｖａマクロインストラクションジェネレータ６０２は、Ｊａｖａインストラクション「Ｇｅｔｆｉｅｌｄ」および「Ａｓｔｏｒｅx」の従来のシーケンス１２１０をＪａｖａマクロインストラクション「Ｇｅｔ＿Ｓｔｏｒｅ」１２１２で置換できる。従来のインストラクション「Ａｓｔｏｒｅx」は、実行スタック上の値を格納するのに用いられるさまざまな従来のＪａｖａインストラクションを表現する。
【００４８】
図１２Ｂは、本発明のある実施形態によるＪａｖａマクロインストラクションジェネレータ６０２およびＪａｖａバイトコードトランスレータ６２２を含むＪａｖａコンピューティング環境１２００を示す。今度は図１２Ｂを参照して、Ｊａｖａバイトコードトランスレータ６２２は、従来のＪａｖａインストラクション１２１０を本発明のＪａｖａインストラクション１２２０に翻訳するよう動作する。Ｊａｖａマクロインストラクションジェネレータ６０２は、本発明のＪａｖａインストラクション１２２０を受け取り、対応するＪａｖａマクロインストラクション「Ｒｅｓｏｌｖｅ＿Ａｓｔｏｒｅ」１２２２を生成することができる。
【００４９】
本発明のインストラクション「Ａｓｔｏｒｅ」は、アレイに値を格納するのに適する仮想マシンインストラクションを表す。例示として、図１３Ａは、本発明のある実施形態によるコンピューティング環境１３２０を示す。本発明のＡＳｔｏｒｅ１３２２（アレイにストアする）仮想マシンインストラクションは、本発明のある実施形態によって実行スタック１３０４からのさまざまな値を異なるタイプのアレイに格納するのに用いられえる。再び、アレイ１３０２のヘッダ１３１０は、アレイのタイプを決定するために読み出しされえる。アレイのタイプに基づいて、適切な値（すなわち実行スタック１３０４上の適切なバイト数Ｎ）が決定されえる。この値は、アレイインデックス１３２６を使うことによってそれからアレイ１３０２中に格納される。よって本発明の仮想マシンインストラクションＡＳｔｏｒｅは、値をアレイに格納するのに用いられるさまざまなＪａｖａバイトコードインストラクションを効率的に表現できる。図１３Ｂおよび１３Ｃは、本発明のある実施形態による本発明の仮想マシンインストラクションによって表現されえるアレイに格納するための従来のＪａｖａバイトコードインストラクション（Ａｓｔｏｒｅ）を示す。
【００５０】
表Ａは、従来のＪａｖａバイトコードインストラクションのセットの、右カラムに列挙された１つ以上の本発明の仮想マシンインストラクションへのマッピングを示す。
【表Ａ】
2005501334.tif 000003
2005501334.tif 000004
2005501334.tif 000005
2005501334.tif 000006
2005501334.tif 000007
2005501334.tif 000008
【００５１】
本発明の多くの特徴および利点は詳細な説明から明らかであり、よって添付の特許請求の範囲は本発明の全てのそのような特徴および利点を含むと意図される。さらに多くの改変および変更が当業者には容易に可能であるので、本発明は図示され記載されたのとまったく同一の構成および動作に限定されるべきではない。したがって全ての適切な変更および等価物は本発明の範囲に含まれるように解される。
【図面の簡単な説明】
【００５２】
【図１Ａ】インタプリタであるＪａｖａ仮想マシンによる実行を通したＪａｖａソースコードの簡単なものの進行を示す図である。
【図１Ｂ】簡略化されたクラスファイルを示す図である。
【図２Ａ】Ｊａｖａマクロインストラクションジェネレータを含むＪａｖａコンピューティング環境を示す図である。
【図２Ｂ】Ｊａｖａマクロインストラクションジェネレータを含むＪａｖａコンピューティング環境を示す図である。
【図３】本発明のある実施形態によるＪａｖａマクロインストラクションを生成する方法を示す図である。
【図４】本発明の他の実施形態によるＪａｖａマクロインストラクションを生成する方法を示す図である。
【図５】本発明のある実施形態によるＪａｖａバイトコードベリファイアを示す図である。
【図６Ａ】本発明のある実施形態によるＪａｖａマクロインストラクションジェネレータを含むＪａｖａコンピューティング環境を示す図である。
【図６Ｂ】本発明のある実施形態によるＪａｖａバイトコードトランスレータを含むＪａｖａコンピューティング環境を示す図である。
【図７Ａ】本発明のある実施形態によるスタック上の値を複製するのに適する本発明の「ＤＵＰ」インストラクションの内部表現を含むコンピューティング環境を示す図である。
【図７Ｂ】図７Ａで示されたＪａｖａバイトコードインストラクションのいくつかを示す図である。
【図７Ｃ】図７Ａで示されたＪａｖａバイトコードインストラクションのいくつかを示す図である。
【図８】Ｊａｖａバイトコードインスタンス化インストラクションの、本発明のある実施形態によって提供される仮想マシンインストラクションへのマッピングを示す図である。
【図９Ａ】Ｊａｖａインタプリタによってしばしば実行されえる従来のＪａｖａバイトコードの他のシーケンスを示す図である。
【図９Ｂ】本発明のある実施形態によるＪａｖａマクロインストラクションジェネレータおよびＪａｖａバイトコードトランスレータを含むＪａｖａコンピューティング環境を示す図である。
【図１０Ａ】本発明の他の実施形態による、局所変数から値をロードするのに適するＪａｖａ「Ｌｏａｄ」インストラクションのセットの内部表現を示す図である。
【図１０Ｂ】本発明のある実施形態によって本発明の「Ｌｏａｄ」コマンドによって表現されえる４バイトの局所変数をロードするＪａｖａバイトコードインストラクションのセットを示す図である。
【図１０Ｃ】本発明のある実施形態によって８バイトの局所変数をロードするＪａｖａバイトコードインストラクションのセットを示す図である。
【図１１Ａ】本発明のある実施形態による２つの本発明の仮想マシンインストラクションによって表現されえる条件付きフロー制御操作を実行するいくつかの従来のＪａｖａバイトコードインストラクションを示す図である。
【図１１Ｂ】本発明のある実施形態による２つの本発明の仮想マシンインストラクションによって表現されえる条件付きフロー制御操作を実行するいくつかの従来のＪａｖａバイトコードインストラクションを示す図である。
【図１２Ａ】Ｊａｖａインタプリタによってしばしば実行されえる従来のＪａｖａバイトコードのさらに他のシーケンスを示す図である。
【図１２Ｂ】従来のＪａｖａインストラクションを本発明のＪａｖａインストラクションに翻訳するよう動作するＪａｖａバイトコードトランスレータを示す図である。
【図１３Ａ】本発明のある実施形態によるコンピューティング環境を示す図である。
【図１３Ｂ】本発明のある実施形態による本発明の仮想マシンインストラクション（例えばＡｓｔｏｒｅ）によって表現されえるアレイに格納するための従来のＪａｖａバイトコードインストラクションのセットを示す図である。
【図１３Ｃ】本発明のある実施形態による本発明の仮想マシンインストラクション（例えばＡｓｔｏｒｅ）によって表現されえるアレイに格納するための従来のＪａｖａバイトコードインストラクションのセットを示す図である。
【図１Ａ】
2005501334.tif 000009
【図１Ｂ】
2005501334.tif 000010
【図２Ａ】
2005501334.tif 000011
【図２Ｂ】
2005501334.tif 000012
【図３】
2005501334.tif 000013
【図４】
2005501334.tif 000014
【図５】
2005501334.tif 000015
【図６Ａ】
2005501334.tif 000016
【図６Ｂ】
2005501334.tif 000017
【図７Ａ】
2005501334.tif 000018
【図７Ｂ】
2005501334.tif 000019
【図７Ｃ】
2005501334.tif 000020
【図８】
2005501334.tif 000021
【図９Ａ】
2005501334.tif 000022
【図９Ｂ】
2005501334.tif 000023
【図１０Ａ】
2005501334.tif 000024
【図１０Ｂ】
2005501334.tif 000025
【図１０Ｃ】
2005501334.tif 000026
【図１１Ａ】
2005501334.tif 000027
【図１１Ｂ】
2005501334.tif 000028
【図１２Ａ】
2005501334.tif 000029
【図１２Ｂ】
2005501334.tif 000030
【図１３Ａ】
2005501334.tif 000031
【図１３Ｂ】
2005501334.tif 000032
【図１３Ｃ】
2005501334.tif 000033
【国際公開パンフレット】
2005501334.tif 000034
2005501334.tif 000035
2005501334.tif 000036
2005501334.tif 000037
2005501334.tif 000038
2005501334.tif 000039
2005501334.tif 000040
2005501334.tif 000041
2005501334.tif 000042
2005501334.tif 000043
2005501334.tif 000044
2005501334.tif 000045
2005501334.tif 000046
2005501334.tif 000047
2005501334.tif 000048
2005501334.tif 000049
2005501334.tif 000050
2005501334.tif 000051
2005501334.tif 000052
2005501334.tif 000053
2005501334.tif 000054
2005501334.tif 000055
2005501334.tif 000056
2005501334.tif 000057
2005501334.tif 000058
2005501334.tif 000059
2005501334.tif 000060
2005501334.tif 000061
2005501334.tif 000062
2005501334.tif 000063
2005501334.tif 000064
2005501334.tif 000065
2005501334.tif 000066
2005501334.tif 000067
2005501334.tif 000068
2005501334.tif 000069
2005501334.tif 000070
2005501334.tif 000071
2005501334.tif 000072
2005501334.tif 000073
2005501334.tif 000074
2005501334.tif 000075
2005501334.tif 000076
2005501334.tif 000077
2005501334.tif 000078
2005501334.tif 000079
【国際調査報告】
2005501334.tif 000080
2005501334.tif 000081