JP2005501331A - Javaオブジェクトをインスタンス化するためのJavaマクロインストラクションを生成するフレームワーク - Google Patents

Javaオブジェクトをインスタンス化するためのJavaマクロインストラクションを生成するフレームワーク Download PDF

Info

Publication number
JP2005501331A
JP2005501331A JP2003523352A JP2003523352A JP2005501331A JP 2005501331 A JP2005501331 A JP 2005501331A JP 2003523352 A JP2003523352 A JP 2003523352A JP 2003523352 A JP2003523352 A JP 2003523352A JP 2005501331 A JP2005501331 A JP 2005501331A
Authority
JP
Japan
Prior art keywords
java
instruction
instructions
bytecode
virtual machine
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2003523352A
Other languages
English (en)
Inventor
ソコロフ・ステパン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Incorpor
Original Assignee
Sun Microsystems Incorpor
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 Sun Microsystems Incorpor filed Critical Sun Microsystems Incorpor
Publication of JP2005501331A publication Critical patent/JP2005501331A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code

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

【課題】Javaコンピューティング環境において用いられるのに適するJavaマクロインストラクションを生成する技術を提供する。
【解決手段】この技術は、Javaインストラクションを効率的に実行するためにJava仮想マシンにおいて実現されえる。理解されるように、Javaマクロインストラクションは、2つ以上のJavaバイトコードインストラクションと置き換えられえる。これはさらにインタプリタによって実行されるJavaインストラクションの数を減らす。その結果、仮想マシン、特に限られたリソースで動作する仮想マシンのパフォーマンスは改善される。Javaマクロインストラクションは、従来のJavaインストラクションシーケンスまたはインストラクションの縮小されたセットとして与えられるJavaインストラクションのシーケンスのために生成されえる。
【選択図】図6B

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】
本発明のある実施形態は、Javaスタック複製バイトコードインストラクションが直後に続くJavaインスタンス化バイトコードインストラクションを含むJavaバイトコードインストラクションのシーケンスを備えるJavaマクロインストラクションを含む。前記Javaマクロインストラクションは、前記Javaコンピューティング環境において動作するJava仮想マシンによって実行される。前記Javaマクロインストラクションが実行されるとき、Javaバイトコードインストラクションの前記従来のシーケンスによって実行される前記動作が実行される。
【0015】
本発明の他の実施形態は、JavaDupバイトコードインストラクションが直後に続くJavaNewバイトコードインストラクションを含むJavaバイトコードインストラクションのシーケンスを表すJavaマクロインストラクションを含む。前記Javaマクロインストラクションは、前記Javaコンピューティング環境において動作するJava仮想マシンによって実行される。前記Javaマクロインストラクションが実行されるとき、Javaバイトコードインストラクションの前記シーケンスによって実行される前記動作が実行される。
【0016】
Javaマクロインストラクションのためのコンピュータプログラムを含むコンピュータで読み取り可能な媒体として、本発明のある実施形態は、JavaDupバイトコードインストラクションが直後に続くJavaNewバイトコードインストラクションを含むJavaバイトコードインストラクションのシーケンスを表すJavaマクロインストラクションを含む。前記Javaマクロインストラクションは、前記Javaコンピューティング環境において動作するJava仮想マシンによって実行される。前記Javaマクロインストラクションが実行されるとき、Javaバイトコードインストラクションの前記シーケンスによって実行される前記動作が実行される。
【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】
Figure 2005501331
Figure 2005501331
Figure 2005501331
Figure 2005501331
Figure 2005501331
Figure 2005501331
【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 (21)

  1. Javaコンピューティング環境におけるJavaマクロインストラクションであって、
    Javaスタック複製バイトコードインストラクションが直後に続くJavaインスタンス化バイトコードインストラクションを含むJavaバイトコードインストラクションのシーケンス
    を備え、
    前記Javaマクロインストラクションは、前記Javaコンピューティング環境において動作するJava仮想マシンによって実行され、
    前記Javaマクロインストラクションが実行されるとき、Javaバイトコードインストラクションの前記従来のシーケンスによって実行される前記動作が実行される、Javaマクロインストラクション。
  2. 請求項1に記載のJavaマクロインストラクションであって、前記Javaマクロインストラクションは、その直後に従来のJavaスタック複製バイトコードインストラクションが続く従来のJavaインスタンス化バイトコードインストラクションを含むJavaマクロインストラクション。
  3. 請求項1に記載のJavaマクロインストラクションであって、前記Javaマクロインストラクションは、Javaバイトコードベリフィケーションフェーズのあいだに生成されるJavaマクロインストラクション。
  4. 請求項1に記載のJavaマクロインストラクションであって、前記Java仮想マシンは、Javaインストラクションをストリームのペアとして内部で表現するJavaマクロインストラクション。
  5. 請求項4に記載のJavaマクロインストラクションであって、
    前記ストリームのペアは、コードストリームおよびデータストリームを含み、
    前記コードストリームは、前記Javaマクロインストラクションのコード部分を含むのに適し、
    前記データストリームは、前記Javaマクロインストラクションのデータ部分を含むのに適する
    Javaマクロインストラクション。
  6. 請求項5に記載のJavaマクロインストラクションであって、
    前記Javaマクロインストラクションが前記従来のシーケンスを置換しなければならないと前記仮想マシンが決定するときだけ、前記Javaマクロインストラクションが生成される、Javaマクロインストラクション。
  7. 請求項6に記載のJavaマクロインストラクションであって、前記決定は所定の基準に基づいてなされるJavaマクロインストラクション。
  8. 請求項7に記載のJavaマクロインストラクションであって、前記所定の基準は、前記従来のシーケンスが所定の回数より多く反復されたかどうかであるJavaマクロインストラクション。
  9. Javaコンピューティング環境におけるJavaマクロインストラクションであって、
    JavaDupバイトコードインストラクションが直後に続くJavaNewバイトコードインストラクションを含むJavaバイトコードインストラクションのシーケンス
    を表し、
    前記Javaマクロインストラクションは、前記Javaコンピューティング環境において動作するJava仮想マシンによって実行され、
    前記Javaマクロインストラクションが実行されるとき、Javaバイトコードインストラクションの前記シーケンスによって実行される前記動作が実行される、Javaマクロインストラクション。
  10. 請求項9に記載のJavaマクロインストラクションであって、
    前記JavaDupバイトコードインストラクションは、実行スタック内の実行スタック最上部で格納された値を複製するよう仮想マシンで実行するのに適する仮想マシンインストラクションを表し、
    前記Dup仮想マシンインストラクションは、実行スタック内の実行スタック最上部で格納された値を複製するのにも適する、2つ以上の従来のJavaバイトコードで実行可能なインストラクションを表す
    Javaマクロインストラクション。
  11. 請求項10に記載のJavaマクロインストラクションであって、前記実行スタック上に複製されえる値は、前記スタックの最上部から第1、第2、および第3位置内にある値に限定されないJavaマクロインストラクション。
  12. 請求項11に記載のJavaマクロインストラクションであって、前記スタックの最上部に複製された前記値は、4バイト値または8バイト値であるJavaマクロインストラクション。
  13. 請求項12に記載のJavaマクロインストラクションであって、前記仮想マシンインストラクションは、前記実行スタックに格納されたどの値が前記スタックの最上部に複製されるべきかを示す、それに関連付けられたパラメータを持つJavaマクロインストラクション。
  14. 請求項9に記載のJavaマクロインストラクションであって、前記Newバイトコードインストラクションは、Javaオブジェクトおよびアレイをインスタンス化するために仮想マシンでの実行に適する仮想マシンインストラクションを表し、前記仮想マシンインストラクションは、Javaオブジェクトまたはアレイのインスタンス化に適する2つ以上のJavaバイトコードで実行可能なインストラクションを表すJavaマクロインストラクション。
  15. 請求項14に記載のJavaマクロインストラクションであって、前記Javaオブジェクトおよびアレイのインスタンス化は、前記オブジェクトまたはアレイに関連付けられるパラメータに基づいて前記オブジェクトまたはアレイのタイプを決定することによって実行されるJavaマクロインストラクション。
  16. Javaマクロインストラクションのためのコンピュータプログラムを含むコンピュータで読み取り可能な媒体であって、前記Javaマクロインストラクションは、
    JavaDupバイトコードインストラクションが直後に続くJavaNewバイトコードインストラクションを含むJavaバイトコードインストラクションのシーケンス
    を表し、
    前記Javaマクロインストラクションは、前記Javaコンピューティング環境において動作するJava仮想マシンによって実行され、
    前記Javaマクロインストラクションが実行されるとき、Javaバイトコードインストラクションの前記シーケンスによって実行される前記動作が実行される
    コンピュータで読み取り可能な媒体。
  17. 請求項16に記載のコンピュータで読み取り可能な媒体であって、
    前記JavaDupバイトコードインストラクションは、実行スタック内の実行スタック最上部で格納された値を複製するよう仮想マシンで実行するのに適する仮想マシンインストラクションを表し、
    前記Dup仮想マシンインストラクションは、実行スタック内の実行スタック最上部で格納された値を複製するのにも適する、2つ以上の従来のJavaバイトコードで実行可能なインストラクションを表す
    コンピュータで読み取り可能な媒体。
  18. 請求項17に記載のコンピュータで読み取り可能な媒体であって、前記実行スタック上に複製されえる値は、前記スタックの最上部から第1、第2、および第3位置内にある値に限定されないコンピュータで読み取り可能な媒体。
  19. 請求項17に記載のコンピュータで読み取り可能な媒体であって、前記仮想マシンインストラクションは、前記実行スタックに格納されたどの値が前記スタックの最上部に複製されるべきかを示す、それに関連付けられたパラメータを持つコンピュータで読み取り可能な媒体。
  20. 請求項17に記載のコンピュータで読み取り可能な媒体であって、前記Newバイトコードインストラクションは、Javaオブジェクトおよびアレイをインスタンス化するために仮想マシンでの実行に適する仮想マシンインストラクションを表し、前記仮想マシンインストラクションは、Javaオブジェクトまたはアレイのインスタンス化に適する2つ以上のJavaバイトコードで実行可能なインストラクションを表すコンピュータで読み取り可能な媒体。
  21. 請求項20に記載のコンピュータで読み取り可能な媒体であって、前記Javaオブジェクトおよびアレイのインスタンス化は、前記オブジェクトまたはアレイに関連付けられるパラメータに基づいて前記オブジェクトまたはアレイのタイプを決定することによって実行されるコンピュータで読み取り可能な媒体。
JP2003523352A 2001-08-24 2002-08-23 Javaオブジェクトをインスタンス化するためのJavaマクロインストラクションを生成するフレームワーク Pending JP2005501331A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/939,310 US7058934B2 (en) 2001-08-24 2001-08-24 Frameworks for generation of Java macro instructions for instantiating Java objects
PCT/US2002/026997 WO2003019355A1 (en) 2001-08-24 2002-08-23 Frameworks for generation of java macro instructions for instantiating java objects

Publications (1)

Publication Number Publication Date
JP2005501331A true JP2005501331A (ja) 2005-01-13

Family

ID=25472929

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003523352A Pending JP2005501331A (ja) 2001-08-24 2002-08-23 Javaオブジェクトをインスタンス化するためのJavaマクロインストラクションを生成するフレームワーク

Country Status (4)

Country Link
US (1) US7058934B2 (ja)
EP (1) EP1421475B1 (ja)
JP (1) JP2005501331A (ja)
WO (1) WO2003019355A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006302272A (ja) * 2005-04-21 2006-11-02 Samsung Electronics Co Ltd ジャバ仮想マシンの命令語実行方法及びその装置

Families Citing this family (6)

* Cited by examiner, † Cited by third party
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
US20050060272A1 (en) * 2003-09-11 2005-03-17 Wen-Hua Lin Embedded system program code reduction method and system
US8806457B2 (en) * 2008-12-15 2014-08-12 Apple Inc. Deferred constant pool generation
US9495185B2 (en) * 2015-02-23 2016-11-15 International Business Machines Corporation Per tenant initialization check removal
CN112631724A (zh) * 2020-12-24 2021-04-09 北京握奇数据股份有限公司 一种字节码指令集精简方法和系统
US11809839B2 (en) 2022-01-18 2023-11-07 Robert Lyden Computer language and code for application development and electronic and optical communication

Family Cites Families (81)

* Cited by examiner, † Cited by third party
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
US5542059A (en) * 1994-01-11 1996-07-30 Exponential Technology, Inc. Dual instruction set processor having a pipeline with a pipestage functional unit that is relocatable in time and sequence order
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
WO1997027536A1 (en) * 1996-01-24 1997-07-31 Sun Microsystems, Inc. Instruction folding for a stack-based machine
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
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
US5878430A (en) * 1996-09-20 1999-03-02 Allen-Bradley Company, Llc Object attribute handler
US6058443A (en) * 1997-02-18 2000-05-02 Advanced Micro Devices, Inc. System for partitioning PC chipset functions into logic and port integrated circuits
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
EP1359501A3 (en) 1997-10-02 2007-11-21 Koninklijke Philips Electronics N.V. A processing device for executing virtual machine instructions
WO1999018485A2 (en) * 1997-10-02 1999-04-15 Koninklijke Philips Electronics N.V. Variable instruction set 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
US6026237A (en) * 1997-11-03 2000-02-15 International Business Machines Corporation System and method for dynamic modification of class files
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
US6075942A (en) * 1998-05-04 2000-06-13 Sun Microsystems, Inc. Encoding machine-specific optimization in generic byte code by using local variables as pseudo-registers
US6480952B2 (en) 1998-05-26 2002-11-12 Advanced Micro Devices, Inc. Emulation coprocessor
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
KR20010072477A (ko) * 1998-08-13 2001-07-31 썬 마이크로시스템즈, 인코포레이티드 가상 머신 환경에서 네이티브 코드를 변환하고 실행하는방법 및 장치
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
US6618737B2 (en) * 2000-03-09 2003-09-09 International Business Machines Corporation Speculative caching of individual fields in a distributed object system
US6738977B1 (en) * 2000-05-31 2004-05-18 International Business Machines Corporation Class sharing between multiple virtual machines
US6968542B2 (en) 2000-06-16 2005-11-22 Hewlett-Packard Development Company, L.P. Method for dynamically identifying pseudo-invariant instructions and their most common output values on frequently executing program paths
WO2002041145A2 (en) 2000-11-20 2002-05-23 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

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006302272A (ja) * 2005-04-21 2006-11-02 Samsung Electronics Co Ltd ジャバ仮想マシンの命令語実行方法及びその装置

Also Published As

Publication number Publication date
EP1421475A1 (en) 2004-05-26
US7058934B2 (en) 2006-06-06
EP1421475B1 (en) 2018-01-10
US20030041322A1 (en) 2003-02-27
WO2003019355A1 (en) 2003-03-06

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
US7003778B2 (en) Exception handling in java computing environments
JP2005501334A (ja) Javaコンピューティング環境におけるJavaマクロインストラクションの生成のためのフレームワーク
US7228533B2 (en) Frameworks for generation of Java macro instructions for performing programming loops
US6948156B2 (en) Type checking in java computing environments
JP2005501331A (ja) Javaオブジェクトをインスタンス化するためのJavaマクロインストラクションを生成するフレームワーク
JP2005507103A (ja) Javaヒープを実現するフレームワーク
US6957428B2 (en) Enhanced virtual machine instructions
US7036120B2 (en) Two tier clusters for representation of objects in Java programming environments
US6918109B2 (en) Execution of synchronized Java methods in Java computing 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