(57)【要約】  装置（４５）は、新しいプログラムファイル（４６）を受け取り、プレインターナライズ済イメージを使用して、このプログラムが実行されるたびにプログラムファイルのインターナライズが行なわれることのないようにする。一実施形態においては、同装置にあるソフトウェアバーチャルマシン（５０）は、プレインターナライズ化を実行する機能を担う。プログラムファイルがひとたびプレインターナライズされて、装置の固定メモリ（５６）に格納されるイメージが生成されると、その後プレインターナライズ化処理を行なわなくても、イメージを実行できるようになる。さらに、後続のプログラム実行に必要な動的メモリ（５２）の使用量が低減し、新しいプログラムファイルの実行時間が短縮される。
2005509194.tif 000002
【特許請求の範囲】
【請求項１】
通常の動作モードとプレインターナライズされた動作モードとを有するバーチャルマシンを動作させるための処理であって、
選択されたプログラムファイルを特定するために利用可能なプログラムファイルの集合からプログラムファイルを選択するステップと、
実行前に前記選択されたプログラムファイルを後でインターナライズすることなく実行可能なイメージであって、前記選択されたプログラムファイルの再利用可能なプレインターナライズ済イメージが既に作成されているかどうかを判定するステップと、
前記選択されたプログラムファイルの再利用可能なプレインターナライズ済イメージが作成済みである場合、前記プレインターナライズ化モードで前記バーチャルマシンを選択的に動作させるステップとからなり、該ステップは、
前記選択されたプログラムファイルの再利用可能なプレインターナライズ済イメージを作成するステップと、
前記選択されたプログラムファイルの再利用可能なプレインターナライズ済イメージをメモリに格納するステップとからなる処理。
【請求項２】
前記選択されたプログラムファイルの再利用可能なプレインターナライズ済イメージが作成済みである場合、前記プレインターナライズ化モードで前記バーチャルマシンを選択的に動作させる前記ステップは、ユーザー要求に応答して実行される、請求項１に記載の処理。
【請求項３】
前記バーチャルマシンは第１装置で実行され、かつ前記処理は、
前記選択されたプログラムファイルの再利用可能なプレインターナライズ済イメージが前記第１装置で利用可能な場合、実行前に前記選択されたプログラムファイルをプレインターナライズすることなく前記選択されたプログラムファイルの再利用可能なプレインターナライズ済イメージを実行するステップと、
前記選択されたプログラムファイルの再利用可能なプレインターナライズ済イメージが前記第１装置とは別の第２装置で入手可能な場合、前記プレインターナライズ化モードに移行し、前記選択されたプログラムファイルの再利用可能なプレインターナライズ済イメージを前記第２装置から前記第１装置にコピーして、前記選択されたプログラムファイルの再利用可能なプレインターナライズ済イメージ内のメモリアドレスを更新するステップとをさらに備える、請求項１に記載の処理。
【請求項４】
第１装置で前記バーチャルマシンを実行するステップと、
前記選択されたプログラムファイルの再利用可能なプレインターナライズ済イメージが前記第１装置で入手可能な場合、前記プレインターナライズ化モードに選択的に移行し、前記選択されたプログラムファイルの再利用可能なプレインターナライズ済イメージを削除するステップとをさらに備える、請求項１に記載の処理。
【請求項５】
命令を実行するためのプロセッサと、
命令及びデータを前記プロセッサに提供するように前記プロセッサに結合された第１メモリと、前記第１メモリは、
前記プロセッサによって実行されたときに、プログラムファイルの受け取りを実現する少なくとも１つの命令の第１の集合と、
前記プロセッサによって実行されたときに、前記プログラムファイルの再利用可能な実行可能イメージを作成するため、バーチャルマシンの本来のメモリ構造へのプレインターナライズ化を実現する少なくとも１つの命令の第２の集合と、
前記プロセッサによって実行されたときに、実行前にインターナライズされることなく前記バーチャルマシンが実行することができる前記再利用可能な実行可能イメージの格
納を実現する少なくとも１つの命令の第３の集合とを有することとを備える装置。
【請求項６】
前記装置は該装置に含まれているか又は前記装置の外部に存在する第２メモリをさらに有し、前記第１メモリ又は前記第２メモリのいずれかは、前記プロセッサによって実行されたときに、前記再利用可能な実行可能イメージ内部のメモリアドレスの更新を実現する第４の複数の命令を有する、請求項５に記載の装置。
【請求項７】
前記装置は該装置に含まれているか又は前記装置の外部に存在する第２メモリをさらに有し、前記第１メモリ又は前記第２メモリのいずれかは、
前記プロセッサによって実行されたときに、前記再利用可能な実行可能イメージの前記第２メモリ内の別の場所への移動を実現する少なくとも１つの命令の第４の集合と、
前記プロセッサによって実行されたときに、前記再利用可能な実行可能イメージ内のメモリアドレスの更新を実現する少なくとも１つの命令の第５の集合とを有する、請求項５に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、高級言語で記述されたプログラムファイルの処理に関し、より詳細には、動的ロードに対応した高級プログラミング言語で記述されたプログラムファイルに関する。
【背景技術】
【０００２】
ハンドヘルド型装置などの電子装置の普及に伴い、これらの装置で実行され、かつこれらの装置と接続するアプリケーションが増えると共に、ユーザーが求める柔軟性も向上し、特別なプログラムや機能を追加できるような高い柔軟性も求められるようになっている。この種の装置は、命令を実行するためのプロセッサ、特殊機能装置（ｓｐｅｃｉａｌ  ｆｕｎｃｔｉｏｎ  ｕｎｉｔ）、所望の機能を提供するための命令を有しているため、「組み込み装置」と呼ばれている。組み込み装置は、典型的には、独自の電源を有するスタンドアロン型装置であるが、他のシステムと接続するための機能を備えていることが多い。例えば、携帯電話機、携帯無線呼出し器、個人情報端末（ＰＤＡ）などの組み込み装置は、典型的に、装置に記憶されているコンピュータプログラムを実行するための中央処理装置（ＣＰＵ）と、持ち運びできるようにするバッテリとを有する。組み込み装置を製造した後に、特殊な機能又はアプリケーションを追加することによって、装置をカスタマイズすることを、各ユーザーが求めることがある。ユーザーが提供するアプリケーションを後から容易にインストールできるようにする高級プログラミング言語で記述されたコンピュータプログラムすなわちコードを使用することが望ましい。このような高級プログラミング言語の例に、サンマイクロシステム社が開発したＪａｖａ（登録商標）言語がある。Ｊａｖａは、プラットフォームに依存しない、すなわち１種類のオペレーティングシステム又はハードウェア構成のみに特化していないため特に魅力的である。
【０００３】
組み込み装置向けのコードを開発する際の１つの制約に、装置のメモリの量が少ないという点があり、これによって、装置に記憶させることのできるコードの量が限られると共に、装置の演算能力が低下する。組み込み装置向けのコードを設計するうえでの重要な目標は、メモリ効率とインストールされたアプリケーションの実行速度とを最大限に向上させることにある。目下、組み込みアプリケーションのメモリ効率を向上させる方法がいくつか存在するが、これらの方法は一般に、ユーザーによって後からインストールされた追加アプリケーションには適用できない。
【０００４】
Ｊａｖａは、より詳細には、オブジェクト指向のプログラミング言語であり、移植性が高く、プログラムがしやすく、アーキテクチャに依存しない。オブジェクト指向設計では、「オブジェクト」と呼ばれるデータのほか、オブジェクトへのインターフェイスに主眼を置いている。Ｊａｖａプログラムは、様々な処理装置及びオペレーティングシステムのアーキテクチャを含め、ネットワーク内のどこでも実行することができる。
【０００５】
Ｊａｖａプログラムに対し、コンパイル及び解釈の両方が行なわれる。コンパイルは一度だけ実行され、コンパイルされたＪａｖａプログラミングコードは「Ｊａｖａバイトコード」（ＪＢＣ）と呼ばれる。ＪＢＣは、アーキテクチャに依存しない、すなわちプラットフォームに依存しない中間言語である。Ｊａｖａインタプリタが、プロセッサでＪＢＣ命令をパース及び実行する。解釈は、プログラムが実行されるたびに行なわれる。クラスファイルと呼ばれるＪａｖａバイナリファイルは、所定のプログラム用のＪＢＣのほかに、シンボルデータなどの支援情報をも含んでいる。クラスファイル、すなわちプログラムファイルは、「アイテム」すなわちクラスに関する情報（フィールド、メソッド、ＪＢＣ
配列、シンボル参照テーブルなど）を含む。詳細には、Ｊａｖａプログラムは、少なくとも１つのＪａｖａファイルからなり、このファイルをコンパイルすることによって少なくとも１つのクラスファイルが生成される。
【０００６】
実際には、ＪＢＣは、「Ｊａｖａバーチャルマシン」（Ｊａｖａ  ＶＭ）用の機械コード命令のことである。Ｊａｖａ開発環境やＪａｖａ対応ウェブブラウザなどのＪａｖａインタプリタは、全てＪａｖａ  ＶＭのインプリメンテーションを使用している。この種のツールは、システムに既にインストールされているＪａｖａ  ＶＭを使用するか、又はＪａｖａ  ＶＭに付属しているかである。また、Ｊａｖａ  ＶＭはハードウェアに組み込むことも可能である。このように、プログラムは、Ｊａｖａコンパイラを備えた装置であればどのような装置でもコンパイルすることができ、生成されたＪＢＣは、Ｊａｖａ  ＶＭのどのインプリメンテーションでも実行することができる。
【０００７】
Ｊａｖａで記述されたアプリケーションを移植可能にするために、多くのシンボル情報が維持管理される。ＪＢＣのＪａｖａ  ＶＭが普通に実行されている間、Ｊａｖａ  ＶＭによってシンボルデータが使用されて、動的結合が実行され、参照された構造を実際に指しているポインタが取得される。例えば、各関数に対する参照は、シンボル情報（クラス名、関数名及びシグネチャ）によって表現されている。クラス名は、メソッドの宣言を含むクラスオブジェクトを識別している。メソッドは、そのクラスで使用可能なさまざまな関数を識別しており、ＪＢＣ配列は、メソッドを実現するために実行されるプログラムである。関数名とシグネチャとが相まって、クラス内で特定の関数を識別している。シグネチャは、関数に渡される引数とその型、関数によって返される引数とその型を示している。シンボル情報のため、Ｊａｖａバイナリファイルのサイズが大きくなり、これによってメモリ格納に関する問題が生ずる。実行時に、ＪＢＣとシンボル情報とは、２つのコピーが維持管理される。このうち、一方のコピーは固定メモリに格納される。もう一方のコピーは、Ｊａｖａ  ＶＭが処理し易いフォーマットで動的メモリに格納される。携帯無線呼出し器、携帯電話機、ＰＤＡなどの小型の組み込み装置では、動的メモリが非常に少ない。このため、動的メモリの使用量を低減させることが望ましい。また、シンボル参照を処理するため、コストのかかるテーブル参照を使用することによって実行速度が低下するという問題もある。
【０００８】
上記の問題に対応するために、Ｊａｖａクラスファイルのサイズ縮小及びフォーマットを行ない、メモリ使用の効率を向上させることができるツールが登場している。「プレインターナライズ化（ｐｒｅ−ｉｎｔｅｒｎａｌｉｚａｔｉｏｎ）」とは、Ｊａｖａクラスファイル情報を、メモリに格納されたときにクラスオブジェクトを表すようなフォーマットに再変換する処理を指す。インターナライズ化とは、クラスファイルのロード時に行なわれ、クラスファイルからクラス情報を抽出し、この情報を動的メモリにある構造に格納する処理を指す。プレインターナライズ化処理は、シンボル参照とクラスのロードとを不用とし、必要な動的メモリの記憶領域を低減させて、アプリケーションの実行速度を向上させる。プレインターナライズ済ファイルのフォーマットは、Ｊａｖａ  ＶＭインプリメンテーションごとに異なる。
【０００９】
プレインターナライズ化は、コンパイルが行なわれてから、ＪＢＣが正常にロードされて実行されるまでの間に行なわれる。プレインターナライズされたクラスオブジェクトは、動的メモリに格納させる必要がないように再構築されており、固定メモリに維持管理することができる。このため、実行時に動的オブジェクトの生成に使用できる動的メモリが増える。状態を維持管理している情報及び構造、並びに動的オブジェクトは「Ｊａｖａヒープ」と呼ばれる領域に格納される。プレインターナライズ化の問題点として、クラス情報は固定メモリ内に格納されるため、実行時に更新できないという問題がある。
【００１０】
現在、目的の装置にクラスをインストールする前に、全シンボル参照を解決するように求めることによって、動的メモリにシンボル情報を保存しないという解決策が取られている。参照を解決する際には、参照を、参照された項目が存在する場所（すなわちアドレス）によって置き換える。一連のクラスファイル（すなわち「クラスファイルユニット」）をプレインターナライズする際の問題点として、装置に既にインストールされており、参照されている項目の場所がわからないか、わかっていても正しくないクラスが参照されている点がある。参照されているクラス情報の重複を避けるには、インストールされているクラスを装置から削除して、新しいファイルと共に再パッケージングする必要がある。
【００１１】
図１に、プログラムファイル（クラスファイルとも呼ばれる）を処理するための従来技術による処理６を示す。「クラス１」、「クラス２」、「クラス３」と記載されたプログラムファイル８が、プリプロセッサ１０によってロードされる。プリプロセッサ１０は、フォーマット済のクラスファイル情報１２を生成する。フォーマット処理では、各プログラムファイル（クラス１、クラス２、クラス３）が、実行時に使用されるクラスオブジェクトに変換される。このクラスオブジェクトは、使用するＪＶＭインプリメンテーションごとに固有である。プリプロセッサ１０は、ソフトウェア又はハードウェアに組み込まれたツールであり得る。フォーマット済クラスファイル情報１２は、目的の装置に格納できるように構造化されており、目的の装置は動的メモリと固定メモリとを有する。コンパイラ及びリンカ１６は、フォーマット済クラスファイル情報１２とＪａｖａ  ＶＭソースコード１４とを結合する。Ｊａｖａ  ＶＭソースコード１４は、目的の装置に組み込まれているＪａｖａ  ＶＭに特有のものである。コンパイラ及びリンカ１６は、Ｊａｖａ  ＶＭイメージ１８を出力する。このイメージ１８は、Ｊａｖａ  ＶＭ  １９を格納している部分と、プリロード済クラス情報２０を格納している部分の２つの部分を有する。プリロード済クラス情報２０は、フォーマット済クラスファイル情報をコンパイルしたものである。
【００１２】
この時点で、Ｊａｖａ  ＶＭイメージ１８が、目的の装置の装置メモリ２２に格納される。本例においては、装置メモリ２２は、動的メモリ２６と固定メモリ２４とを含む。一実施形態においては、動的メモリ２６にはＲＡＭが使用され、固定メモリ２４にはＲＯＭ及びフラッシュメモリの少なくともいずれかが使用される。動的メモリ２６は、実行時に中間値及び変数を記憶するために使用される。固定メモリ２４は、クラスローダーを格納する第１部分２８、ＪＢＣインタプリタを格納する第２部分３０、及びプリロード済クラス情報２０を格納する第３部分３２、の複数の部分を含む。部分２８のクラスローダーは、Ｊａｖａ  ＶＭが使用できるように、バイナリクラス情報をフォーマットするために用いられ、プリプロセッシング及びコンパイル中にフォーマットされているため、クラスローダーには必要ではない。装置メモリ２２に記憶されたＪａｖａ  ＶＭイメージ１８は、プログラムファイル８のＪａｖａプログラムファイル（クラス１、クラス２、クラス３）を実行するために使用される。装置メモリ２２は、装置（ハンドヘルド装置）やその他のアプリケーションで実行される。
【００１３】
装置の製造業者が処理６を実行した後に、固定メモリ２４からプログラムファイルを削除することが求められることがよくある。しかし、ひとたびクラスファイル８が固定メモリ２４に格納されると、ユーザーは、装置の製造業者に依頼しない限り、格納されているプログラムファイルを削除できないことがある。この場合、装置を製造業者に送り返すか、製造業者から処理６に使用するツール一式を支給してもらう。製造業者は、著作権を有するこの種のツールを、ユーザーに支給するかライセンス供与することを好まない。
【００１４】
さらに、装置メモリ２２にあるＪａｖａ  ＶＭイメージに、プログラムファイルを追加することが求められることがよくある。プログラムファイル８はアプリケーションの基本機能を記述していることが多く、ユーザーは、補助機能（ユーザー独自又はアプリケーシ
ョン独自の追加機能であって、装置の性能を向上させるものなど）を自由に追加することができる。プログラムファイルを追加するには、幾つかの方法がある。公知の方法の１つに、追加プログラムファイルをプログラムファイル８に追加して、処理６を再度実行する方法がある。生成されたＪａｖａ  ＶＭイメージ１８には、全プログラムファイル（プログラムファイル８と追加プログラム）のプリロード済クラス情報が含まれる。ユーザーが装置を製造業者に返送して、新しいプログラムファイルを追加してもらうか、又は製造業者がプログラムファイル８をユーザーに提供して、ユーザーがこの処理を実行できるようにしなければならないため、この方法は柔軟性に富んだものとはいえない。図２に示す従来技術による第２の方法では、「クラス４」、「クラス５」、「クラス６」と記載されたプログラムファイルを含む追加プログラムファイル４２を、追加の固定メモリ４０（フラッシュメモリなど）に格納する。プログラムファイル４２は、実行時に、固定メモリ２４の部分２８に格納されているクラスローダーによって動的メモリ２６にロードされる。ロードしたプログラムファイル（クラス４、クラス５及びクラス６）を動的メモリ２６に格納する必要があるため、Ｊａｖａヒープ空間に利用できる空間が少なくなる。動的メモリ空間が減少したことによって、たとえ全ての追加プログラムファイル４２を動的メモリ２６に格納できたとしても、動的メモリ空間が不足し、実行時に変数を記憶できず、この結果、プログラムを実行できなくなる。通常、動的メモリ空間は小さいため、多くのアプリケーシィンにおいては、Ｊａｖａヒープ内で利用可能な空間を最大限に広げることが非常に重要となる。
【００１５】
さらに、クラスのロード又は追加プログラムファイル４２のインターナライズは、追加プログラムファイルを実行するたびに行なう必要がある。換言すれば、このプログラムファイルは、恒久的にインターナライズされることはない。このようなアプリケーションは、「一時アプリケーション」と呼ばれることがある。インターナライズが繰り返し行なわれると、プログラムの実行速度が極端に低下する。実行時ローダーによるインターナライズ処理は、Ｊａｖａプログラミング環境だけに限ったものではない。
【発明を実施するための最良の形態】
【００１６】
本発明は例示的に説明し、添付の図面に限定されるものではない。添付の図面においては、同一の参照符号は同じ要素を示す。
当業者は、説明の簡潔を記し説明をわかりやすくするために、図面に記載の要素は必ずしも実寸どおりに記載されていないことを理解する。例えば、本発明の種々の実施形態をよりよく理解できるように、一部の要素の寸法は、他の要素に比して強調されている。
【００１７】
説明をわかりやすくするために、Ｊａｖａプログラミング言語を例に採り上げる。しかし、本発明はその他のプログラミング言語にも適用することができる。組み込みＪａｖａプログラムを有するシステムに関して、本明細書中で複数の用語が使用されている。メモリは、読み出し専用メモリ（ＲＯＭ）、書込み可能メモリ、及び読込み可能−書込み可能メモリを指す。読込み可能−書込み可能メモリは、ランダムアクセスメモリ（ＲＡＭ）、電気消去可能プログラマブルメモリ（ＥＥＰＲＯＭ）、プログラマブルメモリ（ＰＲＯＭ）であり得る、消去不可能ＰＲＯＭ（ＯＴＰＲＯＭ）、消去可能ＰＲＯＭ（ＥＰＲＯＭ）、フラッシュメモリなどを含む。「動的メモリ」との用語は、ＲＡＭなど、動的に割当可能であって、装置に通電が行なわれなくなったときに、格納している情報又はデータを保持しないメモリを指す。「固定メモリ」との用語は、ＲＯＭなど、実行時に読み出し専用として扱われ、装置に通電が行なわれなくなったときにも格納している情報又はデータを保持するメモリを指す。
【００１８】
本発明は、動的ロードに対応した高級言語で記述されたプレインターナライズ済プログラムファイルを作成及び使用するための方法又は処理を提供する。本明細書においては、「方法」及び「処理」は、同義語として使われる。追加プログラムファイルののちの実行
速度を向上させるために、実行に使用できる動的メモリを減少させることなく、ユーザー独自のプログラムファイルの追加又は削除が可能になるプログラムファイルの処理方法が求められている。
【００１９】
図３に、装置４５と追加プログラムファイル４６とを有する例示的なプログラミング環境４４を示す。追加プログラムファイル４６には、任意の数ｎ（ｎは整数）のクラスファイルが存在する。各クラスファイルは、任意のサイズを有し、ユーザーが装置４５に追加しようとしているプログラムファイルの集まりのうちの１つに対応している。装置４５の正規の製造業者は、図面に記載の追加プログラムファイル４６によって装置４５をプログラムしていない。
【００２０】
装置４５は、アプリケーションマネージャ４８を介して追加プログラムファイル４６に結合されている。アプリケーションマネージャ４８には、動的メモリ５２、固定メモリ５６及びバーチャルマシン（ＶＭ）５０が双方向的に結合されている。動的メモリ５２の一例として、ランダムアクセスメモリ（ＲＡＭ）があり、固定メモリ５６はフラッシュメモリであり得る。固定メモリ５６は、追加ファイル４６のプレインターナライズ済イメージを格納している。図中の例においては、バーチャルマシン５０は、動的メモリ５２及び固定メモリ５６の各々と別個に結合されている。バーチャルマシン５０に応答して、装置４５内の情報が、図面に記載されていない導体を介して、動的メモリ５２と固定メモリ５６との間で移動される。図面の例においては、バーチャルマシン５０は、クラスローダー６１、クラスリゾルバ６２、クラスベリファイヤ６３、資源マネージャ６４、動的メモリマネージャ６５、バイトコードインタプリタ６６、プレインターナライザ６７及び複数のプリロード済アプリケーション及びライブラリ６８を有し、これらは全て固定メモリ６９に存在している。また、バーチャルマシン５０はＪａｖａヒープ５４をも有し、これは動的メモリ７０に存在する。
【００２１】
動作を記載すると、装置４５は、元々は製造業者によってプログラムされており、所定のプログラムファイルがプリロード済アプリケーション及びライブラリ６８に格納されている。このようなプリロード済アプリケーションが実行されるときは、バーチャルマシン５０は第１モード（通常モード）で実行されて、固定メモリ６９のアプリケーションを処理する。ここで、装置４５のユーザーが、装置４５の外部の任意の供給源から追加ファイル４６を追加しようとしていると仮定する。アプリケーションマネージャ４８は、動的メモリ５２又は固定メモリ５６のいずれかに追加ファイル４６を配置することを支援する。いずれのメモリが使用されるかは、アプリケーションに特有であり、本発明と密接な関係があるわけではない。アプリケーションマネージャ４８は、バーチャルマシンの本来のメモリ構造にプログラムファイルをプレインターナライズする第２モード（プレインターナライズ化モード）でバーチャルマシン５０を起動する。わかりやすくするために、本明細書中において「本来の（ｎａｔｉｖｅ）メモリ構造」との用語は、動作が、特定のバーチャルマシンに特有であるものを指し、その他のバーチャルマシンには該当しないものを指す。本来のメモリ構造は、そのバーチャルマシンが、当該装置のバーチャルマシンの特定のインスタンス生成（ｉｎｓｔａｎｔｉａｔｉｏｎ）である特定のバーチャルマシンを指す。プレインターナライズ化モードの結果は、プログラムファイルのプレインターナライズ済イメージであり、これは後で固定メモリ５６に格納される。プレインターナライズ済イメージは固定メモリに存在しているため、再利用可能な実行可能イメージである。新たに導入されたアプリケーションの実行がその後必要となった場合、プレインターナライズ化を繰り返す必要がない。さらに、動的メモリ５２又は固定メモリ５６に配置された追加ファイル４６の元のコピーを削除することもでき、これによってメモリを大幅に節約することができる。
【００２２】
バーチャルマシン５０は標準バーチャルマシンであり、プレインターナライズ化機能を
実行できるように変更されている。従来のバーチャルマシンは、プレインターナライズ化を実行しない。クラスローダー６１及びクラスリゾルバ６２は、通常モードかプレインターナライズ化モードかのいずれかで実行するように変更されている。さらに、クラスローダー６１は、プレインターナライズ済クラスを認識するように機能拡張されている。バイトコードインタプリタ６６は、プレインターナライザ６７によって生成された新しいバイトコードを扱えるように機能拡張されている。
【００２３】
わかりやすくするために、プレインターナライズ化処理では、クラスファイルの処理が行なわれる。まず、クラスは、クラスローダー６１によってバーチャルマシン５０に導入される。クラスローダー６１は、追加プログラムファイル４６にある全てのクラスに関連するバーチャルマシン特有のデータ構造を生成する。通常モードにおいては、クラスは、アプリケーションの使用法（ｕｓａｇｅ）に応じて、クラスローダー６１によって読み込まれる。プレインターナライズ化の間、バーチャルマシン特有のデータ構造がスキャンされて、追加クラスの実行中に参照されるほかのクラスが、追加ファイルに含まれているか、外部に存在するかを問わずに特定される。通常モードにおいては、クラスの初期化方法を実行する必要があるため、クラスのロード中にバイトコードインタプリタ６６の呼び出しが必要となることがある。バイトコードインタプリタ６６は、所定のクラスに特有の任意の初期化を実行する。この種のクラスには、例えば、静的なイニシャライザがある。プレインターナライズ化の際には、インストールを目的として、静的なイニシャライザの実行が行なわれることはない。静的なイニシャライザの実行は、アプリケーションが実行されようとしているときにのみ行なわれる。バーチャルマシン５０のクラスリゾルバ６２が使用されて、公開されているＪａｖａ参照プラットフォームに準拠した従来の方法によって、クラスの定数プールにあるエントリが解決される。解決が完了すると、解決された参照（アドレスポインタを介して）を指すようにＪａｖａバイトコード（ＪＢＣ）が更新される。さらに、プレインターナライズ化中に、クラスがバーチャルマシン５０のクラスベリファイヤによって従来の方法で検証される。追加ファイルが今後実行されるときに、クラスの検証が行なわることはない。検証は、Ｊａｖａプログラミング言語が従来から有する機能であって、これについては本明細書でさらに詳細に記載しない。資源マネージャ６４は追加ファイルに関連する資源を格納し、これによって、資源が追加プログラムファイルに関連付けられる。動的メモリマネージャ６５は、この処理の全体にわたって使用されて、クラスに関連するデータ構造を動的メモリに作成する。このように生成されたデータ構造は、総称的にインターナライズ済イメージと呼ばれる。次に、最終的なイメージが固定メモリ５６に書き込まれる。以上まとめると、プレインターナライザ６７とは、バーチャルマシン５０のコンポーネントに、プレインターナライズ化ステップを実行するように指示するコードの集まりのことである。
【００２４】
図４に、２つのプログラムファイルをプレインターナライズした後の、図３の固定メモリをさらに詳細に示す。プログラムファイルの第３の集合７４を含む複数のプログラムファイル７３が、Ｊａｖａアプリケーションマネージャ（ＪＡＭ）７６に結合されている。ＪＡＭ  ７６は、固定メモリ９２内に、動的にプレインターナライズされたアプリケーションのリストを維持管理している。プレインターナライズ済のアプリケーションは、バーチャルマシンの製造・販売後にバーチャルマシンに追加されるため、「動的（ｄｙｎａｍｉｃ）」であると呼ばれる。
【００２５】
ＪＡＭ  ７６は、図３のバーチャルマシン５０と同じ構成要素を有するバーチャルマシン７２に結合されている。説明をわかりやすくするために、バーチャルマシンの全ての構成要素を図４に記載する。バーチャルマシン７２は、ＶＭが実行の第１モード（通常モード）であるときに使用されるバイトコードインタプリタ７９と、ＶＭが実行の第２モード（プレインターナライズ化モード）であるときに使用されるプレインターナライザ８０と、プログラムファイルのプリロード済クラス８１とを有する。バーチャルマシン７２は、
プログラムファイルの第１の集合のプレインターナライズ済イメージ８６、プログラムファイルの第２の集合のプレインターナライズ済イメージ８８、及び今後のプログラムファイル用の空間９０を含む固定メモリ８４に結合されている。
【００２６】
動作を記載すると、バイトコードインタプリタ７９を主に使用する第１モード（通常モード）で動作しているときに、ＪＡＭ  ７６は、プリロード済クラス８１、プレインターナライズ済イメージ８６、プレインターナライズ済イメージ８８の少なくともいずれかを実行するようにバーチャルマシン７２に指示を出す。ＪＡＭ  ７６は、プレインターナライザ８０を主に使用することによって、プログラムファイルの第３の集合７４をプレインターナライズするようにバーチャルマシン７２に指示を出す。プレインターナライザ８０は、図３のプレインターナライザ６７に関して上記した方法と同じ方法によって、プログラムファイルの第３の集合７４のプレインターナライズ化を行なう。プレインターナライザ８０は、プログラムファイルの第３の集合７４のためのイメージを生成して、今後のプログラムファイル用の空間９０に格納する。さらに、ＪＡＭ  ７６は、固定メモリ８４からプログラムファイルの第２の集合８８を削除するようにバーチャルマシン７２に指示を出す。ＪＡＭ  ７６は、固定メモリ９２に記憶された動的にプレインターナライズ済アプリケーションのリストを使用して、プレインターナライズ済イメージに関する情報を維持管理している。ＪＡＭ  ７６は、プログラムファイルの集合をプレインターナライズする前に、第２モードで動作しているバーチャルマシン７２から、今後のプログラムファイル用の空間９０の大きさを取得する。これによって、ＪＡＭ  ７６は、プログラムファイルの集合をプレインターナライズできるかどうかを判定する。また、第２モードで動作しているバーチャルマシン７２は、プログラムファイル７４の組を追加するように求める要求、又は既にプレインターナライズ済みのイメージ８８を削除するように求める要求ののちに、成功又は失敗を示す情報をＪＡＭ  ７６に返す。
【００２７】
図３，４のいずれの実施形態においても、バーチャルマシンの主要コンポーネントが、第２モード（プレインターナライズ化モード）によって再使用されている。この結果、本発明において、既にメモリ資源アドレスに完全に変換されているイメージの格納が可能となるように、バーチャルマシンが拡張されている。
【００２８】
図５に、バーチャルマシンと連係したＪａｖａアプリケーションマネージャのプログラムアプリケーションの実行の流れを示す処理１００を示す。本処理はステップ１０１から開始する。ステップ１０３において、ユーザーか別の供給源のいずれかが、利用可能なプログラムファイルの集合からプログラムファイルを選択する。選択されたプログラムファイルは、プレインターナライズ済イメージの形で装置のメモリに存在していることもあれば、存在していないこともある。このプログラムファイルの集合には、プリロード済クラス、プレインターナライズ済イメージ、及びバーチャルマシンの外部のプログラムファイルの少なくともいずれかが含まれる。プリロード済クラスの処理の詳細は図５には記載しない。ステップ１０５において、プレインターナライズ済アプリケーションイメージが作成されているかどうかの判定が行なわれる。作成されている場合、イメージは、バーチャルマシンを格納している装置の固定メモリに存在することになる。ステップ１０５の判定結果が「ＹＥＳ」の場合、ステップ１０７で、（１）プログラムファイルを実行するか、又は（２）プログラムファイルを、固定メモリのプレインターナライズ化空間から削除するか、の２つの選択肢が提示される。一形態においては、どちらを選択するのかを示すユーザー要求をユーザーから受け取ってもよい。先に、ユーザー又は他の供給源がプログラムファイルの実行を選択したものと仮定する。プログラムファイルが固定メモリのプレインターナライズ化空間に存在しているため、ステップ１０９において、プレインターナライズ済イメージを実行するため、Ｊａｖａアプリケーションマネージャによって通常モードであるバーチャルマシンが呼び出される。実行が完了すると、プログラムファイルの実行に対して最終ステップ１００に到達する。ユーザー又は他の供給源が、バーチャルマシ
ンを格納している固定メモリからプログラムファイルを削除することを選択したと仮定する。ステップ１１２において、Ｊａｖａアプリケーションマネージャは、プレインターナライズ済イメージを削除するために、第２モードであるバーチャルマシンを呼び出す。バーチャルマシンがプレインターナライズ化モードで動作している場合、プレインターナライズ済イメージの削除は、プレインターナライザの付加的な機能である。削除が行なわれると、最終ステップ１１３に到達する。また、Ｊａｖａアプリケーションマネージャは、固定メモリにある、動的にプレインターナライズされたプログラムファイルのリストを更新する。
【００２９】
ステップ１０５に戻り、所望のプレインターナライズ済イメージが作成されていなかったと仮定する。ステップ１０５の判定結果が「ＮＯ」の場合、ステップ１１４は、（１）プログラムファイルを実行するか、又は（２）固定メモリのプレインターナライズ化空間にプログラムファイルを追加するか、の２つの選択肢を提示する。一実施形態においては、この選択は、ユーザーが、プログラムファイルを実行するか、又はプレインターナライズ化モードに入るかを選択することによって行なわれ得る。別の実施形態においては、自動実行ルーチンによって選択が行なわれ得る。ユーザー又は他の供給源が、プログラムファイルを実行するという選択を行なった場合、ステップ１１６が実行される。このステップ１１６は、図２の装置が行なう、プレインターナライズされていないプログラムファイルの実行に相当する。ステップ１１６は、第１のステップ１１８を含む。ステップ１１８では、プログラムファイルが、第１モード（通常モード）であるバーチャルマシンによってインターナライズされる。バーチャマシンのプレインターナライザは、このプレインターナライズ化機能では使用されない。これに代わって、バーチャルマシンは、プレインターナライズ化を実行するために、ベリファイヤ、リゾルバなどの種々の機能部分を使用する。ステップ１１８でインターナライズ化が完了したのちに、ステップ１２０において、バーチャルマシンはプログラムファイルを実行する。ステップ１２１において、このプログラムの実行が終了する。このプログラムはプレインターナライズ済イメージとして格納されていないため、プログラムファイルが選択されて実行されるたびに、ステップ１１８が実行される必要がある。ステップ１１４に戻って、ユーザー又は他の供給源が、プログラムファイルのプレインターナライズ化を実行することを選択した場合、ステップ１１６ではなくステップ１２４が実行される。ステップ１２４において、Ｊａｖａアプリケーションマネージャは、図３に関して上記した方法によってプレインターナライズ済イメージを生成するために、第２モード（プレインターナライズ化モード）であるバーチャルマシンを呼び出す。プレインターナライズ済イメージが作成されると、このイメージは装置の固定メモリに格納される。ステップ１０５においてこのプログラムファイルを実行するように再度選択されても、ステップ１０７を実行するように処理が進むため、ステップ１２４を再度実行する必要はない。
【００３０】
図６に、別の実施形態である処理１３０を示す。処理１３０はステップ１３１から開始する。ステップ１３３において、ユーザー又は他の供給源は、利用可能なプログラムファイルから少なくとも１つのプログラムファイルを選択する。一実施形態においては、この選択を行なう「他の供給源」は、装置の外部にあるプログラムファイルサーバー又はその他の装置外の供給源であり得る。ステップ１３５において、プレインターナライズ済イメージが装置に既に作成されているかどうかが判定される。「装置に」という判定基準を追加したのは、本実施形態においては、装置の外部からプレインターナライズ済みのイメージを受け取る場合を想定しており、プレインターナライザがこの例を処理する方法を示すためである。判定結果が「ＹＥＳ」の場合、ステップ１３７，１４０，１４１，１４３，１４４は、図５のステップ１０７，１０９，１００，１１２，１１３と全く同じになる。ステップ１３７は、実行と削除のいずれを行なうかを指示するユーザー要求に応答して決定され得る。判定結果が「ＮＯ」の場合、ステップ１４６において、この装置で使用可能な、プレインターナライズ済イメージが他の場所で既に作成されているかどうかが判定さ
れる。この判定結果が「ＮＯ」の場合、ステップ１４８，１５０，１５１，１５２，１５３，１５６，１５８は図５のステップ１１４，１１６，１１８，１２０，１２１，１２４，１２５と全く同じになる。ステップ１４８は、実行又はプレインターナライズ化処理のいずれかを指示するユーザー要求に応答して決定され得る。この判定の結果が「ＹＥＳ」の場合、ステップ１５７が実行される。ステップ１５７において、バーチャルマシンがＪａｖａアプリケーションマネージャによって呼び出される。このとき、イメージをプレインターナライズするのではなく、装置の固定メモリ内の特定の場所にプレインターナライズ済イメージをコピー及びパッチする。ステップ１５７が完了すると、最終ステップ１６０に到達する。
【００３１】
図７に、装置の外部に存在する供給源から受け取ったイメージの処理を示す。本実施形態は、アプリケーションの実行時間を短縮することを求めるニーズに、プレインストール時間を大幅に短縮することによって応えるものである。換言すれば、本発明は、サーバーとして動作する装置で実現され得る。このため、既存の装置と類似した装置外部のサーバー又は装置外部のクライアント（ピア−ツー−ピア）で、Ｊａｖａバーチャルマシン環境を実行することによる利点が得られる。装置の外にあるイメージと装置のバーチャルマシンによって作成されたイメージとは、イメージが装置のメモリ資源に保存されているかどうかという点で異なる。
【００３２】
システム１８０は一般に、第１クライアント装置１８２と、第２クライアント装置又はクライアント装置をシミュレートするサーバー１８１と、再利用可能な実行可能イメージの形では装置１８２に存在していないアプリケーション群（ａｐｐｌｉｃａｔｉｏｎ  ｓｕｉｔｅ）１８４とを有する。クライアント装置１８２は一般に、アプリケーションマネージャ２０４、動的メモリ２０６、固定メモリ２２０、及びバーチャルマシン２１０を有する。一実施形態においては、装置１８１，１８２は、図３の装置４５と同じ構造を有する。別の実施形態を使用するか、或いは構造を変更しても、本明細書中に記載の機能を達成することができる。追加ファイルのプレインターナライズ済イメージを格納するために、装置１８２の外部にある固定メモリの光学的記憶装置２００を使用し得る。
【００３３】
動作に関して記載すると、装置１８１，１８２の外部に存在する供給源によって追加ファイル１８４が作成される。追加ファイル１８４は、装置又はクライアント装置をシミュレートするサーバー１８１のアプリケーションマネージャ１８５によって、同装置又はサーバー１８１に転送される。追加ファイルは、第２モードで動作しているバーチャルマシン１８８によって、固定メモリ１９０にプレインターナライズされる。バーチャルマシン１８８は動的メモリ１８７を利用して、このモードを達成する。格納されたイメージは、装置１８１によって実行されることもあれば実行されないこともある。装置１８１がクライアント装置である場合は、装置１８１によってこのアプリケーションイメージが実行される可能性が高い。装置１８１がクライアント装置をシミュレートするサーバーである場合、装置１８１は、プレインターナライズ済イメージの生成にのみ使用される（すなわち、装置１８１はアプリケーションサーバーとして動作する）。装置１８１がクライアント装置をシミュレートするサーバーとして使用される場合、イメージは随意的に固定メモリ２００に格納される。この固定メモリ２００をどこに設けるかは、システムの設計的事項である。第１クライアント装置１８２のアプリケーションマネージャ２０４が、固定メモリ２００又はアプリケーションマネージャ１８５からプレインターナライズ済イメージを受け取ったときに、実行が必要なプレインターナライズ化ステップは１ステップしかない。この最後のステップは、図６に示すプレインターナライズ済イメージを固定メモリ２２０にコピー及びパッチするステップ１５７である。このため、システム１８０によって、装置１８２が完全なプレインターナライズ化処理を実行することが回避される。低機能のクライアント装置は、スタンドアロン型装置と比較して処理能力が非常に低くかつ動的メモリが極めて少なく、本発明によって、低機能のクライアント装置が非常駐アプリケーシ
ョンを利用することが可能となる。さらに、従来の装置では、インターナライズされていないプログラムを実行するたびに全プレインターナライズ化処理を実行する必要があるが、本明細書中に記載の低機能のクライアント構成は高速に動作する。
【００３４】
図８に、本発明を実現した装置３００を示す。装置３００は、プロセッサ３０２及びメモリ３０４を有する。メモリ３０４は、さまざまな構造を有するように構成し得るが、図８には上記の図面に関して記載したものと同様の構造を有するもののみを示す。Ｉ／Ｏは、プロセッサ３０２と双方向的に結合されているほか、双方向的に結合されたメモリ３０４とも双方向的に結合されている。図面の例においては、メモリ３０４は、Ｊａｖａアプリケーションマネージャ３１０、バーチャルマシン３１２、動的メモリ３１４、及び固定メモリ３１６を有する。
【００３５】
動作に関して記載すると、プロセッサは所定の命令を実行する。メモリ３０４の第１部分は、命令及びデータをプロセッサに提供するように、プロセッサ３０２に結合されている。一実施形態においては、メモリ３０４の第１部分は、バーチャルマシン３１２である。メモリ３０４は、少なくとも１つの命令の第１、第２及び第３の集合を少なくとも有する。各命令の集合が１つの命令を含むか、或いは複数の命令を含むかの議論は、設計的事項及びプログラミング上の選択事項であり、必要とされるハードウェア機能とソフトウェア機能との比重によって決まる。下記においては、ハードウェアの性能をできるだけ抑えるために、複数の命令を含む命令機能（ｉｎｓｔｒｕｃｔｉｏｎ  ｆｕｎｃｔｉｏｎａｌｉｔｙ）を使用するものと仮定して説明する。しかし、本明細書に記載する命令機能は、必要であれば１つの命令を含むこともあり得る。第１の複数の命令は、第１プログラムファイルを受け取るための命令である。第２の複数の命令は、第１プログラムファイルをバーチャルマシンの本来のメモリ構造にプレインターナライズして、第１プログラムファイルの再利用可能な実行可能イメージを作成するための命令である。第３の複数の命令は、プレインターナライズ済プログラムファイルイメージ（再利用可能な実行可能イメージ）を、メモリ３０４内の第２メモリ部分に格納するための命令である。再利用可能な実行可能イメージは、実行前にインターナライズ化を実行しなくても、バーチャルマシン３１２が実行することができる。
【００３６】
図８のメモリ３０４は、再利用可能な実行可能イメージを受け取り、メモリに格納するための第４の複数の命令を有することがある。再利用可能な実行可能イメージが記憶されると、メモリポインタが内蔵の機能（ｂｕｉｌｔ−ｉｎ）によって更新されて、イメージをこの装置のメモリ内で移動させることができるようになる。このため、再利用可能な実行可能イメージを格納しているメモリは、動的メモリ調整（ｄｙｎａｍｉｃ  ｍｅｍｏｒｙ  ｒｅｃｏｎｃｉｌｉａｔｉｏｎ）に対応しており、この結果、メモリが効率的に使用され、利用可能なアドレスを効率的に使用できるようにメモリが調整される。この処理によって、オブジェクトを装置に移動させて、別の再利用可能な実行可能イメージを作成できるようになる。再利用可能な実行可能イメージが装置に格納されたのち、現在のメモリアドレスの状態を示すように、再利用可能な実行可能イメージのメモリアドレスが更新される。また、メモリ３０４は、ユーザー要求を処理する際に実行される別の複数の命令を有することがあり、ユーザー要求に応答して、バーチャルマシンがプレインターナライズ化モードで実行する。装置の内部又は外部に存在する第２メモリから、プレインターナライズ済プログラムファイルイメージを転送するための別の複数の命令が、メモリ３０４に存在することもある。さらに別の複数の命令がメモリ３０４に存在し、プレインターナライズ済プログラムファイルをメモリから移動するか、或いは完全に削除することによって、ユーザー要求の処理を実行することもある。
【００３７】
プログラムファイルをバーチャルマシン３１２の本来のメモリ構造にプレインターナライズすることによって、再利用可能な実行可能イメージが以前に作成されている。本例は
、実行前に再利用可能な実行可能イメージをインターナライズすることなく、バーチャルマシン３１２は、再利用可能な実行可能イメージを実行することができる。メモリ３０４は、随意的に、再利用可能な実行可能イメージをメモリ内の別の場所に移動するための別の複数の命令を格納していてもよい。さらに、メモリ３０４は、再利用可能な実行可能イメージ（プレインターナライズ済プログラムファイルイメージ）の内部のメモリアドレスを更新するための別の命令の集合を格納していてもよい。また、メモリ３０４は、図５，６に記載した処理を実行するための命令を格納していてもよい。
【００３８】
本発明は、ポータブル無線装置において使用するうえで特に有利である。本発明を実現可能なポータブル装置の例に、電話機、インターネット機器（ポータブル型、ポータブル型）、個人情報端末（ＰＤＡ）、携帯無線呼出し器、カメラ、カムコーダ（カメラ／レコーダ一体型）、ポータブルテレビ、及び様々な通信機能を組み合わせた装置などの幅広い機器が含まれる。
【００３９】
上記の明細書においては、本発明を、Ｊａｖａプログラミング言語及び特定の実施形態に関して説明した。しかし、通常の知識を有する当業者は、添付の特許請求の範囲に記載されている本発明の範囲を逸脱することなく、本発明の様々な修正及び変更が可能であることを理解する。例えば、本発明は、動的ロードに対応した他の高級プログラミング言語にも適用することができる。また、本明細書中に記載のソフトウェア（例えば、図３のバーチャルマシン５０のソフトウェアインプリメンテーション）は、少なくとも１つのコンピュータのハードディスク、フロッピディスク、３．５インチディスク、コンピュータストレージ用テープ、磁気ドラム、スタティックランダムアクセスメモリ（ＳＲＡＭ）セル、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）セル、電気消去可能（ＥＥＰＲＯＭ、ＥＰＲＯＭ、フラッシュ）セル、不揮発性セル、強誘電性又は強磁性メモリ、コンパクトディスク（ＣＤ）、レーザーディスク、オプティカルディスクなどのコンピュータ可読媒体に実現され得る。したがって、本明細書並びに図面は、限定的ではなく例示的なものと理解され、この種の変更は全て本発明の範囲に含まれることが意図される。
【００４０】
利点、その他の長所並びに問題に対する解決策を、特定の実施形態に関して上に記載した。しかし、想到される、或いはより明白となる利点、長所、問題に対する解決策及び利点、並びにいかなる利点、長所又は問題に対する解決策を生じ得る任意の要素は、特許請求の範囲の少なくとも一部にとって、重要、必須又は不可欠な特徴或いは要素であると解釈されない。本明細書に使用されているように、「からなる」、「を含む」との用語、或いはこれらのいかなる変形例は、非排他的な含有関係を意味することを意図する。このため、列記した要素を構成するプロセス、方法、物品又は装置は、これらの要素を含むだけではなく、明記されていない他の要素や、この種のプロセス、方法、物品又は装置に固有の他の要素をも含み得る。
【図面の簡単な説明】
【００４１】
【図１】装置メモリの固定記憶にプログラムファイルを格納する公知の処理方法を示すブロック図。
【図２】図１と同様に、装置メモリにアプリケーション固有のプログラムファイルを追加するための公知の方法を示すブロック図。
【図３】本発明によって、プログラムファイルを受け取り、プログラムファイルの実行可能イメージを作成するためのポータブル装置を示すブロック図。
【図４】図３のポータブル装置のプログラムファイルのメモリ構造を示すブロック図。
【図５】本発明によって、プレインターナライズ済ファイルを作成及び処理するための処理を示すフローチャート。
【図６】本発明によって、外部クライアントでのプレインターナライズ済ファイルの作成及び処理のため処理を示すフローチャート。
【図７】図６のフローチャートを実行するためのクライアント／外部クライアントシステムを示すブロック図。
【図８】本発明による装置の一実施形態を示すブロック図。
【図１】
2005509194.tif 000003
【図２】
2005509194.tif 000004
【図３】
2005509194.tif 000005
【図４】
2005509194.tif 000006
【図５】
2005509194.tif 000007
【図６】
2005509194.tif 000008
【図７】
2005509194.tif 000009
【図８】
2005509194.tif 000010
【国際調査報告】
2005509194.tif 000011
2005509194.tif 000012
2005509194.tif 000013