(57)【要約】【課題】Ｊａｖａヒープを実現する技術を提供する。【解決手段】この技術は、Ｊａｖａコンピューティング環境において動作するＪａｖａ仮想マシン内で実現されえる。２つ以上の指定された部分を備えるＪａｖａヒープ部分が開示される。指定されたヒープ部分のそれぞれは、特定のＪａｖａ論理要素（例えばＪａｖａオブジェクト、Ｊａｖａクラス表現、ネイティブ要素など）だけを格納するよう指定されえる。指定されたヒープ部分は、メモリプールとして実現されえる。換言すれば２つ以上の指定されたヒープ部分は、特定のＪａｖａ論理要素について指定されたメモリプールを全体として表しえる。メモリプールは、指定されたヒープ部分のダイナミックな管理を可能にする。その結果、仮想マシン、特に比較的限られたリソースで動作するもののパフォーマンスは改善される。【選択図】図３Ａ
2005507103.tif 000002
【特許請求の範囲】
【請求項１】
Ｊａｖａコンピューティング環境におけるＪａｖａヒープメモリであって、
２つ以上の指定された部分であって、前記指定された部分のそれぞれは、前記Ｊａｖａコンピューティング環境の論理要素を格納するよう指定され、前記指定された部分のそれぞれは、前記Ｊａｖａコンピューティング環境の１つの論理要素だけを格納し、前記１つの論理要素は、前記指定された部分のうちの１つ以上において格納されるよう指定される、Ｊａｖａヒープメモリ。
【請求項２】
請求項１に記載のＪａｖａヒープメモリであって、前記２つ以上の指定された部分のうちの少なくとも１つは、非連続なメモリアドレス空間において実現されるＪａｖａヒープメモリ。
【請求項３】
請求項２に記載のＪａｖａヒープメモリであって、前記少なくとも１つの指定された部分は、連続するアドレス空間のリンクされたリストとして実現されるＪａｖａヒープメモリ。
【請求項４】
請求項３に記載のＪａｖａヒープメモリであって、前記少なくとも１つの指定された部分は、Ｊａｖａプログラムの実行中にダイナミックに大きくなりえるＪａｖａヒープメモリ。
【請求項５】
請求項３に記載のＪａｖａヒープメモリであって、前記少なくとも１つの指定された部分は、Ｊａｖａプログラムの実行中にダイナミックに小さくなりえるＪａｖａヒープメモリ。
【請求項６】
請求項２に記載のＪａｖａヒープメモリであって、前記少なくとも１つの指定された部分は、Ｊａｖａプログラムの実行中にダイナミックに大きくなったり、小さくなったりしえるＪａｖａヒープメモリ。
【請求項７】
請求項２に記載のＪａｖａヒープメモリであって、前記論理要素は、Ｊａｖａオブジェクト、Ｊａｖａクラス表現、またはネイティブ要素のいずれかであるＪａｖａヒープメモリ。
【請求項８】
請求項１に記載のＪａｖａヒープメモリであって、Ｊａｖａプログラムの実行中に他の指定された部分が前記ヒープ部分に追加され、それにより他の論理要素を前記他の部分に格納されることを可能にするＪａｖａヒープメモリ。
【請求項９】
請求項１に記載のＪａｖａヒープメモリであって、前記２つ以上の指定された部分のうちの１つは、Ｊａｖａプログラムの実行中に前記ヒープ部分からダイナミックに除去されえるＪａｖａヒープメモリ。
【請求項１０】
Ｊａｖａコンピューティング環境において動作するＪａｖａ仮想マシンであって、
Ｊａｖａヒープメモリであって、前記Ｊａｖａヒープメモリは、
２つ以上の指定された部分であって、前記指定された部分のそれぞれは、前記Ｊａｖａコンピューティング環境の論理要素を格納するよう指定され、前記指定された部分のそれぞれは、それに指定される前記論理要素だけを格納する、Ｊａｖａ仮想マシン。
【請求項１１】
請求項１０に記載のＪａｖａ仮想マシンであって、前記２つ以上の指定された部分のうちの少なくとも１つは、非連続なメモリアドレス空間において実現されるＪａｖａ仮想マシン。
【請求項１２】
請求項１１に記載のＪａｖａ仮想マシンであって、前記少なくとも１つの指定された部分は、連続アドレス空間のリンクされたリストとして実現されるＪａｖａ仮想マシン。
【請求項１３】
請求項１２に記載のＪａｖａ仮想マシンであって、前記少なくとも１つの指定された部分は、Ｊａｖａプログラムの実行中にダイナミックに管理されえるＪａｖａ仮想マシン。
【請求項１４】
請求項１３に記載のＪａｖａ仮想マシンであって、前記論理要素は、Ｊａｖａオブジェクト、Ｊａｖａクラス表現、またはネイティブ要素のうちのいずれかであるＪａｖａ仮想マシン。
【請求項１５】
Ｊａｖａヒープメモリを格納するコンピュータで読み取り可能な媒体であって、
２つ以上の指定された部分であって、前記指定された部分のそれぞれは、前記Ｊａｖａコンピューティング環境の論理要素を格納するよう指定され、前記指定された部分のそれぞれは、それに指定される前記論理要素だけを格納する、コンピュータで読み取り可能な媒体。
【請求項１６】
請求項１５に記載のコンピュータで読み取り可能な媒体であって、前記２つ以上の指定された部分の少なくとも１つは、非連続なメモリアドレス空間において実現されるコンピュータで読み取り可能な媒体。
【請求項１７】
請求項１６に記載のコンピュータで読み取り可能な媒体であって、前記少なくとも１つの指定された部分は、連続なアドレス空間のリンクされたリストとして実現されるコンピュータで読み取り可能な媒体。
【請求項１８】
請求項１７に記載のコンピュータで読み取り可能な媒体であって、前記少なくとも１つの指定された部分は、Ｊａｖａプログラムの実行中にダイナミックに大きくなったり、小さくなったりしえるコンピュータで読み取り可能な媒体。
【請求項１９】
請求項１８に記載のコンピュータで読み取り可能な媒体であって、前記論理要素は、Ｊａｖａオブジェクト、Ｊａｖａクラス表現、またはネイティブ要素のうちのいずれかであるコンピュータで読み取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、大きくはＪａｖａプログラミング環境に関し、より具体的にはＪａｖａヒープのインプリメンテーションに適する手法に関する。
【背景技術】
【０００２】
高級言語の１つのゴールは、コンピュータプログラムが容易に他のコンピュータプラットフォームに移植できるような可搬性のあるプログラミング環境を提供することにある。「Ｃ」のような高級言語は、根底にあるコンピュータアーキテクチャからの抽象化のレベルを提供し、これら言語の成功は多くのコンピュータアプリケーションが今や高級言語で書かれる事実によってよく証明されている。
【０００３】
可搬性は、グラフィカルインタフェースを通してさまざまなコンピュータプラットフォーム間での通信を可能にするインターネットのインタフェースプロトコルであるワールドワイドウェブ（「ウェブ」）の出現とともに新たな頂へと導かれた。ウェブ上で通信するコンピュータは、アプレットと呼ばれる小さなアプリケーションをダウンロードし実行することができる。アプレットがコンピュータプラットフォームのさまざまな組み合わせの上で実行されえることを仮定すれば、アプレットは典型的にはＪａｖａ（商標）仮想マシンによって実行される。
【０００４】
近年、Ｊａｖａプログラミング環境はかなり人気が出てきた。Ｊａｖａプログラミング言語は、小さなデバイス（例えば、ポケットベル、携帯電話およびスマートカード）からスーパコンピュータに至るまで広い範囲のコンピュータ上で実行されえるだけ充分に可搬性を持つよう設計される言語である。Ｊａｖａで書かれたコンピュータプログラミング（および他の言語）は、Ｊａｖａ仮想マシンの実装によって実行されるのに適したＪａｖａバイトコードインストラクションにコンパイルされえる。Ｊａｖａ仮想マシンはふつうソフトウェア中でＪａｖａ仮想マシンインストラクションセットのためのインタプリタとしてインプリメントされるが、一般にはソフトウェア、ハードウェア、またはその両方でありえる。特定のＪａｖａ仮想マシンのインプリメンテーションおよび対応するサポートライブラリは共にＪａｖａランタイム環境を構成する。
【０００５】
Ｊａｖａプログラミング言語によるコンピュータプログラムは、１つ以上のクラスまたはインタフェース（ここでは併せてクラスまたはクラスファイルと呼ばれる）に組まれる。このようなプログラムは一般にプラットフォーム、すなわちハードウェアおよびオペレーティングシステムに依存しない。よってこれらのコンピュータプログラムは修正することなく、Ｊａｖａランタイム環境のインプリメンテーションを走らせることができるどのようなコンピュータ上でも実行されえる。
【０００６】
Ｊａｖａプログラミング言語で書かれたオブジェクト指向のクラスは、「クラスファイルフォーマット」と呼ばれる特定のバイナリフォーマットでコンパイルされる。このクラスファイルは、単一のクラスに関連付けられたさまざまな要素を含む。これらの要素は例えばクラスに関連付けられたメソッドおよび／またはインタフェースでありえる。さらにクラスファイルフォーマットはクラスに関連付けられるかなりの量の補助的な情報を含みえる。クラスファイルフォーマット（Ｊａｖａ仮想マシンの一般的な動作と共に）は、Tim LindholmおよびFrank Yellinによる「The Java Virtual Machine Specification」第２版にある程度詳細に記載され、ここで参照によって援用される。
【０００７】
図１Ａは、インタプリタであるＪａｖａ仮想マシンによる実行を通して、簡単な１つのＪａｖａソースコード１０１の処理の進行を示す。Ｊａｖａソースコード１０１は、Ｊａｖａで書かれた古典的なハローワールドのプログラムを含む。このソースコードはそれから、ソースコードをバイトコードにコンパイルするバイトコードコンパイラ１０３に入力される。バイトコードは、ソフトウェアでエミュレートされたコンピュータによって実行されるので、仮想マシンインストラクションである。典型的には仮想マシンインストラクションは汎用である（すなわち特定のマイクロプロセッサまたはコンピュータアーキテクチャのために設計されてはいない）が、これは必要ではない。バイトコードコンパイラは、Ｊａｖａプログラムのバイトコードを含むＪａｖａクラスファイル１０５を出力する。ＪａｖａクラスファイルはＪａｖａ仮想マシン１０７に入力される。Ｊａｖａ仮想マシンは、Ｊａｖａクラスファイル中のバイトコードをデコードし実行するインタプリタである。Ｊａｖａ仮想マシンはインタプリタであるが、ソフトウェアでマイクロプロセッサまたはコンピュータアーキテクチャをエミュレートする（例えばマイクロプロセッサまたはコンピュータアーキテクチャはハードウェアとしては存在しないかもしれない）のでふつうは仮想マシンと呼ばれる。
【０００８】
図１Ｂは、簡略化されたクラスファイル１００を示す。図１Ｂに示されるように、クラスファイル１００は、コンスタントプール１０２の部分、インタフェース部分１０４、フィールド部分１０６、メソッド部分１０８、および属性部分１１０を含む。このメソッド部分１０８は、クラスファイル１００で表現されるＪａｖａクラスに関連付けられたいくつかのＪａｖａメソッドへの参照を含むか有する。
【０００９】
従来、Ｊａｖａコンピューティング環境のさまざまな要素は、Ｊａｖａヒープの中に格納される。これら要素は、Ｊａｖａコンピューティング環境の他の論理要素（例えばネイティブ言語要素）と共にＪａｖａクラス表現およびＪａｖａオブジェクトを含む。Ｊａｖａヒープの従来のインプリメンテーションに付随する１つの問題は、さまざまな要素がＪａｖａヒープ中に混在しえることである。その結果、Ｊａｖａヒープ中のさまざまな要素にアクセスしたり、Ｊａｖａヒープを維持したりすることなどのために多大な量の処理が実行されなければならない。これはもちろんシステムリソースの非常に非効率的な使用となる。ある状況では、特に限られた計算パワーおよび／またはメモリのシステムにおいては、この非効率なリソースの使用は深刻な欠点である。
【００１０】
さらにＪａｖａヒープをダイナミックに管理する（例えばより多くのメモリが必要とされる場合にヒープを拡張する）ことが非常に望ましい。これは特に比較的限られたリソースのシステムにおいて有用であり、それはアロケートされたメモリが使用されるかされないかにかかわらず大量のメモリは確保されえないことに部分的にはよっている。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
したがってＪａｖａヒープの改良されたインプリメンテーション技術が必要とされる。
【課題を解決するための手段】
【００１２】
大きく言えば、本発明はＪａｖａヒープを実現する技術に関する。そのため本発明は、Ｊａｖａコンピューティング環境において動作するＪａｖａ仮想マシン内で実現されえる。本発明のある実施形態において、２つ以上の指定された部分を備えるＪａｖａヒープ部分が開示される。指定されたヒープ部分のそれぞれは、特定のＪａｖａ論理要素（例えばＪａｖａオブジェクト、Ｊａｖａクラス表現、ネイティブ要素など）だけを格納するよう指定されえる。理解されるように、指定されたヒープ部分は、メモリプールとして実現されえる。換言すれば２つ以上の指定されたヒープ部分は、特定のＪａｖａ論理要素について指定されたメモリプールを全体として表しえる。メモリプールは、指定されたヒープ部分のダイナミックな管理を可能にする。その結果、仮想マシン、特に比較的限られたリソースで動作するもののパフォーマンスは改善される。
【００１３】
本発明は、方法、装置、コンピュータで読み取り可能な媒体、およびデータベースシステムを含む多くの手法で実現されえる。本発明のいくつかの実施形態が以下に説明される。
【００１４】
Ｊａｖａヒープメモリを含むＪａｖａコンピューティング環境として、Ｊａｖａヒープメモリは、２つ以上の指定された部分を含み、前記指定された部分のそれぞれは、前記Ｊａｖａコンピューティング環境の論理要素を格納するよう指定され、前記指定された部分のそれぞれは、それに指定される前記１つの論理要素だけを格納する。
【００１５】
Ｊａｖａヒープメモリを含むＪａｖａコンピューティング環境において動作するＪａｖａ仮想マシンとして、本発明のある実施形態は、２つ以上の指定された部分を含み、前記指定された部分のそれぞれは、前記Ｊａｖａコンピューティング環境の論理要素を格納するよう指定され、前記指定された部分のそれぞれは、それに指定される前記１つの論理要素だけを格納する。
【００１６】
Ｊａｖａヒープメモリを格納するコンピュータで読み取り可能な媒体として、本発明のある実施形態は、２つ以上の指定された部分を含み、前記指定された部分のそれぞれは、前記Ｊａｖａコンピューティング環境の論理要素を格納するよう指定され、前記指定された部分のそれぞれは、それに指定される前記論理要素だけを格納する。
【００１７】
本発明のこれらや他の局面および利点は、以下の詳細な説明が添付図面と共に読まれればより明らかになろう。
【発明を実施するための最良の形態】
【００１８】
本発明は添付の図面を参照して以下の詳細な説明によって容易に理解されるだろう。図面において同様の参照番号は同様の要素を表す。
【００１９】
背景技術において述べられたように、Ｊａｖａプログラミング環境は大きく広がった成功を収めた。したがってＪａｖａコンパチブルなデバイスの幅を広げ、そのようなデバイスのパフォーマンスを改善しようとする努力が続いている。特定のプラットフォーム上でのＪａｖａベースのプログラムのパフォーマンスに最も影響を与えるファクタの１つは、基礎になる仮想マシンのパフォーマンスである。したがってＪａｖａに従う仮想マシンのパフォーマンスを改善するための努力が多くの団体によって精力的になされてきた。
【００２０】
本発明のこの目的や他の目的を達成するために、Ｊａｖａヒープのインプリメンテーションの技術が開示される。そのためこの技術は、Ｊａｖａコンピューティング環境において動作するＪａｖａ仮想マシンにおいて実現される。本発明のある局面によれば、２つ以上の指定された部分を備えるＪａｖａヒープ部分が開示される。指定されたヒープ部分のそれぞれは、特定のＪａｖａ論理要素（例えばＪａｖａオブジェクト、Ｊａｖａクラス表現、ネイティブ要素など）だけを格納するように指定されえる。理解されるように、指定されたヒープ部分は、メモリプールとして実現されえる。換言すれば、２つ以上の指定されたヒープ部分が、特定のＪａｖａ論理要素のために指定されたメモリプールを全体として表す。メモリプールは、指定されたヒープ部分のダイナミックな管理を可能にする。その結果、仮想マシン、特に比較的限られたリソースで動作するもののパフォーマンスは改善される。
【００２１】
本発明の実施形態は、図２Ａ〜３Ｃを参照して以下に説明される。しかしこれらの図を参照して与えられた詳細な説明は例示目的であって、本発明はこれらの限定された実施形態を超えて成り立つことが当業者には容易に理解されよう。
【００２２】
図２Ａは、本発明のある実施形態によるＪａｖａヒープ２００を示す。Ｊａｖａヒープ２００は、Ｊａｖａコンピューティング環境で（例えばＪａｖａ仮想マシン内で）インプリメントされえる。図２Ａに示されるように、Ｊａｖａヒープ２００は、２つ以上の指定されたヒープ部分（指定されたヒープ部分１〜Ｎ）を含みえる。理解されるように、指定されたヒープ部分１〜Ｎのそれぞれは、Ｊａｖａコンピューティング環境の論理要素を格納するのに適する。これらの論理要素は例えば、Ｊａｖａクラス表現、Ｊａｖａオブジェクト、ネイティブ要素などである。
【００２３】
したがって特定のＪａｖａヒープ部分は、特定の論理要素だけを格納するように設計されえる。例として図２Ｂは、本発明のある実施形態によるＪａｖａヒープ部分２０１を示す。Ｊａｖａヒープ部分２０１は、Ｊａｖａ内部クラス表現部分２０２、Ｊａｖａオブジェクト部分２０４、およびネイティブ要素部分２０６を含む。記載された実施形態において、ヒープ部分２０２、２０４、および２０６のそれぞれは、特定のＪａｖａ論理要素だけを格納するように指定される。そのためＪａｖａ内部クラス表現部分２０２、Ｊａｖａオブジェクト部分２０４、およびネイティブ要素部分２０６は、それぞれ、Ｊａｖａ内部クラス表現、Ｊａｖａオブジェクト、およびネイティブ要素を格納するように指定される。
【００２４】
理解されるように、Ｊａｖａヒープ部分２０１の構成は、Ｊａｖａコンピューティング環境のさまざまな論理要素により効率的にアクセスすることを可能にする。その結果、仮想マシン、特に限られたリソースで動作するもののパフォーマンスは向上されえる。本発明は、任意の所望の目的のためにヒープ部分を指定することを可能にする（例えばヒープ部分は特定のオブジェクト、特定のクラスなどのために指定されえる）ことが理解されよう。これによりＪａｖａ仮想マシンのパフォーマンスをさらに向上させるのに用いられる大きな柔軟性が可能となる。
【００２５】
背景で述べられたように、Ｊａｖａヒープをダイナミックに管理する（例えばより多くのメモリが必要とされる場合にヒープを拡張する）能力を持つことが非常に望まれる。しかし比較的限られたリソースしか持たないシステムにおいては、アロケートされたメモリが使用されるされないにかかわらず、大量のメモリは確保されえない。この目的や他の目的を達成するために、指定されたヒープ部分がメモリプールリストとして実現されえる。図３Ａは、本発明のある実施形態によるＪａｖａヒープ３００を示す。図３Ａに示されるように、Ｊａｖａヒープ３００は、いくつかの指定されたヒープ部分を含む。再びこれら指定されたヒープ部分のそれぞれは、特定のＪａｖａ論理要素だけを格納するように指定されえる。さらに２つ以上の指定されたヒープ部分は、メモリプールを全体として表す。そのためメモリプールのそれぞれは、互いにリンクされた２つ以上のアドレス空間（例えばリンクされたリストとして）を含みえる。例えば指定されたヒープ部分３０２、３０４および３０６は全体で、メモリプールとしてリンクされた非連続なアドレス空間を表現する。したがって指定されたヒープ部分３０２、３０４および３０６は特定のＪａｖａ論理要素を格納するのに用いられえる。
【００２６】
図３Ｂは、本発明のある実施形態によるＪａｖａヒープ３１０を示す。Ｊａｖａヒープ３１０は、Ｊａｖａ内部クラス表現、Ｊａｖａオブジェクト、およびネイティブ要素を格納するのに適する。そのため１つ以上のヒープ部分がこれらのＪａｖａ論理要素のそれぞれを格納するのに指定される。例えば、指定されたヒープ部分３１２、３１８および３２２は、全てＪａｖａ内部クラス表現だけを格納するよう指定されている。
【００２７】
理解されるように、メモリプールは、指定されたヒープ部分を追加したり除去したりすることを可能にするためダイナミックに管理されえる。図示すれば図３Ｃは、ある指定されたヒープ部分が除去され、新しい指定されたヒープ部分が追加された後の図３Ｂに示されたＪａｖａヒープ３１０を示す。Ｊａｖａ内部クラス表現を格納するように指定されたＪａｖａヒープ部分３２６（図３Ｂで示される）は、除去されている。その代わりにネイティブ要素を格納するのに指定された新しいＪａｖａヒープ部分３２６が追加されている。図３Ｃに示されるように、新しいＪａｖａヒープ部分３２６は、やはりネイティブ要素の格納のために指定されているＪａｖａヒープ部分３２８とリンクされえる。したがってヒープメモリは、さまざまなＪａｖａ論理要素のためにダイナミックに管理されえる。これは、メモリが効率的に使用されえることを意味する。その結果、仮想マシン、特に限られたリソースで動作するもののパフォーマンスが向上されえる。
【００２８】
本発明の多くの特徴および利点は詳細な説明から明らかであり、よって添付の特許請求の範囲は本発明の全てのそのような特徴および利点を含むと意図される。さらに多くの改変および変更が当業者には容易に可能であるので、本発明は図示され記載されたのまったく同一の構成および動作に限定されるべきではない。したがって全ての適切な変更および等価物は本発明の範囲に含まれるように解される。
【図面の簡単な説明】
【００２９】
【図１Ａ】インタプリタであるＪａｖａ仮想マシンによる実行を通したＪａｖａソースコードの簡単なものの進行を示す図である。
【図１Ｂ】簡略化されたクラスファイルを示す図である。
【図２Ａ】本発明のある実施形態によるＪａｖａヒープを示す図である。
【図２Ｂ】本発明のある実施形態によるＪａｖａヒープを示す図である。
【図３Ａ】本発明のある実施形態によるＪａｖａヒープを示す図である。
【図３Ｂ】本発明のある実施形態によるＪａｖａヒープを示す図である。
【図３Ｃ】本発明のある実施形態によるＪａｖａヒープを示す図である。
【図１Ａ】
2005507103.tif 000003
【図１Ｂ】
2005507103.tif 000004
【図２Ａ】
2005507103.tif 000005
【図２Ｂ】
2005507103.tif 000006
【図３Ａ】
2005507103.tif 000007
【図３Ｂ】
2005507103.tif 000008
【図３Ｃ】
2005507103.tif 000009
【国際公開パンフレット】
2005507103.tif 000010
2005507103.tif 000011
2005507103.tif 000012
2005507103.tif 000013
2005507103.tif 000014
2005507103.tif 000015
2005507103.tif 000016
2005507103.tif 000017
2005507103.tif 000018
2005507103.tif 000019
2005507103.tif 000020
2005507103.tif 000021
2005507103.tif 000022
2005507103.tif 000023
2005507103.tif 000024
2005507103.tif 000025
2005507103.tif 000026
2005507103.tif 000027
2005507103.tif 000028
2005507103.tif 000029
【国際公開パンフレット（コレクトバージョン）】
2005507103.tif 000030
2005507103.tif 000031
【国際調査報告】
2005507103.tif 000032
2005507103.tif 000033
2005507103.tif 000034
2005507103.tif 000035