(57)【特許請求の範囲】
【請求項１】
１又はそれ以上のJavaクラスに対するリファレンスを有するJavaアプリケーションを実行するための実行手段（21,260）を備えたコンピュータ装置であって、
予めロードされ且つ予め分析された複数のJavaクラスのライブラリを備えるランタイムイメージ（256）を記憶する記憶手段（304）を有し、前記予めロードされ且つ予め分析された複数のJavaクラスにおける各Javaクラスは、同一のスーパークラスに関する全情報を含み、そして、
前記記憶手段は、前記各Javaクラスが前記スーパークラスに関する同じ情報を参照するように、情報が冗長して記憶されていない単一のスーパークラス参照情報を記録するように構成され、
前記実行手段が、前記ランタイムイメージ内で少なくとも１つの前記Javaクラスに直接アクセスするために、１以上のJavaクラスに対するリファレンスをもつ前記Javaアプリケーションを実行することを特徴とする、コンピュータ装置。
【請求項２】
前記記憶手段（304)が、予めロードされ且つ予め分析されたJavaクラスのライブラリを備えるランタイムイメージ(256)を記憶する、ことを特徴とする請求項１に記載の装置。
【請求項３】
前記実行手段（21,260)が、
プロセッサ（21)と、
前記プロセッサによって実行され、且つ１以上のJavaクラスに対するリファレンスをもつJavaアプリケーションを実行するよう作動するJavaバーチャルマシン(260)と、を備えた、請求項１又は２に記載の装置。
【請求項４】
コンピュータ読み取り可能媒体を読み出すための手段を更に有し、
前記Javaバーチャルマシン(260)が、前記コンピュータ読み取り可能媒体からプロセッサによって実行可能なソフトウェアである、ことを特徴とする請求項３に記載の装置。
【請求項５】
前記記憶手段（304)として不揮発性記憶装置を含む、請求項１〜４の何れか１項に記載の装置。
【請求項６】
前記不揮発性記憶装置として読み取り専用メモリ（24）を含む請求項５に記載の装置。
【請求項７】
前記記憶手段（304)が、ポータブル実行フォーマット(portable executable format)の予めロードされ且つ予め分析されたJavaクラスを記憶するよう作動する、請求項１〜６の何れか１項に記載の装置。
【請求項８】
前記記憶手段（304)が、非冗長データを含む少なくとも１つのJavaクラスファイル（252）のランタイムイメージ（256）を記憶するよう作動する、請求項１〜７の何れか１項に記載の装置。
【請求項９】
前記記憶手段（304)が、単一のダイナミックリンクライブラリファイルの形式でランタイムイメージ（256）を記憶するよう作動する、請求項１〜８の何れか１項に記載の装置。
【請求項１０】
１以上のJavaクラスに対するリファレンスをもつJavaアプリケーションを実行するコンピュータ装置で行われる方法であって、
前記コンピュータ装置により、
クラスを含む少なくとも１つのJavaクラスファイル（252）の予めロードされ且つ予め分析されたランタイムイメージ（256）を記憶するステップであって、当該ランタイムイメージは、予めロードされ且つ予め分析されたJavaクラスのライブラリを含み、かつ、各Javaクラスは同一のスーパークラスに関する全情報を含み、そして、前記各Javaクラスが前記スーパークラスに関する同じ情報を参照するように、情報が冗長して記憶されていない単一のスーパークラス参照情報を記録する当該記憶ステップと、
ランタイム時に、１以上の要求されたJavaクラスに対するリファレンスをもつJavaアプリケーションを実行するステップであって、当該Javaアプリケーションが、前記予めロードされ且つ分析されたランタイムイメージ（256）内の前記Javaクラスをロードしたり又は分析することなく、前記予めロードされ且つ分析されたランタイムイメージの少なくとも１つの前記Javaクラスにアクセスする当該実行ステップとが行なわれる方法。
【請求項１１】
前記予めロードされ且つ分析されたランタイムイメージ（256）はランタイム時の前に生成され、そしてクラスを含む各Javaクラス（252)について前記予めロードされ且つ分析されたランタイムイメージ（256）を生成することが、
i)前記クラスをロードすること(35)、
ii)ユニコードストリング、クラス又はインターフェース名、フィールド又はメソッドに対するリファレンス、数値、又は一定のストリング値を含むコンスタント情報に関するコンスタント・プール(constant pool)を分析すること(352)、
iii)クラスファイルからのクラスをロードすること（350)、
iv)前記クラスから少なくとも１つのメソッドを分析すること(352)、
v)前記クラスから少なくとも１つの属性を分析すること（352)、
を含む請求項１０に記載の方法。
【請求項１２】
前記予めロードされ且つ分析されたランタイムイメージ（256）を生成することが、更に、
vi)前記コンスタント・プール(constant pool)内でエラーを訂正することを含む、請求項１１に記載の方法。
【請求項１３】
前記少なくとも１つのJavaクラスファイル(252)の前記予めロードされ且つ分析されたランタイムイメージ（256）が、非冗長データのみを含む請求項１０〜１２の何れか１項に記載の方法。
【請求項１４】
前記予めロードされ且つ分析されたランタイムイメージ（256）を生成することが、複数のJavaクラスファイル(252)の予めロードされ且つ分析されたランタイムイメージ（256）を生成することを含み、そして前記複数のJavaクラスファイルが同じスーパークラスに対するリファレンスを含み、そして前記予めロードされ且つ分析されたランタイムイメージ(256)には前記スーパークラスに関する１つの情報だけを含む、請求項１３に記載の方法。
【請求項１５】
前記少なくとも１つのJavaクラスファイル(252)がビッグエンディアン(big endian)フォーマットのデータを含み、前記予めロードされ且つ分析されたランタイムイメージ（256）がリトルエンディアン(little endian)フォーマットのデータを含む請求項１０〜１４の何れか１項に記載の方法。
【請求項１６】
前記予めロードされ且つ分析されたランタイムイメージ（256）を記憶するステップが、前記予めロードされ且つ分析されたランタイムイメージをダイナミックリンクライブラリファイルとして記憶することを含む請求項１０〜１５の何れか１項に記載の方法。
【請求項１７】
前記予めロードされ且つ分析されたランタイムイメージ（256）を記憶するステップが、予めロードされ且つ分析されたランタイムイメージをポータブル実行フォーマット(portable executable format)に記憶することを含む請求項１０〜１６の何れか１項に記載の方法。
【請求項１８】
プログラム制御できるコンピュータに請求項１０〜１７の何れか１項に記載の方法を実行させるよう作動させるコンピュータプログラムを記憶したコンピュータ読み出し可能な記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、全体的にJavaクラスファイルに関し、特に係るファイルのランタイムイメージへの結合に関する。
【０００２】
【従来の技術】
Javaは、比較的新しいオブジェクト指向プログラミング言語であり、多くのプログラマの興味の対象となった。観念的には、Javaはニュートラルなアーキテクチャであり、ポータブルな言語であり、プログラムのあるバージョンでは、修正なしでいかなるプラットフォームでも稼働するという評判である、即ち、Microsoft Windowsオペレーティングシステムのバージョンが稼働するコンピュータ、Appli MacOSオペレーティングシステムのバージョンが稼働するコンピュータ、UNIXオペレーティングシステムのバージョンが稼働すコンピュータなどでは、同じバージョンのJavaプログラムを全て稼働させることが可能である。即ち、その称するところでは、Java言語の仕様の「インプリメンテーション従属（implementation-dependent）」態様はない。
【０００３】
しかしながら、実際には、Javaで書かれたプログラムは、固有の制限及び与えられたプラットフォームの特殊事情のために、異なるプラットフォームの間の差を斟酌するような修正なしのプラットフォームでは現実的には稼働しない。例えば、Microsoft WindowsCEは、ハンドヘルドＰＣから特定の産業制御器及びカスタマ電子デバイスまで、非常に広範囲に埋め込まれた製品に使用されており、コンパクトであり、有用であり、拡張可能なオペレーティングシステムである。Microsoft WindowsCEを利用する多くのデバイスは、デバイスのコストを低くおさえ、寸法を小さくし、電力の使用を有効にするために、１メガバイトのような比較的小さい容量のランダムアクセスメモリ（ＲＡＭ）を必要とする傾向がある。更に、Microsoft WindowsCEを利用するように設計されたデバイスは典型的には、Microsoft WindowsNTのようなより強力なオペレーティングシステムを稼働させるように設計されたコンピュータに典型的にみられるようなものと比べて、強力でないプロセッサを有する。
【０００４】
しかしながら、Javaの特徴は、Microsoft WindowsCEのような環境において、Javaで書かれたプログラムの稼働と必ずしも矛盾しない。Javaはコンパイル言語及びインタプリタ言語の両方の側面を持つ。Javaソースコードは、Javaバイトコード又はJ-codeと呼ばれる、より通常のマイクロプロセッサマシンコードのような、簡単なバイナリ命令に変化する。しかしながら、Ｃ又はＣ++ソースコードは、特定のプロセッサに関するネイティブな命令に精製されるのに対して、Javaソースコードは、Javaバーチャルマシンとして知られる命令であるユニバーサルフォーマットにコンパイルされる。
【０００５】
従って、Javaバーチャルマシンは、Javaバイトコードを翻訳し、実行するためのオペレーティングシステム内で稼働するネイティブプログラムである。Javaコードの基本的なユニットは、クラスである。他のオブジェクト指向言語におけるように、クラスは、実行可能コード及びデータを保持するアプリケーションコンポーネントである。コンパイルされたJavaクラスは、Javaバイトコード及び他のクラス情報を包含するユニバーサルバイナリフォーマットに分離される。クラスは、分離されて維持され、ファイルにストアされ、ローカルシステム又はネットワークサーバにアーカイブする。典型的には、クラスは、それらがアプリケーションによって必要とされるならば、ロードされ、ランタイムで動的に分析（parse）される。
【０００６】
言い換えれば、Javaは、ランタイムシステムのソフトウエアインプリメンテーションが、バイトコードをオンザフライでネイティブマシンコードにコンパイルすることによってそれらの性能を最適化することができるように設計されている。クラスファイルは、ランタイムで「ちょうどそのとき（just in time）」にコンパイルされるように、ロードされ、分析される。従って、JavaプログラムがJavaバーチャルマシンによって稼働されるとき、プログラムの稼働の前に最初に存在するバイトコードバージョンと、プログラムがJavaバーチャルマシンで最初に稼働するとき、ロードされ分析されるバージョンとの２つのバージョンの必要なクラスファイルが最終的にある。
【０００７】
有効にかつコスト的に設計されたMicrosoft WindowsCEプラットフォームのようなプラットフォームのコンテキストにおけるJavaプログラミング言語のこの設計に対しては種々の不利な点があり、従って、例えば、Microsoft WindowsNTが稼働するデスクトップコンピュータよりも遅いプロセッサを有し、同じようなメモリを搭載できないという点が不利である。まず、典型的なJavaプログラムは、多くのクラスファイルを使用し、これらのクラスファイルをランタイムでロードし、分析するのに、より非力なプロセッサで長い時間を要する。例えば、簡単な「Hello World（ハローワールド）」プログラム、即ち、スクリーンに「Hollo World」という文字を表示させるプログラム、を稼働させるのに、ランタイムでクラスファイルの最初のロード及び分析のために、約４０メガヘルツで稼働するプロセッサを有するハンドヘルドデバイスで実行するのに９分以上要する。
【０００８】
この最初のロード及び分析のある態様は、大きなendianフォーマットから小さなendianフォーマットまでJavaクラスファイルのバイトコードの翻訳をしばしば行うことである。即ち、Javaクラスファイルのバイトコードは、バイトが最下位から最上位にオーダされるような（即ち、０，１，２，３）大きなendianフォーマットであるのに対して、多くのプラットフォームでは、小さなendianフォーマットが使用され、そこではバイトは最上位から最下位にオーダされる（即ち、３，２，１，０）。この最初のロード及び分析の別の態様は、Javaクラスファイルフォーマットが、ネイティブナンバーファンクションの位置を指定しないことであり、その結果、バーチャルマシンは、所望のメソッドを見つけるためにプロセスにおいてロードされた全てのファイルを通して検索しなければならない。
【０００９】
第２の明瞭な欠点は、各Javaクラスファイルがそのクラス、即ち、クラスが関係するスーパークラスに関する情報のような、クラスを稼働するのに要求される全てのデータのコピーを包含することに結びつく。このデータは、他のクラスファイルにしばしば複製され、その上、スペースを無駄に浪費する。このことは、制限された容量のＲＡＭを有するデバイスにおいて特に問題である。例えば、Java1.1（特に、Java Development Kit 1.1又はJDK 1.1）では、簡単な「Hello World（ハローワールド）」プログラムが、与えられたハンドヘルドデバイスでは７００キロバイト以上のランタイムメモリ・フットプリントを有することが分かった。かかるハンドヘルドデバイスはまた、スクリーンを維持するために約３００キロバイトのＲＡＭを要し、簡単な「Hello World（ハローワールド）」プログラムよりもより複雑なプログラムがおそらくデバイスで少しも稼働しないことを意味する。
【００１０】
第３に、関連するプログラムは、典型的なJavaランタイムシステムにおいて、Javaクラスファイルがストレージにファイルされることをである。これは、ＲＡＭ又はリードオンリーメモリ（ＲＯＭ）であってよい。Javaバーチャルマシーンが実行のためにこれらのファイルを要求するとき、これらはＲＡＭにロードされ、分析され、その結果、結果として得られたデータが実行中にＲＡＭにストアされる。このことは、Javaプログラムの稼働中に、マシーンにストアされた実際に２つのバージョンの必要なクラスファイルがあることを意味し、２つのバージョンとは、ストレージ（ＲＡＭ若しくはＲＯＭ）にロードされず、分析されないJavaクラスファイルと、ＲＡＭにロードされ、解析されたJavaクラスファイルのことである。メモリ制約デバイスに関しては、このことは厄介なことである。
【００１１】
それ故、JavaバーチャルマシンによってランタイムでJavaクラスファイルをロードし、分析することのこれらの欠点、短所を克服することを解決する必要があり、Javaプログラムは、Microsoft WindowsCEが稼働するハンドヘルドデバイスのようなメモリが制約され、より遅いプラットフォームで現実的に稼働させることを可能にさせるようにすることが必要である。
【００１２】
【課題を解決するための手段】
上述の欠点、不利益及び問題が本発明により指摘され、以下の詳細な説明を読み、勉強することにより理解することができるであろう。本発明は、マルチプルJavaクラスファイルをランタイムイメージに結合することを記載する。Javaクラスファイルのランタイムイメージは、そのクラスファイルがJavaバーチャルマシン用に予めロードされ、予め分析された状態にある。ランタイムイメージは、読取専用メモリ（ＲＯＭ）にストアされたＤＬＬファイルであり、非冗長データを包含するのが望ましい。
【００１３】
ランタイムイメージは、Javaクラスファイルの与えられた訂正を予めロードし、予め分析する個々のユーティリティによって生成されるのが望ましく、Javaバーチャルマシンはランタイムでファイルをロードし、分析する必要がないが、その代わり、ランタイムイメージ自身で信頼されることができ得る。望ましくは、これは、Javaクラスファイルのバイトコードを大きなendianフォーマットから小さなendianフォーマットに変換することを含み、また、ネイティブナンバーファンクションデータ構造がそれに対してむいているインポートレコードを生成し、より早いネイティブナンバーファンクション解決を可能にする。
【００１４】
それ故、本発明は、従来技術で見いだされなかった利点を提供する。まず、Javaクラスファイルがランタイムイメージで予めロードされ、予め分析されるので、Javaバーチャルマシンがランタイムでそれらをロードし、分析しなければならないことはないということは、Javaプログラムの実行がより高速に実行されるということを意味する。例えば、簡単な「Hello World（ハローワールド）」プログラムを、約４０メガヘルツで稼働するプロセッサを有するハンドヘルドデバイスで実行するのに１秒以下を要し、これと比較して、バーチャルマシンが必要なクラスファイルを最初にロードし、分析しなければならないデバイスでは９分以上要する。
【００１５】
第２に、ロードされ、分析されたクラスファイルを単一のＤＬＬファイルに結合するとき、冗長データが除外されるのが望ましいので、メモリの不足がちなスペースを節約して使うことができる。例えば、Java 1.1.3（特に、Java Development Kit 1.1.3又はJDK 1.1.3）では、従来技術のランタイムでのクラスファイルのロード及び分析と比較して、ある例では、ランタイムイメージファイルのサイズを３０パーセント低減させることを達成できることを見いだした。
【００１６】
第３に、ランタイムイメージは、与えられたデバイス内で必要であるJavaクラスファイルのバージョンだけがある。更に、このバージョンだけが、ランダムアクセスメモリ（ＲＡＭ）ではなく、ＲＯＭにストアされるのが望ましい。従って、従来技術の２つのバージョンのクラスファイルが存在する場合では、最初は、ロードされておらず、分析されていない状態であり、次いで、ランタイムでロードされ、分析された状態であり、しばしば、これらの２つのバージョンのクラスファイルは圧縮されてともにＲＡＭに存在し、本発明下では、クラスファイルの１つだけのバージョン（ロードされ、分析されたバージョン）があり、ＲＯＭにあるのが望ましい。これは、不足がちなＲＡＭを節約する。
【００１７】
本発明は、デバイス、コンピュータ、コンピュータ読取可能媒体、及び、範囲を変更するシステムを記載する。ここで記載された本発明の態様及び利点に加えて、本発明の更なる態様及び利点を、図面を参照して、以下の詳細な説明を読むことにより明らかになるであろう。
【００１８】
【発明の実施の形態】
本発明の例示的な実施形態の詳細な説明の記載では、発明を実施する特定の例示的な実施形態を例示的に図示したこの書類の一部を形成する添付図面を参照する。これらの実施形態は当業者が実施することができるように十分詳細に記載されており、他の実施形態を利用することができ、本発明の精神又は範囲から逸脱することなく、論理的、機械的、電気的及び他の変更をすることができる。それゆえ、以下の詳細な記載は、意味を限定するように解してはならず、本発明の範囲は特許請求の範囲のみで定義される。
【００１９】
詳細な説明は、４つのセクションに分けられる。第１のセクションは、本発明の実施形態が実施されれうるハードウェア及び作動環境が記載されている。第２のセクションでは、本発明の一つの実施形態のシステムレベルの記載を従来のシステムと比較して示す。第３のセクションでは、本発明の実施形態に関する方法を提供する。第４のセクションでは、詳細な説明のまとめを記載する。
【００２０】
ハードウェア及び動作環境
図１に、本発明の実施形態が実施されうるハードウェア及び動作環境を示す。図１の記載は、本発明が実施されうる適当なコンピュータハードウェア及び適当な計算環境を簡単に、一般的に提供するようにしたものである。要求されていないけれども、本発明は、パーソナルコンピュータのようなコンピュータによって実行されるプログラムモジュールのようなコンピュータ実行可能な命令の一般的なコンテキストで記載される。一般的には、プログラムモジュールは、特定のタスクを実行し、特定のアブストラクトデータタイプを実施する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。
【００２１】
更に、当業者は、本発明が、Microsoft WindowsCEが稼働するようなハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベース又はプログラマブル・コンシューマ・エレクトロニクス、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、Microsoft WindowsNTのようなものが稼働するＰＣを包含するたのコンピュータシステムで実施されうることを認識するであろう。本発明はまた、タスクが、通信ネットワークを介してリンクされたリモートプロセッシングデバイスによって実行される分離された計算環境でも実施される。分離された計算環境では、プログラムモジュールは、ローカル及びリモートの両方のメモリストレージデバイスに配置されうる。
【００２２】
本発明を実施するための図１のハードウェア及び作動環境は、演算ユニット２１、システムメモリ２２、システムメモリを含む種々のコンポーネントを演算ユニット２１に対して機能的に結合するシステムバス２３を含むコンピュータ２０の形態の汎用的な計算デバイスを含む。一つだけ、又は、１つ以上の演算ユニットがあってよく、コンピュータ２０のプロセッサは、単一中央演算処理装置（ＣＰＵ）、若しくは、一般に並列処理環境と呼ばれる、複数の演算ユニットを有している。コンピュータ２０は、従来のコンピュータ、分離されたコンピュータ、又は、他のタイプのコンピュータであってよく、本発明は限定されない。
【００２３】
システムバス２３は、メモリバス又はメモリコントローラ、物理バス、及び、種々のバスアーキテクチャを使用するローカルバスを包含する。システムメモリはまた、単にメモリとも呼ばれ、読み取り専用メモリ（ＲＯＭ）２４及びランダムアクセスメモリ（ＲＡＭ）２５を含む。起動中のようなコンピュータ２０内のエレメントの間で情報を転送するのを助ける基本的なルーチンを包含する基本的な入力／出力システム（ＢＩＯＳ）２６はＲＯＭ２４にストアされる。コンピュータ２０は更に、（図示しない）ハードディスクから読み込むため、及びハードディスクに書き込むためのハードディスクドライブ２７と、リムーバブル磁気ディスク２９から読み出し、又は書き込むための磁気ディスクドライブ２８と、ＣＤ−ＲＯＭ又は他の光学媒体のようなリムーバブル光ディスク３１から読み出すため、又は書き込むための光ディスクドライブ３０とを含む。
【００２４】
ハードディスクドライブ２７、磁気ディスクドライブ２８、及び光ディスクドライブ３０は、ハードディスクドライブインターフェース３２、磁気ディスクドライブインターフェース３３及び光ディスクドライブインターフェース３４によってそれぞれシステムバス２３に接続される。ドライブおよびそれらに関するコンピュータ読み取り可能媒体は、コンピュータ読み取り可能命令、データ構造、プログラムモジュール、及び、コンピュータ２０に関する他のデータの不揮発性ストレージを提供する。当業者は、磁気カセット、フラッシュメモリカード、ディジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）などのような、コンピュータによってアクセス可能なデータをストアすることができるいかなるタイプのコンピュータ読み取り可能媒体を、例示的な作動環境で使用しうることを認識すべきである。
【００２５】
オペレーティングシステム３５、１又はそれ以上のアプリケーションプログラム３６、他のプログラムモジュール３７、及び、プログラムデータ３８を含む多数のプログラムモジュールが、ハードディスク２９，光ディスク３１，ＲＯＭ２４、又はＲＡＭ２５にストアされうる。ユーザは、キーボード４０及びポインティングデバイス４２のような入力デバイスを介してパーソナルコンピュータ２０にコマンド及び情報を入力しうる。他の入力デバイス（図示せず）は、マイク、ジョイスティック、ゲームパッド、衛星放送用パラボラアンテナ、スキャナのようなものを含みうる。これらの及び他の入力デバイスは、システムバスに接続されるシリアルポートインターフェース４６を介して演算ユニット２１にしばしば接続されるが、パラレルポート、ゲームポート、又は、ユニバーサルシリアルバス（ＵＳＢ）のような他のインターフェースによって接続されてもよい。モニタ４７又は他のタイプの表示装置はまた、ビデオアダプタ４８のようなインターフェースを介してシステムバス２３に接続される。モニタに加え、パーソナルコンピュータは典型的には、スピーカ及びプリンタのような他の周辺出力デバイス（図示せず）を含みうる。
【００２６】
コンピュータ２０は、リモートコンピュータ４９のような１又はそれ以上のリモートコンピュータとの論理的な接続を使用したネットワーク環境で作動しても良い。これらの論理的な接続は、コンピュータ２０又は、コンピュータ２０の一部に接続された通信デバイスによって達成され、本発明は特定のタイプの通信デバイスに制限されない。メモリストレージデバイス５０のみが図１に図示されているけれども、リモートコンピュータ４９は、他のコンピュータ、サーバ、ルータ、ネットワークＰＣ、クライアント、ピア・デバイス、若しくは他の一般的なネットワークノードであってよく、典型的には、コンピュータ２０に関して記載された多くの又は全ての要素を含む。図１に示した論理的接続は、ローカルエリアネットワーク（ＬＡＮ）５１及びワイドエリアネットワーク（ＷＡＮ）５２ｊを含む。かかるネットワーク環境は、ありふれた、オフィスネットワーク、企業用広域コンピュータネットワーク、イントラネット、及びインターネットという全てのタイプのネットワークである。
【００２７】
ＬＡＮネットワーク環境で使用するときは、コンピュータ２０は通信デバイスの一つのタイプであるネットワークインターフェース又はアダプタ５３を介してローカルネットワーク５１に接続される。ＷＡＮネットワーク環境で使用するときは、コンピュータ２０は典型的には、通信デバイスの一つのタイプであるモデム５４、又は、インターネットのようなワイドエリアネットワーク５２にわたって通信を確立するための他のいかなるタイプの通信デバイスを包含する。内蔵又は外付けであってもよいモデム５４は、シリアルポートインターフェース４６を介してシステムバス２３に接続される。ネットワーク環境では、パーソナルコンピュータ２０又はその一部に関して表したプログラムモジュールは、リモートメモリ記憶装置にストアされうる。示されたネットワーク接続は、例示的なものであり、コンピュータの間の通信リンクを確立するための他の手段及び通信デバイスであってもよい。
【００２８】
本発明の実施形態が実施されうるハードウェア及び動作環境を記載してきた。本発明の実施形態が実施されうるコンピュータは、在来のコンピュータ、分離されたコンピュータ、又は、他のいかなるタイプのコンピュータであってよく、本発明は制限されない。かかるコンピュータは、典型的には、そのプロセッサとして１またはそれ以上の演算ユニットと、メモリのようなコンピュータ読み取り可能媒体を包含する。コンピュータはまた、ネットワークアダプタ又はモデムのような通信デバイスを包含し、それにより他のコンピュータと通信可能に接続することができる。
【００２９】
システムレベルの記載
従来のシステムのオペレーションと比較して、本発明の実施形態のオペレーションのシステムレベルの記載を、図２（ａ）乃至２（ｂ）を参照して示す。従来技術として知られており、JavaバーチャルマシンがJavaクラスファイルをランダムアクセスメモリ（ＲＡＭ）内にロードし、分析するシステムのダイアグラムを図２（ａ）に示し、本発明の一つの実施形態によって、Javaプログラムを稼働するとき、Javaバーチャルマシンによって信頼するために、Javaクラスファイルがリードオンリーメモリ（ＲＯＭ）のランタイムイメージ内に予め分析され、予めロードされるシステムのダイアグラムを図２（ｂ）に示す。
【００３０】
まず、従来技術による図２（ａ）を参照すると、ランタイムで、Javaバーチャルマシン２００はJavaクラスファイル２０２をＲＡＭ２０４にロードし、分析する。Javaクラスファイル２０２は、与えられたJavaプログラムの実行のために必要なそれらの含むそれらのクラスファイルである。一般的には、Java 1.1及びその後のバージョン（即ち、Java Development Kit 1.1又はJDK 1.1）のリリースにより、かかるJavaクラスファイルの少なくとも約１６０から１９０のアップワードが、「Hello World（ハローワールド）」プログラムのような簡単なプログラムさえ実行するのに要求されることが判断された。Javaクラスファイル２０２は、（分析され、ロードされたJavaクラスファイルがストアされたＲＡＭ２０４とは異なる）ＲＡＭ、リードオンリーメモリ（ＲＯＭ）、又は、ハードディスクドライブのような記憶装置のようなストレージにストアされる。
【００３１】
Javaクラスファイルの構造は、従来の技術の項で全体的に記載した：かかるクラスファイルの構造及びフォーマットは従来技術で知られている。特に、各Javaクラスファイルは典型的には、.classサフィックス指示によって示され、バイトコードによってコンパイルされる。各Javaファイルは、別々に転送され、Javaアプレット又はアプリケーションに使用される全てのクラスがそれら自身の別々のクラスファイルに属する。クラスファイルは一連の８バイトである。１６及び３２ビット値が、２又は４のそれらのバイトを読み、それらを一緒に結合することによって形成される。各クラスファイルは、マジック定数、メジャー及びマイナーなバージョン情報、コンスタントプール、クラスに関する情報、クラスにおけるメソッド及びフィールドの各々に関する情報、及び、デバッギング情報を包含する。コンスタントプールは、クラスに関する種々のコンスタント情報がストアされる仕方であり、ユニコードストリング、クラス又はインターフェース名、フィールド又はメソッドに対するリファレンス、数値、又は、一定のストリング値であってよい。Javaクラスファイルに関する更なる情報は、reference [name]、1053〜1059ページに記載されており、リファレンスとしてここに組み入れる。
【００３２】
Javaバーチャルマシン２００は、前にJavaバイトコードにコンパイルされているJavaプログラムを翻訳し、実行するために、Microsoft WindowsCEのようなオペレーティングシステムで稼働するネイティブプログラムである。Javaバーチャルマシンはまた、Javaランタイムインタプリタとも呼ばれる。Javaプログラムのランタイムの実行では、Javaバーチャルマシン２００は、Javaクラスファイル２０２をロードし、分析し、ロードされ、分析されたJavaクラスファイルをＲＡＭ２０４にストアする。従来の技術の項で記載したように、かくして、Javaクラスファイルの従来技術の２つのバージョンが存在し、２つのバージョンとは、Javaクラスファイル２０２によって示されるようなオリジナルのJavaクラスファイルと、ＲＡＭ２０４にストアされた分析され、ロードされたバージョンである。Javaクラスファイルのロード及び分析は従来技術で知られていた。Javaに関する情報は、David Flanagan著「Java in a Nutshell: A Desktop Quick Reference」（第２版、１９９７年）（ISBN 1-56592-262-X）にリファレンスとして記載されており、リファレンスとしてここに組み入れる。
【００３３】
次いで、図２（ｂ）を参照すると、本発明のある実施形態に関して、コンバータ２５０は、Javaクラスファイル２５２をファイル２５４にロードし、分析し、次いで、ＲＯＭイメージャ２５８によってランタイムイメージ（好ましくは、ＤＬＬファイル）としてＲＯＭ２５６に好ましくは焼きつけられる。従って、Javaバーチャルマシン２６０は、いかなるJavaクラスファイル２５２をもロードし、分析しなければならないわけではないが、その代わりに、ＲＯＭ２５６にランタイムイメージとしてストアされたクラスファイルの分析され、ロードされたバージョンを直ちに使用することができる。これは、ＲＡＭ２６２が維持されることを意味し、また、より少ないオーバーヘッドがランタイムで実行されるのに必要なので、Javaプログラムがより早く実行することをも意味する。
【００３４】
コンバータ２５０及びＲＯＭイメージャ２５８は通常は、コンピュータの一部であり、コンピュータ化システム、即ちコンピュータより分離されたデバイス、又は、コンピュータ化システム、即ちJavaバーチャルマシン２６０が稼働するデバイスである。例えば、Microsoft WindowsNTワークステーションは、コンバータ２５０及びＲＯＭイメージャ２５８をそこで稼働することができ、コンバータ２５０は（ワークステーションのハードディスクドライブのようなストレージにストアされるような）入力としてJavaクラスファイル２５２を使用し、結果としてのファイル２５４を出力し、次いで、ＲＯＭ２５６に焼き付けるための入力としてＲＯＭイメージャ２５８によって使用される。このＲＯＭ２５６は次いで、Javaバーチャルマシン２６０及びＲＡＭ２６２を包含するMicrosoft WindowsCEハンドヘルドデバイスのようなデバイスに挿入するためのハードウェアカードにセットされうる。
【００３５】
Javaクラスファイル２５２は、前に記載したJavaクラスファイル２０２と同じものであり、即ち、Javaクラスファイル２５２は、与えられたJavaプログラムの実行のために必要なそれらを含むそれらのクラスファイルである。与えられたJavaプログラムに関する必要なJavaクラスファイルの全てが、Javaクラスファイル２５２の一部ではないことに注意すべきであり、他のJavaクラスファイルが、図２（ａ）に記載されたようなJavaバーチャルマシン２６０によってランタイムでストレージからＲＡＭ２６２にロードされ、分析されうる。しかしながら、与えられたJavaプログラムに関する全ての必要なクラスファイルが、最適な実行有効性によるJavaクラスファイル２５２の一部であるのが望ましい。
【００３６】
コンバータ２５０は、単一のＤＬＬファイルにクラスファイルの結合を提供するソフトウェアツール（即ち、コンピュータプログラム）であるのが望ましく、ここでＤＬＬファイルは従来技術で知られているポータブル実行可能（ＰＥ：portable executable）フォーマットである。ツールは、包含するために個々のクラスファイルの仕様を提供し（即ち、Javaクラスファイル２５２）、当業者が理解できるように、特定のパスに沿って全ての独立したクラスファイルに関して検索する。望ましくは、ネイティブコードＤＬＬファイルはまた、ネイティブメソッドに関して検索をするために特定され得る。
【００３７】
コンバータ２５０は、従来技術で知られているようなJavaバーチャルマシンと同じ方法でクラスファイルをロードし、分析する。しかしながら、当業者が理解できるように、コンバータが特定のヒープにおける全ての関連したデータ構造を割り当てというような例外があるのが望ましく、これらのデータ構造内の全てのポインタがトラックされる。更に、コンバータは、全てのストリングを単一のストリングテーブル内に配置し、ネイティブナンバーファンクションが特定のＤＬＬファイルに適合されるのが好ましい（即ち、ＤＬＬファイルがネイティブナンバーファンクションに関して検索され得るように特定され、あるものがＤＬＬファイルに適合したとき、インポートレコードは、結果として生じるＤＬＬファイルに生成され、ネイティブナンバーファンクションデータ構造はこのレコードを指し、ネイティブナンバーファンクションの特定の、高速な解決をすることができる）。バイトコードはまた、大きなendianから小さなendianフォーマットにフリップされる。
【００３８】
コンバータがあるセッションにおける数値クラスファイルを予めロードし、予め分析するので、望ましくは、１つのクラスファイルよりも大きくなるまで信頼されるデータの一つのコピーだけを包含することができ、その結果、ＤＬＬファイル２５４内には冗長データはない。例えば、２つのクラスファイルは、従来技術で知られるような同じスーパークラスを参照し、その結果、このスーパークラスに関する完全な情報が各クラスファイルにある。コンバータはこの完全な情報の１つのコピーのみを包含するのが望ましく、その結果各クラスは、スーパークラスに関する同じ完全な情報を参照する。これは、従来技術を越える本発明の利点であり、クラスファイルのロードをすることにより、他のクラスファイルからの他の情報を備えて冗長であると否とをとわず、そこに包含された全ての情報をロードすることができる。
【００３９】
ＰＥフォーマットで結果として生じたＤＬＬファイル２５４は、全てのクラスファイル２５２からのヒープを包含し、ネイティブナンバーファンクションは、記載してきたようなインポートレコードとして参照する。当業者が理解できるように、これらのセクション内の全てのポインタは、適当なロードタイム・リロケーションレコードを有する。ファイル２５４は、コンバータ２５０によって予めロードされ、予め分析されるように、Javaクラスファイル２５２のランタイムイメージを作るためにＲＯＭ２５６（又は、たの不揮発性記憶装置）に焼き付けられるのが好ましい。ＲＯＭに焼き付けることは、従来技術で知られているＲＯＭイメージャ２５８によって達成される。例えば、WindowsCE OAKツールである、tool romimageを利用することができる。ＤＬＬファイルがロードされるとき、ＲＯＭイメージに対するポインタは、第２のコピーがもはやロードされないように得られる。
【００４０】
Javaバーチャルマシン２６０は、メモリのようなコンピュータ読み取り可能媒体からプロセッサによって実行可能なソフトウェアであることが望ましい。従来技術で知られているJavaバーチャルマシンは、コア・コマンド・ライン・アーギュメントを受け入れる。このアーギュメントは、信頼された（即ち、安全な）コアクラスＤＬＬファイルを名付け、jcls.dllをデフォルトとする。ランタイムでは、関連したデータ構造に対するポインタを得るためにLoadLibrary call及びGetProcAddress callを行い、Javaバーチャルマシンに存在するデータ構造を備えるこれを統合する。従って、信頼されたコアクラスＤＬＬファイルは、ＲＯＭ２５６にストアされたJavaクラスファイル２５２のランタイムイメージであるのが望ましい。新しいクラスがJavaプログラムによって要求されるので、コアクラスＤＬＬファイルにおけるクラスのリストは検索され、新しいクラスが見つかったならば、クラス・イニシャライザが実行される。これらのクラスは、初期化されたときにマークされ、実行は維持する。このことにより、従来技術で生じたような、ランタイムでのクラスファイルをロードし、分析するタイム消費プロシージャを迂回する。新しいクラスが見つからなかったならば、次いで、クラスファイルに関する通常の検索がファイルシステムで始まり、見つかったならば、クラスは従来技術のようにロードされ、分析される。
【００４１】
本発明の実施形態のオペレーションのシステムレベルの概観を従来技術と比較して記載してきた。コンバータプログラムによってJavaクラスファイルを予めロードし、予め分析することは、クラスファイルをロードし、分析することがJavaプログラムをより効率的に稼働させることができるように、ランタイムでJavaバーチャルマシンによって生じなければならないことはないということを意味する。更に、ＲＯＭにストアされたランタイムイメージ内にJavaクラスファイルを予めロードし、予め分析することは、従来技術における（あるものはストレージに、あるものはRAMにある）２つのバージョンとは反対に、Javaクラスファイルのたった一つだけのバージョンが存在するということを意味する。これは、重んじられて、Javaバーチャルマシンを有するデバイスのＲＡＭと会話する。
【００４２】
本発明の実施形態のメソッド
前のセクションでは、本発明の実施形態のオペレーションのシステムレベルの記載を記述した。このセクションでは、コンバータが存在するような実施形態のコンピュータによって実行されるメソッドを、一連のフローチャートを参照して記載する。実行されるべきメソッドは、コンピュータ実行可能命令からなるコンピュータプログラムを構成する。フローチャートを参照することによりメソッドを記述することにより、当業者は、適当なコンピュータ（コンピュータ読み取り可能媒体からの命令を実行するコンピュータのプロセッサ）でメソッドを実行するための命令を含むプログラムを開発することができる。
【００４３】
まず図３（ａ）を参照すると、本発明の実施形態によるコンピュータ化されたメソッドのフローチャートを示す。このメソッドは、少なくとも１つのJavaクラスファイルを、ＲＯＭのような不揮発性記憶装置にストアされたランタイムイメージに予めロードし、予め分析するためにコンピュータのようなデバイスによってなされるように要求されるステップ又は行為を含む。ステップ３００では、クラスファイルは、図２（ｂ）と関係して記載したように予めロードされ、予め分析され、それはまた図３（ｂ）と関係して記載されうる。ステップ３０２では、ランタイムイメージファイルが、図２（ｂ）と関係して記載されたように、ＰＥフォーマットでのＤＬＬであるのが望ましく、予めロードされ、予め分析されたクラスファイルを生成する。最後に、ステップ３０４では、ランタイムイメージ、即ちＤＬＬファイル、は図２（ｂ）にも関連して記載したように、ＲＯＭのような不揮発性記憶装置に焼き付けられる。従って、コンピュータ化されたメソッドは、クラスファイルを予めロードし、予め分析することと、ランタイムイメージファイルを生成することと、ランタイムイメージファイルを不揮発性記憶装置に焼き付けることという、主に３つのステップ又は行為を有する。
【００４４】
次に図３（ｂ）を参照すると、本発明の実施形態による他のコンピュータ化されたメソッドのフローチャートを示す。このメソッドは、一つのJavaクラスファイルを予めロードし、予め分析するためのコンピュータのようなデバイスによってなされうるように要求されたステップ又は行為を含む。即ち、図３（ｂ）のメソッドは、Javaクラスファイルの各々で、図３（ａ）のステップ３００が実行されるひとつのメソッドである。当業者は、図３（ｂ）のメソッドが従来技術で知られたJavaバーチャルマシンによって実行されるロード及び分析の方法論と実質的に同じであるということを認識するであろう。従って、図３（ｂ）のメソッドの記載を、当業者が本発明を使用することができるように十分詳細に提供する。
【００４５】
ステップ３５０では、クラスファイルからのクラスがロードされ、クラスがステップ３５２で分析される。このことは、コンスタントプールを分析すること、メソッドを分析すること、フィールドを分析すること、インターフェースを分析すること、クラスの属性を分析することを含む。クラスプールからのクラスリファレンスは、ステップ３５４でロードするクラスのリストに加えられる。次いで、ステップ３５６では、クラスをロードすることは、クラスのリストが空になるまで続けられる。最後に、ステップ３５８では、リロケーション情報がＤＬＬファイルに書き込まれる（コンスタントプール内のいかなるエラーも修正することを含みうる）。
【００４６】
各クラスファイルが図３（ｂ）のメソッドによって処理されるので、以前に処理されたクラスファイルにストアされているものを備えて冗長になっているクラスファイルで遭遇するデータは再びストアされない。むしろ、リファレンスは以前にストアされたデータに作られ、結果として生じたランタイムイメージは非冗長データだけを含む。更に、Javaクラスファイルは典型的には、記載してきたように、大きなendianフォーマットのデータを包含するので、図３（ｂ）の予めロードし、予め分析するプロセスは、大きなendianフォーマットのデータを小さなendianフォーマットのデータに変換することである。
【００４７】
本発明のひとつの実施形態によるメソッドを記載してきた。メソッドは、クラスファイルが、予めロードされ、予め分析され、ランタイムイメージにアセンブリされ、ＲＯＭにストアされることによるメソッドを含む。メソッドは、実際にクラスファイルを予めロードし、予め分析するための本発明のひとつの実施形態で必要なステップ又は行為を特定の図示した方法を含み、ランタイムでクラスファイルをロードするときに、Javaバーチャルマシンによって実行されるステップと実質的に等しい。
【００４８】
まとめ
マルチプルJavaクラスファイルをランタイムイメージに結合することを記載してきた。特定の実施形態をここでに図示し、記載してきたけれども、同じ目的を達成するために計算されるどんな変形も、示した特定の実施形態と置換することができうることは当業者にとって明らかであろう。この出願は、本発明のいなかる翻案、変形をもカバーするものである。例えば、クラスファイルが、予めロードされたＤＬＬファイルの生成中に分析される間に、Javaバイトコードがまたネイティブコードにコンパイルされること、このネイティブコードがまたＤＬＬファイルにストアされることなどである。これは、典型的なJavaバーチャルマシンに処理されたジャストインタイム（ＪＩＴ）翻訳と匹敵するが、それよりも、コードを予め翻訳する効果を有し、ランタイムでＪＩＴ翻訳を処理した後に時間が浪費されない。従って、本発明が特許請求の範囲及びその均等の範囲によってのみ限定されることは明白である。
【図面の簡単な説明】
【図１】  本発明の実施形態が実施されうるハードウェア及び動作環境のダイアグラムである。
【図２（ａ）】  本発明の実施形態によるシステムを従来技術のシステムと比較して図示したダイヤグラムである。
【図２（ｂ）】  本発明の実施形態によるシステムを従来技術のシステムと比較して図示したダイヤグラムである。
【図３（ａ）】  本発明の実施形態に関するメソッドのフローチャートである。
【図３（ｂ）】  本発明の実施形態に関するメソッドのフローチャートである。
【図１】
0004372348.tif 000002
【図２（ａ）】
0004372348.tif 000003
【図２（ｂ）】
0004372348.tif 000004
【図３（ａ）】
0004372348.tif 000005
【図３（ｂ）】
0004372348.tif 000006