(57)【特許請求の範囲】
【請求項１】
中央処理ユニット（ＣＰＵ）、ストレージ並びに前記中央処理ユニット及び前記ストレージを接続するバスシステムを備えているハードウエアシステムと、
前記ハードウエアシステム内に実装され、アプリケーション固有の命令を仮想マシン固有のバイトコードへ解釈すると共に前記仮想マシン固有のバイトコードを実行するための仮想マシンを提供するように構成される仮想マシン命令セットと、
ネイティブメソッドに対する要求を含むアプリケーション固有の命令のセットであって前記仮想マシン固有のバイトコードへ解釈されるべきアプリケーション固有の命令のセットを含むアプリケーションファイルであって、前記アプリケーションファイルを前記仮想マシン内で実行するに際して前記要求をサービスするために用いられる埋め込まれたネイティブコードセグメントを更に含むアプリケーションファイルとを備え、
前記仮想マシンは、前記ネイティブコードセグメントが前記要求されたネイティブメソッドに対応する場合に、前記要求の次のサービスを提供するために、前記ネイティブコードセグメントを、前記仮想マシンによってアクセス可能な前記ストレージにコピーするように構成されており、
前記アプリケーションファイルに含まれる前記埋め込まれたネイティブコードセグメントは、実行時に前記仮想マシンには見えない、電子デバイス。
【請求項２】
前記アプリケーションファイルはプラットフォーム非依存のデータ及び命令の複数のセクションと前記埋め込まれたネイティブコードセグメントを含む少なくとも１つの専用のセクションとを備えている請求項１の電子デバイス。
【請求項３】
前記仮想マシンはプラットフォーム非依存のデータ及び命令の前記複数のセクションの１つ以上によって参照されない場合に前記専用のセクションを無視するように更に構成される請求項２の電子デバイス。
【請求項４】
前記仮想マシンは前記アプリケーションファイルの前記アプリケーション固有の命令に対応する前記仮想マシン固有のバイトコードを供給するように構成されるクラスローダを備えている請求項３の電子デバイス。
【請求項５】
前記クラスローダはプラットフォーム非依存のデータ及び命令の前記複数のセクション内のネイティブメソッドへの参照を識別し且つ前記アプリケーションファイルの前記少なくとも１つの専用のセクション内で前記ネイティブメソッドをサービスするために必要なライブラリを検索するように更に構成される請求項４の電子デバイス。
【請求項６】
前記クラスローダは前記ハードウエアシステムに適合する場合に前記ライブラリを記憶し且つ前記ネイティブメソッドをサービスするために前記記憶されたライブラリを用いるように更に構成される請求項５の電子デバイス。
【請求項７】
前記クラスローダは前記少なくとも１つの専用のセクション内の前記ネイティブコードセグメントが前記ライブラリを備えていない場合に前記ストレージ内の別のライブラリを検索するように更に構成される請求項６の電子デバイス。
【請求項８】
前記クラスローダは第２のアプリケーションファイル内に備えられる第２のネイティブメソッドをサービスするために前記ライブラリを参照するように更に構成される請求項６の電子デバイス。
【請求項９】
前記アプリケーションファイル及び前記第２のアプリケーションファイルは共通のクラスファイルのオブジェクトである請求項８の電子デバイス。
【請求項１０】
前記仮想マシンはＪＡＶＡ（登録商標）仮想マシンである請求項１の電子デバイス。
【請求項１１】
少なくとも中央処理ユニットを備えたハードウエアシステム内に実装される仮想マシンにおいて命令を実行する方法であって、
前記仮想マシンによって実行可能な仮想マシン固有のバイトコードへと解釈可能なプラットフォーム非依存の命令を含み、更に前記ハードウエアシステムにおけるネイティブメソッドの実行を可能にするように構成される埋め込まれたネイティブコードを含むアプリケーションファイルを提供することであって、前記アプリケーションファイルに含まれる前記埋め込まれたネイティブコードセグメントは、実行時に前記仮想マシンには見えないことと、
前記プラットフォーム非依存の命令においてネイティブメソッドに対する要求を検索することと、
前記要求の検出に応じて、前記要求の次のサービスを提供するために、前記ネイティブコードセグメントを、前記仮想マシンによってアクセス可能な前記ストレージにコピーすることと、
前記埋め込まれたネイティブコードが前記ハードウエアシステムに対する前記ネイティブメソッドの実装を備えている場合に前記埋め込まれたネイティブコードに基いて前記要求をサービスすることとを備えた方法。
【請求項１２】
前記埋め込まれたネイティブコードが前記ネイティブメソッドの前記実装を欠いている場合に外部ネイティブコードライブラリを検索することによって前記要求をサービスすることを更に備えた請求項１１の方法。
【請求項１３】
前記要求をサービスすることは、前記ネイティブメソッドに対応する前記埋め込まれたネイティブコードの少なくとも一部分を前記ハードウエアシステムのストレージ内に記憶することと、前記アプリケーションファイルに対する任意の更なるライブラリ発見動作を実行するための外部ネイティブコードライブラリとして前記埋め込まれたネイティブコードの前記記憶された一部分を用いることとを備えている請求項１１の方法。
【請求項１４】
前記アプリケーションファイルを提供することは、前記プラットフォーム非依存の命令を複数の標準ファイルセクション内へ組み込むことと、前記ネイティブコードを少なくとも１つの追加的ファイルセクション内へ組み込むことと、前記プラットフォーム非依存の命令を解釈する場合に無視されるものとして前記少なくとも１つの追加的ファイルセクションを標識付けることとを備えている請求項１１の方法。
【請求項１５】
前記アプリケーションファイルを前記仮想マシン内へロードすることと、前記アプリケーションファイルを検証することと、前記仮想マシンによる実行のために前記アプリケーションファイルを準備することとを更に備えた請求項１４の方法であって、前記少なくとも１つの追加的セクションは前記検証することの間に無視される方法。
【請求項１６】
前記アプリケーションファイルはクラスファイルの第１のバージョンであり、前記方法は前記クラスファイルの第２のバージョンをロードすることを更に備えており、前記第２のバージョンは前記ネイティブメソッドとは異なる第２のネイティブメソッドに対する第２の要求を含んでいる請求項１１の方法。
【請求項１７】
前記アプリケーションファイルはＪＡＶＡ（登録商標）クラスファイルである請求項１１の方法。
【請求項１８】
コンピュータ可読情報に基くアプリケーションファイルを備えた記憶媒体であって、前記アプリケーションファイルは、
ＣＰＵを備えたハードウエアシステムにインストールされる仮想マシンによって実行可能なバイトコードへと解釈可能なプラットフォーム非依存の命令のセットであって、ハードウエアシステム固有の命令セットに基いて実行されるべきネイティブメソッドに対する要求を備えているプラットフォーム非依存の命令のセットと、
前記ネイティブメソッドの少なくとも１つの実装を含むネイティブコードライブラリとを備え、
前記ネイティブコードライブラリは、前記ネイティブコードセグメントが前記要求されたネイティブメソッドに対応する場合に、前記要求をサービスするために、前記仮想マシンによってアクセス可能な前記ハードウエアシステムのストレージにコピーされるように構成されており、
前記アプリケーションファイルに含まれる前記ネイティブコードライブラリは、実行時に前記仮想マシンには見えない、記憶媒体。
【請求項１９】
前記アプリケーションファイルはＪＡＶＡ（登録商標）クラスファイルである請求項１８の記憶媒体。
【請求項２０】
前記ネイティブコードライブラリは前記クラスファイルを検証するに際して無視されるように標識付けられる追加的なセクション内に含まれる請求項１９の記憶媒体。
【請求項２１】
前記記憶媒体は前記ハードウエアシステムに接続可能な遠隔コンピュータシステムの一部分である請求項１８の記憶媒体。
【請求項２２】
コンピュータ可読情報に基くデータファイルを備えた記憶媒体であって、前記データファイルは、
ＣＰＵを備えたハードウエアシステムにインストールされる仮想マシンによって実行可能なバイトコードへと解釈可能なプラットフォーム非依存の命令のセットを備えており、プラットフォーム非依存の命令の前記セットは、
前記仮想マシンによって要求されるアプリケーションファイルを見つけることと、
前記アプリケーションファイルを前記仮想マシン内へロードすることと、
前記アプリケーションファイル内に設けられるプラットフォーム非依存の命令セットに含まれるネイティブメソッドに対する要求を検索することと、
前記ネイティブメソッドに対する前記要求を見つけるに際して前記アプリケーション内に埋め込まれたネイティブコードライブラリを検索することであって、前記アプリケーションファイルに埋め込まれた前記ネイティブコードライブラリは、実行時に前記仮想マシンには見えないことと、
前記埋め込まれたネイティブコードライブラリを、前記仮想マシンによってアクセス可能な前記ハードウエアシステムのストレージにコピーすることとを、前記仮想マシンに実行させる記憶媒体。
【請求項２３】
前記プラットフォーム非依存の命令は、前記ロードされたアプリケーションファイルによって要求される更なるライブラリ発見動作に対して前記埋め込まれたネイティブコードライブラリの少なくとも一部分を用いることを前記仮想マシンに更にさせる請求項２２の記憶媒体。
【請求項２４】
前記データファイルはＪＡＶＡ（登録商標）クラスファイルである請求項２２の記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は概して少なくとも中央処理ユニットを備えた電子デバイスをプラットフォーム非依存のソフトウエアに基き動作させるための技術に関し、ここではプラットフォームは標準ハードウエア環境をシミュレートする仮想マシンによって提供される。
【背景技術】
【０００２】
半導体製造の分野における継続的な進歩は、数百万の個々のトランジスタ要素を含むであろう高速且つ強力な集積回路の製造をもたらしている。その結果、洗練された中央処理ユニット（ＣＰＵ）を設計しそして製造するために、高度に複雑なデジタル回路が開発されてきており、増大されたパッキング密度は、低減された電力消費及び高い内部記憶容量との組み合わせにおいて、洗練されたＣＰＵを広範な種類の電子デバイスへ一体化することにおける多くの開発を活発化させてきていた。それ故、コンピュータシステムのみが動作速度及び電力消費に関して優れた性能を持ち得るだけでなく、ハンドヘルドコンピュータ、携帯電話、等の形態にある携帯型デバイスのような他の種々の電子デバイスもまた、優れたコンピュータ資源(computational resources)を提供し得る。このため、コンピュータシステム及び他の電子デバイスの著しい増加に伴い、洗練されたアプリケーションに対する対応する要求が生じてきており、そして現に存在している。
【０００３】
典型的には、ＣＰＵは専用のバイトコード、即ちマシンコードに基いて動作することができ、マシンコードは、マシンコード命令のシーケンスに従ってレジスタ、Ｉ／Ｏ（入力／出力）ターミナル等のようなハードウエアコンポーネントの状態の対応する変化を結果としてもたらし得る。従って、ユーザアプリケーションと、ＣＰＵを含むハードウエアシステムとの間での最も深いレベルの通信では、バイトコード命令の対応するシーケンスがＣＰＵによって実行される必要があり、それによりレジスタコンテンツ等の形態にある望ましい結果をもたらしている。
【０００４】
しかし、マシンコード命令の対応する多かれ少なかれ複雑なシーケンスは、極めて時間を費やすものであろうし、また特定のアプリケーションによって解決されるべき対応する課題又は目的をマシンコード命令のシーケンスへ「翻訳すること(translating)」における特定の技能をも必要とするであろう。また、特定のアプリケーションの要求を満たすのに適したマシンコードプログラムの開発は、用いられるハードウエアシステム、即ち特定のＣＰＵと他のコンポーネント、例えば外部作動メモリ、バス構造、等との組み合わせに強く依存しており、その結果、特定のハードウエア構成に対して提供されるマシンコードプログラムは、異なるハードウエアシステムでは動作しないかもしれない。これらの理由により、プログラム開発者と、対応するアプリケーションが実行される必要のあるハードウエアシステムとの間でのやりとりを容易にするように、プログラミング言語が開発されてきた。例えば、基本的なマシンバイトコードと比較して高いレベルの抽象化を提供しそして設定するように、アセンブラ言語の導入が著しい進歩を見せた。抽象化のレベルを高めるための更なる試みにおいては、特定のアプリケーションに対応するソースコードを生成するための適切なプラットフォームを提供するために、より高度なプログラミング言語が開発されてきており、ソースコードは、コンピュータシステムのマイクロプロセッサによって理解可能な従って実行可能な対応するマシンバイトコードへと翻訳され得る。高レベルのプログラミング言語においては、特定のキーワードが言語固有の「文法(grammar)」に従って用いられる必要があり、それにより、必要な結果を得るようにプログラムステップのシーケンスを規定することを可能にしている。
【０００５】
高いレベルのプログラミング言語を開発する上での１つの取り組みによると、所謂オブジェクト指向プログラミングがしばしば用いられる技術になってきており、その技術においては、日常生活の状況(everyday life situations)をより便利にコンピュータプログラムへとマッピングすることが試みられる。即ち、オブジェクト指向の取り組みによると、特定のオブジェクト又はクラスが、所定の様式にある特定のイベント(certain events in a predefined manner)に応答し得る基本的な特徴を有するように規定されるであろう。このようにして、極めて複雑なアプリケーションを作成することができ、この場合、それぞれのオブジェクトは異なるアプリケーションにおいて極めて便利な様式で繰り返して用いられ得るので、同じソフトウエアの開発の繰り返しを回避することができる。
【０００６】
高いレベルのプログラミング言語は多数のアプリケーションを開発するための便利なプラットフォームを提供するであろうが、にもかかわらず、多種多様な利用可能なハードウエアプラットフォーム、即ち種々のマイクロプロセッサの種類、コンピュータシステムアーキテクチャ等は、目標とするアーキテクチャに対するアプリケーションの特定の適合を必要とするであろう。この状況に鑑み、プラットフォーム非依存のアプリケーションを開発する可能性を提供することを考慮した言語が開発されてきており、ここでは、ソフトウエア開発者は、対応するコンピュータシステムのハードウエア固有の特性を考慮することなしに、アプリケーションそれ自体に集中することができる。多数のアプリケーションの展開を可能にするであろうコンピュータ資源を提供する種々のコンピュータベースの電子デバイスが現在は利用可能であるという事実によって、プラットフォーム非依存のアプリケーションに対する要求が更に加速されているようである。携帯電話、ハンドヘルドコンピュータ等のような電子デバイスはそれらのハードウエア構成において互いに異なるので、プラットフォーム非依存のアプリケーションは、従って、特定のハードウエアアーキテクチャを問わず任意の種類の電子デバイスにおいて最終的には使用され得るアプリケーションの開発を可能にするであろう。
【０００７】
また、堅実に増加しつつあるコンピュータシステムは、ワイヤレス及びケーブルベースのネットワークチャネルに基いてインターネットのような任意の適切なネットワークによって接続可能であろうし、その結果、アプリケーションはネットワークを介してユーザへと伝達されることがあり、この場合、特定の目標とするシステムのハードウエア構成は前もっては知られていないであろう。
【０００８】
プラットフォーム非依存のアプリケーションを提供するという概念は、実際的には、プラットフォーム非依存のアプリケーションによって提供される特定の仮想バイトコード上で動作し得る「仮想」コンピュータシステム、即ち仮想マシンの導入に基いている。従って、仮想マシンは、実際上はハードウエア構成をシミュレートし、またこれに伴いプラットフォーム非依存のアプリケーションと特定のハードウエア構成との間でのインタフェースとして作用する。このように、標準的な形態が実行される「プラットフォーム非依存の」アプリケーションを提供する一方で、関連するオペレーティングシステムとの組み合わせにおける専用のハードウエア構成とインタフェースする複数の仮想マシンが利用可能であろう。その結果、適切な仮想マシンがコンピュータシステム又は任意の他の電子デバイスにインストールされている場合、アプリケーションが開発されそしてハードウエア構成には依存しない仮想マシンによって実行され得る。例えば、サンマイクロシステムズ(Sun Microsystems)のプログラミング言語ＪＡＶＡ（登録商標）は、特定のコンピュータプラットフォームの異なるオペレーティングシステムに適合する必要なしにアプリケーションが効率的にプログラムされ得るオブジェクト指向言語を代表する。ユーザがＪＡＶＡ（登録商標）プログラムを起動すると、ＪＡＶＡ（登録商標）仮想マシンが自動的に起動されて対応するクラスファイルをロードし、クラスファイルは次いで解釈されて仮想マシンの「マシンコード」を生成することができる。考慮されているアプリケーションを形成するために更なるクラスが必要であろう場合には、これらのクラスは、ランタイムの間にロードされるであろうし、また必要に応じて解釈されるであろう。例えば、多くのクラスが仮想マシンのために利用可能であり、またこれらのクラスは対応するライブラリ内に実装され得る。従って、仮想マシンの動作の間、実際のＣＰＵは、仮想マシンに応答するマシンコードを実行し、従って、例えばＩＲＱ（割り込み要求(interrupt request)）アドレス等の形態にあるプロセッサの状態を記憶するためのメモリを必要とする。このように、プロセッサ、マシンコード及び状態メモリが仮想マシンを画定する。一方、仮想マシンは、アプリケーションのコンパイルされたプログラムに対応するアプリケーションを実行し、従って、仮想マシンの任意の固有の情報が記憶され得る専用の状態メモリをも必要とする。例えば、仮想マシン内に同時に存在する複数のクラスの各バージョンのテーブルが記憶されるであろう。仮想マシン、その内部にロードされるプログラム、及びそれぞれの仮想固有状態メモリが、従って実際のアプリケーションを実現する。例えば、ＪＡＶＡ（登録商標）仮想マシン規格においては、任意の入力のフォーマットが指定され、即ちクラスファイルであり、またクラスファイルをどのように解釈するかも指定される。しかし、前述したように、解釈をどのように実装するかは明示的には指定されていない。それ故、独立して動作するプラットフォームシステムが、リナックスシステム、ウインドウズシステム、又は任意の他の種類のオペレーティングシステム上の何処でそれが実行されているかにかかわらず専用の仮想マシ��がこれらのプラットフォームのどれかのためにインストールされている限りは、ＪＡＶＡ（登録商標）アプリケーションにそれが関連するように設けられている。
【０００９】
ＪＡＶＡ（登録商標）アプリケーションのプラットフォーム非依存の所望の機能性は、次のようにして実現される。ＪＡＶＡ（登録商標）仮想マシンに対する入力又はクラスファイルは、所望のアプリケーションに関する情報を含んでいるであろう。クラスファイルは、定数プールエントリ(constant pool entries)、メソッド及びフィールド記述、コード及びデバッグ情報、等のような必要とされる情報を含む複数のセクションによって実現される特定の構造を有している。従って、対応するクラスファイルをロードし、そして解釈するに際しては、これらの標準セクション内に含まれる情報は、仮想マシンによって実行されるためにクラスファイルを検証すると共に準備するために用いられ得る。
【００１０】
基本的には、クラスは、属性及びメソッド(attributes and methods)を有するであろう複数の類似オブジェクトの表現として理解され得る。属性は特定の種類を有する定数又は変数として考えられ得る。メソッドは、バイトコードのテーブルによって表されるプロセスステップのシーケンスを代表し得る「機能」、即ち指定されたプログラムシーケンスを定義するために実行される必要のある仮想マシンのマシン命令を代表し得る「機能」として理解されてよい。仮想マシンのバイトコードは、前述したようなアセンブラ命令と同様のレベルの抽象化を代表し得る。従って、ローカル変数に対応する各メソッドは、必要なメモリ空間の最大量等に関する追加的な情報との組み合わせにおいて記憶される必要があるかもしれない。また、言語のオブジェクト指向の性質に起因して、クラスは他のクラスからのメソッド及び属性を受け継いでいることがあり、これらもまた、考慮されているクラスの標準セクション内に記憶される必要があるかもしれない。加えて、標準セクション内には、セキュリティ情報並びに例外処理及びデバッグのための情報が設けられている必要がある。更に、仮想マシンは、クラスファイル内に外部から記憶されたクラス情報をチャネルランタイム構造へと「変換すること(converting)」に関与するクラスローダ(class loader)を備えている。この目的のために、クラスローダは、例えばファイルの各部分がプログラムによってアクセス可能であること等を検証することを勘案して、考慮中のクラスの無矛盾性を検証するであろう。何らエラーを識別することなく検証が完了した場合には、クラスローダは、情報を仮想マシン内へロードし、そして仮想マシンのバイトコードエグゼキュタ(byte code executor)を起動する。仮想マシンエグゼキュタは、前述したようなバイトコードに基いてメソッドを実行することに関与する。それぞれのクラスのバージョンを生成するための命令に直面すると、バイトコード実行ユニットは、このクラスが既にロードされたか否かを検出する。その結果、対応するクラスファイルがランタイムの間に要求に応じて仮想マシン内へロードされるであろうし、この場合、対応するクラスファイルは、任意の適切なソース、例えば考慮中のローカル記憶プラットフォーム、遠隔コンピュータ、等によって供給され得る。
【００１１】
任意の特定のオペレーティングシステム及びハードウエア構成に対する仮想マシンの非依存性の特徴は、複数のアプリケーションにとって高度に有利であるが、にもかかわらず、プラットフォームの特定の特性を用いるようにプラットフォーム固有の「メソッド(method)」を組み込み、それによりそれぞれのアプリケーションの性能を高め、特定のアプリケーションを開発するための努力を時間に関して低減すること等が有用であろう。この場合、クラスファイルは「ネイティブメソッド(native method)」への参照を含むであろうし、ネイティブメソッドは、プログラムステップの一定のシーケンスをプラットフォーム内部資源に基いて高い効率で実行するのに適したプラットフォーム固有の一連の命令として理解されるべきである。対応するネイティブメソッドは、オペレーティングシステムウインドウズにおいて用いられるダイナミックリンクライブラリ（ＤＬＬ）又は例えばオペレーティングシステムリナックスにおいて用いられる所謂共有ライブラリのような適切なライブラリの形態で典型的には提供されるであろう。ネイティブメソッドに対する対応する要求を参照するに際して、要求をサービスするために必要とされる対応するライブラリは、要求されるライブラリが利用可能でない場合に対応するランタイムエラーを避けるために、要求されるライブラリがアプリケーションのランタイムでのアプリケーションライブラリパス内にあるように、ユーザによって適切に「パッケージ化(packaged)」されたものとなっているであろう。また、異なるバージョンのクラスが、異なるネイティブコードライブラリによって提供される必要があるであろう対応するネイティブメソッドを代表する異なるバージョンのネイティブコードを要求する場合、しばしば衝突(conflict)が生じることがある。この場合、各バージョンのクラスは、ネイティブメソッドに対するその要求を、対応するランタイムエラーを結果としてもたらすであろう同一のライブラリパスによって解決するかもしれない。その結果、ネイティブメソッドの組み込みを必要としているＪＡＶＡ（登録商標）アプリケーションの展開は、面倒であり且つエラーを起こしやすく、それによりこの取り組み、即ちプラットフォーム内部資源の使用をそれほど魅力的ではないものにしている。
【発明の概要】
【発明が解決しようとする課題】
【００１２】
上述した状況に鑑み、本開示は、ネイティブメソッドを他の点ではプラットフォーム非依存のアプリケーションにおいて効率的に用いることができる一方で、上で特定される１つ以上の問題の影響を回避し又は少なくとも低減し得るシステム及び方法に関連している。
【課題を解決するための手段】
【００１３】
概して、本開示は、仮想マシンによって実行される必要があるアプリケーションファイル内でネイティブコードが効率的に用いられ得る技術及びシステムに関連している。この目的のために、ＪＡＶＡ（登録商標）クラスファイルのようなアプリケーションファイル内へネイティブコードが埋め込まれ得るメカニズムが適用されてよく、アプリケーションファイルは、ネイティブメソッドに対する要求がアプリケーションファイル内で検出され得る場合にライブラリとして用いられてよい。このために、ここに開示される幾つかの実施形態では、埋め込まれたネイティブコードは、アプリケーションファイルの仮想マシン固有のバイトコードを実行する場合に仮想マシンによって無視されるように、クラスファイル内で適切に「隠されていて(hidden)」よい。一方、仮想マシンによって実行されるためにアプリケーションファイルを準備するに際しては、他の点では「隠されている」埋め込まれたネイティブコードは、場合によっては埋め込まれたネイティブコードを管理するための追加的な情報等との組み合わせにおいて、実際の仮想マシン固有の命令内で検出されるネイティブメソッドに対する任意の要求を浮上させる(surfacing)ための基礎として用いられてよい。例えば、埋め込まれたネイティブコードは、仮想マシンのために利用可能なストレージへコピーされてよく、そして任意の更なるライブラリ発見動作(library finding operations)又は考慮中のアプリケーションファイルのために用いられてよい。その結果、ネイティブメソッドに関する依存性を仮想マシンのファイルパス、例えばＪＡＶＡ（登録商標）仮想マシンのクラスパスに付加するためのそれぞれ高度な取り組みは、アプリケーションのライブラリパスを増大させて、アドレスネイティブコードライブラリもまた仮想マシンにとって利用可能になることを確実にする。また、その時点でパスであると知られているものとして考えられる何らかのディレクトリへ考慮中のネイティブコードライブラリをコピーすることのような他の代替案を回避することができるので、この限定的な指定された空間内でライブラリパスに沿ってライブラリが衝突する任意のリスクを回避することもできる。その結果、ユーザの利便性が高いメカニズムを提供することができ、そのメカニズムにおいては、特にネイティブコードライブラリの利用可能性に対処するプラットフォームの必要性によって一定の程度は制限されるであろうプラットフォーム非依存の程度は、ネイティブコードセグメント又はライブラリを場合によっては追加的な情報との組み合わせにおいてクラスファイル内に設けること、及びネイティブメソッドへの参照を識別すると共に対応する要求を解決するために埋め込まれたネイティブコードを用いる可能性を提供することによって、再確立され得る。
【００１４】
ここに開示される１つの例示的な電子デバイスは、中央処理ユニット（ＣＰＵ）、ストレージ並びに中央処理ユニット及びストレージを接続するバスシステムを備えたハードウエアシステムを備えている。また、ハードウエアシステム内に実装される仮想マシン命令セットが設けられ、仮想マシン命令セットは、アプリケーション固有の命令を仮想マシン固有のバイトコードへ解釈すると共に仮想マシン固有のバイトコードを実行するための仮想マシンを提供するように構成される。更に、電子デバイスは、仮想マシン固有のバイトコードへ解釈されるべきアプリケーション固有の命令のセットを含むアプリケーションファイルを備えており、アプリケーション固有の命令のセットは、ネイティブメソッドに対する要求を含む。また、アプリケーションファイルは、アプリケーションファイルを仮想マシン内で実行するに際して要求をサービスするために用いられる埋め込まれたネイティブコードセグメントを更に含む。
【００１５】
ここに開示される１つの例示的な方法は、少なくとも中央処理ユニットを備えたハードウエアシステム内に実装される仮想マシンにおいて命令を実行することに関連している。方法は、仮想マシンによって実行可能な仮想マシン固有のバイトコードへと解釈可能なプラットフォーム非依存の命令を含むアプリケーションファイルを提供することを備えており、アプリケーションファイルは、更にハードウエアシステムにおけるネイティブメソッドの実行を可能にするように構成される埋め込まれたネイティブコードを含む。また、方法は、プラットフォーム非依存の命令においてネイティブメソッドに対する要求を検索することと、埋め込まれたネイティブコードがハードウエアシステムに対するネイティブメソッドの実装を備えている場合に埋め込まれたネイティブコードに基いて要求を浮上させる（サービスする）こととを備えている。
【００１６】
ここに開示される１つの例示的な記憶媒体は、コンピュータ可読情報に基くアプリケーションファイルを備えている。アプリケーションファイルは、ＣＰＵを備えたハードウエアシステムにインストールされる仮想マシンによって実行可能なバイトコードへと解釈可能なプラットフォーム非依存の命令のセットを備えており、ここでは、プラットフォーム非依存の命令のセットは、ハードウエアシステム固有の命令セットに基いて実行されるべきネイティブメソッドに対する要求を備えている。また、記憶媒体のアプリケーションファイルは、ネイティブメソッドの少なくとも１つの実装を含むネイティブコードライブラリを備えている。
【００１７】
ここに開示される１つの更なる例示的な記憶媒体は、コンピュータ可読情報に基くデータファイルを備えている。データファイルは、ＣＰＵを備えたハードウエアシステムにインストールされる仮想マシンによって実行可能なバイトコードへと解釈可能なプラットフォーム非依存の命令のセットを備えており、ここでは、プラットフォーム非依存の命令のセットは、仮想マシンによって要求されるアプリケーションファイルを見つけることと、アプリケーションファイルを仮想マシン内へロードすることと、アプリケーションファイル内に設けられるプラットフォーム非依存の命令セットに含まれるネイティブメソッドに対する要求を検索することと、ネイティブメソッドに対する要求を見つけるに際してアプリケーション内に埋め込まれたネイティブコードライブラリを検索することとを、仮想マシンに実行させる。
【図面の簡単な説明】
【００１８】
本開示の更なる実施形態は、添付の特許請求の範囲において画定されており、また添付の図面を参照したときに以下の詳細な説明と共に更に明らかになろう。
【００１９】
【図１ａ】図１ａは例示的な実施形態に従いアプリケーションファイル内に埋め込まれるネイティブコードに基いてネイティブメソッドに対する要求に対処するためのメカニズムを含む仮想マシンがインストールされる電子デバイス、コンピュータシステム等を代表し得るハードウエア構成を模式的に示す図である。
【図１ｂ】図１ｂは例示的な実施形態に従い埋め込まれたネイティブコードセグメントを含むファイル構造の例を模式的に示す図である。
【図１ｃ】図１ｃは例えばＪＡＶＡ（登録商標）環境での修正されたクラスローダの形態にある埋め込まれたネイティブコードセグメントを取り扱うために適切に構成される仮想マシンの一部分を模式的に示す図である。
【図１ｄ】図１ｄは更なる例示的な実施形態に従い例えば図１ｃの修正されたクラスローダに基いてネイティブメソッドに対する要求を取り扱うために仮想マシン内に実装されるメカニズムを模式的に示す図である。
【発明を実施するための形態】
【００２０】
以下の詳細な説明と共に図面に示される実施形態を参照して本開示が説明されるが、以下の詳細な説明及び図面は本開示を特定の開示されている実施形態に限定することを意図するものではなく、むしろ説明されている実施形態は単にここに開示される主題の種々の側面を例証しているにすぎず、主題の範囲は添付の特許請求の範囲によって画定されていることが理解されるべきである。
【００２１】
概して、本開示は、ネイティブコード又はライブラリをアプリケーションファイル内に埋め込むことによって、他の点ではプラットフォーム非依存の仮想マシン内で実行されるべきネイティブメソッドに対する要求を取り扱う課題に対処し、ネイティブコード又はライブラリは、ランタイムの間、即ちアプリケーションファイルを解釈した後に仮想マシンに対して「見えて(visible)」いなくてよいが、仮想マシン内で実行されるためにアプリケーションファイルを準備する間に用いられてよい。この目的のために、アプリケーションファイルのプラットフォーム非依存の命令が、例えばアプリケーションファイルの無矛盾性及び他の特徴を検証するに際して、ネイティブメソッドへの任意の参照について検索されてよく、そして対応する参照が発見される場合には、埋め込まれたネイティブコードを探すために検索されてよく、埋め込まれたネイティブコードは、考慮されているアプリケーションファイルの実際のランタイムに先立ち仮想マシンにとって可読であってよい。埋め込まれたネイティブコードは、ネイティブメソッドに対する要求に関する適切な応答を可能にするように、適切な追加的な「ハウスキーピング(housekeeping)」情報に関連付けられていてよい。例えば、埋め込まれたコード及び／又は追加的な情報は、要求されたネイティブメソッドの適切な実装について検索されてよく、そして適切な実装が検出される場合には、アプリケーションファイルのランタイムの間に仮想マシンにとってアクセス可能であるように、適切な記憶場所にコピーされてよい。従って、任意の更なるライブラリ結合動作(library bind operation)に対して、ネイティブコードセグメントの対応するコピーを用いることができ、それにより、アプリケーションファイルのランタイムの間にネイティブコードライブラリの利用可能性を確実にすることにおけるユーザ開始のプラットフォーム固有の動作を回避することができる。このようにして、プラットフォーム固有の特徴をプラットフォーム非依存のアプリケーションに組み込むことができ、それにより、考慮中のハードウエアシステムの具体的な知識を必要とせずに、プラットフォーム非依存のアプリケーションの資源及びこれに伴い性能を拡張することができる。このように、プラットフォーム非依存の特徴は、ネイティブメソッドの組み込みを簡素化することによって一定の程度まで拡張することができる。例えばＪＡＶＡ（登録商標）仮想マシンのためのクラスファイル構造は、標準クラスセクションがセキュリティ、無矛盾性等を考慮した要求を満たす限りにおいて、ランタイムに際して仮想マシンによって無視されてよい追加的なセクションの組み込みを可能にし得るという理由で、ＪＡＶＡ（登録商標）仮想マシンではここに開示されるメカニズムを実装するために効率的なツールを利用可能であろうから、ここに開示されるシステム及びメカニズムは、ＪＡＶＡ（登録商標）仮想マシンとの組み合わせにおいて高度に有利であろうことが理解されるべきでる。加えて、ＪＡＶＡ（登録商標）においては、クラスファイルを「準備すること(preparing)」に関与する仮想マシンの一部又は仮想マシンによる実行は、クラスファイル内に提供される追加的な情報にアクセスすることを可能にす��ように、容易に修正することができ、追加的な情報は次いで、考慮中のクラスファイルのランタイムの間にネイティブコード又はライブラリを提供するために適切に用いることができる。その一方で、ここに開示されるメカニズムは、要求されたネイティブコードセグメントを含むようにそれぞれのアプリケーションファイルを適切に構成すること、及び考慮中のアプリケーションファイルのランタイムの間のアクセス可能性を確実にするようにこれらのネイティブコードセグメントを処理することによって、他の仮想マシン実装にも適用され得る。従って、本開示は、当該制限が添付の特許請求の範囲内に及び／又は明細書に説明される実施形態内に明示的に記載されていない限り、仮想マシンのいかなる特定の実装にも制限されるものとして考えられるべきではない。
【００２２】
図１ａ〜１ｄを参照して、更なる例示的な実施形態をより詳細に以下に説明する。
【００２３】
図１ａは電子デバイス１５０を模式的に示しており、電子デバイス１５０は、例えばハンドヘルドＰＤＡ（パーソナルデジタルアシスタンス）、ラップトップ等の形態にある携帯型コンピュータ、定置型コンピュータシステム等のような任意の種類のコンピュータシステムを代表し得る。他の場合には、電子デバイス１５０は、携帯電話、センサ要素を含む電子回路等のような任意のデバイスを代表してよく、当該デバイスは仮想マシンを確立するための適切なコンピュータ資源を備えていてよい。電子デバイス１５０はプラットフォーム１００を備えていてよく、プラットフォーム１００は、仮想マシンを実装するために必要な資源を提供するためのハードウエア構成として理解されるべきであり、ここでは、ハードウエア構成は、コンピュータシステムにおいて典型的に用いられるであろうような専用のオペレーティングシステムとの組み合わせで動作し得る。従って、プラットフォーム１００は、任意の種類のマイクロプロセッサ、マイクロコントローラ等のような中央処理ユニット１０１を少なくとも備えていてよく、中央処理ユニット１０１内では、ＣＰＵコア、バッファメモリ、内部信号バス、供給電圧源、等のような必要なハードウエアコンポーネントを電子回路が提供していてよい。ＣＰＵ１０１は、必ずしも単一のチップコンポーネントとして設けられる必要はなくてよい一方で、プラットフォーム１００の全体的な複雑さに応じて、所望の機能性を得るように複数の個々の半導体チップを備えていてもよいことが理解されるべきである。同様にしてストレージ１０２が設けられていてよく、ストレージ１０２は任意の適切な構成を有していてよく、例えばストレージ１０２は、ハードディスク、フラッシュメモリ等のような不揮発性メモリ及び／又はＲＡＭ（ランダムアクセスメモリ）デバイス等の形態にある揮発性メモリデバイスを備えていてよい。また、ＣＰＵ１０１及びストレージ１０２は、ＣＰＵ１０１とストレージ１０２の間でのデータ交換を可能にするようにバスシステム１０３によって接続されていてよい。電圧源、Ｉ／Ｏコンポーネント等のような任意の更なるコンポーネントがプラットフォーム１００の構成に従って設けられていてよいことが理解されるべきであり、ここではこれらのコンポーネントは図示されていない。更に、図示される実施形態においては、プラットフォーム１００はオペレーティングシステム（ＯＳ）１０４を備えていてよく、オペレーティングシステム１０４は、デバイス１５０の動作の間にＣＰＵ１０１内で実行されてそれによりプラットフォーム固有のアプリケーションとＣＰＵ１０１の間でのインタフェースを提供する適切な一連の命令として理解されてよい。即ち、オペレーティングシステム１０４は、１つ以上のプラットフォーム固有のアプリケーションの処理を連携させることができ、また複数の定義されたアプリケーションを提供することもでき、これらの定義されたアプリケーションは、ライブラリ１０４Ａと称されてよく、そして全体的な性能を高めるために対応するプラットフォーム固有のアプリケーションにとって利用可能であってよい。尚、オペレーティングシステム１０４へ直接的に供給され得るアプリケーションは、この種のアプリケーションが少なくともオペレーティングシステム１０４の特定の特徴を考慮して開発される必要がある一方で多くの場合にＣＰＵ１０１、ストレージ１０２及び／又はバスシステム１０３のハードウエア固有の特徴が考慮に入れられる必要があるであろうことを理由として、ここではプラットフォーム固有のアプリケーションと称されることがある。
【００２４】
また、電子デバイス１５０は仮想マシンを備えていてよく、仮想マシンは、プラットフォーム１００に対するプラットフォーム依存アプリケーションとして理解されてよく、即ち仮想マシン１１０は複数のプラットフォーム固有の命令を代表することができ、これらの命令は、プラットフォーム１００によって実行されるときに、仮想マシン１１０によって実行されるアプリケーションに関して十分に定義された標準特性を有するプラットフォームをシミュレートすることができる。従って、前述したように、仮想マシン１１０は、プラットフォーム１００に関してプラットフォーム固有のアプリケーションを代表してよく、プラットフォーム固有のアプリケーションは同様に、仮想マシン１１０に専用の任意のアプリケーションに対する標準動作環境を代表する。この意味において、仮想マシン１１０のためのアプリケーションは、プラットフォーム１００の構成にかかわりなく、プラットフォーム非依存のアプリケーションと称されることがある。図示される実施形態においては、仮想マシンはバイトコード実行ユニット１１１及びローディングユニット１１２を備えていてよく、仮想マシンがＪＡＶＡ（登録商標）仮想マシン（ＪＶＭ）を代表する場合には、ローディングユニット１１２はクラスローダとして示される。更に、図１ａに示される状態においては、電子デバイス１５０はデータベース１１３のようなアプリケーションファイルの１つ以上のソースを備えていてよく、ソースは、仮想マシン１１０を代表するアプリケーションや、例えば１１４で示されるインターネットのような任意の適切なネットワークを介して遠隔コンピュータシステム又は任意の他のファイルサプライヤから供給されるアプリケーションや、プラットフォーム１００内にローカル的に記憶されるであろうアプリケーション固有のファイル１１５等と関連していてよい。ファイルソース１１３、１１４及び１１５の少なくとも１つはアプリケーションファイル１２０を含んでいてよく、アプリケーションファイル１２０は、ライブラリ１０４Ａのようなプラットフォーム固有のライブラリを活用するために、ネイティブコードに対する要求を維持してよい。このように、標準的な仮想マシンにおいては、仮想マシン１１０におけるアプリケーションのランタイムの間に、対応するネイティブコード資源の利用可能性を確実にするためにそれぞれのメソッドが必要であるから、対応するアプリケーションファイルはある程度のプラットフォーム依存の原因になり得る。ここに開示される原理によると、仮想マシンがＪＡＶＡ（登録商標）環境を代表する場合にはクラスファイルとも称されることがあるアプリケーションファイル１２０は、バイトコード実行ユニット１１１によって処理されるであろうプラットフォーム非依存の命令に加えて、ネイティブコード１２５を含んでいてよい。ネイティブコード又はライブラリ１２５は、ネイティブメソッドを実行するのに適した命令セットを代表してよく、ネイティブメソッドは、適切なインタフェースシステム（図示せず）に基いてプラットフォーム１００によって直接的に処理されてよく、それによりファイル１２０に対応するアプリケーション又はその一部の性能向上をもたらすことができる。この目的のために、ネイティブコード１２５は、ユニット１１１の動作がネイティブコード１２５の存在によって影響を受けなくてよいように埋め込まれてよく、その結果、プラットフォーム非依存の対応する命令１２１が支障なく処理され得る。一方、ネイティブコード１２５は、アプリケーションファイル１２０を「準備する(preparing)」場合に、アプリケーションファイル１２０の実際のランタイムの間におけるネイティブコード又はそのコピーへのアクセスを可能にするように、ユニット１１２によって効率的に用いられ得る。
【００２５】
電子デバイス１５０の動作の間、アプリケーションファイル１２０を含み得るアプリケーションの実行が要請されてよく、それにより、仮想マシン１１０がその時点で動作中でない場合に仮想マシン１１０の起動が開始される。ＪＡＶＡ（登録商標）クラスローダのようなユニット１１２が、ユニット１１１によって発行されるクラスファイルのようなアプリケーションファイルに対する要求を基本的にはサービスしてよい。アプリケーションファイルに対する対応する要求をサービスすることは、対応するアプリケーションファイルに対する検索を含んでいてよく、例えば、種々のソース１１３、１１４及び１１５が検索されてよく、また言語固有のフォーマット要求についての無矛盾性、セキュリティの側面、等のようなクラスファイルの特定の特徴の検証を含んでいてよい。更に、アプリケーションファイルは解決されてよく、即ちファイルは実行のために完全に準備されてよい。また、ユニット１１２の活動(activity)は、データ１２１内に含まれるプラットフォーム非依存の命令セットを、ユニット１１１によって用いられるべきランタイムフォーマットへと変換することのような動作を含んでいてよい。加えて、ユニット１１２は、プラットフォーム非依存の命令におけるネイティブメソッドに対する要求を検出してよく、また、検出した場合に、ネイティブコードセグメント１２５内でネイティブメソッドの適切な実装を探してよい。適切な実装がセグメント１２５内で確認される場合には、例えば、セグメント１２５の少なくとも一部分を専用のメモリ空間内へコピーすると共にアプリケーションファイル１２０内で必要になるであろう更なるライブラリリンク動作のために対応するメモリ空間を用いることによって、適切な実装のアクセス可能性を確実にすることで、アプリケーションファイル１２０の準備が継続されてよい。
【００２６】
図１ｂは１つの例示的な実施形態に従うアプリケーションファイル１２０の概略図を模式的に示している。図示されるように、アプリケーションファイル１２０はＪＡＶＡ（登録商標）環境のためのクラスファイルを代表してよく、ここでは、「標準的な(standard)」ＪＡＶＡ（登録商標）情報コンテンツ１２１は、当該分野においてよく知られているＪＡＶＡ（登録商標）言語規格によって決定される特定のフォーマットで提供される必要があるかもしれない。例えば、マジック数、バージョン、定数プール、アクセス、クラス、インタフェース、フィールド、メソッド及び属性のような簡略化された様態においてここでは示される複数のセクションが、ＪＡＶＡ（登録商標）言語に整合するように用いられてよい。従って、アプリケーションファイル１２０をロードする場合には、コンテンツ１２１のセクションの無矛盾性が検証されてよい一方で、この段階においては、「ｌｉｂ１」、「ｌｉｂ２」、…、「ｌｉｂ情報」として示される任意の追加的なセクションは、対応する言語仕様との無矛盾性に関して無視されてよい。セクション１２５ａ、…、１２５ｎとしても示され得る追加的なセクションは、部分１２１のセクションの無矛盾性を検証する間、例えばセクション１２５ａ、…、１２５ｎを非標準セクションとして示す言語仕様を妨げない適切なセクションヘッダを設けることによって、「見えない(invisible)」ものであってよい。セクション１２５ｎの１つはネイティブコードセグメントを適切に使用するための任意の追加的な情報を備えていてよい一方で、他の場合には、セクション１２５ａ、…、１２５ｎの各々は、例えば、それぞれのネイティブメソッドを識別するための対応する「ハウスキーピング(housekeeping)」情報を備えていてよく、それぞれのネイティブメソッドに対して実装がもたらされ且つ対応する実装が関連していることが理解されるべきである。このように、異なる種類のプラットフォームに対してプラットフォーム固有の複数の特徴を組み込むことによって、対応するアプリケーションファイルに対して一定の程度のプラットフォーム非依存性をもたらすことができ、それにより対応するアプリケーションの性能及びユーザ利便性を顕著に高めることができる。他の場合には、プラットフォーム固有の特性を組み込むことによって、特定の基本的なアプリケーションの性能を高めることができ、この場合、異なるプラットフォーム固有情報を組み込むことによって、基本的には同一のアプリケーションが異なるプラットフォームに対して設けられ得る。
【００２７】
図１ｃはユニット１１２の構成を模式的に示しており、ユニット１１２は、それ自体、仮想マシン１１０によって実行可能なアプリケーションの形態で実装されていてよい。例えば、前述したように、ＪＡＶＡ（登録商標）は、基本的なクラス即ち親クラスの特定の性質が子クラスに受け継がれ得るオブジェクト指向言語を代表しており、ここでは、これらの性質の幾つか、即ちメソッドは、親クラスの種々の能力を拡張するように上書きされてよい。例えば、ＪＡＶＡ（登録商標）環境の標準的なクラスローダは親クラスを代表してよく、また修正されたクラスローダは、ネイティブメソッドに対する要求を適切にサービスするようにアプリケーションファイル１２０（図１ｂ参照）のネイティブコードセグメント１２５を処理する能力を実装することによって定義されてよい。図１ｃに示される実施形態においては、ローダユニット１１２は親クラスローダによって受け継がれるであろう複数のメソッドを備えていてよく、これらのメソッドは、参照符号１１４によって表されるように「最終(final)」として示されるであろうから、変化させられなくてよい。一方、親クラスローダのロードクラスメソッドは、ネイティブコードセグメントの取り扱いを含むように拡張されてよく、それにより、対応するメソッド１１３を得ることができる。
【００２８】
図１ｄは、ネイティブコードセグメントを取り扱うのに必要な機能性を実装する一方で、にもかかわらず部分１２１（図１ｂ参照）のような標準的情報コンテンツの無矛盾性を検証する可能性を提供する例示的なメカニズムを模式的に示している。図示されるように、ロードクラスメソッド１１３は、図１ｂに示されるようなクラスファイル１２０のプラットフォーム非依存の対応する命令１２１にけるネイティブメソッドのための要求を識別するために、第１のステップ１１３Ａを備えていてよい。ネイティブメソッドに対する対応する要求がステップ１１３Ａにおいて検出されないであろう場合には、ステップ１１３Ｂによって示されるように、ロードクラスメソッドは規定の挙動(default behavior)で継続してよい。この場合、無矛盾性の検証等は通常の方法で実行されてよい。ネイティブメソッドに対する要求がステップ１１３Ａにおいて検出される場合には、メカニズムはステップ１１３Ｃへと続き、ステップ１１３Ｃにおいては、アプリケーションファイル内に埋め込まれた任意のネイティブコードが検索される。この目的のために、ロードクラスメソッドは、それぞれの追加的なセクションを識別し又は追加的なセクション１２５Ａ、…、１２５ｎ（図１ｂ参照）内に設けられる任意の他の情報を識別するように適切に構成されてよく、その結果、埋め込まれたネイティブコードの存在を検出することができ、またネイティブメソッドに対する要求に関する更なる情報についても、これを評価することができる。例えば、図１ｂのセクション１２５Ａ、…、１２５ｎ内で得られるであろう追加的な情報に基いて、要求されたネイティブメソッドに対する適切な実装が利用可能であるか否かを評価することができる。対応する埋め込まれたネイティブコードが検出されず、又は埋め込まれたネイティブコード内で適切な実装が利用可能でない場合には、メカニズムはステップ１１３Ｂへ進み、そして規定の挙動を適用してよい。他の場合において、その時点でのプラットフォームアーキテクチャに整合する適切な実装が識別されるときには、関連するネイティブコードセグメント又はその一部分、例えば特定のＤＬＬ又は共有ライブラリは、専用のメモリ空間へコピーされてよく、そして考慮中のクラスファイルの更なるライブラリ発見動作(library find operations)のために用いられてよい。その後、更に要求されるメソッドがクラスローダ１１２によって実行されてよく、ここでは、考慮中のクラスファイルは次いで、例えば図１ｃのメソッドを適用することによりユニット１１１（図１ａ参照）によって実行されるために準備されてよい。従って、クラスローダ１１２の残りの処理の間、埋め込まれたネイティブコードセグメント１２５（図１ｃ参照）は見えないままであってよく、従って部分１２１内の命令の実行を妨げないであろう（図１ｄ参照）。
【００２９】
結果として、本開示は、ユーザ相互作用を必要とすることなしにプラットフォーム固有の特徴を効率的に用いる可能性をもたらすために、仮想マシン及び、埋め込まれたネイティブコードセグメントを有するアプリケーションファイルに基いて動作し得る電子デバイスを提供する。任意の適切なネットワークを介した遠隔コンピュータシステムのような、又は対象とするプラットフォームによってアクセスされ得る任意の他の適切な記憶媒体のような任意のソースによって、特定のアプリケーションファイルが供給されてよい。また、仮想マシンは、ネイティブメソッドに対する要求を検出するための適切なメカニズムを実装されたものであってよく、この場合、それぞれのアプリケーションファイルは、埋め込まれたネイティブコードセグメントを検索されてよく、これらは次いでアプリケーションファイルによって要求される任意のライブラリ組み込みに対して用いられてよい。例えば、修正されたクラスローダが、例えば任意のコンピュータ可読記憶媒体に基いて提供されてよく、そして拡張された機能性をもたらすように仮想マシンメカニズム内へ組み込まれてよい。その結果、ネイティブメソッドを必要とするであろうＪＡＶＡ（登録商標）アプリケーションの開発が著しく簡素化され得る。また、特定のプラットフォームに対するネイティブメソッドの強化されたバージョンは、場合によってはより一般的な実装との組み合わせにおいて高度に効率的な様態でパッケージ化されてよく、これらは次いで、ランタイムの間の最適な実装を選択するように例えばパターン整合メカニズム等のような任意の適切な技術によって、仮想マシン、例えばクラスローダにより効率的に「解決されて(resolved)」よい。更に、異なるネイティブメソッドが種々のバージョンによって要請されることがある場合であっても、ライブラリの衝突は上述したメカニズムによって効果的に回避され得るので、１つ以上のクラスの多重バージョンが同時に仮想マシン内へロードされてよい。
【００３０】
本開示の更なる修正及び変更は、この明細書を考慮することによって当業者には明白になろう。従って、この明細書は、例示的なものとしてのみ解釈されるべきであり、またここに開示される原理を実施する一般的な手法を当業者に教示することを目的としている。ここに示されまた説明される形態は目下のところ望ましい実施形態として解釈されるべきことが理解されるべきである。
【図１ａ】
0005401561.tif 000002
【図１ｂ】
0005401561.tif 000003
【図１ｃ】
0005401561.tif 000004
【図１ｄ】
0005401561.tif 000005