(57)【要約】本発明の一実施形態によって、プラットフォーム非依存のバーチャルマシンにおいて近接ベースのアドレス指定の実施を容易にするシステムが提供される。該プラットフォーム非依存のバーチャルマシン上でプログラムを実行する間において、該システムは、命令と、該命令に関連したプログラム要素への参照を生成するために用いられ得る該命令に関連したパラメータとを受信する。次に、該システムは、該パラメータ内にエンコードされた情報を検査することによって、該参照の近接を決定し、次いで、該パラメータを用いることによって該プログラム要素への該参照を生成し、ここで、該参照の該近接は、該参照が該パラメータから生成される態様を決定する。
2006526841.tif 000002
【特許請求の範囲】
【請求項１】
プラットフォーム非依存のバーチャルマシンにおいて近接ベースのアドレス指定を行う方法であって、
該プラットフォーム非依存のバーチャルマシン上においてプログラムを実行する間において、命令を受信することと、
該命令に関連したプログラム要素への参照を生成するために用いられ得る該命令に関連したパラメータを受信することと、
該パラメータ内にエンコードされた情報を検査することによって、該参照の近接を決定することと、
該パラメータを用いることによって該プログラム要素への該参照を生成することであって、該参照の該近接は、該参照が該パラメータから生成される態様を決定する、ことと
を包含する、方法。
【請求項２】
前記参照の前記近接が、
前記プログラム要素が同一のクラスにあることと、
該プログラム要素が同一のバンドル内の別のクラスに関連していることと、
該プログラム要素が別のバンドル内の別のクラスに関連していることと
を示し得る、請求項１に記載の方法。
【請求項３】
前記プログラム要素がフィールドまたはメソッドである場合、かつ、該プログラム要素が同一のクラスにあることを前記参照の前記近接が示す場合において、該参照を生成することが、該同一のクラス内の該プログラム要素に対するオフセットとして前記パラメータを用いることを包含する、請求項２に記載の方法。
【請求項４】
前記プログラム要素がフィールドまたはメソッドである場合、かつ、該プログラム要素が同一のバンドル内の別のクラスにあることを前記参照の前記近接が示す場合において、該参照を生成することが、前記パラメータを用いることによって参照ルックアップ構造内のエントリをルックアップすることを包含し、該エントリは、該クラスに対するグローバルオフセットと、該クラス内の該プログラム要素に対するオフセットとを含む、請求項２に記載の方法。
【請求項５】
前記プログラム要素がフィールドまたはメソッドである場合、かつ、該プログラム要素が別のバンドル内の別のクラスにあることを前記参照の前記近接が示す場合において、該参照を生成することが、
前記パラメータを用いることによって参照ルックアップ構造内のエントリをルックアップすることであって、該エントリは、クラス名と、プログラム要素名と、プログラム要素の型とを識別する、ことと、
該クラス名を用いることによって、該クラスに対するグローバルオフセットをルックアップすることと、
該プログラム要素名と該プログラム要素の型とを用いることによって、該クラス内の該プログラム要素に対するオフセットをルックアップすることと
を包含する、請求項２に記載の方法。
【請求項６】
前記プログラム要素がクラスである場合、かつ、該クラスが同一のバンドルにあることを前記参照の前記近接が示す場合において、該参照を生成することが、前記パラメータを用いることによって参照ルックアップ構造内のエントリをルックアップすることであって、該エントリは該クラスに対するグローバルオフセットを含む、ことを包含する、請求項２に記載の方法。
【請求項７】
前記プログラム要素がクラスである場合、かつ、該クラスが別のバンドルにあることを前記参照の前記近接が示す場合において、該参照を生成することが、
前記パラメータを用いることによって参照ルックアップ構造内のエントリをルックアップすることであって、該エントリはクラス名を識別する、ことと、
該クラス名を用いることによって、該クラスに対するグローバルオフセットをルックアップすることと
を包含する、請求項２に記載の方法。
【請求項８】
前記プログラムを実行する前において、参照ルックアップ構造を生成することによって、インプレース実行の間においてプログラム要素への参照を生成することを容易にすることをさらに包含する、請求項１に記載の方法。
【請求項９】
前記参照ルックアップ構造が、メソッドまたはフィールドへの参照を生成する参照テーブルと、クラスへの参照を生成するオフセットマップとを含む、請求項８に記載の方法。
【請求項１０】
前記パラメータ内にエンコードされた前記情報が予約ビットに含まれ、該予約ビットは、該パラメータの最低位の２ビットである、請求項１に記載の方法。
【請求項１１】
コンピュータによって実行されたときにおいて、プラットフォーム非依存のバーチャルマシンにおいて近接ベースのアドレス指定を行う方法を該コンピュータに行わせる命令を格納するコンピュータ可読記憶媒体であって、該方法は、
該プラットフォーム非依存のバーチャルマシン上においてプログラムを実行する間において、命令を受信することと、
該命令に関連したプログラム要素への参照を生成するために用いられ得る該命令に関連したパラメータを受信することと、
該パラメータ内にエンコードされた情報を検査することによって、該参照の近接を決定することと、
該パラメータを用いることによって該プログラム要素への該参照を生成することであって、該参照の該近接は、該参照が該パラメータから生成される態様を決定する、ことと
を包含する、コンピュータ可読記憶媒体。
【請求項１２】
前記参照の前記近接が、
前記プログラム要素が同一のクラスにあることと、
該プログラム要素が同一のバンドル内の別のクラスに関連していることと、
該プログラム要素が別のバンドル内の別のクラスに関連していることと
を示し得る、請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１３】
前記プログラム要素がフィールドまたはメソッドである場合、かつ、該プログラム要素が同一のクラスにあることを前記参照の前記近接が示す場合において、該参照を生成することが、該同一のクラス内の該プログラム要素に対するオフセットとして前記パラメータを用いることを包含する、請求項１２に記載のコンピュータ可読記憶媒体。
【請求項１４】
前記プログラム要素がフィールドまたはメソッドである場合、かつ、該プログラム要素が同一のバンドル内の別のクラスにあることを前記参照の前記近接が示す場合において、該参照を生成することが、前記パラメータを用いることによって参照ルックアップ構造内のエントリをルックアップすることを包含し、該エントリは、該クラスに対するグローバルオフセットと、該クラス内の該プログラム要素に対するオフセットとを含む、請求項１２に記載のコンピュータ可読記憶媒体。
【請求項１５】
前記プログラム要素がフィールドまたはメソッドである場合、かつ、該プログラム要素が別のバンドル内の別のクラスにあることを前記参照の前記近接が示す場合において、該参照を生成することが、
前記パラメータを用いることによって参照ルックアップ構造内のエントリをルックアップすることであって、該エントリは、クラス名と、プログラム要素名と、プログラム要素の型とを識別する、ことと、
該クラス名を用いることによって、該クラスに対するグローバルオフセットをルックアップすることと、
該プログラム要素名と該プログラム要素の型とを用いることによって、該クラス内の該プログラム要素に対するオフセットをルックアップすることと
を包含する、請求項１２に記載のコンピュータ可読記憶媒体。
【請求項１６】
前記プログラム要素がクラスである場合、かつ、該クラスが同一のバンドルにあることを前記参照の前記近接が示す場合において、該参照を生成することが、前記パラメータを用いることによって参照ルックアップ構造内のエントリをルックアップすることであって、該エントリは該クラスに対するグローバルオフセットを含む、ことを包含する、請求項１２に記載のコンピュータ可読記憶媒体。
【請求項１７】
前記プログラム要素がクラスである場合、かつ、該クラスが別のバンドルにあることを前記参照の前記近接が示す場合において、該参照を生成することが、
前記パラメータを用いることによって参照ルックアップ構造内のエントリをルックアップすることであって、該エントリはクラス名を識別する、ことと、
該クラス名を用いることによって、該クラスに対するグローバルオフセットをルックアップすることと
を包含する、請求項１２に記載のコンピュータ可読記憶媒体。
【請求項１８】
前記プログラムを実行する前において、前記方法は、参照ルックアップ構造を生成することによって、インプレース実行の間においてプログラム要素への参照を生成することを容易にすることをさらに包含する、請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１９】
前記参照ルックアップ構造が、メソッドまたはフィールドへの参照を生成する参照テーブルと、クラスへの参照を生成するオフセットマップとを含む、請求項１８に記載のコンピュータ可読記憶媒体。
【請求項２０】
前記パラメータ内にエンコードされた前記情報が予約ビットに含まれ、該予約ビットは、該パラメータの最低位の２ビットである、請求項１１に記載のコンピュータ可読記憶媒体。
【請求項２１】
プラットフォーム非依存のバーチャルマシンにおいて近接ベースのアドレス指定を行う装置であって、
プラットフォーム非依存のプログラムを実行するように構成されたプラットフォーム非依存のバーチャルマシンと、
命令と、
該命令に関連したプログラム要素への参照を生成するために用いられ得る該命令に関連したパラメータと
を受信するように構成された該プラットフォーム非依存のバーチャルマシン内の受信機構と、
参照生成機構であって、該参照生成機構は、該パラメータ内にエンコードされた情報を検査することによって該参照の近接を決定するように構成され、かつ、該パラメータを用いることによって該プログラム要素の該参照を生成するように構成されており、該参照の該近接は、該参照が該パラメータから生成される態様を決定する、参照生成機構と
を備える、装置。
【請求項２２】
前記参照の前記近接が、
前記プログラム要素が同一のクラスにあることと、
該プログラム要素が同一のバンドル内の別のクラスに関連していることと、
該プログラム要素が別のバンドル内の別のクラスに関連していることと
を示し得る、請求項２１に記載の装置。
【請求項２３】
前記プログラム要素がフィールドまたはメソッドである場合、かつ、該プログラム要素が同一のクラスにあることを前記参照の前記近接が示す場合において、前記参照生成機構が、該同一のクラス内の該プログラム要素に対するオフセットとして前記パラメータを用いるように構成されている、請求項２２に記載の装置。
【請求項２４】
前記プログラム要素がフィールドまたはメソッドである場合、かつ、該プログラム要素が同一のバンドル内の別のクラスにあることを前記参照の前記近接が示す場合において、前記参照生成機構が、前記パラメータを用いることによって参照ルックアップ構造内のエントリをルックアップするように構成されており、該エントリは、該クラスに対するグローバルオフセットと、該クラス内の該プログラム要素に対するオフセットとを含む、請求項２２に記載の装置。
【請求項２５】
前記プログラム要素がフィールドまたはメソッドである場合、かつ、該プログラム要素が別のバンドル内の別のクラスにあることを前記参照の前記近接が示す場合において、前記参照生成機構は、
前記パラメータを用いることによって、参照ルックアップ構造内のエントリであって、クラス名と、プログラム要素名と、プログラム要素の型とを識別するエントリをルックアップするように構成され、
該クラス名を用いることによって、該クラスに対するグローバルオフセットをルックアップするように構成され、かつ
該プログラム要素名と該プログラム要素の型とを用いることによって、該クラス内の該プログラム要素に対するオフセットをルックアップするように構成されている、請求項２２に記載の装置。
【請求項２６】
前記プログラム要素がクラスである場合、かつ、該クラスが同一のバンドルにあることを前記参照の前記近接が示す場合において、前記参照生成機構が、前記パラメータを用いることによって参照ルックアップ構造内のエントリをルックアップするように構成されており、該エントリは該クラスに対するグローバルオフセットを含む、ことを包含する、請求項２２に記載の装置。
【請求項２７】
前記プログラム要素がクラスである場合、かつ、該クラスが別のバンドルにあることを前記参照の前記近接が示す場合において、前記参照機構は、
前記パラメータを用いることによって、参照ルックアップ構造内のエントリであって、クラス名を識別するエントリをルックアップするように構成され、かつ
該クラス名を用いることによって、該クラスに対するグローバルオフセットをルックアップするように構成されている、請求項２２に記載の装置。
【請求項２８】
前記プラットフォーム非依存のプログラムを、インプレース実行に適した形式に変換するように構成された変換器をさらに備え、前記プログラムを実行する前において、該変換器は、参照ルックアップ構造を生成することによって、インプレース実行の間においてプログラム要素への参照を生成することを容易にするように構成されている、請求項２１に記載の装置。
【請求項２９】
前記参照ルックアップ構造が、メソッドまたはフィールドへの参照を生成する参照テーブルと、クラスへの参照を生成するオフセットマップとを含む、請求項２８に記載の装置。
【請求項３０】
前記パラメータ内にエンコードされた前記情報が予約ビットに含まれ、該予約ビットは、該パラメータの最低位の２ビットである、請求項２１に記載の装置。
【請求項３１】
プラットフォーム非依存のバーチャルマシンにおいて近接ベースのアドレス指定を行う手段であって、
命令と、
該命令に関連したプログラム要素への参照を生成するために用いられ得る該命令に関連したパラメータと
を受信するように構成された該プラットフォーム非依存のバーチャルマシン内の受信手段と、
該プロットフォーム非依存のバーチャルマシン内の参照生成手段であって、該参照生成手段は、該パラメータ内にエンコードされた情報を検査することによって該参照の近接を決定するように構成され、かつ、該パラメータを用いることによって該プログラム要素の該参照を生成するように構成されており、該参照の該近接は、該参照が該パラメータから生成される態様を決定する、参照生成手段と
を備える、手段。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステム内にあるプラットフォーム非依存のバーチャルマシン（ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ）の設計に関する。さらに詳しくは、本発明は、プラットフォーム非依存のバーチャルマシンにおいてインプレース実行（ｉｎ−ｐｌａｃｅ  ｅｘｅｃｕｔｉｏｎ）を支援するために近接ベースのアドレス指定を達成するための方法および装置に関する。
【背景技術】
【０００２】
現在、コンピュータ技術における大きな進歩により、かなりの量の計算能力をポケットサイズの演算装置（例えば、セル式電話機、および電子手帳）に組み込むことが可能となっている。これらの装置に多様なアプリケーションを実行させることを可能にするために、開発者は、プラットフォーム非依存のバーチャルマシン（例えば、ＳＵＮ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃ．、Ｓａｎｔａ  Ｃｌａｒａ、Ｃａｌｉｆｏｒｎｉａ  によって開発されたＪＡＶＡ  ＶＩＲＴＵＡＬ  ＭＡＣＨＩＮＥ（登録商標））をこれらの演算装置に組み込み始めた。これにより、これらの演算装置は、プラットフォーム非依存のバイトコードを実行可能となり、このバイトコードは、多くの異なった演算プラットフォームに容易に分散され得る。
【０００３】
具体的には、Ｊａｖａ２  Ｐｌａｔｆｏｒｍ，Ｍｉｃｒｏ  Ｅｄｉｔｉｏｎ（Ｊ２ＭＥ（登録商標））は、無線機器の分野ではよく知られている。近年、無線装置産業における多くのキープレーヤーは、Ｊ２ＭＥ用の機器を大量に出荷し始めている。２００２年には、６０００万〜８０００万台のＪ２ＭＥ用の携帯電話機が出荷されたと見積もられており、２００３年に出荷されたＪ２ＭＥ機器の全台数は２億台を超えるだろう。Ｊ２ＭＥプラットフォームの成功にも関わらず、ＪＡＶＡ(登録商標)技術の大きな課題が、小さな機器空間内に残っている。
【０００４】
予想通りではあるが、Ｊ２ＭＥアプリケーション開発の重大な障害になってきている１つの領域はアプリケーションサイズである。携帯機器におけるさらに重要なＪ２ＭＥアプリケーションの発展により、Ｊ２ＭＥアプリケーションのダウンロードによって、無線ネットワークのバンド幅の大部分が消費される。非常に小さいＪ２ＭＥアプリケーションには関連しないランタイムの動的メモリのコストおよびアプリケーション起動のコストは、Ｊａｖａ（登録商標）プログラミング言語における重大なモバイルシステムのソフトウェア開発と同様、大抵の大量市場の消費者の機器に対して依然として過多である。
【０００５】
プラットフォーム非依存のバーチャルマシンにおけるメモリの使用量およびアプリケーション起動のコストを減らす多くの有望なアプローチのうちの１つは、「インプレース実行」として知られた技術である。純粋なインプレース実行を支援するＪＶＭ（Ｊａｖａ（登録商標）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）において、標準的なＪａｖａ（登録商標）クラスファイルのフォーマットは、従来の時間のかかるクラスローディングプロセスのない、バーチャルマシンのランタイム構造として直接使用され得る表現と取り替えられる。この表現では、静的データ構造（例えば、クラス、メソッドテーブル、フィールドテーブル、例外ハンドラ、シンボル、定数およびバイトコード）は、実際には、決してバーチャルマシンにロードされず、そのかわりに、静的表現から直接アクセスされる。モバイル装置（ここで、静的表現が安価なフラッシュメモリまたは読み取り専用メモリ中に保持され得る）では、このことは、劇的なＲＡＭ消費の節約を示し得る；一般的な条件では、５〜１０Ｘまで節約し得る。アプリケーションの静的なサイズは、標準的なＪａｖａ（登録商標）クラスファイルまたはＪＡＲファイルを有する場合よりも有意に小さくもなり得、これによって、Ｊａｖａ（登録商標）アプリケーションのシンボリック情報または動的なリンク能力の損失はない。
【０００６】
残念ながら、実行速度ということになると、インプレース実行は多くの不都合な点を有する。インプレース実行可能なコードは不変であるので、様々な一般的に使用される、ランタイムでバイトコードを変形する能力に依存するランタイムの最適化を使用することができない。さらに、インプレース実行可能なファイルは、容易にメモリ中に再配置可能であるように意図されるので、このようなファイルにおけるすべての参照は、ポインタではなくオフセットでなければならない。これによって、ランタイムでさらなるレベルの間接化技法（ｉｎｄｉｒｅｃｔｉｏｎ）が導入され、これによって実行速度が遅くなる。
【０００７】
さらに、インプレース実行可能なファイルは一般的に、広い範囲のバーチャルマシンのインプリメンテーションに適用可能であることが意図されるので、従来のバーチャルマシンにおいて使用されるランタイムのデータ構造のような特定のバーチャルマシンのインプリメンテーションのためにはカスタマイズされ得ない。
【０００８】
これらの問題を理由として、プラットフォーム非依存のバーチャルマシンにおいて、インプレース実行は広く使用されてきていないが、このような技術は携帯電話および他のターゲット装置に対しては理想的であり得る。
【０００９】
したがって、必要とされるものは、プラットフォーム非依存のバーチャルマシンにおけるインプレース実行を達成することを効率的に容易にするメソッドおよび装置である。
【発明の開示】
【課題を解決するための手段】
【００１０】
本発明の一実施形態によって、プラットフォーム非依存のバーチャルマシンにおいて近接ベースのアドレス指定の実施を容易にするシステムが提供される。該プラットフォーム非依存のバーチャルマシン上でプログラムを実行する間において、該システムは、命令と、該命令に関連したプログラム要素への参照を生成するために用いられ得る該命令に関連したパラメータとを受信する。次に、該システムは、該パラメータ内にエンコードされた情報を検査することによって、該参照の近接を決定し、次いで、該パラメータを用いることによって該プログラム要素への該参照を生成し、ここで、該参照の該近接は、該参照が該パラメータから生成される態様を決定する。
【００１１】
この実施形態の一変更形態では、上記参照の上記近接が、上記プログラム要素が同一のクラスにあること、または、該プログラム要素が同一のバンドル内の別のクラスに関連していること、または、該プログラム要素が別のバンドル内の別のクラスに関連していることを示し得る。
【００１２】
この実施形態の一変更形態では、上記プログラム要素がフィールドまたはメソッドである場合、かつ、該プログラム要素が同一のクラスにあることを上記参照の上記近接が示す場合において、該参照を生成することが、該同一のクラス内の該プログラム要素に対するオフセットとして上記パラメータを用いることを含む。
【００１３】
この実施形態の一変更形態では、上記プログラム要素がフィールドまたはメソッドである場合、かつ、該プログラム要素が同一のバンドル内の別のクラスにあることを上記参照の上記近接が示す場合において、該参照を生成することが、上記パラメータを用いることによって参照ルックアップ構造内のエントリをルックアップすることを含み、該エントリは、該クラスに対するグローバルオフセットと、該クラス内の該プログラム要素に対するオフセットとを含む。
【００１４】
この実施形態の一変更形態では、上記プログラム要素がフィールドまたはメソッドである場合、かつ、該プログラム要素が別のバンドル内の別のクラスにあることを上記参照の上記近接が示す場合において、該参照を生成することが、上記パラメータを用いることによって参照ルックアップ構造内のエントリをルックアップすることを含み、該エントリは、クラス名と、プログラム要素名と、プログラム要素の型とを識別する。次に、該システムは、該クラス名を用いることによって、該クラスに対するグローバルオフセットをルックアップし、該プログラム要素名と該プログラム要素の型とを用いることによって、該クラス内の該プログラム要素に対するオフセットをルックアップする。
【００１５】
この実施形態の一変更形態では、上記プログラム要素がクラスである場合、かつ、該クラスが同一のバンドルにあることを上記参照の上記近接が示す場合において、該参照を生成することが、上記パラメータを用いることによって参照ルックアップ構造内のエントリをルックアップすることを含み、該エントリは該クラスに対するグローバルオフセットを含む。
【００１６】
この実施形態の一変更形態では、上記プログラム要素がクラスである場合、かつ、該クラスが別のバンドルにあることを上記参照の上記近接が示す場合において、該参照を生成することが、上記パラメータを用いることによって参照ルックアップ構造内のエントリをルックアップすることを含み、該エントリはクラス名を識別する。次に、該システムは、該クラス名を用いることによって、該クラスに対するグローバルオフセットをルックアップする。
【００１７】
この実施形態の一変更形態では、上記プログラムを実行する前において、上記システムは、参照ルックアップ構造を生成することによって、インプレース実行の間においてプログラム要素への参照を生成することを容易にする。さらなる変更形態では、上記参照ルックアップ構造は、メソッドまたはフィールドへの参照を生成する参照テーブルと、クラスへの参照を生成するオフセットマップとを含む。
【００１８】
この実施形態の一変更形態では、上記パラメータ内にエンコードされた上記情報が予約ビットに含まれ、該予約ビットは、該パラメータの最低位の２ビットを構成する。
【発明を実施するための最良の形態】
【００１９】
次の説明は、当業者が本発明を作り出し、使用できるように表され、具体的な適用およびその必要性に基づいて提供される。開示された実施形態に対する様々な修正は、当業者に容易に明らかとなり、本明細書中で規定される一般的な原理は、本発明の精神および範囲から逸脱することなく、他の実施形態および用途に適用され得る。したがって、本発明は、ここに示す実施形態に制限されることを意図せず、本明細書で開示された原理および特徴に一貫した最も広い範囲を与えられ得る。
【００２０】
この詳細な説明に記載されるデータ構造およびコードは、典型的には、読み取り可能なストレージ媒体上に格納され、このストレージ媒体は、コンピュータシステムによって使用されるコードおよび／またはデータを格納し得る任意の装置または媒体であり得る。これは、以下に限定されないが、磁気ストレージ装置および光学ストレージ装置（例えば、ディスクドライブ、磁気テープ、ＣＤ（ｃｏｍｐａｃｔ  ｄｉｓｃ）およびＤＶＤ（ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｃ  または  ｄｉｇｉｔａｌ  ｖｉｄｅｏ  ｄｉｓｃ））および（信号が変調された伝播波を有する、または有さない）伝送媒体中に具現化されたコンピュータ命令信号を含む。例えば、この伝送媒体は、インターネットのような通信ネットワークを含み得る。
【００２１】
（演算装置におけるプラットフォーム非依存のアプリケーションの実行）
図１は、演算装置１０２における、従来のプラットフォーム非依存のアプリケーションの実行を示す。演算装置１０２は、一般的に、演算応力を有する任意のタイプの装置またはシステム（以下に限定されるわけではないが、ラップトップコンピュータシステム、ポケットサイズのコンピュータシステム、電子手帳または装置コントローラを含む）を含み得る。演算装置１０２は、別の装置（例えば、ページャー（ｐａｇｅｒ）、セル型電話機、テレビ、自動車、または家電）内に組み込まれる演算装置も含み得る。本発明の一実施形態では、演算装置１０２は、無線ネットワークを介して信号を送受信する無線トランシーバを含む。
【００２２】
動作中には、演算装置１０２は、プラットフォーム非依存のアプリケーションを受容し得る。例えば、図１を参照すると、演算装置１０２は、Ｊａｖａ（登録商標）ＡＲｃｈｉｖｅファイル１０８（ＪＡＲファイル）中のまたは他の等価なファイルフォーマットのプラットフォーム非依存のアプリケーションを受容する。ＪＡＲファイル１０８内のアプリケーションは、多くのクラスファイルおよび他のデータ構造からなる。
【００２３】
ＪＡＲファイル１０８は、演算装置１０２内の不揮発性のフラッシュメモリ１０４（読み取り専用メモリ）にロードされる。このローディングプロセスは、無線または有線の通信リンクを介して、またはＪＡＲファイル２０４を含むコンピュータ読み取り可能なストレージ媒体（例えば、ディスク）の導入により起こり得、ＪＡＲファイル２０４を演算装置１０２に入れる。
【００２４】
次に、このアプリケーションを実行するために、時間を浪費するクラスローディングプロセス（ｃｌａｓｓ  ｌｏａｄｉｎｇ  ｐｒｏｃｅｓｓ）が生じ、そのプロセス中では、静的データ（ｓｔａｔｉｃ  ｄａｔａ）構造１１０（アプリケーションメタデータ）は、フラッシュメモリ１０４からランダムアクセスメモリ（ＲＡＭ）１０６にコピーされる。これら静的データ構造１１０は、アイテム（例えばクラス）、フィールドおよびメソッドのテーブル、シンボル、特例のハンドラテーブル、定数およびバイトコードを含む。さらに、このアプリケーションに関する動的データ構造１１２（例えば、オブジェクトインスタンス、実行スタック、スレッドおよびモニタ）は、ＲＡＭ１０６中に格納される。次いで、このアプリケーションはＲＡＭ１０６中で実行される。
【００２５】
フラッシュメモリ１０４から静的データ構造１１０およびコードへ直接アクセス可能であるので、静的データ構造１１０およびコードをＲＡＭ１０６にコピーする時間浪費するプロセスが概ね不必要であることに注目されたい。
【００２６】
（プラットフォーム非依存のアプリケーションのインプレース実行）
図２は、本発明の実施形態による、演算装置１０２におけるプラットフォーム非依存のアプリケーションのインプレース実行を示す。この実施形態では、変換器２０２が、ＪＡＲファイル１０８を処理して、変換されたＪＡＲファイル２０４を生成する。変換されたＪＡＲファイル１０８内では、このアプリケーション（アプリケーションメタデータ）のすべての静的データ構造は、直接実行可能な形式で表される。
【００２７】
次に、変換されたＪＡＲファイル１０８は、演算装置１０２内にあるフラッシュメモリ１０４中にロードされる。このアプリケーションが連続して実行される場合、静的データ構造は、フラッシュメモリ１０４内にとどまる。静的変数に対してプレースホールダー（ｐｌａｃｅｈｏｌｄｅｒ）として働く単に小さな「シャドウクラス（ｓｈａｄｏｗ  ｃｌａｓｓ）」２０６が、動的データ構造１１２とともにＲＡＭ１０６中に格納される。
【００２８】
（バイトコード形式）
上述の変換プロセス中では、ポインタはオフセットによって置き換えられ、このアプリケーションはメモリ中で再配置することが可能となる。この変換プロセス中では、このバイトコード形式は概して不変である。オフセットベースのアドレス指定を支援するためにこのバイトコード形式を変更することが可能であることに注目されたい。しかし、バイトコード形式の修正により、不可能ではないが、既存のデバグツールを使用することは困難である。したがって、この変換を実行する場合には、バイトコード形式（特に、バイトコード長）を維持するのが望ましい。
【００２９】
バイトコードは、このバイトコードに関するプログラム要素（例えば、メソッド、フィールドまたはクラス）のロケーションを決定するのに使用され得るパラメータと関連することが多い。変換プロセス中では、ポインタを含むパラメータは、オフセットまたはシンボリックリンクに変換される。
【００３０】
バイトコード中の予約ビットは、このプログラム要素の参照がどのようにしてこのプログラムから生成されるかを特定するために使用される。例えば、図３を参照すると、８ビットのバイトコード３０２は、隣接する１６ビットのパラメータ３０４と関連する。パラメータ３０４の２つの低位の２ビットは、予約ビット３０６として機能し、これらのビットは、図４〜５を参照してさらに後述するように、プログラム要素の参照がパラメータからどのようになされるべきかということを指定する。
【００３１】
（オフセットベースのアドレス指定を支援するためのルックアップ構造）
パラメータ３０４は、オフセットまたはシンボリックリンクを含む１以上のルックアップ構造を参照するために使用される。例えば、図４は、本発明の実施形態によるオフセット依存の参照を容易にするルックアップ構造を示す。これらのルックアップ構造は、参照テーブル４０２およびオフセットマップ４２０を含む。
【００３２】
図５中のフローチャートを参照すると、参照テーブル４０２およびオフセットマップ４２０は次のように使用される。プラットフォーム非依存のアプリケーションの実行中には、プラットフォーム非依存のバーチャルマシンは、関連するパラメータ３０４とともにバイトコード３０２を受け取り、このパラメータは、バイトコード３０２に関するプログラム要素の参照を生じさせるために使用され得る（ステップ５０２）。
【００３３】
次いで、このシステムは、パラメータ３０４内の予約ビット３０６を調べ、近接（ｐｒｏｘｉｍｉｔｙ）を決定する（ステップ５０４）。このシステムは、プログラム要素（フィールド、メソッド、クラス）のタイプを決定するためにバイトコードも調べる（ステップ５０６）。次に、このシステムは、プログラム要素のタイプおよび参照の近接に基づいて多くの動作を実行する。
【００３４】
このプログラム要素がフィールドまたはメソッドで、かつこの参照の近接が同じクラス（予約ビット００で示される）である場合、パラメータ３０４は、そのクラスへのオフセットとして使用され、ルックアップは必要ない（ステップ５０８）。
【００３５】
このプログラム要素がフィールドまたはメソッドで、かつこの参照の近接が同じバンドル中の別のクラス（予約ビット０１により示される）である場合、パラメータ３０４は、参照テーブル４０２中のエントリ４０１をルックアップするために使用される。（このルックアップは、参照テーブル４０２およびオフセットマップ４２０における他のルックアップと同様に、予約ビット３０６をマスクすることを含み得ることに注目されたい。）エントリ４０１は、使用されない３２ビット語４０３、対応するクラス４１２用のグローバル３２ビットクラスオフセット４０４、および１６ビットフィールド／メソッドオフセット４０５を含み、この１６ビットフィールド／メソッドオフセット４０５は、クラス４１２内のフィールドまたはメソッドに対するオフセットを指定する（ステップ５１０）。
【００３６】
このプログラム要素がフィールドまたはメソッドで、参照の近接が別のバンドル中の別のクラスである場合（予約ビットは１０により示される）、パラメータ３０４は、参照テーブル４０２中のエントリ４１５をルックアップするために使用される。エントリ４１５は、クラス名オフセット４０６、フィールド／メソッド名オフセット４０７およびシグネチャ４０８を含む。クラス名オフセット４０６は、グローバルシンボルプール４１４中のクラス名をルックアップするために使用される。このクラス名は、システムルックアップ４１６を達成するために使用され、グローバル３２ビットクラスオフセット４１８を対応するクラス４１３に戻す。フィールド／メソッド名オフセット４０７は、同様にして、グローバルなシンボルプール４１４中のフィールド／メソッド名をルックアップするために使用される。シグネチャ４０８を伴うフィールド／メソッド名は、システムルックアップを実行するために使用され、このシステムルックアップは１６ビットのオフセットをクラス４１２内のフィールド／メソッドへ戻す（ステップ５１２）。
【００３７】
このプログラム要素がクラスで、参照の近接が同じバンドルまたはファイルである場合（予約ビット０１により示される）、パラメータ３０４は、オフセットマップ４２０中のエントリ４２１をルックアップするために使用され、エントリ４２１は、対応するクラスの３２ビットのグローバルクラスのオフセット４２２を含む（ステップ５１４）。
【００３８】
プログラム要素がクラスで、かつ参照の近接が別のバンドルまたはファイルである場合（予約ビット１０により示される）、パラメータ３０４は、オフセットマップ４２０中のエントリ４２３をルックアップするために使用される。エントリ４２３は、グローバルシンボルプール４１４中のクラス名をルックアップするために使用されるクラス名オフセット４２４を含む。このクラス名は、３２ビットのグローバルクラスオフセットを対応するクラスに戻すシステムルックアップを実行するために使用される（ステップ５１６）。
【００３９】
上述した本発明の実施形態は、例示および説明のみの目的で表されている。これらが、すべてを網羅していて、開示の形式に本発明を制限することは意図されない。したがって、多くの修正および変更は当業者に明らかである。さらに、上述の開示により、本発明が制限されることを意図しない。本発明の範囲は、添付の特許請求の範囲によって規定される。
【図面の簡単な説明】
【００４０】
【図１】演算装置のプラットフォーム非依存のアプリケーションの実行を示す。
【図２】本発明の実施形態による演算装置上のプラットフォーム非依存のアプリケーションのインプレース実行を示す。
【図３】バイトコードおよび関連するパラメータを示す。
【図４】本発明の実施形態によるオフセットベースの参照の使用を容易にするルックアップ構造を示す。
【図５】本発明の実施形態による近接ベースのアドレス指定プロセスを示すフローチャートを表す。
【図１】
2006526841.tif 000003
【図２】
2006526841.tif 000004
【図３】
2006526841.tif 000005
【図４】
2006526841.tif 000006
【図５】
2006526841.tif 000007
【国際調査報告】
2006526841.tif 000008
2006526841.tif 000009
2006526841.tif 000010
2006526841.tif 000011