(57)【特許請求の範囲】
【請求項１】
リモート実行コンテナ（１１０）からのデータ・コンテナへの参照に対する初期要求の受信に応答して、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネント（２１４）から、前記分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネント（２１６）に、前記データ・コンテナへの前記参照に対する前記初期要求を送信することと、
前記データ・コンテナへの前記参照に対する前記初期要求に応答して、不変データおよび前記データ・コンテナへの前記参照を含むデータ・ミラー・データ構造を受信することと、
前記不変データおよび前記データ・コンテナへの前記参照を含む前記受信したデータ・ミラー・データ構造をローカル・メモリ記憶エリア内に記憶することと、
前記データ・コンテナへの前記参照に対する前記初期要求に応答して、前記ローカルに記憶したデータ・ミラー・データ構造への参照を、前記リモート実行コンテナに戻すことと、
を含む、方法。
【請求項２】
前記ローカルに記憶したデータ・ミラー・データ構造を用いて、前記データ・コンテナに関連付けられた追加データ・アイテムに対する要求を処理することを更に含む、請求項１に記載の方法。
【請求項３】
前記ローカルに記憶したデータ・ミラー・データ構造を用いて前記データ・コンテナに関連付けられた前記追加データ・アイテムに対する前記要求を処理することが、
前記リモート実行コンテナから、前記データ・コンテナに関連付けられた前記追加データ・アイテムに対する前記要求を受信することと、
前記データ・コンテナに関連付けられた前記追加データ・アイテムに対する前記要求が、前記ローカルに記憶したデータ・ミラー・データ構造内で利用可能な不変データに対する要求を含むか否かを判定することと、
前記データ・コンテナに関連付けられた前記追加データ・アイテムに対する前記要求が、前記ローカルに記憶したデータ・ミラー・データ構造内で利用可能な不変データに対する前記要求を含むという判定に応答して、
前記ローカルに記憶したデータ・ミラー・データ構造から前記要求された不変データを抽出することと、
前記追加データ・アイテムに対する前記要求に応答して前記要求された不変データを前記リモート実行コンテナに戻すことと、
を含む、請求項２に記載の方法。
【請求項４】
前記データ・コンテナに関連付けられた前記追加データ・アイテムに対する前記要求が不変データに対する前記要求を含まないという判定、および前記要求された不変データが前記ローカルに記憶したデータ・ミラー・データ構造内で利用可能でないという判定の一方を行うことと、
前記ローカルに記憶したデータ・ミラー・データ構造から、前記データ・ミラー・データ構造と共に戻された前記データ・コンテナへの前記参照を抽出することと、
前記データ・コンテナへの前記抽出した参照と共に、前記データ・コンテナに関連付けられた前記追加データ・アイテムに対する前記要求を、前記分散型バーチャル・マシンの前記分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントに送信することと、
前記分散型バーチャル・マシンの前記分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントから、前記要求された追加データ・アイテムおよび追加の不変データを受信することと、
前記追加の不変データを前記ローカルに記憶したデータ・ミラー・データ構造に記憶することと、
前記要求された追加データ・アイテムを前記リモート実行コンテナに戻すことと、
を更に含む、請求項３に記載の方法。
【請求項５】
前記ローカルに記憶したデータ・ミラー・データ構造の寿命管理を実行することを更に含む、請求項１に記載の方法。
【請求項６】
前記ローカルに記憶したデータ・ミラー・データ構造の前記寿命管理を実行することが、
前記ローカルに記憶したデータ・ミラー・データ構造への参照をパラメータとして含むＤｅｌｅｔｅＬｏｃａｌｒｅｆｅｒｅｎｃｅルーチンに対するコールの呼び出しを検出することと、
前記ローカルに記憶したデータ・ミラー・データ構造への前記参照を用いて前記ＤｅｌｅｔｅＬｏｃａｌｒｅｆｅｒｅｎｃｅルーチンに対する前記コールの前記呼び出しに応答して前記ローカルに記憶したデータ・ミラー・データ構造に割り当てられたメモリを解放することと、
を含む、請求項５に記載の方法。
【請求項７】
前記ローカルに記憶したデータ・ミラー・データ構造の前記寿命管理を実行することが、
前記リモート実行コンテナにおいて実行するネイティブ・メソッドの実行の完了を検出することと、
前記ネイティブ・メソッドの実行の前記完了の検出に応答して、前記ネイティブ・メソッドのコンテキスト内で全ての残りの非グローバルなローカルに記憶したデータ・ミラー・データ構造のためのメモリを解放することと、
を含む、請求項５に記載の方法。
【請求項８】
前記ローカルに記憶したデータ・ミラー・データ構造の前記寿命管理を実行することが、
前記ローカルに記憶したデータ・ミラー・データ構造への参照をパラメータとして含むＮｅｗＧｌｏｂａｌＲｅｆルーチンに対するコールの呼び出しを検出することと、
新しいグローバル参照に対する要求を前記分散型エンハンスバーチャル・マシン・ネイティブ・インタフェース・コンポーネントに送信することと、
前記分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントから前記新しいグローバル参照を受信することと、
前記ＮｅｗＧｌｏｂａｌＲｅｆルーチンの前記呼び出しの検出に応答して、前記分散型バーチャル・マシンの前記分散型エンハンスバーチャル・マシン・ネイティブ・インタフェース・コンポーネントから戻された前記新しいグローバル参照および前記ローカルに記憶したデータ・ミラー・データ構造からの前記不変データをカプセル化した新しいグローバル・データ・ミラー・データ構造を前記ローカルなメモリ記憶領域内に生成することと、
前記新しいローカルに記憶したグローバル・データ・ミラー・データ構造へのグローバル参照を前記リモート実行コンテナに戻すことと、
を含む、請求項５に記載の方法。
【請求項９】
前記ローカルに記憶したデータ・ミラー・データ構造の前記寿命管理を実行することが、
前記新しいローカルに記憶したグローバル・データ・ミラー・データ構造への前記参照をパラメータとして含むＤｅｌｅｔｅＧｌｏｂａｌＲｅｆルーチンに対するコールの呼び出しを検出することと、
前記ＤｅｌｅｔｅＧｌｏｂａｌＲｅｆルーチンの前記呼び出しの検出に応答して、
前記新しいローカルに記憶したグローバル・データ・ミラー・データ構造から前記グローバル参照を抽出することと、
前記リモート実行コンテナに対して、前記新しいローカルに記憶したグローバル・データ・ミラー・データ構造への前記グローバル参照を削除するためのコールを実行することと、
前記新しいローカルに記憶したグローバル・データ・ミラー・データ構造に割り当てられたメモリを解放することと、
を含む、請求項８に記載の方法。
【請求項１０】
分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネント（２１６）において、前記分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネント（２１４）から、データ・コンテナへの参照に対する初期要求を受信することと、
前記データ・コンテナへの前記参照に対する前記初期要求の受信に応答して、前記データ・コンテナ内の不変データを識別することと、
前記識別した不変データおよび前記データ・コンテナへの前記要求された参照を含むデータ・ミラー・データ構造を構築することと、
前記データ・コンテナへの前記参照に対する前記初期要求に応答して、前記識別した不変データおよび前記データ・コンテナへの前記要求された参照を含む前記データ・ミラー・データ構造を、前記分散型バーチャル・マシンの前記分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントに送信することと、
を含む、方法。
【請求項１１】
前記識別した不変データおよび前記データ・コンテナへの前記要求された参照を含む前記データ・ミラー・データ構造を構築することが、前記不変データの一部を用いて前記データ・ミラー・データ構造を構築することを含む、請求項１０に記載の方法。
【請求項１２】
前記不変データの前記一部を用いて前記データ・ミラー・データ構造を構築することが、
利用可能プロセス間データ・パケット・ペイロード・サイズを決定することと、
前記決定したプロセス間データ・パケット・ペイロード・サイズに基づいて、空のペイロード空間が最小となるようデータ・パケット・ペイロードを充填するべく不変データを選択することと、
空のペイロード空間が最小となるよう前記データ・パケット・ペイロードを充填するのに充分なサイズの前記データ・ミラー・データ構造を構築することと、
を含む、請求項１１に記載の方法。
【請求項１３】
前記データ・コンテナからの追加データ・アイテムに対する要求を受信することと、
前記データ・コンテナから前記要求された追加データ・アイテムを抽出することと、
前記データ・コンテナからの前記追加データ・アイテムに対する前記要求に応答して前記要求された追加データ・アイテムを送信することと、
を更に含む、請求項１０に記載の方法。
【請求項１４】
前記データ・コンテナ内の前記追加データ・アイテムに対する前記要求に応答して前記要求された追加データ・アイテムを送信することが、前記データ・コンテナから追加の非不変データ・アイテムを送信することを含む、請求項１３に記載の方法。
【請求項１５】
前記データ・コンテナ内の前記追加データ・アイテムに対する前記要求に応答して前記要求された追加データ・アイテムを送信することが、追加の不変データ・アイテムを送信することを含む、請求項１３に記載の方法。
【請求項１６】
前記データ・コンテナからの前記追加データ・アイテムに対する前記要求の受信に応答して、前記要求された追加データ・アイテムと共に送信するために追加の不変データが利用可能であるか否かを判定することと、
前記要求された追加データ・アイテムと共に送信するために前記追加の不変データが利用可能であるという判定に応答して、
前記追加の不変データを識別することと、
前記データ・コンテナから前記追加の不変データを抽出することと、
を含み、
前記データ・コンテナ内の前記追加データ・アイテムに対する前記要求に応答して前記要求された追加データ・アイテムを送信することが、前記データ・コンテナ内の前記追加データ・アイテムに対する前記要求に応答して前記抽出した追加の不変データおよび前記要求された追加データ・アイテムを送信することを含む、請求項１３に記載の方法。
【請求項１７】
請求項１乃至１６のいずれか１つに記載の方法の全てのステップを実行するために適合された手段を含むシステム。
【請求項１８】
コンピュータ・プログラムであって、コンピュータ・システム上で実行された場合に、請求項１乃至１６のいずれか１つに記載の方法の全てのステップを前記コンピュータ・システムに実行させるための命令を含むコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散型バーチャル・マシンに関する。更に特定すれば、本発明は、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングに関する。
【背景技術】
【０００２】
Ｊａｖａ（ＴＭ）バーチャル・マシン（ＪＶＭ（Ｒ））の実施は、Ｊａｖａ（ＴＭ）ネイティブ・インタフェース（ＪＮＩ）をサポートする。ＪＮＩによって、Ｊａｖａ（ＴＭ）プログラミング言語コードは、ＣおよびＣ＋＋（ネイティブ・コード）プログラミング言語で書かれたメソッドをコールすることができ、その逆も同様である。Ｊａｖａ（ＴＭ）プログラミング言語で書かれたコードおよびネイティブ・コードの双方は、２つのコード・セクション間の実行トランザクションとして同一プロセスにおいて同一スレッドによって実行することができる。
【発明の概要】
【０００３】
方法は、リモート実行コンテナからのデータ・コンテナへの参照に対する初期要求の受信に応答して、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントから、分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントに、データ・コンテナへの参照に対する初期要求を送信することと、データ・コンテナへの参照に対する初期要求に応答して、不変データおよびデータ・コンテナへの参照を含むデータ・ミラー・データ構造を受信することと、不変データおよびデータ・コンテナへの参照を含む受信したデータ・ミラー・データ構造をローカル・メモリ記憶エリア内に記憶することと、データ・コンテナへの参照に対する初期要求に応答して、ローカルに記憶したデータ・ミラー・データ構造への参照を、リモート実行コンテナに戻すことと、を含む。
【０００４】
代替的な方法は、分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントにおいて、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントから、データ・コンテナへの参照に対する初期要求を受信することと、データ・コンテナへの参照に対する初期要求の受信に応答して、データ・コンテナ内の不変データを識別することと、識別した不変データおよびデータ・コンテナへの要求された参照を含むデータ・ミラー・データ構造を構築することと、データ・コンテナへの参照に対する初期要求に応答して、識別した不変データおよびデータ・コンテナへの要求された参照を含むデータ・ミラー・データ構造を、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントに送信することと、を含む。
【０００５】
システムは、メモリと、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントを実行するようにプログラムされたプロセッサと、を含み、このマシンは、リモート実行コンテナからのデータ・コンテナへの参照に対する初期要求の受信に応答して、分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントに、データ・コンテナへの参照に対する初期要求を送信し、データ・コンテナへの参照に対する初期要求に応答して、不変データおよびデータ・コンテナへの参照を含むデータ・ミラー・データ構造を受信し、不変データおよびデータ・コンテナへの参照を含む受信したデータ・ミラー・データ構造をメモリのローカル・メモリ記憶エリア内に記憶し、データ・コンテナへの参照に対する初期要求に応答して、ローカルに記憶したデータ・ミラー・データ構造への参照を、リモート実行コンテナに戻すように構成されている。
【０００６】
代替的なシステムは、通信モジュールと、分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントを実行するようにプログラムされたプロセッサと、を含み、このマシンは、通信モジュールを介して、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントから、データ・コンテナへの参照に対する初期要求を受信し、データ・コンテナへの参照に対する初期要求の受信に応答して、データ・コンテナ内の不変データを識別し、識別した不変データおよびデータ・コンテナへの要求された参照を含むデータ・ミラー・データ構造を構築し、通信モジュールを介して、データ・コンテナへの参照に対する初期要求に応答して、識別した不変データおよびデータ・コンテナへの要求された参照を含むデータ・ミラー・データ構造を、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントに送信するように構成されている。
【図面の簡単な説明】
【０００７】
【図１】本主題の一実施形態による、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのためのシステムの実施の一例のブロック図である。
【図２】本主題の一実施形態による、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングを実行することができるコア処理モジュールの実施の一例のブロック図である。
【図３】本主題の一実施形態による、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのためのメッセージ・フローの実施の一例のメッセージ・フロー図であり、データ・ミラーは、クラス参照に対する要求に応答して分散型バーチャル・マシン・コンポーネントにおいて構築される。
【図４】本主題の一実施形態による、メモリのデータ・ミラー記憶エリア内に記憶されたデータ・ミラー・データ構造の実施の一例のブロック図である。
【図５】本主題の一実施形態による、分散型エンハンス・リモート実行コンテナ（ＲＥＣ）・ネイティブ・インタフェース・モジュールにおける、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのプロセスの実施の一例のフローチャートである。
【図６】本主題の一実施形態による、分散型エンハンス・バーチャル・マシン（ＶＭ）・ネイティブ・インタフェース・モジュールにおける、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのプロセスの実施の一例のフローチャートである。
【図７】本主題の一実施形態による、分散型エンハンス・リモート実行コンテナ（ＲＥＣ）Ｊａｖａ（ＴＭ）ネイティブ・インタフェース（ＪＮＩ）・モジュールにおける、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのプロセス内の初期処理の実施の一例のフローチャートである。
【図８】本主題の一実施形態による、分散型エンハンス・リモート実行コンテナ（ＲＥＣ）Ｊａｖａ（ＴＭ）ネイティブ・インタフェース（ＪＮＩ）・モジュールにおける、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのプロセス内の追加処理の実施の一例のフローチャートである。
【図９】本主題の一実施形態による、分散型エンハンス・バーチャル・マシン（ＶＭＩ）Ｊａｖａ（ＴＭ）ネイティブ・インタフェース（ＪＮＩ）・モジュールにおける、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのプロセスの実施の一例のフローチャートである。
【発明を実施するための形態】
【０００８】
以下に示す例は、当業者が本発明を実施し、本発明を実行する最良のモードを例示することを可能とするために必要な情報を提示する。添付図面を参照して以下の説明を読めば、当業者は、本発明の概念を理解し、本明細書に具体的に述べられていないこれらの概念の適用について認識するであろう。これらの概念および適用が本開示および添付図面の範囲内にあることは理解されよう。
【０００９】
本明細書に述べる主題は、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングを提供する。分散型バーチャル・マシンのネイティブ・インタフェースは、エンハンス（enhanced）・リモート実行コンテナ（ＲＥＣ：remote execution container）・ネイティブ・インタフェース・コンポーネントおよびエンハンス・バーチャル・マシン（ＶＭ）・ネイティブ・インタフェース・コンポーネントに分割される。分散型エンハンスＲＥＣネイティブ・インタフェース・コンポーネントは、分散型バーチャル・マシンのリモート実行コンテナ・モジュールとインタフェースする。分散型エンハンスＶＭネイティブ・インタフェース・コンポーネントは、分散型バーチャル・マシンのバーチャル・マシン・モジュールとインタフェースする。これらの分散型ネイティブ・インタフェース・コンポーネントは、同一または異なるデバイス上で、それぞれリモート実行コンテナおよびバーチャル・マシンを用いて、別個のプロセスで実行される。リモート実行コンテナにおいて発行する要求に応答して、分散型エンハンスＲＥＣネィティブ・インタフェース・コンポーネントは、分散型エンハンスＶＭネイティブ・インタフェース・コンポーネントに、データ・コンテナ（例えばクラス）への参照についての最初の要求を発生する。分散型エンハンスＶＭネイティブ・インタフェース・コンポーネントは、このデータ・コンテナへの参照についての最初の要求に応答して、データ・コンテナを表すデータ・ミラー・データ構造内にカプセル化したデータ・コンテナに関連付けて要求された参照および不変データを与える。本記載の目的のため、「不変データ」は、変化しないデータを含む（例えばメソッド識別子（ＩＤ）またはメソッド名あるいはその両方、フィールド識別子（ＩＤ）またはフィールド名あるいはその両方、および「ファイナル（ｆｉｎａｌ）」データ値とマークされた静的ファイナル・フィールド識別子（ＩＤ）またはフィールド値あるいはその両方）。エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントは、データ・ミラー・データ構造を記憶し、不変データに対する要求に応えてデータ・ミラー・データ構造から要求された不変データを検索する。このように、不変データを検索するための追加のプロセス間通信を無くすことができる。更に、利用可能な不変データの部分はデータ・ミラー・データ構造内に最初にカプセル化することができ、不変データは経時的に増大させることができる。このように、２つのエンハンス・ネイティブ・インタフェース・コンポーネント間の相互作用による処理は、プロセス間通信の効率を向上させるように動作する。
【００１０】
本主題は、例えば分散型Ｊａｖａ（ＴＭ）バーチャル・マシン（ＪＶＭ（Ｒ））における分散型Ｊａｖａ（ＴＭ）ネイティブ・インタフェース（ＪＮＩ）に適用可能である。しかしながら本主題は、所与の実施に合わせて適宜、いかなる分散型バーチャル・マシンにおけるいかなるネイティブ・インタフェースにも適用可能である。ＪＮＩはアプリケーション・プログラミング・インタフェース（ＡＰＩ）であり、このためＪＮＩは本明細書において「ＪＮＩクライアント」または「ＪＮＩアプリケーション」と相互交換可能に称することができ、この理解および本明細書に記載するインタフェースの分散性の文脈において簡潔に「ＪＮＴ」と称することができることは理解されよう。
【００１１】
本主題は、分散型バーチャル・マシンにおいてＪａｖａ（ＴＭ）ネイティブ・インタフェース（ＪＮＩ）・クライアントとＪａｖａ（ＴＭ）バーチャル・マシン（ＪＶＭ（Ｒ））との間で発生するパターンを利用して、プロセス間通信の効率を高める。例えば、本主題が適用される状況は、ＪＮＩがデータ・コンテナへの参照に対する第１の要求（参照要求）をＪＶＭ（Ｒ）に発行し、この初期参照要求に応答してＪＶＭ（Ｒ）から戻された参照を用いてそのデータ・コンテナ内のデータに対する以降の要求（データ要求）を発行する場合等である。これらのような場合、分散型バーチャル・マシンのＪＶＭ（Ｒ）部分を実行するデバイス／プロセスは、初期参照要求に応答して動作して、データ・コンテナに関連した不変データ（例えば以下で詳述するような不変データの全てまたは一部）を識別し、参照要求に応答して分散型バーチャル・マシンのリモート実行コンテナ部分を実行するデバイス／プロセスに不変データを戻す。不変データは、分散型バーチャル・マシンのリモート実行コンテナ部分を実行するデバイス／プロセスに関連付けられたローカル記憶内にデータ・ミラー・データ構造として記憶され、データ・ミラー・データ構造のローカルに記憶したデータは他の分散型プロセスのデータ・コンテナに向けられた以降の要求のために利用可能となる。初期要求に応答して戻された参照を用いてデータに対する以降の要求が行われると、そのデータが不変である場合、これがローカル記憶内のデータ・ミラー・データ構造から戻される。このようにして、不変データを検索するための往復のプロセス間通信に関連した遅延、処理、および帯域幅をなくすことができる。
【００１２】
不変データはＪＮＩ構造（constructs）内で用いられ、多数の不変値が単一のコンテナから要求される場合があるので、有意な数のリモート・コールをなくすことができる。本技法は、ＪＮＩインタフェースを介して戻される参照のライフサイクルの認識を利用し、リモート実行コンテナ・プロセスのためにミラーリングしたデータの複雑なキャッシュ管理を必要としない。
【００１３】
ＪＮＩは、多数のリモート・コールを必要とするシーケンスで戻されるデータ要素の多くについて不透明なハンドルを戻す。本記載の目的のため、「不透明なハンドル」は、ハンドルが指し示すものが何であれ直接コールには見えず、以降のコールでは参照を返さなければならないような、アプリケーション・プログラミング・インタフェース（ＡＰＩ）におけるコントラクトを表す。例えば「ｊｃｌａｓｓ」が返された場合、ｊｃｌａｓｓはポインタのように処理することができず、オブジェクト／クラス内のデータは直接調べることができない。かかる状況では、ｊｃｌａｓｓへの参照は別の関数に渡されて、要求されたデータを検索する。このように、不透明なハンドルは、本記載の目的のための間接的な参照とみなすことができる。これらの不透明なハンドルによって、従来のＪＶＭ（Ｒ）において戻されるものよりも多くの情報を含む参照をＪＮＩに戻すことができ、しかも既存のアプリケーションの動作に影響を及ぼさない。本主題は、上述し更に以下で詳述するように、不透明なハンドルの使用を活かして分散型ＪＶＭ（Ｒ）動作の向上を図る。
【００１４】
不透明なハンドルは、現在のＪＮＩメソッド・コールに限定された寿命を有する「ローカル参照」である。更に、不透明なハンドルを、単一のコールより長い寿命を有する「グローバル参照」にアップグレードするために定義された手順がある。第１のコールにおいて参照が戻されると、本技術は、以降のコールで要求され得る参照に関連した不変データ・セットを識別する。実施によるが、第１のコールにおいて要求されたよりも多くのデータを取得する／戻すコストは、ＪＶＭ（Ｒ）とリモート実行コンテナとの間で追加の往復が行われることに比べて相当に、おそらく１桁以上は低い場合がある。
【００１５】
本技術を適用可能であるコンテナ・オブジェクトの２つの例は、「ｊｃｌａｓｓ」および「ｊｏｂｊｅｃｔ」のコンテナである。しかしながら、他のコンテナ・オブジェクトも存在し、本主題の範囲から逸脱することなく本主題をそのようなコンテナのいずれにも適用可能であることに留意すべきである。
【００１６】
「ｊｃｌａｓｓ」は、Ｊａｖａ（ＴＭ）プログラミング言語実施クラスを表す。いったんｊｃｌａｓｓへの参照を取得したら、以降のコールを行って、クラスの寿命にわたって変化しないデータ（すなわち不変データ）を取得することができる。以降のコールで取得可能なクラスの寿命にわたって変化しないデータの例は、メソッド識別子（ＩＤ）またはメソッド名あるいはその両方、フィールド識別子（ＩＤ）またはフィールド名あるいはその両方、および静的ファイナル・フィールド識別子（ＩＤ）またはフィールド値あるいはその両方を含む。
【００１７】
「ｊｏｂｊｅｃｔ」は、ｊｃｌａｓｓを用いてインスタンス化したＪａｖａ（ＴＭ）プログラミング言語実施オブジェクトを表す。いったんｊｏｂｊｅｃｔへの参照を取得したら、以降のコールを行って、オブジェクトの寿命にわたって変化しないデータ（すなわち不変データ）を取得することができる。以降のコールで取得可能なオブジェクトの寿命にわたって変化しないデータの例は、ファイナル・フィールド値（例えばデータ値）を含む。
【００１８】
Ｊａｖａ（ＴＭ）バーチャル・マシン・ツール・インタフェース（ＪＶＭＴＩ）等のいくつかのデバッギング・プラットフォームの目的では、ＪＶＭ（Ｒ）のためにＪＶＭＴＩがイネーブルされている場合このデータの一部は不変でないことがあることに留意すべきである。かかる場合、正常動作中に不変であるデータについて最適化をディスエーブルしてよい。このように、本明細書に記載する動作は、ＪＶＭ（Ｒ）の正常動作モード中の効率を維持しつつ、不変データがデバッグ動作中に不変のままであるか否かに基づいて柔軟にデバッギング目的で使用できるように構成可能である。
【００１９】
本技術は、分散型バーチャル・マシンにおいてネイティブ・インタフェースの効率を高める３つの技法を含む。最初に、第１のコールを行ってデータ・コンテナに対する初期参照を取得する場合、ＪＮＩコールがＪＶＭ（Ｒ）において処理されると、参照のみを戻すのではなく、追加の動作を実行して、データ・コンテナから不変データ（構成の任意選択肢として全てまたは一部）も抽出し、この不変データを参照と共にデータ・ミラー内にパッケージ化する（ＤａｔａＭｉｒｒｏｒ）。次いでデータ・ミラーがリモート実行コンテナに戻され、ＪＶＭ（Ｒ）におけるＪＮＩコールによって戻される参照でなく、データ・ミラーへの参照がＪＮＩに戻される。
【００２０】
第２に、ネイティブ・インタフェースによってＪＮＩを介して処理するために参照が渡される全ての場合について、参照が通常の参照であるかまたはデータ・ミラーへの参照であるかを判定するために、ＪＮＩ実施（ＪＮＩクライアントに対してトランスペアレント）内でインスペクションを実行する。これは所与の実施に合わせて適宜、例えば低ビット・タギングまたは他の技法を用いて実行可能である。例えば要求が非不変データまたは非データ関連要求に対するものである等、コールがリモート実行コンテナまで渡される場合、参照は抽出されデータ・ミラーで戻されるので、ＪＶＭ（Ｒ）に転送される要求においてこれを用いることができる。要求されたデータが不変でありデータ・ミラー内に記憶されている場合、不変データをデータ・ミラーから抽出して戻し、リモート実行コンテナに対するコールは行わない。
【００２１】
上述し更に以下でも詳述するように、不変データは、その各アイテムに対する最初の要求に応答して等、ある時間にわたって取得して、要求されていない不変データの収集に関連した処理負荷を削減することができる。初期参照要求時以外に、データ・ミラー内に不変データ収集を構成するような他の構成の任意選択肢も可能であり、全てのそのような選択肢は本主題の範囲内であると見なされる。
【００２２】
本技術の第３の態様は、データ・ミラー寿命管理である。データ・ミラー内の不変データの寿命を構成および管理することができる。例えば、データ・ミラーへの参照をパラメータとして渡して「ＤｅｌｅｔｅＬｏｃａｌｒｅｆｅｒｅｎｃｅ」と呼ぶメソッド／手順がコールされた場合、ＪＶＭ（Ｒ）オブジェクト内の各データの寿命とは無関係に、全データ・ミラーのためのメモリを解放することができる。更に、ＪＮＩメソッドの完了および戻りに応答して、全ての残りの非グローバル・データ・ミラーのためのメモリを解放することができる。更に、「ＮｅｗＧｌｏｂａｌＲｅｆ」と呼ぶメソッド／手順がコールされ、データ・ミラーへの参照がパラメータとして渡された場合、リモート実行コンテナから戻されたグローバル参照および元のデータ・ミラーからの情報をカプセル化した新しい「グローバル」データ・ミラーを生成することができる。更に別の例として、「ＤｅｌｅｔｅＧｌｏｂａｌＲｅｆ」と呼ぶメソッド／手順がコールされ、データ・ミラーへの参照がパラメータとして渡された場合、グローバル参照を抽出し、リモート実行コンテナに対するコールを行ってグローバル参照を削除し、次いでグローバル・データ・ミラーのためのメモリを解放することができる。寿命管理には他にも多くの可能性が存在し、それらは全て本主題の範囲内であると見なされる。
【００２３】
本明細書に記載する技法は、いくつかの方法で更に最適化することができる。例えば、参照に対する第１の要求によって不変データの全てを返すのではなく、ある時間にわたって要求のあったデータを記録することで、システムが最初に戻すデータ・ミラー内にどのデータを含ませるかを学習することができる。このように、初期データ・ミラー内には最も用いられるデータまたは最も用いられるデータのサブセットを含ませることができる。更に、データ・ミラーをある時間にわたって構築することも可能であり、この場合は第１のコールで不変データの一部のみを返し、以降のコールで所与の実施に合わせて適宜データ・ミラーを充填する。各要求について送られるデータ量は、所与のネットワーク上での１パケット内の利用可能データ空間に基づいたものとすることで、最初に追加の送信を必要とすることなく利用可能ペイロード・エリアを利用することができる。以降の要求に対しては、追加のパケットをその容量まで充填することができ、パケット・ペイロードおよびネットワーク帯域幅を効率的に利用しながら、データ・ミラーをある時間にわたって構築することができる。更に、第１のコールでデータを全て返すのではなく、空のまたは部分的にのみ充填されたデータ・ミラーを最初に送信してポピュレートすることも可能である。この場合、不変データに対する以降のコールの実行においては、不変データのいずれかの部分に対する第２の要求が行われると、このデータ要求をデータ・ミラーからローカルに満足させることができる。これが特に有用であり得るのは、元の参照がグローバル参照にアップグレードされてキャッシュされ、これが例えば頻繁に用いられるクラスによって使用可能な場合である。本主題には他の多くの最適化も可能であり、それらは全て本主題の範囲内であると見なされる。
【００２４】
本主題の概念は、分散型バーチャル・マシンにおけるネイティブ・インタフェースに関連したいくつかの制限を認識したことから得られたことに留意すべきである。例えば、分散型バーチャル・マシン（例えば分散型ＪＶＭ（Ｒ））を構築する際に、ネイティブ・コード（例えばＣまたはＣ＋＋プログラミング言語で書かれるコード）を１つ以上のリモート実行コンテナにおいて実行し、これをＪａｖａ（ＴＭ）プログラミング言語コードが実行される同一または異なるコンピューティング・デバイス（例えば分割されたバーチャル・マシン）上で別個のプロセスでホストすることができることが観察された。更に、分割されたバーチャル・マシンについては、ネイティブ・コードは、ＪＶＭ（Ｒ）とは別個に実行していること、およびこの別個であることによって不正動作をするネイティブ・コードがＪＶＭ（Ｒ）を不安定化させるのを防ぐと共にネイティブ・コードをメインＪＶＭ（Ｒ）とは異なる環境で実行可能である（例えばセキュリティ・コンテキスト、ポインタ幅、エンディアン（endian）等）ことを認識していないことも観察された。しかしながら、かかる分割されたバーチャル・マシンにおいては、Ｊａｖａ（ＴＭ）プログラミング言語コードとネイティブ・コードとの間のメソッド／手順コール（例えばプロセス間／マシン間コール）のコストは、非分散型バーチャル・マシンに比べて、実施にもよるが潜在的に１桁以上はオーバーヘッドおよびレイテンシが大きく、更に、分散型コード・セクション間の往復通信は、時間の消費、帯域幅の消費、および処理の遅延があることも観察された。また、標準化されたＪａｖａ（ＴＭ）ネイティブ・インタフェース（ＪＮＩ）では、アクションの完了に必要な情報を得るためにアプリケーションが多数のコールを実行しなければならないことが多いことも観察された。例えば、オブジェクト内のフィールドのコンテンツを得るため、アプリケーションは最初にオブジェクトのクラスを得るためのコールを行い、次いでクラスのフィールドの識別子（ＩＤ）を得るためのコールを行い、次いでフィールド自体のコンテンツを得るためのコールを行い、この結果プロセス間メッセージは６個となる。更に、分散型ＪＶＭ（Ｒ）では、これらの６個のメッセージ／ステップの各々が時間のかかる往復を伴うことが観察された。これらのいくつかの観察を考慮して、通信のレイテンシ、帯域幅、および処理時間を低減するためにデータ・ミラーリングを使用可能であること、更に、データ・ミラーリングはアプリケーション・レベルの構造から隠すことができ、アプリケーションのためのアプリケーション・プログラミング・インタフェース（ＡＰＩ）に変更を加えずに、かかるＡＰＩを利用する今後および既存のアプリケーションに対してデータ・ミラーリングをトランスペアレントとすることができることが認識された。本主題は、上述し更に以下で詳述するように、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングを提供することによって、分散型バーチャル・マシン内でそのような処理に関連したオーバーヘッドおよびレイテンシを改善する。このように、本明細書に記載する技術を用いることで、分散型バーチャル・マシンのための動作改善を実現することができる。
【００２５】
本明細書に記載する分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングは、リアルタイムで実行して、バーチャル・マシンの分散型プロセス間の迅速なデータ・ミラーリングを可能とすることができる。本記載の目的のため、リアルタイムは、ここに記載する主題のユーザにとって許容可能である情報処理の妥当な応答時間を与えることに関して、充分に短い持続時間のいずれかの期間を含むものとする。更に、「リアルタイム」という言葉は、一般に「準リアルタイム」と言われるものを含む。これは概ね、ここに記載する主題のユーザにとって許容可能であるオンデマンド情報処理の妥当な応答時間を与える充分に短い持続時間の任意の期間を意味する（例えば１秒の何分の１か、または数秒内）。これらの言葉は、正確に定義することは困難であるが、当業者には充分に理解されている。
【００２６】
図１は、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのためのシステム１００の実施の一例のブロック図である。コンピューティング・デバイス＿１  １０２は、ネットワーク１０４を介してコンピューティング・デバイス＿２  １０６乃至コンピューティング・デバイス＿Ｎ１０８と通信する。コンピューティング・デバイス＿  １０２はリモート実行コンテナ１１０を実行し、これはコンピューティング・デバイス＿１  １０２乃至コンピューティング・デバイス＿Ｎ１０８の１つが実行するバーチャル・マシン１１２とインタフェースして分散型バーチャル・マシンを形成する。バーチャル・マシン１１２は例えば、所与の実施に合わせて適宜、Ｊａｖａ（ＴＭ）バーチャル・マシン（ＪＶＭ（Ｒ））または他のＪａｖａ（ＴＭ）プログラミング言語プロセスを含むことができる。リモート実行コンテナ１１０およびバーチャル・マシン１１２は、単一のコンピューティング・デバイス＿１  １０２内に一緒に配置されるか、または異なるコンピューティング・デバイス間で物理的に分散されるか、いずれにしても異なるプロセス／スレッドによって動作される。
【００２７】
リモート実行コンテナ１１０は、１つのプロセス／スレッドにおいて実行しているネイティブ・コード（例えばＣまたはＣ＋＋プログラミング言語コードあるいはその両方）を含み、これは、異なるプロセス／スレッド（または所与の実施に合わせて適宜、デバイス）において実行しているバーチャル・マシン１１２内のＪａｖａ（ＴＭ）プログラミング言語コードとインタフェースする。ネイティブ・コード実施のために、Ｃ／Ｃ＋＋プログラミング言語コール規則をサポート可能である任意の言語で書かれたコードを利用可能であることに留意すべきである。このように、本明細書において参照を容易にするためにＣおよびＣ＋＋を用い、ＣまたはＣ＋＋プログラミング言語あるいはその両方に対するいずれかの参照を含む本明細書におけるネイティブ・コードに対するいずれかの参照は、他のそのような言語（複数の言語）のいかなるものに対する参照も含むとみなされる。また、コンピューティング・デバイス＿２  １０６乃至コンピューティング・デバイス＿Ｎ１０８の各々内のバーチャル・マシン１１２を点線で示すことでバーチャル・マシン１１２のロケーションに対する柔軟性を表すことに留意すべきである。また、本主題の範囲から逸脱することなく、リモート実行コンテナ１１０は、コンピューティング・デバイス＿２  １０６乃至コンピューティング・デバイス＿Ｎ１０８の１つ以上の内部でも動作可能であることも留意すべきである。
【００２８】
各コンピューティング・デバイス１０２乃至１０８は、ユーザがコンピューティング・デバイスを異なる位置に移動させることができること、または各コンピューティング・デバイスが飛行機、電車、自動車、もしくは他の移動手段等の携帯型プラットフォームに関連付けられることのいずれかによって、携帯型コンピューティング・デバイスとすることができる。また、各コンピューティング・デバイスは、上述し更に以下でも詳述するような情報を処理することができるいずれかのコンピューティング・デバイスであり得ることに留意すべきである。例えばコンピューティング・デバイスは、パーソナル・コンピュータ（例えばデスクトップ、ラップトップ等）、またはハンドヘルド・デバイス（例えばセル式電話、パーソナル・デジタル・アシスタント（ＰＤＡ）、電子メール・デバイス、音楽記録もしくは再生デバイス、時計等）、サーバ・デバイス、または以下で詳述するような情報を処理することができる他のいずれかのデバイス等のデバイスを含むことができる。
【００２９】
ネットワーク１０４は、イントラネットまたはインターネット等の私的または公的ネットワーク、直接モジュール間相互接続、ダイヤルアップ、無線、または各デバイスを相互接続することができる他のいずれかの相互接続機構を含めて、意図する目的に適した相互接続のいずれかの形態を含むことができる。
【００３０】
図２は、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングを実行可能なコア処理モジュール２００の実施の一例のブロック図である。コア処理モジュール２００は、所与の実施に合わせて適宜、コンピューティング・デバイス＿１  １０２乃至コンピューティング・デバイス＿Ｎ１０８の各々に関連付けることができる。更にコア処理モジュール２００は、以下で詳述するように、各実施に関連付けられたデータ・ミラーリングの異なる処理および補足的な処理を提供することができる。
【００３１】
このように、以下の例のいずれの場合であっても、ある１つのデバイスに関して記載された機能性の態様について（例えば送信する／送信している等）、そのデバイスが他のデバイスと組み合わせて記載されていれば、その他のデバイスの機能性（例えば受信する／受信している等）を同時に記載するものとして理解されることは理解されよう。更に、単一のデバイス上で異なるプロセス／スレッドを用いた分散型バーチャル・マシン実施では、送信および受信はそれらのプロセス／スレッド間で動作すると理解される。
【００３２】
中央処理装置（ＣＰＵ）２０２は、コンピュータ命令の実行、演算、およびコア処理モジュール２００内の他の性能（capability）を提供する。ディスプレイ２０４はコア処理モジュール２００のユーザに視覚情報を提供し、入力デバイス２０６はユーザに入力性能を提供する。
【００３３】
ディスプレイ２０４は、ブラウン管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）、発光ダイオード（ＬＥＤ）、電子インク・ディスプレイ、投影、タッチスクリーン、または他のディスプレイ要素もしくはパネル等、いずれかのディスプレイ・デバイスを含むことができる。入力デバイス２０６は、コンピュータ・キーボード、キーパッド、マウス、ペン、ジョイスティック、またはユーザがディスプレイ２０４と相互作用してディスプレイ２０４上の情報に応答することを可能とする他のいずれかのタイプの入力デバイスを含むことができる。
【００３４】
図２内でディスプレイ２０４および入力デバイス２０６を点線表示で図示することで、いくつかの実施ではこれらがコア処理モジュール２００の任意選択のコンポーネントであり得ることを示すことに留意すべきである。従ってコア処理モジュール２００は、直接的なユーザによる構成可能性（configurability）もフィードバックも与えない完全自動化埋め込みデバイスとして動作する場合がある。しかしながら、コア処理モジュール２００は、ディスプレイ２０４および入力デバイス２０６を介してユーザ・フィードバックおよび構成機能をそれぞれ提供することも可能である。
【００３５】
通信モジュール２０８は、コア処理モジュール２００がシステム１００内の他のモジュールと通信することを可能とする相互接続性能を提供する。通信モジュール２０８は、相互接続性能を提供するために使用可能ないずれかの電気的性能、プロトコル性能、およびプロトコル変換性能を含むことができる。図示および記載を容易にする目的のために通信モジュール２０８をコンポーネント・レベルのモジュールとして示すが、通信モジュール２０８は、上述し更に以下でも詳述するような通信モジュール２０８の機能を実行するために用いられるいずれかのハードウェア、プログラムされたプロセッサ（複数のプロセッサ）、およびメモリを含むことも可能であることに留意すべきである。例えば通信モジュール２０８は、通信モジュール２０８に関連した通信および電気的制御アクティビティを実行するための特定用途向け集積回路（ＡＳＩＣ）、プロセッサ、アンテナ、またはディスクリート集積回路およびコンポーネントあるいはそれら全ての形態で追加のコントローラ回路を含むことができる。更に通信モジュール２０８は適宜、割込みレベル、スタック・レベル、およびアプリケーション・レベルのモジュールを含むこともある。更に通信モジュール２０８は、通信モジュール２０８に関連した処理アクティビティを実行するための記憶、実行、およびデータ処理に用いられるいずれかのメモリ・コンポーネントを含むことができる。また通信モジュール２０８は、本主題の範囲から逸脱することなく、記載する他の回路の一部を形成する場合もある。
【００３６】
メモリ２１０は、リモート実行コンテナ１１０およびバーチャル・マシン１１２を含む。リモート実行コンテナ１１０およびバーチャル・マシン１１２の各々は、分散型エンハンスＪａｖａ（ＴＭ）ネイティブ・インタフェース（ＪＮＩ）・モジュール２１２とインタフェースする。分散型エンハンスＪａｖａ（ＴＭ）ネイティブ・インタフェース（ＪＮＩ）・モジュール２１２は２つのインタフェース・コンポーネントを含む。すなわち、分散型エンハンス・リモート実行コンテナ（ＲＥＣ）ＪＮＩコンポーネント２１４および分散型エンハンス・バーチャル・マシン（ＶＭ）ＪＮＩコンポーネント２１６であり、これらは相互作用して分散型エンハンスＪＮＩモジュール２１２の機能性を提供する。分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４は更にリモート実行コンテナ１１０とインタフェースし、分散型エンハンスＶＭ  ＪＮＩコンポーネント２１６は更にバーチャル・マシン１１２とインタフェースする。
【００３７】
分散型エンハンスＪＮＩモジュール２１２は、追加の不変データを用いて参照要求またはデータ要求あるいはその両方に応答することによって本主題を実施するように動作する。分散型エンハンスＪＮＩモジュール２１２は、不変データのためのデータ・ミラーを生成してリモート実行コンテナ１１０とバーチャル・マシン１１２との間の通信相互作用を削減することによって本主題を実施するように動作する。データ・ミラー記憶エリア２１８は、上述し更に以下で詳述するように、生成したデータ・ミラーを記憶する。
【００３８】
メモリ２１０は、意図する目的に適した揮発性および不揮発性メモリのいずれかの組み合わせを、分散型または局在型で適宜含むことができ、例示を容易にする目的のために本例に示していない他のメモリ・セグメントを含む場合もあることは理解されよう。例えばメモリ２１０は、本主題の範囲から逸脱することなく、コード記憶エリア、オペレーティング・システム記憶エリア、コード実行エリア、およびデータ・エリアを含むことができる。
【００３９】
また、本明細書に記載する分散型エンハンスＪＮＩ機能性の代替的な実施として、分散型エンハンスＪＮＩモジュール２２０を示している。分散型エンハンスＪＮＩモジュール２２０は、分散型エンハンスＪＮＩモジュール２１２のハードウェア・モジュールの実施を表す。このため、リモート実行コンテナ１１０およびバーチャル・マシン１１２は、分散型エンハンスＪＮＩモジュール２２０を介してインタフェースして各モジュールに関連付けられた各処理を実行することができ、または、本主題の範囲から逸脱することなく分散型エンハンスＪＮＩモジュール２１２をプロセス・レベルで実施することも可能である。
【００４０】
分散型エンハンスＪＮＩモジュール２２０は、単一プラットフォームの実施において、分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４および分散型エンハンスＶＭ  ＪＮＩコンポーネント２１６の双方を実施することができる。あるいは、分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４および分散型エンハンスＶＭ  ＪＮＩコンポーネント２１６の一方を各々が実施する多数の補足的な分散型エンハンスＪＮＩモジュール２２０を、異なるデバイス上で利用して、多数のプラットフォームで分散型エンハンスＪＮＩモジュール２２０を実施することができる。
【００４１】
図示および記載を容易にする目的のため、分散型エンハンスＪＮＩモジュール２２０をコンポーネント・レベルのモジュールとして示すが、分散型エンハンスＪＮＩモジュール２２０は、上述し更に以下でも詳述するようなこのモジュールの機能を実行するために用いられるいずれかのハードウェア、プログラムされたプロセッサ（複数のプロセッサ）、およびメモリを含み得ることに留意すべきである。例えば分散型エンハンスＪＮＩモジュール２２０は、各デバイスに関連した通信および電気的制御アクティビティを実行するための特定用途向け集積回路（ＡＳＩＣ）、プロセッサ、またはディスクリート集積回路およびコンポーネントあるいはそれら全ての形態で追加のコントローラ回路を含むことができる。更に分散型エンハンスＪＮＩモジュール２２０は適宜、割込みレベル、スタック・レベル、およびアプリケーション・レベルのモジュールを含むこともある。更に分散型エンハンスＪＮＩモジュール２２０は、モジュールに関連した処理アクティビティを実行するための記憶、実行、およびデータ処理に用いられるいずれかのメモリ・コンポーネントを含むことができる。
【００４２】
分散型エンハンスＪＮＩモジュール２２０は、本主題の範囲から逸脱することなく、記載する他の回路の一部を形成する場合もあることに留意すべきである。あるいは、分散型エンハンスＪＮＩモジュール２２０を上述したもの等のメモリ２１０内に記憶されたアプリケーションとして実施することも可能である。かかる実施において、分散型エンハンスＪＮＩモジュール２２０は、本明細書に記載する機能性を実行するためにＣＰＵ２０２が実行する命令を含むことができる。ＣＰＵ２０２はこれらの命令を実行して、上述し更に以下でも詳述する処理性能をコア処理モジュール２００に提供することができる。分散型エンハンスＪＮＩモジュール２２０は、本主題の範囲から逸脱することなく、割込みサービス・ルーチン（ＩＳＲ）の一部、オペレーティング・システムの一部、ブラウザ・アプリケーションの一部、または別個のアプリケーションの一部を形成することができる。
【００４３】
ＣＰＵ２０２、ディスプレイ２０４、入力デバイス２０６、通信モジュール２０８、メモリ２１０、および分散型エンハンスＪＮＩモジュール２２０は、相互接続２２２を介して相互接続されている。相互接続２２２は、システム・バス、ネットワーク、または各目的のために適切な相互接続を各コンポーネントに提供することができる他のいずれかの相互接続を含むことができる。
【００４４】
コア処理モジュール２００は記載した特定のコンポーネントによって例示され、それらを有するが、本主題の範囲から逸脱することなく他のモジュールおよびコンポーネントをコア処理モジュール２００に関連付けることができる。更に、例示を容易にするためにコア処理モジュール２００を単一のデバイスとして記載するが、本主題の範囲から逸脱することなく、コア処理モジュール２００内のコンポーネントを同一の場所に設置するか、または分散させてネットワークを介して相互接続する場合もあることに留意すべきである。分散型の配置では、ディスプレイ２０４および入力デバイス２０６を販売デバイス、キオスク、または他のロケーションに設置し、ＣＰＵ２０２およびメモリ２１０をローカルまたはリモートのサーバに設置することができる。コア処理モジュール２００のコンポーネントについて他の多くの配置も可能であり、全ては本主題の範囲内であるとみなされる。従って、コア処理モジュール２００は多くの形態を取ることができ、多くのプラットフォームに関連付けることができる。
【００４５】
本記載の目的のため、以下の疑似コード例は、分散型エンハンスＪＮＩモジュール２１２または分散型エンハンスＪＮＩモジュール２２０等の、リモート実行コンテナ１１０等のリモート実行コンテナと連携して動作するネイティブ・インタフェースにおいて発生するアクションを表す。以下の第１の例の疑似コードは、バーチャル・マシンに関連付けられたクラスを見出すためのリモート実行コンテナからバーチャル・マシンへのクエリを表す。
jclass cls = (*env) -> FindClass(env,“com/company/example/TestClass”);
【００４６】
この第１の例の疑似コードを用いて、「ＴｅｓｔＣｌａｓｓ」とう名前のクラスに対するクラス参照を検索することができる。このクラス参照に変数「ｃｌｓ」が割り当てられている。
【００４７】
以下の第２の例の疑似コードは、「ｃｌｓ」変数が参照するクラスのデータ要素に関連付けられたフィールド識別子（ＩＤ）を取得するための要求を表す。
jfieldID a = (*env) -> GetFieldID(env, cls, “a”, “I”);
【００４８】
この第２の例の疑似コードを用いて、「ｃｌｓ」変数で参照されるクラスのデータ要素のフィールド識別子（ＩＤ）を検索することができる。上述のように、フィールド識別子（ＩＤ）は、クラスの所与のインスタンス化に際して変化しないので不変データと見なされる。本例内では、フィールド識別子（ＩＤ）が参照するデータ要素は整数型であり、「ｆｉｎａｌ」とマークされていないので、実際のデータ要素の値は不変でなく経時的に変化し得るようになっていると想定されている。
【００４９】
以下の第３の例の疑似コードは、取得したフィールド識別子が表す整数データ要素に割り当てた値を取得するための要求を表す。
jint avalue = (*env) ->GetIntField(env, allValues, a);
【００５０】
上述のように、本主題の概念に通じる観察に基づいて、これらの３つの動作の各々の結果として、リモート実行コンテナとバーチャル・マシンとの間で１往復の通信が生じる。しかしながら、本主題に基づいて往復通信の数を減らすことができる。これについて以下で図３に関連付けて述べる。
【００５１】
図３は、クラス参照に対する要求に応答して分散型バーチャル・マシン・コンポーネントで構築されたデータ・ミラーを用いた、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングにおけるメッセージ・フロー３００の実施の一例のメッセージ・フロー図である。分散型エンハンスＪＮＩモジュール２１２（または所与の実施に合わせて適宜、分散型エンハンスＪＮＩモジュール２２０）は、分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４および分散型エンハンスＶＭ  ＪＮＩコンポーネント２１６を含むように図示され、これらはリモート実行コンテナ１１０がバーチャル・マシン１１２と相互作用することを可能とするように動作する。
【００５２】
図面内が込み合うため、いくつかのインタフェース通信は明示的な図示なしで記載する。しかしながら、これらのインタフェース通信が図面の一部を形成することは理解されよう。本例の目的のため、例示の疑似コード・セグメントで上述したシーケンス等の処理シーケンスを、図３内に示す各要素によって処理するものと想定する。更に、図３内の処理を開始するには、第１の例の疑似コードに関連付けて上述したように、リモート実行コンテナ１１０におけるネイティブ・コードが、バーチャル・マシン１１２に関連付けられたクラスを識別するための要求（例えば「ＦｉｎｄＣｌａｓｓ」要求）を、分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４に発行することを想定する。
【００５３】
ブロック３０２において、リモート実行コンテナ１１０に関連付けられた分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４は、リモート実行コンテナ１１０から、バーチャル・マシン１１２に関連付けられたクラスへの参照に対する要求を受信し（例えば「Ｆｉｎｄ  Ｃｌａｓｓ」または「ＦｉｎｄＣｌａｓｓ」要求）、バーチャル・マシン１１２に関連付けられたクラスを識別するクエリを発行するための処理を開始する。上述のようにバーチャル・マシン１１２は、同一のコンピューティング・デバイス上の別個のプロセス内で、またはリモート実行コンテナ１１０とは別個のコンピューティング・デバイス上で実行する別個のプロセスとして、分散させることができる。
【００５４】
分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４は、「Ｆｉｎｄ  Ｃｌａｓｓ」要求を発行する（ライン１）。ブロック３０４において、バーチャル・マシン１１２に関連付けられた分散型エンハンスＶＭ  ＪＮＩコンポーネント２１６は、この要求を受信してクラスを識別し、更にこのクラスに関連付けられた不変データを検索する。ブロック３０６において、分散型エンハンスＶＭ  ＪＮＩ２１６は、分散型エンハンスＶＭ  ＪＮＩ２１６を実行しているデバイスに関連付けられたメモリ２１０のデータ・ミラー記憶エリア２１８等のメモリ内において要求内で参照されたクラスのためのデータ・クラス・データ構造を構築する。これは、識別したクラスから識別され検索された全ての不変データを含む。データ・ミラー記憶エリア２１８は、プロセス間またはデバイス間の通信に関連付けられたパケット処理エリアの一部を形成することができる。分散型エンハンスＶＭ  ＪＮＩコンポーネント２１６は、不変データおよびクラス参照と共にデータ・ミラー・データ構造を、リモート実行コンテナ１１０に関連付けられた分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４に戻す（ライン２）。
【００５５】
あるいは、所与の実施に合わせて適宜、分散型エンハンスＶＭ  ＪＮＩコンポーネント２１６は、データ・パケット・ペイロード充填を用いて、不変データの一部を含むデータ・ミラー・データ構造を戻すことも可能であり、追加データの要求に応じて経時的に更に多くのデータを含むようにデータ・ミラー・データ構造を構築することも可能であることに留意すべきである。本例内では、少なくともクラスのデータ要素のためのフィールド識別子がクラスを参照してデータ・ミラー内で戻されると想定されている。例えば、メソッド名／識別子、フィールド名／識別子、および静的ファイナル・フィールド値／フィールド識別子を戻すことができる。
【００５６】
データ・ミラー・データ構造の受信に応答して、データ・ミラー・データ構造は、メモリ２１０分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４によってメモリ２１０のデータ・ミラー記憶エリア２１８内等に記憶される。データ・ミラーへの参照がリモート実行コンテナ１１０に戻される（図示せず）。
【００５７】
ブロック３０８において、分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４は、リモート実行コンテナ１１０から、データ・ミラー・データ構造が先に受信され記憶されたクラスに関連付けられたデータ・フィールド識別子に対する要求（例えば「Ｇｅｔ  Ｆｉｅｌｄ  Ｉｄｅｎｔｉｆｉｅｒ」を受信する。しかしながら、バーチャル・マシン１１２に関連付けられた分散型エンハンスＶＭ  ＪＮＩコンポーネント２１６に要求を直接発行するのでなく、分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４は、そのクラスについて記憶したデータ・ミラー・データ構造を調べて、要求に関連付けられたフィールド識別子がすでにデータ・ミラー・データ構造内に記憶されているか否かを判定する。本例内では上述のように、初期の要求に応答して全てのフィールド識別子がデータ・ミラー・データ構造に戻されて記憶されている。このためブロック３１０において、データ・フィールド識別子（ＩＤ）は記憶されたローカルのデータ・ミラー・データ構造内で識別されてそこから抽出され、リモート実行コンテナ１１０に戻される。従って、分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４は、ローカルのデータ・ミラー・データ構造を用いることで、バーチャル・マシン１１２に関連付けられた分散型エンハンスＶＭ  ＪＮＩコンポーネント２１６に対する要求をなくすと共に、フィールド識別子の要求に関連した往復による遅延全部をなくす。
【００５８】
本例の目的のため、要求されたフィールドＩＤは整数値を表し、この整数はクラスへの参照に対する初期要求時に「ｆｉｎａｌ」とマークされていなかったと想定する。このため、整数値は不変データでなく、分散型エンハンスＶＭ  ＪＮＩコンポーネント２１６が生成したデータ・ミラー内で戻されなかった。しかしながら、「ｆｉｎａｌ」とマークされたいかなる値または識別子も不変と見なすことができ、これをデータ・ミラー・データ構造に追加して、これらのファイナル値または識別子の要求に関連付けられたプロセス間通信を削減することができることに留意すべきである。
【００５９】
ブロック３１２において、分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４は、リモート実行コンテナ１１０から、記憶したローカルのデータ・ミラー・データ構造から検索したフィールド識別子に関連付けられた整数フィールド値に対する要求（例えば「Ｇｅｔ  Ｉｎｔｅｇｅｒ  Ｆｉｅｌｄ」）を受信する。分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４は、「Ｇｅｔ  Ｉｎｔｅｇｅｒ  Ｆｉｅｌｄ」要求を、バーチャル・マシン１１２に関連付けられた分散型エンハンスＶＭ  ＪＮＩコンポーネント２１６に発行する（ライン３）。ブロック３１４において、分散型エンハンスＶＭ  ＪＮＩコンポーネント２１６は、整数値に対する要求を処理し、整数データ値を検索する。分散型エンハンスＶＭ  ＪＮＩコンポーネント２１６は、整数値を分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４に戻す（ライン４）。ブロック３１６において、分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４は、整数データを要求側のリモート実行コンテナ１１０に戻す。
【００６０】
このように、メッセージ・フロー図３００によって、クラス参照に対する第１の要求に応答してデータ・ミラー・データ構造内で不変データを戻すことができること、および、不変データに対する以降の要求はローカルに記憶したデータ・ミラー・データ構造から処理することができることが示される。従って、不変データに対する別個のプロセス間要求をなくすことができる。上述のように、例えばデータ識別子の要求またはデータ値のファイナライズあるいはその両方に応じて等、ある時間にわたってデータ・ミラーを充填することによってプロセス間帯域幅使用を最適化することも可能である。
【００６１】
図４は、メモリ２１０のデータ・ミラー記憶エリア２１８内に記憶されたデータ・ミラー・データ構造４００の実施の一例のブロック図である。データ・ミラー・データ構造４００はローカル・クラス参照４０２を含み、これは、データ・ミラー・データ構造４００が表す特定のデータ・ミラー・データ構造に関連付けられたクラスを参照する。フィールド識別子（ＩＤ＿１）４０４乃至フィールド識別子（ＩＤ＿Ｎ）４０６は各々、参照されたクラス内のデータ・フィールドを表すフィールド識別子およびフィールド名／タイプ・データの対を含む。メソッド識別子（ＩＤ＿１）４０８乃至メソッド識別子（ＩＤ＿Ｎ）４１０は各々、参照されたクラス内のメソッドを表すメソッド識別子およびメソッド名／タイプ・データの対を含む。上述のように、追加の不変データ値をデータ・ミラー・データ内に記憶することができ、全てのそのようなフィールドは本主題の範囲内であるとみなされる。データ・ミラー・データ構造４００を、上述し更に以下で詳述するように用いて、不変データにローカルにアクセスすると共に、プロセス間の往復通信を削減することができる。
【００６２】
以下に記載する図５から図８は、コア処理モジュール２００等のデバイスによって実行されて、本主題に関連した分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングを実行可能である例示のプロセスを表す。この例示のプロセスには他の多くの変形が可能であり、それらは全て本主題の範囲内であるとみなされる。例示のプロセスは、かかるデバイスに関連付けて、分散型エンハンスＪＮＩモジュール２２０等のモジュールによって実行するか、またはＣＰＵ２０２もしくは分散型エンハンスＪＮＩモジュール２１２のサブコンポーネントの一方もしくは双方によって実行するか、あるいはその両方とすることができる。例示を容易にする目的のため、以下で記載する例示のプロセス内にタイムアウト手順および他のエラー制御手順は示さないことに留意すべきである。しかしながら、全てのそのような手順が本主題の範囲内であるとみなされることは理解されよう。更に、記載するプロセスを組み合わせること、記載する処理シーケンスを変更すること、および更に処理を追加することを、本主題の範囲から逸脱することなく実行可能である。
【００６３】
図５は、分散型エンハンス・リモート実行コンテナ（ＲＥＣ）・ネイティブ・インタフェース・モジュールにおける、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのプロセス５００の実施の一例のフローチャートである。ブロック５０２においてプロセス５００は、リモート実行コンテナからデータ・コンテナへの参照に対する初期要求を受信したことに応答して、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントから、分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントに、データ・コンテナへの参照に対する初期要求を送信する。ブロック５０４においてプロセス５００は、データ・コンテナへの参照に対する初期要求に応答して不変データおよびデータ・ンテナへの参照を含むデータ・ミラー・データ構造を受信する。ブロック５０６においてプロセス５００は、不変データおよびデータ・コンテナへの参照を含む受信したデータ・ミラー・データ構造をローカル・メモリ記憶エリア内に記憶する。ブロック５０８においてプロセス５００は、データ・コンテナへの参照に対する初期要求に応答して、ローカルに記憶したデータ・ミラー・データ構造への参照をリモート実行コンテナに戻す。
【００６４】
図６は、分散型エンハンス・バーチャル・マシン（ＶＭ）・ネイティブ・インタフェース・モジュールにおける、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのプロセス６００の実施の一例のフローチャートである。ブロック６０２においてプロセス６００は、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントから、分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントにおいて、データ・コンテナへの参照に対する初期要求を受信する。ブロック６０４においてプロセス６００は、データ・コンテナへの参照に対する初期要求の受信に応答して、データ・コンテナ内の不変データを識別する。ブロック６０６においてプロセス６００は、識別した不変データおよびデータ・コンテナへの要求された参照を含むデータ・ミラー・データ構造を構築する。ブロック６０８においてプロセスは、データ・コンテナへの参照に対する初期要求に応答して、識別した不変データおよびデータ・コンテナへの要求された参照を含むデータ・ミラー・データ構造を、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントに送信する。
【００６５】
図７乃至図８は、分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４等の、分散型エンハンス・リモート実行コンテナ（ＲＥＣ）Ｊａｖａ（ＴＭ）ネイティブ・インタフェース（ＪＮＩ）・モジュールにおける、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのプロセス７００の実施の一例のフローチャートである。図７はプロセス７００内の初期プロセスである。上述のように、Ｊａｖａ（ＴＭ）バーチャル・マシン・ツール・インタフェース（ＪＶＭＴＩ）に関連付けて等、いくつかのデバッギング動作中に不変データの処理をディスエーブルする場合があることに留意すべきである。図７および図８の図面の空間内が込み合うので、不変データ処理のイネーブルおよびディスエーブルに関するこのデバッギング判定は図面から省略している。しかしながら、この処理がプロセス７００の一部を形成することは理解されよう。デバッグ・イネーブル判定の例示的な処理については、参照のため図８に関連付けて以下で述べる。
【００６６】
決定点７０２においてプロセス７００は、リモート実行コンテナ１１０等のリモート実行コンテナからデータ・コンテナへの参照に対する初期要求の受信が検出されたか否かの判定を行う。初期要求は例えば、クラス参照に対する初期要求とすることができる（例えば上述のようなＦｉｎｄ  Ｃｌａｓｓ要求）。データ・コンテナへの参照に対する初期要求が検出されたという判定に応答して、プロセス７００はブロック７０４において、分散型エンハンスＶＭ  ＪＮＩコンポーネント２１６等の分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントに、データ・コンテナへの参照に対する初期要求を送信する。
【００６７】
ブロック７０６においてプロセス７００は、データ・コンテナへの参照に対する初期要求に応答して不変データおよびデータ・コンテナへの参照を含むデータ・ミラー・データ構造を受信する。データ・コンテナへの参照はデータ・ミラー・データ構造に埋め込み可能であることに留意すべきである。更に、上述のようにデータ・ミラー・データ構造は全ての不変データを含むことができるか、または、分散型エンハンス・バーチャル・マシン・コンポーネントによる帯域幅消費のために初期応答を最適化するように、例えば単一パケット内で配信され得るのと同量の不変データを送信するべくパケット・ペイロード充填を用いることによって、部分的なパケット・ペイロードを消費することなく、ある時間にわたってデータ・ミラー・データ構造を構築することも可能である。このように、不変データのある部分が要求されず、分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントによって最初に送信されない場合、これらの部分はローカルに記憶したデータ・ミラー・データ構造内に送信も記憶もされない。
【００６８】
ブロック７０８においてプロセス７００は、不変データおよびデータ・コンテナへの参照を含む受信したデータ・ミラー・データ構造を、メモリ２１０のデータ・ミラー記憶エリア２１８等のローカル・メモリ記憶エリア内に記憶する。ブロック７１０においてプロセス７００は、データ・コンテナへの参照に対する初期要求に応答してローカルに記憶したデータ・ミラー・データ構造への参照をリモート実行コンテナに戻す。このため、リモート実行コンテナはこの時点で、ローカルに記憶したデータ・ミラー・データ構造への参照を有し、これは、データ・コンテナに関連付けられたデータに対する以降の要求のために使用可能であり、データ・ミラー・データ構造内のいかなる不変データもローカル記憶から検索することができるので、データ・コンテナから不変データを検索するための追加の往復通信は必要でない。
【００６９】
決定点７０２の説明に戻ると、リモート実行コンテナからのデータ・コンテナへの参照に対する初期要求の受信が検出されなかったことの判定に応答して、またはブロック７１０においてローカルに記憶したデータ・ミラー・データ構造への参照をリモート実行コンテナに戻すことが完了したことに応答して、プロセス７００は決定点７１２において、リモート実行コンテナからの、データ・コンテナに関連付けられた追加データ・アイテムに対する要求が検出されたか否かの判定を行う。リモート実行コンテナからの、データ・コンテナに関連付けられた追加データ・アイテムに対する要求が検出されたという判定に応答して、プロセス７００は、データ・コンテナに関連付けられた追加データ・アイテムに対する要求の処理を開始し、決定点７１４において、要求された追加データ・アイテムが不変データに対するものであるか否かの判定を行う。要求された追加データ・アイテムが不変データに対する要求であるという判定に応答して、プロセス７００は決定点７１６において、要求された不変データがローカルに記憶したデータ・ミラー・データ構造内で利用可能であるか否かの判定を行う。
【００７０】
決定点７１６における、データ・コンテナに関連付けられた追加データ・アイテムに対する要求が、ローカルに記憶したデータ・ミラー・データ構造内で利用可能な不変データに対する要求を含むという判定に応答して、決定点７１８においてプロセス７００は、ローカルに記憶したデータ・ミラー・データ構造から要求された不変データを抽出する。要求されたデータが不変であり、不変データがデータ・ミラー・データ構造に記憶されている場合、分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントにコールを返すことなく、ローカルに記憶したデータ・ミラー・データ構造からこの不変データが抽出されることに留意すべきである。ブロック７２０においてプロセス７００は、追加データ・アイテムに対する要求に応答して要求された不変データをリモート実行コンテナに戻す。ブロック７２０の後のプロセス７００内での追加処理については以下で詳細に説明する。
【００７１】
決定点７１４の説明に戻ると、要求された追加データ・アイテムが不変データに対する要求でないという判定に応答して、または決定点７１６における要求された不変データがローカルに記憶したデータ・ミラー・データ構造内で利用可能でないという判定に応答して、プロセス７００はブロック７２２において、ローカルに記憶したデータ・ミラー・データ構造から、データ・ミラー・データ構造と共に戻されたデータ・コンテナへの参照を抽出する。ブロック７２４においてプロセス７００は、データ・コンテナへの抽出した参照と共に、データ・コンテナに関連付けられた追加データ・アイテムに対する要求を、分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントに送信する。ブロック７２６においてプロセス７００は、分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントから、要求した追加データ・アイテムおよび追加の不変データを受信する。追加の不変データは、最初にデータ・ミラー・データ構造と共に受信されなかった不変データを含むことができ、更に、「ｆｉｎａｌ」データ値とマークされた変数等の他の不変データ・アイテムも含むことができる。
【００７２】
ブロック７２８においてプロセス７００は、追加の不変データをローカルに記憶したデータ・ミラー・データ構造に記憶する。ブロック７３０においてプロセス７００は、要求された追加データ・アイテムをリモート実行コンテナに戻す。要求された追加データ・アイテムは不変または非不変データであり得るが、全ての不変データが初期データ・ミラー・データ構造と共に最初に送信されなかった場合には、応答帯域幅を利用して追加の不変データを送信して、ローカルに記憶したデータ・ミラー・データ構造を充填することも可能であることに留意すべきである。
【００７３】
決定点７１２の説明に戻ると、リモート実行コンテナからの、データ・コンテナに関連付けられた追加データ・アイテムに対する要求が検出されなかったという判定に応答して、または、ブロック７２０または７３０あるいはその両方において、要求された追加データ・アイテムをリモート実行コンテナに戻したことに応答して、プロセス７００は決定点７３２において、手順、ルーチン、またはメソッド・コール呼び出しによって等、いずれかのローカルに記憶したデータ・ミラー・データ構造の寿命管理を実行するための要求が検出されたか否かの判定を行う。いずれかのローカルに記憶したデータ・ミラー・データ構造の寿命管理を実行するための要求が検出されなかったという判定に応答して、プロセス７００は決定点７０２に戻り、上述のように反復する。いずれかのローカルに記憶したデータ・ミラー・データ構造の寿命管理を実行するための要求が検出されたという判定に応答して、プロセス７００は図８に関連して図示し記載する処理に移行して、ローカルに記憶したデータ・ミラー・データ構造の要求された寿命管理の実行を開始する。
【００７４】
図８は、分散型エンハンスＲＥＣ  ＪＮＩモジュールにおける、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのプロセス７００に関連付けられた追加プロセスを示す。決定点７３４においてプロセス７００は、寿命管理を実行するための検出された要求が、ローカルに記憶したデータ・ミラー・データ構造への参照をパラメータとして含むＤｅｌｅｔｅＬｏｃａｌＲｅｆｅｒｅｎｃｅルーチンに対するコールの呼び出しの検出であったか否かの判定を行う。ＤｅｌｅｔｅＬｏｃａｌＲｅｆｅｒｅｎｃｅルーチンに対するコールの呼び出しが検出されたという判定に応答して、プロセス７００はブロック７３６において、データ・ミラー・データ構造への参照を用いてデータ・ミラー・データ構造に割り当てられたメモリを解放する。プロセス７００は図７に関連付けて記載したプロセスの決定点７０２に戻り、上述のように反復する。
【００７５】
決定点７３４の説明に戻ると、寿命管理を実行するための検出された要求がＤｅｌｅｔｅＬｏｃａｌＲｅｆｅｒｅｎｃｅルーチンの呼び出しでなかったという判定に応答して、プロセス７００は決定点７３８において、寿命管理を実行するための検出された要求がリモート実行コンテナにおけるネイティブ・メソッドの実行の完了の検出であったか否かの判定を行う。リモート実行コンテナにおけるネイティブ・メソッドの実行の完了が検出されたという判定に応答して、プロセス７００はブロック７４０において、そのメソッドの範囲における全ての残りの非グローバルなローカルに記憶したデータ・ミラー・データ構造のためのメモリを解放する。プロセス７００は図７に関連付けて記載した処理の決定点７０２に戻り、上述のように反復する。
【００７６】
決定点７３８の説明に戻ると、寿命管理を実行するための検出された要求がリモート実行コンテナにおけるネイティブ・メソッドの実行の完了の検出でなかったという判定に応答して、プロセス７００は決定点７４２において、寿命管理を実行するための検出された要求が、ローカルに記憶したデータ・ミラー・データ構造への参照をパラメータとして含むＮｅｗＧｌｏｂａｌＲｅｆルーチンに対するコールの呼び出しの検出であったか否かの判定を行う。ＮｅｗＧｌｏｂａｌＲｅｆルーチンに対するコールの呼び出しが検出されたという判定に応答して、プロセス７００はブロック７４４において、ローカル・メモリ記憶エリア内に新しいグローバル・データ・ミラー・データ構造を生成する。新しいグローバル・データ・ミラー・データ構造の生成は図面のスペースが限られているためブロック７４４に示されているが、いくつかのサブステップを伴う。これらのサブステップは、グローバル参照を取得／獲得するために分散型バーチャル・マシンのバーチャル・マシン（ＶＭ）側に対して（分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェースを介した）リモート・コールを実行し、ＶＭ側からの新しいグローバル参照の受信に応答して新しいグローバル・データ・ミラー・データ構造を生成することを含む。このリモート・コールは他のＪＮＩトラフィックに追加することができ、これによって各プロセス間の往復通信をなくすことができる。更に、新しいグローバル・データ・ミラー・データ構造を生成するためのこの処理は、ローカル・データ・ミラー・データ構造から新しいグローバル・データ・ミラー・データ構造を生成することを含む。ローカル・データ・ミラー・データ構造からグローバル・データ・ミラー・データ構造を生成するために、いくつかの代替案が存在する。例えば、ローカル・データ・ミラー・データ構造を新たに生成したグローバル・データ・ミラー・データ構造にコピーすることができる。あるいは、ローカル参照をグローバル参照で置き換えること等によって、ローカル・データ・ミラー・データ構造をグローバル・データ・ミラー・データ構造に拡張することも可能である。更に、ローカル参照をグローバル参照で置き換えてグローバル・データ・ミラー・データ構造を生成することに関連して、拡張したグローバル・データ・ミラー・データ構造をグローバル・リストに移すことができる。このように、多くの代替案が存在し、それらはすべて本主題の範囲内であると見なされる。実施には無関係に、生成されたグローバル・データ・ミラー・データ構造は、分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントから戻されたデータ・コンテナへの参照およびローカルに記憶したデータ・ミラー・データ構造からの不変データをカプセル化したものであることは理解されよう。ブロック７４６においてプロセス７００は、新しいローカルに記憶したグローバル・データ・ミラー・データ構造へのグローバル参照をリモート実行コンテナに戻す。プロセス７００は図７に関連付けて記載した処理の決定点７０２に戻り、上述のように反復する。
【００７７】
決定点７４２の説明に戻ると、寿命管理を実行するための検出された要求がＮｅｗＧｌｏｂａｌＲｅｆルーチンに対するコールの呼び出しの検出でなかったという判定に応答して、プロセス７００は決定点７４８において、寿命管理を実行するための検出された要求が、新しいローカルに記憶したグローバル・データ・ミラー・データ構造への参照をパラメータとして含むＤｅｌｅｔｅＧｌｏｂａｌＲｅｆルーチンに対するコールの呼び出しの検出であったか否かの判定を行う。ＤｅｌｅｔｅＧｌｏｂａｌＲｅｆルーチンに対するコールの呼び出しが検出されたという判定に応答して、プロセス７００はブロック７５０において、新しいローカルに記憶したグローバル・データ・ミラー・データ構造からグローバル参照を抽出する。ブロック７５２においてプロセス７００は、グローバル参照を削除するためのバーチャル・マシンに対するコールを実行し、ローカルに記憶したグローバル・データ・ミラー・データ構造を削除する。ブロック７５４においてプロセス７００は、ローカルに記憶したグローバル・データ・ミラー・データ構造に割り当てたメモリを解放する。プロセス７００は図７に関連付けて記載した処理の決定点７０２に戻り、上述のように反復する。本例の目的のため、記載した寿命管理アクションの少なくとも１つによって肯定的な判定および処理が行われるという結果が想定されている。このため、決定点７４８における否定分岐は実行されない場合があるけれども、決定点７４８における判定が否定である場合には、プロセス７００は図７に関連付けて記載した処理の決定点７０２に戻って上述のように反復することが想定されている。
【００７８】
このように、プロセス７００は、データ・コンテナへの参照に対する初期要求を分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントに送信したことに応答して、データ・ミラー・データ構造を受信し、これをローカルに記憶する。また、プロセス７００は、不変データに対する以降の要求に応答してローカルに記憶したデータ・ミラー・データ構造を調べ、データがローカルに利用可能である場合にはローカルに記憶したデータ・ミラー・データ構造から要求された不変データを検索する。従ってプロセス７００は、不変データのための往復通信を削減することができる。また、プロセス７００は、ローカルに記憶したデータ・ミラー・データ構造の寿命管理を実行してローカル・メモリ割り当てを管理する。
【００７９】
図９は、分散型エンハンスＶＭ  ＪＮＩコンポーネント２１６等の分散型エンハンス・バーチャル・マシン（ＶＭ）Ｊａｖａ（ＴＭ）ネイティブ・インタフェース（ＪＮＩ）・モジュールにおける、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのプロセス８００の実施の一例のフローチャートである。決定点８０２においてプロセス８００は、分散型エンハンスＲＥＣ  ＪＮＩコンポーネント２１４等、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントからの、データ・コンテナへの参照に対する初期要求の受信が検出されたか否かの判定を行う。初期要求は例えば、クラス参照に対する初期要求（例えば上述のようなＦｉｎｄ  Ｃｌａｓｓ要求）とすることができる。データ・コンテナへの参照に対する初期要求が検出されたという判定に応答して、プロセス８００は決定点８１４において、Ｊａｖａ（ＴＭ）バーチャル・マシン・ツール・インタフェース（ＪＶＭＴＩ）等によるデバッギングがイネーブルされているか否かの判定を行う。上述のように、参考として図９の決定点８０４に示すこの一例の処理は１つのロケーションだけで実施される。しかしながらこのような処理は、所与の実施に合わせて適宜、処理に関連付けられた任意の適当なロケーションにおいても実施することができる。デバッギングがイネーブルされているという判定に応答して、プロセス８００はブロック８０６において、要求された参照を抽出して送信する。要求された参照に対する送信が完了した後のプロセス８００に関連付けられた追加処理については、後で更に詳しく述べる。
【００８０】
決定点８０４の説明に戻ると、デバッギングがイネーブルされていないという判定に応答して、プロセス８００はブロック８０８においてデータ・コンテナ内の不変データを識別する。決定点８１０においてプロセス８００は、全ての利用可能な不変データを送信するか、または、パケット・ペイロード充填により帯域幅を節約する等のために利用可能な不変データの一部を送信するか否かの判定を行う。このため、不変データの一部は、プロセス間データ・パケット・ペイロード・サイズに基づいて選択された不変データ量を含むことができる。利用可能な不変データの一部を送信するという判定に応答して、プロセス８００はブロック８１２において利用可能なプロセス間データ・パケット・ペイロード・サイズを決定する。ブロック８１４においてプロセス８００は、帯域幅の使用を向上させるために、空のペイロード空間が最小となるようできる限り多くの利用可能ペイロードを充填するべく不変データを選択する。この処理は、例えばデータ・タイプ・サイズを考慮に入れて実行することができる。データ・コンテナ内に大きいアレイまたはデータ構造がある状況では、多数のパケットを用いてデータ・ミラー・データ構造を送信することができる。かかる状況では、第２またはそれ以降のパケットを追加の不変データ送信のために処理することにより、空のペイロード空間が最小となるよう最後に送信するパケット内の利用可能ペイロードを充填することができる。
【００８１】
ブロック８１４において送信する不変データの選択が完了したことに応答して、または決定点８１０における全ての不変データを送信するという判定に応答して、プロセス８００はブロック８１６において、識別／選択した不変データおよびデータ・コンテナへの要求された参照を含むデータ・ミラー・データ構造を構築する。この処理は、空のペイロード空間が最小となるようデータ・パケット１つ分以上の利用可能プロセス間データ・パケット・ペイロード・サイズを充填するのに充分なサイズのデータ・ミラー・データ構造を構築することを含むことができる。更に、データ・コンテナへの参照を、データ・ミラー・データ構造内に含ませる／埋め込むことができ、または送信のためにデータ・ミラー・データ構造と共にパッケージ化することができる。ブロック８１８においてプロセス８００は、識別／選択した不変データおよびデータ・コンテナへの要求された参照を含むデータ・ミラー・データ構造を、分散型バーチャル・マシンの要求側の分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントに送信する。
【００８２】
ブロック８１８におけるデータ・ミラー・データ構造を要求側の分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントへの送信が完了したことに応答して、決定点８０２においてデータ・コンテナへの参照に対する初期要求が検出されていないと判定したことに応答して、またはブロック８０６において要求された参照を抽出および送信したことに応答して（デバッグ・モードである場合）、プロセス８００は決定点８２０において、データ・コンテナ内の追加データ・アイテムに対する要求が検出されたか否かの判定を行う。決定点８２０における肯定的な判定に応答してデバッグ・イネーブルに関する追加の判定を実行可能であること、およびこの追加の判定は図面内の空間が限られているために図面から省略したことに留意すべきである。データ・コンテナ内の追加データ・アイテムに対する要求が検出されていないという判定に応答して、プロセス８００は決定点８０２に戻り、上述のように反復する。
【００８３】
決定点８２０においてデータ・コンテナ内の追加データ・アイテムに対する要求が検出されたという判定に応答して、プロセス８００はブロック８２０においてデータ・コンテナから要求された追加データ・アイテムを抽出する。データ・コンテナからの要求された追加データ・アイテムは不変または非不変データであり得ることに留意すべきである。
【００８４】
決定点８２４においてプロセス８００は、データ・コンテナからの要求された追加データ・アイテムと共に送信するために、追加の不変データが利用可能であるか否かの判定を行う。追加の不変データは例えば、データ・コンテナへの初期参照に対する要求に応答しては送信されなかった不変データ、（例えばパケット・ペイロード最適化のために）データ・コンテナからの追加データに対する前の要求に応答しては送信されなかった不変データ、「ｆｉｎａｌ」データ値としてマークされたデータ変数、および他の形態の不変データを含むことができる。
【００８５】
要求された追加データ・アイテムと共に送信するために追加の不変データが利用可能であるという判定に応答して、プロセス８００はブロック８２６において、追加の不変データを識別し、データ・コンテナから追加の不変データを抽出する。決定点８２４における、要求された追加データ・アイテムと共に送信するために追加の不変データが利用可能でないという判定に応答して、またはブロック８２６における追加の不変データの識別および抽出に応答して、プロセス８００はブロック８２８において、データ・コンテナ内の追加データ・アイテムに対する要求に応答して、要求された追加データ・アイテムおよび抽出した追加の不変データを、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントに送信する。プロセス８００は決定点８０２に戻り、上述のように反復する。
【００８６】
このように、プロセス８００はデータ・コンテナへの参照に対する初期要求に応答するため、データ・コンテナに関連付けられた不変データを識別し、データ・ミラー・データ構造を発生し、データ・ミラー・データ構造をデータ・コンテナへの参照と共に分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントに送信する。プロセス８００は、利用可能な不変データの一部をパッケージ化し、データ・コンテナからの追加データ・アイテムに対する１つ以上の要求に応答して残りの任意の不変データを送信することができる。
【００８７】
図１から図９に関連付けて上述したように、例示のシステムおよびプロセスは、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングを提供する。分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングに関連して他の多くの変形および追加のアクティビティが可能であり、それらはすべて本主題の範囲内であると見なされる。
【００８８】
上述の教示を検討すれば、上述の例のいくつかがＣＰＵ２０２等のプログラム化されたプロセッサの使用に基づくことは当業者には認められよう。しかしながら、本発明はかかる例示的な実施形態に限定されない。特殊目的ハードウェアまたは専用プロセッサあるいはその両方等のハードウェア・コンポーネント均等物を用いて、他の実施形態を実施可能であるからである。同様に、汎用コンピュータ、マイクロプロセッサ・ベースのコンピュータ、マイクロコントローラ、光コンピュータ、アナログ・コンピュータ、専用プロセッサ、特定用途向け回路または専用ハード・ワイヤード論理あるいはそれら全てを用いて、代替的な同等の実施形態を構築することができる。
【００８９】
当業者によって認められるように、本発明の態様は、システム、方法、またはコンピュータ・プログラムとして具現化することができる。従って、本発明の態様は、全体的にハードウェアの実施形態、全体的にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコード等を含む）、または、ソフトウェアおよびハードウェアの態様を組み合わせた実施形態という形態を取ることができ、それらは全て本明細書において、「回路」、「モジュール」、または「システム」と一般的に称することができる。更に、本発明の態様は、具現化されたコンピュータ読み取り可能プログラム・コードを有する１つ以上のコンピュータ読み取り可能媒体において具現化されたコンピュータ・プログラムの形態を取ることも可能である。
【００９０】
１つ以上のコンピュータ読み取り可能媒体のあらゆる組み合わせを利用することができる。コンピュータ読み取り可能媒体は、コンピュータ読み取り可能信号媒体またはコンピュータ読み取り可能記憶媒体とすることができる。コンピュータ読み取り可能記憶媒体は例えば、限定ではないが、電子、磁気、光、電磁、赤外線、または半導体のシステム、装置、またはデバイス、または前述のもののいずれかの適切な組み合わせとすることができる。コンピュータ読み取り可能記憶媒体の更に具体的な例（非網羅的な列挙）は、以下を含む。すなわち、１本以上のワイヤを含む電気的接続、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、携帯型コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、光記憶デバイス、磁気記憶デバイス、または前述のもののいずれかの適切な組み合わせである。この文書の文脈において、コンピュータ読み取り可能記憶媒体は、命令実行システム、装置、またはデバイスによってまたはそれと接続して用いるためにプログラムを含有または記憶することが可能ないずれかの有形の（tangible）媒体とすることができる。
【００９１】
コンピュータ読み取り可能信号媒体は、例えばベースバンドにおいてまたは搬送波の一部として、具現化されたコンピュータ読み取り可能プログラム・コードを有する伝播データ信号を含むことができる。かかる伝播信号は様々な形態のいずれかを取ることができ、それらは限定ではないが、電磁、光、またはそれらのいずれかの適切な組み合わせを含む。コンピュータ読み取り可能信号媒体は、コンピュータ読み取り可能記憶媒体でないが、命令実行システム、装置、またはデバイスによってまたはそれと接続して用いるためにプログラムを伝達、伝播、または転送することが可能ないずれかのコンピュータ読み取り可能媒体とすることができる。
【００９２】
コンピュータ読み取り可能媒体上で具現化されるプログラム・コードは、限定ではないが、無線、有線、光ファイバ・ケーブル、ＲＦ等、または前述のもののいずれかの適切な組み合わせを含むいずれかの適切な媒体を用いて伝送することができる。
【００９３】
本発明の態様の動作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（ＴＭ）、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋等のオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語等の従来の手順プログラミング言語を含む１つ以上のプログラミング言語のいずれかの組み合わせにおいて記述することができる。プログラム・コードは、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンのソフトウェア・パッケージとして、部分的にユーザのコンピュータ上でおよび部分的にリモート・コンピュータ上で、または全体的にリモート・コンピュータもしくはサーバ上で、実行することができる。後者の場合、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを介してユーザのコンピュータに接続することができ、または、接続は、（例えばインターネット・サービス・プロバイダを用いてインターネットを介して）外部コンピュータに対して行うことができる。
【００９４】
本発明の実施形態に従った方法、装置（システム）、およびコンピュータ・プログラムのフローチャート図またはブロック図あるいはその両方を参照して、本発明の態様について記載した。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組み合わせは、コンピュータ・プログラム命令によって実施可能であることは理解されよう。これらのコンピュータ・プログラム命令は、汎用コンピュータ、特殊目的コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて機械を生成することができ、これによって、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサによって実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能／行為を実施するための手段を生成するようになっている。
【００９５】
また、これらのコンピュータ・プログラム命令はコンピュータ読み取り可能媒体に記憶することができ、これによって、コンピュータまたは他のプログラマブル・データ処理装置に特定の方法で機能するように指示することができ、これにより、コンピュータ読み取り可能媒体に記憶された命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能／行為を実施する命令を含む製造品を生成するようになっている。
【００９６】
また、コンピュータ・プログラム命令を、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスにロードして、そのコンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させてコンピュータ実施プロセスを生成することができ、これによって、コンピュータまたは他のプログラマブル装置上で実行する命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能／行為を実施するためのプロセスを提供するようになっている。
【００９７】
図面におけるフローチャートおよびブロック図は、本発明の様々な実施形態に従ったシステム、方法、およびコンピュータ・プログラムの可能な実施のアーキテクチャ、機能性、および動作を例示する。この点で、フローチャートまたはブロック図における各ブロックは、規定された論理機能（複数の機能）を実施するための１つ以上の実行可能命令を含むコードのモジュール、セグメント、または一部を表すことができる。また、いくつかの代替的な実施において、ブロックに明記した機能は、図面に明記した順序どおりでなく発生する場合があることに留意すべきである。例えば、関与する機能性に応じて、連続して示した２つのブロックは実際には実質的に同時に実行されることがあり、またはブロックは時に逆の順序で実行される場合がある。また、ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組み合わせは、規定された機能もしくは行為を実行する特殊目的ハードウェア・ベースのシステム、または特殊目的ハードウェアおよびコンピュータ命令の組み合わせによって実施可能であることに留意すべきである。
【００９８】
プログラム・コードの記憶または実行あるいはその両方を行うのに適したデータ処理システムは、システム・バスを介してメモリ要素に直接または間接に結合された少なくとも１つのプロセッサを含む。メモリ要素は、プログラム・コードの実際の実行中に用いるローカル・メモリと、バルク記憶装置と、実行中にバルク記憶装置からコードを検索しなければならない回数を減らすために少なくとも何らかのプログラム・コードの一時的な記憶を提供するキャッシュ・メモリと、を含むことができる。
【００９９】
入出力またはＩ／Ｏデバイス（限定ではないが、キーボード、ディスプレイ、ポインティング・デバイス等を含む）を、直接またはＩ／Ｏコントローラを介在させてのいずれかでシステムに結合することができる。
【０１００】
また、システムにネットワーク・アダプタを結合することで、データ処理システムを、私的ネットワークまたは公的ネットワークを介在させて他のデータ処理システムまたはリモート・プリンタもしくは記憶デバイスに結合することができる。ネットワーク・アダプタの現在利用可能なタイプのいくつかの例として、モデム、ケーブル・モデム、およびイーサネット・カードがある。
【０１０１】
本明細書において用いた用語は、特定の実施形態を記載する目的のためだけのものであり、本開示を限定することは意図していない。本明細書において用いたように、単数形「１つの（ａ）、（ａｎ）、（ｔｈｅ）」は、文脈によって明らかに他の場合が示されない限り、複数形を含むことが意図されている。また、「含む」または「含んでいる」という言葉あるいはその両方は、本明細書において用いられた場合、述べた特性、整数、ステップ、動作、要素、および／またはコンポーネントの存在を規定するが、１つ以上の他の特性、整数、ステップ、動作、要素、コンポーネント、および／またはそれらのグループの存在または追加を除外するものではないことは、理解されよう。
【０１０２】
以下の特許請求の範囲における全てのミーンズまたはステップ・プラス・ファンクション要素の対応する構造、材料、行為、および均等物は、特許請求の範囲に明記した要素と組み合わせて機能を実行するための任意の構造、材料、または行為を含むことが意図されている。本発明の記載は、例示および記述の目的のために提示したが、網羅的であることや、開示した形態に本発明を限定することは、意図していない。本発明の範囲および精神から逸脱することなく、当業者には多くの変更および変形が明らかであろう。実施形態は、本発明の原理および実際的な用途を最良に説明するため、更に、想定される特定の用途に適した様々な変更と共に様々な実施形態に関して当業者が本発明を理解することを可能とするために、選択し記載したものである。
【図１】
0005936157.tif 000002
【図２】
0005936157.tif 000003
【図３】
0005936157.tif 000004
【図４】
0005936157.tif 000005
【図５】
0005936157.tif 000006
【図６】
0005936157.tif 000007
【図７】
0005936157.tif 000008
【図８】
0005936157.tif 000009
【図９】
0005936157.tif 000010