首页 / 专利库 / 软件 / 虚拟机迁移 / Acceleration of method calling in virtual machine

Acceleration of method calling in virtual machine

阅读:444发布:2022-02-28

专利汇可以提供Acceleration of method calling in virtual machine专利检索,专利查询,专利分析的服务。并且PROBLEM TO BE SOLVED: To accelerate a code execution in a virtual machine which operates in a calculation environment with limited resources such as an embedded system. SOLUTION: A system of a computer base accelerates the code execution by accelerating a method calling. The virtual machine is provided with a loader, an interpreter, and a thread manager. The loader creates a hash table using a method signature, and the interpreter decides a position of the method by searching the hash table. The interpreter uses a method calling cache, which prepares a pointer to a receiver, for acceleration of the code execution. The thread manager accelerates migration of lock state using depth level. COPYRIGHT: (C)2004,JPO,下面是Acceleration of method calling in virtual machine专利的具体信息内容。

  • 少なくとも一つのプログラムの実行を加速するためのコンピュータベースのシステムにおいて、
    ローダーおよびインタープリタを有しているバーチャルマシンと、
    ハッシュテーブルルックアップコード配列を用いて、プログラムの与えられたクラスに属している少なくとも一つの与えられたメソッドを検索するインタープリタとを備えていて、
    前記バーチャルマシンは、前記ローダーを用いて、前記バーチャルマシンにプログラムをロードし、かつ前記インタープリタを用いて、前記プログラムを実行し、
    前記ローダーは、プログラムの少なくとも一つのクラスに対応する少なくとも一つのハッシュテーブルをつくり、前記ローダーは、前記クラスの少なくとも一つのメソッドの少なくとも一つのハッシュされたメソッドシグネチャを用いて、前記ハッシュテーブルをつくり、
    前記ハッシュテーブルルックアップコード配列は、前記与えられたメソッドに対応するハッシュテーブルエントリのために前記ハッシュされたメソッドテーブルを検索することを特徴とするシステム。
  • 前記ハッシュされたメソッドシグネチャは、ハッシュ関数を前記クラスの前記メソッドのシグネチャに適用することによって得られることを特徴とする請求項1に記載のシステム。
  • 前記ハッシュテーブルは、
    前記ハッシュされたメソッドシグネチャに対応する少なくとも一つのハッシュテーブルインデックスと、
    少なくとも一つのメソッドフラグと、
    前記クラスの前記メソッドの定義に対する少なくとも一つのポインタとを有していることを特徴とする請求項2に記載のシステム。
  • 前記ハッシュテーブルは、
    前記ハッシュテーブルの共通の前記インデックスに対応する、複数のハッシュされたメソッドシグネチャを取り扱うための衝突リストを更に有していることを特徴とする請求項3に記載のシステム。
  • 前記ローダーは、前記衝突リストを更新するための衝突ハンドラを有していることを特徴とする請求項4に記載のシステム。
  • 前記衝突ハンドラは、衝突状況を取り扱うために最適化され、複数のハッシュされたメソッドシグネチャは、前記ハッシュテーブルの共通の前記インデックスに対応することを特徴とする請求項5に記載のシステム。
  • 前記ハッシュテーブルルックアップコード配列は、前記ハッシュテーブルルックアップコード配列が、前記与えられたメソッドに対応する前記ハッシュテーブルエントリの位置を決めることができないとき、前記クラスの前記衝突リストを検索することを特徴とする請求項6に記載のシステム。
  • 前記ハッシュテーブルルックアップコード配列は、前記ハッシュテーブルルックアップコード配列が、前記衝突リスト内の前記与えられたメソッドに対応する、前記ハッシュテーブルエントリの位置を決めることができないとき、前記クラスのスーパークラスを検索し、前記クラスは、前記スーパークラスに関連付けられることを特徴とする請求項7に記載のシステム。
  • 前記バーチャルマシンは、電子装置と連結されたメモリ内で動作するキロバイトバーチャルマシン(KVM)であり、前記インタープリタは、バイトコードインタープリタであることを特徴とする請求項1に記載のシステム。
  • 前記バーチャルマシンは、JAVA(登録商標)バーチャルマシン(JVM)であることを特徴とする請求項1に記載のシステム。
  • 前記ハッシュテーブルは、最適のメモリサイズを必要とすることを特徴とする請求項1に記載のシステム。
  • 少なくとも一つのプログラムの実行を加速するコンピュータベースのシステムにおいて、
    第1のレシーバオブジェクト上で動作するインタープリタを有しているバーチャルマシンと、
    前記インタープリタと関連する、少なくとも一つの格納されたキャッシュエントリを含むキャッシュとを備えていて、
    前記キャッシュエントリは、第2のレシーバオブジェクトに対する少なくとも1つの第1のリンクと、メソッドに対する第2のリンクとを格納し、
    前記インタープリタは、前記第1のレシーバオブジェクトが、前記キャッシュエントリに格納された前記第1のリンクを通してアクセスされた前記第2のレシーバオブジェクトと合致したときに、前記キャッシュ内の前記エントリを利用して、前記第2のリンクを通して前記メソッドに直接アクセスすることを特徴とするシステム。
  • 前記インタープリタは、前記第1のレシーバオブジェクトが、前記キャッシュエントリに格納された前記第1のリンクを通してアクセスされた前記第2のレシーバオブジェクトと合致しなかったときに、メソッドテーブル内のルックアップを実行して、前記メソッドを検索することを特徴とする請求項12に記載のシステム。
  • 前記インタープリタは、前記第1のレシーバオブジェクトを前記第2のレシーバオブジェクトに合致させるためのキャッシュハンドリングモジュールを有していることを特徴とする請求項12に記載のシステム。
  • 前記キャッシュハンドリングモジュールは、第1のクラスが第2のクラスと合致したときに、前記第2のリンクを通して前記方法に直接アクセスし、前記第2のレシーバオブジェクトは、前記キャッシュエントリ内に格納された前記第1のリンクを通してアクセスされ、前記第1のレシーバオブジェクトは、前記第1のクラスのインスタンスであることを特徴とする請求項14に記載のシステム。
  • 少なくとも一つのプログラムの実行を加速するコンピュータベースのシステムにおいて、
    少なくとも一つのオブジェクトを持つ少なくとも一つのクラスを有しているプログラムを実行するためのスレッディングモデルを有しているバーチャルマシンと、
    オブジェクト上で動作する前記スレッディングモデルの少なくとも2つのスレッドとを備えていて、
    前記スレッディングモデルは、前記スレッドによって前記オブジェクトに対するアクセスを制御するための深さレベルを用いて、前記オブジェクトのロックを制御し、前記深さレベルは、少なくとも2つの異なるロック状態を有していることを特徴とするシステム。
  • 第1の深さレベルは、単純ロック状態を表していることを特徴とする請求項16に記載のシステム。
  • 前記第2の深さレベルは、拡張ロック状態を表していることを特徴とする請求項17に記載のシステム。
  • 前記深さレベルの変更は、前記単純ロック状態と前記拡張ロック状態との間の移行をもたらすことを特徴とする請求項18に記載のシステム。
  • プログラムを実行するコンピュータベースのバーチャルマシンにおいて、前記プログラムは、少なくとも一つのクラスを有していて、前記クラスは、少なくとも一つのメソッドを有していて、前記バーチャルマシンは、ハッシュテーブルおよびハッシュテーブルルックアップコード配列を用いて、クラスのオブジェクト上で動作するメソッドを検索するローダーと、
    前記ローダーによってロードされたメソッドを実行するインタープリタと、前記インタープリタと連結された、少なくとも一つのキャッシュエントリから成るキャッシュと、
    前記インタープリタによって用いられるスレッディングモデルと、オブジェクト上で動作する前記スレッディングモデルの少なくとも2つのスレッドとを備えていて、
    前記キャッシュエントリは、オブジェクトに対する少なくとも一つのリンクを含み、
    前記スレッディングモデルは、深さレベルを用いて、オブジェクトのロックを制御し、深さレベルの変更は、少なくとも2つの異なるロック状態間の移行をもたらすことを特徴とするバーチャルマシン。
  • 少なくとも一つのプログラムの実行を加速するコンピュータベースの方法において、
    ローダーを用いて、バーチャルマシンにプログラムをロードするステップと、プログラムの少なくとも一つのクラスに対応する少なくとも一つのハッシュテーブルをつくるステップと、
    前記クラスの少なくとも一つのメソッドの少なくとも一つのハッシュされたメソッドシグネチャを用いて、前記ハッシュテーブルをつくるステップと、
    ハッシュテーブルルックアップコード配列を用いて、ロードされた前記プログラムを解釈して、プログラムの与えられたクラスに属している少なくとも一つの与えられたメソッドを検索するステップとを有していることを特徴とする方法。
  • 前記つくるステップは、
    ハッシュ関数を前記クラスの前記メソッドのシグネチャに適用して、少なくとも一つのハッシュされたメソッドシグネチャを得るステップを更に有していることを特徴とする請求項21に記載の方法。
  • 前記解釈するステップは、
    前記与えられたメソッドに対応するハッシュテーブルエントリのために前記ハッシュされたメソッドテーブルを検索するステップを更に有していることを特徴とする請求項21に記載の方法。
  • 前記つくるステップは、
    衝突リストを作成して、前記ハッシュテーブルの共通インデックスに対応する複数のハッシュされたメソッドシグネチャを取り扱うステップを更に有していることを特徴とする請求項21に記載の方法。
  • 前記解釈するステップは、
    前記ハッシュテーブルルックアップコード配列が、前記与えられたメソッドに対応する前記ハッシュテーブル内でのエントリの位置を決めることができないときに、前記クラスの前記衝突リストを検索するステップを更に有していることを特徴とする請求項24に記載の方法。
  • 前記衝突リストに対する検索を最適化するステップを更に有していることを特徴とする請求項25に記載の方法。
  • 前記ハッシュテーブルルックアップコード配列が、前記衝突リスト内での前記与えられたメソッドに対応する前記ハッシュテーブルエントリの位置を決めることができないときに、前記クラスのスーパークラスを検索するステップを更に有していて、前記クラスは、前記スーパークラスに関連付けられることを特徴とする請求項25に記載の方法。
  • 前記ハッシュテーブルのサイズを最適化するステップを更に有していることを特徴とする請求項21に記載の方法。
  • 少なくとも一つのプログラムの実行を加速するコンピュータベースの方法において、
    第1のレシーバオブジェクト上で動作するバーチャルマシンによってメソッド呼び出しを処理するステップと、
    第2のレシーバオブジェクトに対する少なくとも一つの第1のリンクと、メソッドに対する少なくとも一つの第2のリンクとを格納するステップと、
    前記第1のレシーバオブジェクトを前記第2のレシーバオブジェクトと合致させるステップと、
    前記第1のレシーバオブジェクトと前記第2のレシーバオブジェクトとが合致したときに、直接前記第2のリンクを通して前記メソッドにアクセスするステップとを有していることを特徴とする方法。
  • 前記第1のレシーバオブジェクトが、前記キャッシュエントリ内に格納された前記第1のリンクを通してアクセスされた前記第2のレシーバオブジェクトと合致しなかったときに、メソッドテーブル内でルックアップを実行して、前記メソッドを検索するステップを更に有していることを特徴とする請求項29に記載の方法。
  • 少なくとも一つのプログラムの実行を加速するコンピュータベースの方法において、
    バーチャルマシン内でスレッディングモデルを提供して、少なくとも一つのオブジェクトを持つ少なくとも一つのクラスを有しているプログラムを実行するステップと、
    深さレベルを用いて、前記スレッディングモデルによって前記オブジェクトのロックを制御して、前記スレッディングモデルの少なくとも2つのスレッドによって前記オブジェクトに対するアクセスを制御するステップとを有していて、前記深さレベルは、少なくとも2つの異なるロック状態を有していることを特徴とする方法。
  • 第1の深さレベルによって単純ロック状態を表すステップを更に有していることを特徴とする請求項31に記載の方法。
  • 前記第2の深さレベルによって拡張ロック状態を表すステップを更に有していることを特徴とする請求項32に記載の方法。
  • 前記深さレベルの変更によって前記単純ロック状態と前記拡張ロック状態との間の移行をもたらすステップを更に有していることを特徴とする請求項33に記載の方法。
  • 说明书全文

    【0001】
    【発明の属する技術分野】
    本出願は、2002年8月22日に出願された米国仮出願番号第60/405,266号の利益を主張する。 上記の出願の開示は、本願明細書に引用したものとする。
    【0002】
    本発明は、コード実行の速度を改善することに関し、特に、JAVA(登録商標)のようなオブジェクト指向環境において動作するバーチャルマシン内でのメソッド呼び出しメカニズムを加速することに関する。
    【0003】
    【従来の技術】
    オブジェクト指向言語は、継承および多義(polymorphism)をサポートして、柔軟で再使用可能なソフトウェアの開発を可能にする。 典型的なオブジェクト指向プログラムは、一組のクラスを含む。 このようなクラスのそれぞれは、一組のデータメンバーを定義することができる。 更に、各クラスは、この組のデータメンバー上で動作する一組のメソッドを含むことができる。
    【0004】
    継承は、クラスが、親クラスの機能を「継承する」、すなわち引き出すことを可能にする。 したがって、継承のために、与えられたメソッドは、親および子供クラスに共通でもよい。 このような共通のメソッドが呼び出されるときに、実行メカニズムは、呼び出されたメソッドが親または子供のいずれのクラスのオブジェクト上で動作しているかを判定しなければならない。 オブジェクト上で動作しているメソッドは、一般に、メソッド名、引数の数、型および順序(order)、戻り型(return type)、およびオブジェクトの関連付けられたクラスから構成されるメソッドシグネチャを用いて識別される。
    【0005】
    与えられたオブジェクトの型は、通常、実行時に判定される。 実行時にオブジェクトの型を判定する、このアプローチは、「動的結合」と呼ばれる。 この文脈において、実行される適当なメソッドの選択は、ルックアップメカニズムに基づき、それは、を意味する。 起動の後に実行される実際のメソッドは、メソッドのレシーバの型、クラス階層およびメソッド継承またはオーバーローディングスキーマ(overloading schema)に基づいて、動的に判定される。 典型的なルックアップメカニズムを、次に述べる。
    【0006】
    起動が起こるときに、ルックアップメカニズムは、実行される実際のメソッドを判定する。 クラスが呼ばれたものと同じシグネチャを有するメソッドを実装している場合、見つけられたメソッドが実行される。 さもなければ、検索されたメソッドが見つけられるまで、親クラスが繰り返しチェックされる。 メソッドが見つけられない場合、エラーであることが合図される(MsgNotUnderstood)。 この動作は、あまりにしばしば起こって、実行時間および他の資源に関して非常に不経済である。 したがって、ルックアップメカニズムの速度を上げる必要がある。
    【0007】
    静的な技術は、ルックアップの一部を予め計算して、動的な技術は、以前のルックアップの結果のキャッシュを用いるので、他のルックアップを避けることができる。 主要な動的結合アルゴリズムは、ディスパッチテーブル検索(DispatchTable Search;DTS)と呼ばれている。 DTSは、スペースコストに関しては良いメソッドであるが、DTSに関する検索の不利益は、メカニズムを、あまりにもゆっくりにする。 DTSに関するオーバーヘッドを減らす必要がある。 多くの技術が、DTSに関するオーバーヘッドを減らすために提案されてきた。 すなわち、ルックアップの一部を予め計算する静的な技術と、以前のルックアップの結果をキャッシュする動的な技術とによって、他のルックアップを避けることである。 上記で言及した技術を、次に述べる。
    【0008】
    セレクタテーブルインデクシング(Selector Table Indexing;STI)と呼ばれている技術は、ルックアップメカニズムを加速する静的な方法である。 STI技術を、次に簡単に述べる。 CクラスおよびSセレクタのクラス階層が与えられると、C*Sエントリ(entries)の二次元の配列が造られる。 クラスおよびセレクタは、各軸上の連続番号で与えられ、配列は、各クラスおよびセレクタのためにロックアップを予め計算することによって満たされる。 配列エントリ(entry)は、対応するメソッドまたはエラールーチンに対するリファレンスを含む。 これらのテーブルは、完全なシステムのために計算される。
    【0009】
    STI技術は、高速かつ一定時間のルックアップをもたらす。 しかし、STIの主な欠点は、スペース要求が、限られた計算資源しか持っていない典型的なシステム、例えば、組み込みシステムにとって、非常に大きいことである。 セレクタカラーリング(selector coloring)、列置換等のような多くのディスパッチテーブル圧縮技術が、必要なスペースオーバーヘッドを減らすために提案されてきた。 しかし、このような技術を実装することは、組み込みシステムのような限られた計算資源環境に、望ましくない負担をかける。 この技術の更なる欠点は、コンパイルされたコードが、クラス階層の変化に非常に敏感であることである。 STIによって造られる二次元の配列は、コンパイル時間で固定される。 しかし、Java(登録商標)のような言語にとっては、クラスのセットは、動的に変わることができる。 STIは、このような状況を取り扱うことができない。 なぜなら、それは、動的に配列を変えることができないからである。
    【0010】
    同期化技術は、マルチスレッドアプリケーション(multi−threaded applications)を実行するために用いられるスレッディングモデル(threading models)の機能を改善する。 従来の組み込みJAVA(登録商標)バーチャルマシン(特にキロバイトバーチャルマシンに基づくもの)において用いられる同期技術は、次の4つの状態のうちの1つのオブジェクトに関連する。 (1)ロックがかかってない、(2)単純ロックされた、(3)拡張ロックされた、または(4)モニターに関連する。 したがって、どの特定のロック状態とも関連しない同期技術が必要である。
    【0011】
    【発明が解決しようとする課題】
    したがって、計算資源プロセッサ/実行時間、メモリおよびメソッド検索すなわちルックアップに関して、小さいオーバーヘッドの要求しか持たない一組の技術が必要である。 このような技術は、レシーバオブジェクトがしばしば変わる状況であっても効果的でなければならない。 更に、組み込みシステムのような限られた資源の計算環境において動作するバーチャルマシン内でのコード実行を加速するメカニズムが必要である。
    【0012】
    【課題を解決するための手段】
    コンピュータベースのシステムは、メソッド呼び出しの速度を上げることによってコード実行を加速する。 バーチャルマシンは、ローダー、インタープリタ、スレッドマネージャ(thread manager)および他のモジュールおよび/またはコンポーネント(components)を備えている。 ローダーは、メソッドシグネチャ(method signatures)を用いて、ハッシュテーブル(hash−table)をつくる。 インタープリタは、つくられたハッシュテーブルを用いて、メソッドを検索するプロセスを加速する。 インタープリタは、レシーバに対するポインタを有するメソッド呼び出しキャッシュをつくり、かつ用いて、コード実行を加速する。 キャッシュは、修正されたガード条件を提供し、これは、より速いキャッシュ動作を可能にし、その結果、より良い実行速度がもたらされる。 スレッドマネージャは、深さレベルを用いてロック状態の移行を加速する。 深さレベルは、単純ロックおよび拡張ロック状態を示し、従って別々の単純ロック状態を不要にする。 ロック状態の数が少なければ、より速いロック状態の移行という結果になり、これは、より速いコード実行をもたらす。 本発明は、一般に、いかなるバーチャルマシン環境、例えば、JAVA(登録商標)バーチャルマシン(JVM)およびキロバイトバーチャルマシン(KVM)環境にも実装することができる。 特に、本発明は、比較的限られた計算資源しか持たない組み込みシステムにも実装することができる。
    【0013】
    本発明の更なる応用範囲は、以下の詳細な説明から明らかになるであろう。 詳細な説明および具体的な例は、本発明の好適な実施形態を示しているが、単なる具体例に過ぎず、本発明の範囲を限定するものでないことは、理解されなければならない。
    【0014】
    【発明の実施の形態】
    本発明は、詳細な説明および添付の図面から、より充分に理解されるであろう。
    【0015】
    以下の好適な実施形態の記載は、単なる例に過ぎず、決して本発明、その応用または使用を限定するものではない。
    【0016】
    オブジェクト指向(“OO”)プログラムは、データメンバーをカプセル化するクラスと、このようなデータメンバー上で動作するメソッドとから成る。 したがって、OOプログラム内のメソッドは、与えられたクラスの一部である。 あらかじめ宣言/定義されたクラスのオブジェクトは、インスタンス化されることができる。 与えられたクラス型の各個々のインスタンスオブジェクトは、与えられたクラス宣言/定義において宣言されたデータメンバーを保持する。 一般に、与えられたクラス型の一部であるメソッドは、インスタンス化されたオブジェクトのデータメンバー上で動作する。
    【0017】
    例は、OOプログラム内の典型的な装置を示す。 例としてのOOプログラムは、クラスAおよびクラスBと名付けられた2つのクラスを有することができ、クラスBは、クラスAを継承すなわちクラスAに由来する。 クラスAは、メソッドmを定義することができ、かつ、継承のために、クラスBもまた、その一部としてメソッドmを持つ。 クラスA型のオブジェクトは、それらの一部としてメソッドmを持ち、かつ、継承のために、クラスB型のオブジェクトも、そうする。 メソッドシグネチャは、次に記述するように、メソッドを識別するために用いられる。
    【0018】
    OO環境は、一般にクラス名、メソッド名、パラメータおよび戻り型を用いて形成されたメソッドシグネチャを用いて、2つのよく似たメソッドを識別する。 実行エンジンが与えられたオブジェクト上のメソッドmの起動に遭遇すると、それは、呼び出されたメソッドシグネチャを用いて、メソッドテーブル内のメソッドの定義の位置を捜し当てる。 メソッド定義のこの検索は、時間強い作業である。 本発明は、メソッドルックアップおよび実行のために必要な時間を最小にする一方で、与えられた環境の計算資源上での要求を最小にする。
    【0019】
    OO言語(例えばJAVA(登録商標))は、頻繁に動的ディスパッチメカニズムを用いて、呼び出されたメソッドの定義を検索する。 メソッドは、複数のクラスにおいて定義されることができる。 適当なメソッド定義の検索は、動的に実行される。 これは、著しい実行時間のオーバーヘッドを引き起こす。 一般に、既知の静的および動的な技術は、比較的厳しい資源制約の下で動作する組み込みJAVA(登録商標)のような組み込みプラットホームに適していない。 特に、このような技術は、メモリをたくさん使うが、これは、限られたメモリ資源しか持っていない典型的な組み込みシステムにとって、望ましくない特性である。
    【0020】
    本発明は、OO環境におけるメソッド呼び出しメカニズムを加速する動的、柔軟かつ効率的な技術を含む。 例証目的のために、メソッド呼び出し加速メカニズムが、組み込みシステムの応用におけるJAVA(登録商標)ベースのバーチャルマシン環境の状況において論じられる。 当業者であれば、JAVA(登録商標)ベースの組み込みシステムが、単なる説明目的のための具体例として用いられ、かつ、同じものは、本発明を限定するものではないことを認めるであろう。 本発明は、いかなるオブジェクト指向環境においても使用でき、および/または適用できる。 本発明の加速技術は、メソッド呼び出しプロセスの複数の態様、例えば、ルックアップ、キャッシングおよび同期されたメソッドに及ぶ。 バーチャルマシンは、次に、本発明の実施形態における本発明の技術を適用するためのプラットホームとして論じられる。
    【0021】
    図1は、本発明の実施形態におけるバーチャルマシン10のブロック図である。 バーチャルマシン10は、オペレーティングシステム12と緊密に連係して動作する。 ローダー14は、実行されるべきコードを、バーチャルマシン10内にロードする。 ローダー14は、ハッシュ管理モジュール、例えばハッシュビルダー16およびハッシュルックアップ18を備えている。 ベリファイヤ20は、あらゆる起こりうるエラーのために、ロードされたクラスおよびコードをチェックする。 ローダー14は、また、任意のルーチンおよび/またはクラスを、言語クラスライブラリ22およびネイティブクラスライブラリ24からロードする。
    【0022】
    インタープリタ26は、ローダー14によってロードされたコードを解釈して、実行する。 キャッシュ28およびキャッシュハンドラ30は、インタープリタ26の一部であって、メソッド呼び出しをキャッシュするために用いられる。 ヒープ管理およびガーベッジコレクタモジュール32は、インタープリタ26によって用いられて、ヒープ上でオブジェクトをつくり、かつ破壊する。 インタープリタ26は、スレッドマネージャ34を用いて、実行されているコードのスレッディング動作を制御する。 さまざまなスレッドが、オブジェクトにアクセスするために、コード実行の間、競合するので、スレッドマネージャ34は、オブジェクト上でロックおよびアンロック動作を実行する。 更に、スレッドマネージャ34は、スレッドの切り替えも管理する。
    【0023】
    バーチャルマシン10についての上記の説明は、一般的なバーチャルマシンに関する。 このような一般的なバーチャルマシン10の具体例は、JAVA(登録商標)バーチャルマシン(JVM)である。 更なる具体例として、KVM(キロバイトバーチャルマシン)が引用される。 KVMは、一般に、小さい設置面積のJVMを必要とする組み込みシステムのアプリケーションに用いられる。 KVMまたはJVMのいずれにおいても、ローダー14は、システムおよびユーザ定義のクラスをロードするクラスファイルローダーとして動作する。 更に、ローダー14は、定数プール(constant pool)およびクラスファイル構造(class file structures)を造り、かつ、それは、クラスおよびコードベリファイヤ20と連係し、この具体例においては、ロードされたバイトコードの型の安全を確認する。 インタープリタ26は、ロードされたクラスファイルのバイトコードを解釈するために動作する。 スレッドマネージャ34は、アプリケーションのスレッドを管理する。 当業者であれば、JVMおよびKVMの上記の説明は、具体例として提供され、本発明の理解を助けることができ、かつ、同じものは、本発明を限定するものではないことを認めるであろう。 次に、メソッドのルックアップの加速について説明する。
    【0024】
    図2Aは、典型的なクラス階層36を示す。 クラスA 38は、メソッド'm'を含む。 クラスB 40は、親クラスA 38の子供クラスである。 クラスB40は、メソッドm、m1およびm2を含む。 クラスB 40は、クラスA 38からメソッドmを継承する。 次に、この典型的なクラス階層36のためのハッシュテーブルベースのルックアップについて説明する。
    【0025】
    図2Bは、ルックアップの加速のプロセスにおいて用いられるメソッドハッシュテーブル42を示す。 バーチャルマシンのローダー14(図1を見る)は、上述したクラス階層の各仮想メソッドテーブルのためにハッシュテーブル42を造る。 メソッドテーブルのルックアップは、ハッシング(hashing)のようなダイレクトアクセス技術によって加速される。 これは、適当なハッシング技術および効率的なハッシング関数(function)を用いることによって達成される。
    【0026】
    メソッドシグネチャ(図示せず)は、複数の方法でつくることができる。 例えば、メソッドシグネチャは、メソッド名およびその公式の(formal)パラメータの数および型を用いてつくることができる。 ハッシュテーブル42の各インデックスは、ハッシュ関数をメソッドシグネチャに適用した結果に対応する。 ハッシュテーブル42のサイズは、より効率的かつ柔軟なルックアップメカニズムを得るために、メソッドシグネチャ間の衝突を最小にする一方で、小さい設置面積持つように、慎重に選ばなければならない。 ハッシュベースのアクセスを通して提供されるメソッドテーブルに対するダイレクトアクセスによって、効率が達成される。 我々はスピードアップ対設置面積のための最良の比率を持つようにハッシュテーブル42のサイズを調整することができるので、柔軟性が達成される。
    【0027】
    クラスをロードするプロセスの間、ハッシュビルダー16は、ハッシュメソッドテーブルを造る。 ハッシュは、メソッドシグネチャから計算される。 ハッシュテーブル42内の各エントリは、2つのコンポーネントでできている。 第1のコンポーネントは、クラスが、このような定義を有するメソッドを含むかどうかを示すフラグである。 この例においては、第1のコンポーネント44 〜44 が示されている。 第1のコンポーネント44 および44 内でのフラグ'1'の存在は、メソッド定義に対するリンクが、このようなメソッドを利用できることを示す。 そのメソッドシグネチャは、第1のコンポーネント44 および44 のためにハッシュインデックスにハッシュする。
    【0028】
    第2のコンポーネントは、メソッド定義に対するポインタである。 衝突の場合、この第2のコンポーネントは、メソッド定義のリストに対するポインタである。 ここでは、第2のコンポーネント46 は、メソッドm2のための単一のメソッド定義である。 なぜなら、他のメソッドシグネチャは、第1のコンポーネント44 のハッシュ位置に対してハッシュしないからである。 しかし、第1のコンポーネント44 のハッシュ位置のための第2のコンポーネントは、衝突リストである。 なぜなら、メソッドmおよびm1のそれぞれのための2つのメソッドシグネチャは、同じ第1の位置44 上にハッシュするからである。 したがって、メソッドmおよびm のメソッド定義のための衝突リストは、それぞれ第2のコンポーネント46 および46 として示される。
    【0029】
    図3は、典型的なメソッドハッシュテーブル構築手順を示す。 ローダー14(図1参照)は、ハッシュテーブル42(図2B参照)をつくるために、内蔵のハッシュビルダー16(図1参照)を持つこともできるし、または、ハッシュビルダー16は、外部の呼び出し可能なルーチンであってもよい。 ハッシュ構築ルーチンの位置は、ローダー14の内部であれ外部であれ、いかなる方法でも本発明を限定するものではないことは、当業者であれば理解するであろう。 ハッシュテーブル42の構築およびハッシュビルダー16の動作の詳細な説明は、以下の通りである。
    【0030】
    ハッシュビルダー16は、ローダー14によってロードされたクラスを処理する。 与えられたロードされたクラス内の各メソッドのために、ハッシュビルダー16は、メソッドのシグネチャからハッシュを計算する。 生成されたハッシュを用いて、ハッシュビルダー16は、ハッシュテーブル42内のハッシュインデックスで要素(element)を得る。 メソッド定義が、そのハッシュインデックスにおけるフラグによって定まるような、アクセスされたハッシュ位置に、すでに存在する場合に、衝突エントリが、新しいメソッドのためにつくられる。 しかし、もし、そのハッシュインデックスにおけるフラグがオフで、メソッドエントリの不在が示されていれば、メソッドは、ハッシュテーブル42内の計算されたハッシュインデックスに登録される。
    【0031】
    図4は、ハッシュテーブル内でメソッドを検索するための典型的なハッシュルックアップ手順を示す。 ハッシュルックアップ18(図1参照)は、ハッシュテーブル42(図2B参照)内の対応するエントリ/インデックスにアクセスするために、ハッシュ関数をメソッドシグネチャに適用することから得られるハッシュ値を用いる。 ハッシュ値を用いて、ハッシュルックアップ18は、アクセスされたハッシュインデックス/エントリで、フラグ値を判定する。 もし、このエントリに関するフラグが(図2Bにおける1として示されたように)オンであれば、それは、エントリの第2のコンポーネントによって、メソッド定義にアクセスする。 (図2Bにおける'0'として示されたような)フラグのオフ状態は、クラスがこのようなメソッドを実装しないで、検索がスーパークラスに指示されることを示す。
    【0032】
    ハッシュベースのメソッド定義アクセスアプローチは、単純なテーブルベースの検索と比較して、より速い検索時間を提供する。 ルックアップメソッドの加速は、ハッシュテーブルサイズによって決まる。 より大きいハッシュテーブルサイズは、より大きいメモリ空間を必要とするが、衝突を最小限にする。 他方で、より大きいハッシュテーブルサイズは、メモリ管理(割当て、ガーベッジコレクション、圧縮等)に関して追加のコストを引き起こす可能性がある。
    【0033】
    当業者であれば、本発明が複数の方法で実施することができることを認めるであろう。 例えば、1つの実施形態として、ハッシュベースのルックアップの必要な要素を含むバーチャルマシン10をつくることができる。 その代わりに、従来のバーチャルマシンを修正して、次に述べるようにハッシュベースのルックアップを提供することもできる。
    【0034】
    上述したルックアップの加速は、従来の組み込みJava(登録商標)バーチャルマシン、例えば以下のKVM(キロバイトバーチャルマシン)内で実現することができる。 典型的なKVM内のメソッドルックアップメカニズムは線形である。 すなわち、それはシーケンシャルアクセスを用いる。 ハッシュベースのルックアップは、典型的なKVMにおいて用いられる線形のメソッドルックアップをこえる、より良い性能を生む。 このようなメカニズムの実装は、バーチャルマシン10(図1参照)の2つのコンポーネント、すなわちローダー14およびインタープリタ26に影響を及ぼす。 ローダーは、各々のロードされたクラスのためのハッシュテーブル42をつくるために修正される。 インタープリタは、ハッシュテーブル42を利用するために修正されて、速くかつダイレクトアクセスのルックアップを実行する。
    【0035】
    動的な技術は、以前のルックアップの結果をキャッシュすることに本質がある。 キャッシュベースの技術は、巨大なディスパッチテーブルをつくることを不要にするので、メモリオーバーヘッドおよびテーブル作成時間は減少する。 グローバルなキャッシュ技術は、以前のルックアップ結果を格納する。 グローバルなキャッシュテーブルにおいて、各エントリは、三つ組み(レシーバクラス、セレクタおよびメソッドアドレス)から成る。 レシーバクラスおよびセレクタは、キャッシュ内のインデックスを計算するために用いられる。 現在のクラスおよびメソッド名が、計算されたインデックスで、キャッシュされたエントリ内のそれらと合致した場合に、メソッドアドレスにおけるコードが実行される。 したがって、メソッドルックアップは避けられる。 さもなければ、デフォルトのディスパッチ技術(通常はDTS)が用いられ、この検索の終わりに、新しい三つ組みが、キャッシュテーブルに加えられ、そして、制御は見つけられたメソッドへ移される。 このアルゴリズムが必要とする実行時メモリは小さく、通常はDTS技術のキャッシュおよびオーバーヘッドの固定された量である。 レシーバクラスの頻繁な変化は、実行を遅くする可能性がある。
    【0036】
    図5は、メソッド呼び出しを格納するための既知のキャッシュレイアウトを示す。 キャッシュエントリ48は、典型的な形式が示され、その内容を以下で説明する。 コンテンツリンク50は、呼び出されたメソッドに対するポインタである。 codeLoc52は、メソッドを呼び出したインストラクションに対するポインタである。 オリジナルパラメータ54は、メソッドが元々呼び出されたパラメータを表す。 オリジナルインストラクション56は、メソッドを呼び出すために用いられたインストラクションを指し示す。 従来のインラインキャッシュ技術(例えばKVM内に実装されたもの)においては、メソッド定義に対するポインタのみが、キャッシュエントリ48内に格納される。 次に、修正されたキャッシュエントリ構造およびキャッシュハンドリングメカニズムについて説明する。
    【0037】
    図6は、レシーバに対するリンクを含むキャッシュエントリ58を示す。 メソッドが呼び出されるオブジェクトは『レシーバ』と呼ばれている。 なぜなら、それは、いくつかの他のオブジェクトからメソッド起動要求を受け取るからである。 レシーバポインタ60はレシーバを指し示す。 キャッシュエントリ58の他のメンバーは、上述したキャッシュエントリ48と同様である。 キャッシュエントリ58は、詳細が述べられるメソッド起動のキャッシュを除けば、同様に、レシーバに対するリンクまたはポインタをキャッシュする。 メソッドが呼び出されると、レシーバのクラスは、呼び出されたメソッドのクラスと比較される。 これらの2つのクラスが等しければ、メソッド定義が、キャッシュエントリのために検索される。 等しくなければ、動的なルックアップが、クラス階層内のメソッド定義を検索するために実行される。 キャッシュレイアウトのこの修正は、次に述べるように、メソッドルックアッププロセスを加速する。
    【0038】
    メソッド呼び出しは、キャッシングアプローチを用いて加速することができる。 インラインキャッシュ技術は、修正されたキャッシュレイアウトを用いることによって、プログラム実行の著しいスピードアップを達成することができる。 インラインキャッシュ技術は、各呼び出しサイトでコード自体の中に以前のルックアップ(メソッドアドレス)の結果をキャッシュすることに本質がある。 インラインキャッシュは、デフォルトメソッドルックアップによって見つけられたメソッドのダイレクト起動と共に、それを上書きすることによって、呼び出しインストラクションを変更する。 インラインキャッシュは、レシーバのクラスが、まれにしか変わらないと仮定しているが、そうではない場合には、インラインキャッシュ技術は、遅い実行時間をもたらす可能性がある。
    【0039】
    インラインキャッシュ技術は、レシーバのクラスと呼び出されたメソッドのクラスとの間にミスマッチがあるときに、動的ルックアップの多くを避けることによって、著しく改善される。 このようなミスマッチの場合に、もし、キャッシュハンドラ30が、レシーバが変わらなかったことを検出することができたら、我々は、メソッド定義をキャッシュから検索することができる。 これは、ポインタをキャッシュ構造内のレシーバに加え、かつキャッシュ検索をガードする条件を修正することによって、なされる。
    【0040】
    キャッシュエントリ58内でのレシーバポインタ60の追加は、上述した通りである。 キャッシュのためのガード条件は、レシーバポインタ60の存在の利点をとるために修正することができる。 メソッドが呼び出されると、キャッシュハンドラ30は、次に述べるガード条件をチェックする。
    【0041】
    第1のガード条件は、与えられたキャッシュエントリ58内のレシーバのクラスが、呼び出されたメソッドのクラスに等しいどうかである。 第2の代替ガード条件は、現在のレシーバが、レシーバポインタ60によって指し示されたキャッシュされたレシーバに等しいかどうか、すなわち、レシーバが変わらなかったかどうかである。 どちらのガード条件も満たされる場合、キャッシュハンドラ30は、キャッシュエントリ58を検索して、メソッドテーブルのルックアップすなわち検索を経ることなく、メソッド定義にアクセスする。 当業者であれば、レシーバが変わらなかったかどうかをチェックする代替ガード条件が、キャッシュ検索プロセスをより柔軟にすることを認めるであろう。 この代替ガード条件は、レシーバポインタ60が、修正されたキャッシュエントリ58内に設けられることを必要とする。
    【0042】
    次に、本発明の実施形態におけるキャッシュ動作の具体例について説明する。 この具体例においては、クラスXおよびY(図示せず)の典型的な一組について考察する。 クラスYは、クラスXから静的ではないメソッドmを継承する。 クラスXおよびYを用いているOOPプログラムコードの中に、頻繁に実行されるループが存在する。 このようなループの中で、メソッドmは、オブジェクトo 上に呼び出される。 ここで、o は、クラスYのインスタンスである。 キャッシュハンドラ18は、キャッシュエントリ58内の他の起動に関するエントリとともに、メソッドmの最初の起動の後に、オブジェクトo を指し示しているレシーバポインタ60を格納する。 メソッドmの次の起動の際には、レシーバポインタ60のクラス、すなわちクラスYは、呼び出されたメソッドのクラスとは異なっていて、それは、クラスXである。 第1のガード条件、すなわち、キャッシュエントリ58内のレシーバのクラス(クラスY)が、呼び出されたメソッドのクラス(クラスY)と等しいかどうかは、満たされず、キャッシュ検索は行われない。 しかし、第2のガード条件、すなわち、現在のレシーバが、レシーバポインタによって指し示されたキャッシュされたレシーバと等しいかどうかは、満たされる。 なぜなら、両方が、同じオブジェクトo を指し示すからである。 したがって、第2のガード条件は、キャッシュされたメソッド呼び出しのより速いルックアップを、キャッシュエントリ58内のレシーバポインタを用いて促進する。
    【0043】
    上述した状況におけるキャッシュ技術の比較は、本実施形態における修正されたキャッシュ技術が、優れたルックアップ性能をもたらすことを示している。 レシーバポインタ60なしでのキャッシュ(図5参照)は、メソッドmの各々の次の起動のために、動的なルックアップを実行して、著しいオーバーヘッドという結果になる。 このようなキャッシュは、レシーバポインタの不足により、レシーバポインタ60によって指し示されたオブジェクトが現在のオブジェクトと比較される代替ガード条件の利点をとることができない。 他方で、キャッシュハンドラ30は、現在のレシーバが、レシーバポインタ60によって指し示されたものに等しいかどうかを簡単に検査する。 それゆえに、メソッド定義は、資源的に不経済なルックアップを必要とせずに、メソッドmの全ての次の起動のために、キャッシュから検索される。 したがって、本発明のキャッシュ構造およびキャッシュハンドリングメカニズムは、著しいスピードアップという結果になる。
    【0044】
    多義的インラインキャッシュは、インラインキャッシュ技術の拡張である。 コンパイラは、特別なスタブルーチンに対する呼び出しを生成する。 各呼び出しサイトは、特定のスタブ関数にジャンプする。 この関数は、最初は、メソッドルックアップに対する呼び出しである。 メソッドルックアップが呼び出されるたびに、スタブ関数は拡張される。 この技術は、最良のケースのテストおよびダイレクトなジャンプのコストを有している。 加えて、クラス階層が巨大で、レシーバクラスがしばしば変わるときに、実行可能なコードを劇的に拡張することができる。
    【0045】
    もう一つの本発明の実施形態は、ルックアップの加速をもたらす同期したスレッディングモデルを実装している。 いかなる外部の資源も必要としない非同期の単一のスレッドプログラムは、並列に実行されるスレッドの状態または活動を管理する必要がなく、自由に動作することができる。 複数の同期したスレッドが、おそらく同じ資源にアクセスして、同時に動作している状況においては、さまざまなスレッドの衝突する要求を管理することが、避けられなくなる。 同期したメソッドを実行する前に、スレッドは、レシーバオブジェクトに関するロックを得なければならない。 2つのスレッドが同じオブジェクト上のこのメソッドを実行しようとしている場合に、これは必要である。 オブジェクトをロックすることは、実行を遅くする。 複数のスレッドの衝突する要求を管理するために、オブジェクトロック機構を用いる典型的なスレッディングモデルについて、以下で述べる。
    【0046】
    図7は、既知のスレッディングモデルを表す第1のオートメーション(automation)62を示す。 第1のオートメーション62は、円でオブジェクトロック状態を示し、状態移行は、オートメーション状態を接続している方向をもった線として示されている。 第1のオートメーション62は、状態A〜Eから成り、それは、与えられたオブジェクトのロック状態を示す。 状態A 64は、ロックがかかっていない状態を示し、状態B 66は、単純ロック状態を示し、状態C 68は、拡張状態を示し、状態D 70は、モニター状態を示し、そして、状態E 72は、例外状態を示す。 移行は、文字'u'、's'、'e'、'm'および'x'で識別される。 特に、これらの文字は、以下の動作を表す:u−set_unlocked;s−set_simple_lock;e−set_extended_lock;m−set_monitor;そして、x−raise_exception。
    【0047】
    移行動作の相互作用は、与えられたオブジェクトの状況の中で述べる。 最初に、オブジェクトは、ロックがかかってない状態A 64にある。 スレッドが初めてオブジェクトをロックしようとするときには、オブジェクトのロック状態をとることは、単純ロック状態B 66に変わり、set_simple_lock(s)動作が実行される。 更に、別のスレッドが、単純ロック状態B 66にある同じオブジェクトをロックしようとすると、オブジェクトロック状態は、拡張ロック状態'C'68に変えられる。 オブジェクトは、他のスレッドが更にそれをロックしようとするまで、拡張状態C 68のままである。 第2のスレッドがオブジェクトをロックしようとする一方で、別のスレッドがロックを支配していたら、いかなる与えられた状態からも、モニター状態D 70が生成されることができる。 いかなる状態からも、モニターD 70状態へ移行することができる。 同期したメソッドから出ることは、モニター状態D 70または拡張状態C 68からの移行を引き起こす。
    【0048】
    与えられた状態から他の状態への移行は、唯一、例外状態E 72を除いて、可能である。 例外信号が発せられると、オブジェクトは例外状態E 72になる。 移行インストラクションまたはコマンドをそれに送ることによって例外状態E72を出ることは不可能である。 全ての他の状態、すなわちA〜Dにとっては、他の状態またはそれ自体への移行は、適当な移行インストラクションまたは信号を送ることによって可能である。
    【0049】
    図8は、マルチスレッドアプリケーションを加速するための最適化されたオートメーションを示す。 それは、バーチャルマシン10(図1参照)内で用いられる同期技術を改善する。 図7に示したオートメーションから単純ロック状態B 66を取り除くことによって、スレッディングモデルは、単純ロック状態B 66から、および、単純ロック状態B 66への移行を避け、したがって、ロックがかかってない状態A 64から、直接、拡張ロック状態C 68に行く。 次に述べるように、深さインジケータ(図示せず)は、ロックレベルを示すために用いられる。
    【0050】
    オブジェクトは、スレッドが初めてそれをロックしようとするとき、ロックがかかってない状態A 64から単純ロック状態B 66(図7参照)に移る。 この場合、深さ(オブジェクトがロックされた回数)は1にセットされる。 オブジェクトは、上述したように、単純ロック状態B 66から拡張ロック状態C 68に移る。 スレッドが2回目にオブジェクトをロックしようとすると、深さは2にインクリメントされ、拡張ロック状態C 68への移行を示す。 拡張ロック状態C 68は、深さレベルが1以上の状態と考えることができる。 従って、深さインジケータを用いて、単純ロック状態B 66の必要性を除去することができる。
    【0051】
    単純ロック状態の除去は、スレッド性能を改善する。 なぜなら、コードのいくつかの部分の実行を避けることができるからである。 更に、単純ロックから拡張ロックへの移行が避けられ、スレッディングモデルをより効率的にする。
    【0052】
    図9は、継承されたメソッドの呼び出しの改良を示すために用いられた典型的なクラス階層76である。 ここでは、ベースクラスはクラスP 78である。 クラスQ 80はクラスP 78を継承して拡張する。 クラスQ 80はクラスP78の継承されたメソッドm()を拡張する。 クラスR 82はクラス0 80を拡張し、クラスS 84は更にクラスP 82を拡張する。 型S()の新しいオブジェクト'o'は、クラスS 84のmain()メソッドの中でインスタンス化される。 継承されたメソッド'm'は、更なる説明において加速の結果を示すための例として用いられる。 当業者であれば、クラス階層76の上記の説明が、典型的なクラス階層の例であり、同じものが、いかなる方法でも本発明を限定するものではないことを認めるであろう。 一般に、本発明において提示された技術は、およそ27パーセントまでのJAVA(登録商標)プログラムの実行速度における加速を提供することを示した。 上述したクラス階層は、以下の説明においてプロファイルが描かれ、本発明の原理を適用することによって得られた典型的な機能強化が示される。
    【0053】
    図10は、元のメソッド呼び出しと、本発明の実施形態における最適化されたメソッド呼び出しとの呼び出し時間を比較するための棒グラフ86を示す。 元のメソッド呼び出し88は、KVMの下で実行されたものとし、一方、最適化されたメソッド呼び出し90は、本発明のバーチャルマシン10(図1参照)を用いて実行された。 棒グラフ86のX軸は、ハッシュテーブルサイズ42(図2B参照)を表し、Y軸は、実行時間を表している。 ハッシュテーブル42のサイズは、X軸上に示したように、11ユニットから29ユニットまで変化させられる。 最適化されたメソッド呼び出し90は、ハッシュテーブル42の全ての範囲にわたる改良された性能を示す。 Y軸上に示したように、最適化されたメソッド呼び出し90は、およそ500ミリ秒を必要とする一方で、元のメソッド呼び出し88は、同じメソッド呼び出しのために、およそ800ミリ秒を必要とする。 このように、本発明の最適化されたメソッド呼び出し90は、KVMメソッド呼び出しと比べて、改良された実行時間をもたらす。 当業者であれば、メソッド呼び出し時間の上記の比較が、実例であり、かつ典型的な性質であり、同じものは、いかなる方法でも本発明を限定するものではないことを理解するであろう。
    【0054】
    図11は、本発明の実施形態における加速/スピードアップ率を示しているパイチャート92を示す。 マーカー94は、ハッシュテーブル42(図2B参照)のサイズを示し、結果としての加速は、対応するパイスライス96として示される。 パイチャート92は、図9に示し、かつ上述したコードの部分的引用に対して、プロファイルを描く技術のアプリケーションを反映する。 パイチャート92は、ハッシュテーブル42のサイズが最適のときに、より優れた実行時間が可能であることを示している。 この例においては、ハッシュテーブルの最適なサイズは、およそ29ユニットであり、これは、実行時間が27.91ユニットのものに対応する。 これは、ハッシュテーブル42のサイズが11であり、実行時間が35.97に増加したときの状況と比較することができる。 本発明の柔軟な技術を適用すると、最適なハッシュテーブル42のサイズを選ぶことが可能であり、それは最小限の衝突という結果になり、そのうえ必要なメモリ設置面積を減らす。 次に、本発明の一般的な特性について説明する。
    【0055】
    本発明は、大きいシステムと比べて計算資源が制限された組み込みシステム内に実装されるオブジェクト指向システムに適用されることが好ましい。 組み込みシステム内での機能強化は、システムが一般にリアルタイムであるので、望ましい。 これは、より優れた望ましい実行時間をもたらす。 更に、本発明は、柔軟な方法を提供して、性能を改良する技術の資源要求を最適化する。 これは、組み込みシステムにおける、もう一つの望ましい特性である。 なぜなら、それらは、限られたメモリおよび処理パワーしか持っていないからである。 当業者であれば、組み込みシステムという用語が、一般的に用いられ、同じものが、ある程度の資源の制約の下で動作する、いかなるシステムも含むことを認めるであろう。 例えば、計算資源が限られた性質のセルホン内のJVMを走らせているシステムまたは腕時計ベースのアプリケーションも含む。
    【0056】
    本発明の説明は、単なる具体例であり、したがって、本発明の要旨から逸脱しない変形は本発明の範囲内であるつもりである。 このような変形は、本発明の精神および範囲からの逸脱とみなされるべきではない。
    【図面の簡単な説明】
    【図1】本発明の実施形態におけるバーチャルマシンのブロック図である。
    【図2A】典型的なクラス階層を示す。
    【図2B】ルックアップの加速のプロセスにおいて用いられるメソッドハッシュテーブルを示す。
    【図3】典型的なメソッドハッシュテーブル構築手順を示す。
    【図4】ハッシュテーブル内でメソッドを検索するための典型的なハッシュルックアップ手順を示す。
    【図5】メソッド呼び出しを格納するための既知のキャッシュレイアウトを示す。
    【図6】レシーバとのリンクを含むキャッシュエントリを示す。
    【図7】既知のスレッディングモデルを表す第1のオートメーションを示す。
    【図8】マルチスレッドアプリケーションを加速するための最適化されたオートメーションを示す。
    【図9】継承されたメソッドの呼び出しにおける改良を示すために用いられた典型的なクラス階層76である。
    【図10】本発明の実施形態におけるメソッド呼び出し時間を比較している棒グラフを示す。
    【図11】本発明の実施形態における加速/スピードアップ率を示しているパイチャートを示す。
    【符号の説明】
    10 バーチャルマシン12 オペレーティングシステム14 ローダー16 ハッシュビルダー18 ハッシュルックアップ20 ベリファイヤ22 言語クラスライブラリ24 ネイティブクラスライブラリ26 インタープリタ28 キャッシュ30 キャッシュハンドラ32 ヒープ管理およびガーベッジコレクタモジュール34 スレッドマネージャ48、58 キャッシュエントリ50 コンテンツリンク52 codeLoc
    54 オリジナルパラメータ56 オリジナルインストラクション60 レシーバポインタ

    高效检索全球专利

    专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

    我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

    申请试用

    分析报告

    专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

    申请试用

    QQ群二维码
    意见反馈