(57)【特許請求の範囲】
【請求項１】
ランダムアクセスメモリ（１２０）を有するコンピュータシステム（１００）内の自動メモリ管理モジュール（１５０）を動作するためのコンピュータ実施方法（４００）であって、前記方法（４００）は、
第１の部分空間（１５５−１）および第２の部分空間（１５５−２、５５５−２）を有する論理アドレス空間（１５５）のために、異なるサイズクラスのオブジェクトのためのスロットを有する部分（１、２・・・８）を有する前記論理アドレス空間（１５５）の前記第２の部分空間（１５５−２、５５５−２）を確保するステップ（４１０）であって、前記確保するステップ（４１０）は、前記第２の部分空間（１５５−２、５５５−２）のサイズを、係数とミューテータ（１４０）の最大ヒープサイズ（ＨＳ）との積として計算することを含み、前記最大ヒープサイズ（ＨＳ）は、前記第２の部分空間（１５５−２、５５５−２）内に潜在的に格納されうる前記オブジェクトの累算されたサイズであるステップと、
前記ミューテータ（１４０）から、前記コンピュータシステム（１００）の前記ランダムアクセスメモリ（１２０）内に格納されうる特定のオブジェクト（Ｏ［１］・・・Ｏ［９］）のためのメモリ割当要求（１４１）を受信するステップ（４２０）と、
前記論理アドレス空間（１５５）内の特定の論理アドレス（Ａｘｙ；Ａ２．１・・・Ａ１．４）を前記特定のオブジェクト（Ｏ［１］・・・Ｏ［９］）に割り当てるステップ（４３０）であって、前記自動メモリ管理モジュール（１５０）は、少なくとも１つの基準（ＴＳ、ＯＡ）に従って、前記特定のオブジェクト（Ｏ［１］・・・Ｏ［９］）を区別し（４３５）、第１の部分空間（１５５−１）からの論理アドレス（Ａ１．ｙ）および第２の部分空間（１５５−２）からの論理アドレス（Ａ２．ｙ）を割り当てるステップ（４３１、４３２）と、
前記第２の部分空間（１５５−２）からの前記割り当てられた論理アドレス（Ａ２．ｙ）を前記ランダムアクセスメモリ（１２０）内の物理メモリ（Ｐ１・・・Ｐ１０４）にメモリ管理装置（１３０）によってマッピングするステップ（４４２）と、
前記ランダムアクセスメモリ内で対応するオブジェクトを移動することと組み合わせて、前記第１の部分空間（１５５−１）内の論理アドレスを圧縮するステップ（４５１）と、
を含む方法（４００）。
【請求項２】
前記確保するステップ（４１０）において、前記係数は、前記論理アドレス空間（１５５）の前記第２の部分空間（１５５−２）内の前記部分の数（Ｍ）に対応し、各部分は、特定サイズのオブジェクトのためのスロットを有する、
請求項１に記載の方法（４００）。
【請求項３】
前記確保するステップ（４１０）は、等しいサイズの部分のために実行される、
請求項１または２に記載の方法（４００）。
【請求項４】
前記確保するステップ（４１０）は、前記最大ヒープサイズ（ＨＳ）に対応する前記部分のサイズを計算することを含む、
請求項１から３のいずれかに記載の方法（４００）。
【請求項５】
前記確保するステップ（４１０）は、第１の数のスロットを２の累乗の数として有する開始部分を有する部分を確保することを含み、隣接するスロットは、前記第１の数のスロットから等比数列で計算されるスロットの数を有する、
請求項１から４のいずれかに記載の方法（４００）。
【請求項６】
前記割り当てるステップ（４３０）において、前記自動メモリ管理モジュール（１５０）は、オブジェクトサイズ基準である前記少なくとも１つの基準（ＴＳ、ＯＡ）に従って、前記特定のオブジェクト（Ｏ［１］・・・Ｏ［９］）を区別する（４２５）、
請求項１から５のいずれかに記載の方法（４００）。
【請求項７】
前記割り当てるステップ（４３０）において、前記自動メモリ管理モジュール（１５０）は、所定の閾値サイズ（ＴＳ）を前記オブジェクトサイズ基準として用い、前記第１の部分空間（１５５−１）内の論理アドレスを、前記所定の閾値サイズ（ＴＳ）未満のオブジェクトサイズを有するオブジェクトのために割り当て（４３１）、前記第２の部分空間（１５５−２）内の論理アドレスを、前記所定の閾値サイズ（ＴＳ）以上のオブジェクトサイズを有するオブジェクトのために割り当てる（４３２）、
請求項６に記載の方法（４００）。
【請求項８】
前記所定の閾値サイズ（ＴＳ）は、前記ランダムアクセスメモリ（１２０）のページサイズ（ＰＳ）に関連する、
請求項７に記載の方法（４００）。
【請求項９】
前記所定の閾値サイズ（ＴＳ）は、前記ページサイズ（ＰＳ）に等しい、または、前記ページサイズの倍数に等しい、
請求項８に記載の方法（４００）。
【請求項１０】
前記特定の論理アドレスのいくつかを、前記第１および第２の部分空間（１５５−１、１５５−２）のいずれかから割当解除するさらなるステップによって、ランダムアクセスメモリ（１２０）内の前記オブジェクトを圧縮せずに、前記第２の部分空間（１５５−２）内の以前に割り当てられた論理アドレスから前記物理メモリのマッピングを解除するように前記メモリ管理装置（１３０）に命令する、
請求項１から９のいずれかに記載の方法（４００）。
【請求項１１】
前記自動メモリ管理モジュール（１５０）は、オブジェクト属性（ＯＡ）である前記少なくとも１つの基準に従って、前記特定のオブジェクト（Ｏ［１］・・・Ｏ［９］）を区別する（４２５）、
請求項１に記載の方法（４００）。
【請求項１２】
前記オブジェクト属性（ＯＡ）は、オブジェクトタイプ、オブジェクトアクセスの頻度、外部コードに渡される前記オブジェクトおよびハードウェアによって直接アクセスされる前記オブジェクトから選択される属性を備える、
請求項１１に記載の方法（４００）。
【請求項１３】
請求項１から１２のいずれかに記載のコンピュータ実施方法のステップを実行するためのコンピュータシステム（１００）。
【請求項１４】
コンピュータプログラムであって、
コンピュータのメモリ内にロードされ、前記コンピュータの少なくとも１つのプロセッサによって実行されるとき、請求項１から１２のいずれかに記載のコンピュータ実施方法のステップを実行する、
コンピュータプログラム。
【請求項１５】
前記自動メモリ管理モジュール（１５０）は、ＪＡＶＡ、Ｃ＃、ＰＹＴＨＯＮ、ＪＡＶＡＳＣＲＩＰＴ、ＳＣＡＬＡおよびＧＯを含む群から選択されるプログラミング言語で記述されるミューテータ（１４０、１４０’）のためのランタイム環境（ＲＴＥ）の一部である、
請求項１４に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的にはコンピュータに関するものであり、特には自動メモリ管理（ＡＭＭ）を有するコンピュータに関するものである。本発明はまた、方法、コンピュータプログラム製品およびコンピュータシステムに関するものでもある。
【背景技術】
【０００２】
コンピュータシステムは、オブジェクト、例えばデータ（例えば、テキスト、画像、ビットマップ、制御信号、データフィールド、データアレイ、テーブル）および（例えば、ルーチンコール、タスク、スレッドのための）プログラムコードを有するアプリケーションを実行する。コンピュータシステムは、オブジェクトをランダムアクセスメモリ（ＲＡＭ）内に格納し、論理および物理アドレスを用いて、メモリ内のオブジェクトを識別する。オブジェクトは、通常互いを参照する。オブジェクト間の参照関係は、いわゆるオブジェクトグラフによって記載可能である。
【０００３】
アプリケーションは、連続的に実行されているので、オブジェクトをメモリに追加し、メモリ内のオブジェクトを変更し、オブジェクトをメモリから削除し、および／または、オブジェクト間の参照関係を変える。オブジェクトを格納することは、スタティックではなく、むしろ非常にダイナミックである。
【０００４】
したがって、アプリケーションが実行されている限り、メモリ空間は、いくつかのオブジェクトに割り当てられ、他のオブジェクトから割当解除される。経時的な割当／割当解除は、ＲＡＭの断片化につながり、空きメモリは、アドレスの隣接する範囲をもはや占有しない。断片化は、隣接するメモリが大きいオブジェクトに割り当てられるのを妨げる。オブジェクトを部分に分割することは、さまざまな他の理由のためにオプションではない。デフラグ技術は、メモリ内またはアドレス空間内でオブジェクトを移動するためのいわゆるコンパクションステップ（以下、コンパクションとも称される）を含む。
【０００５】
割当／割当解除および／またはデフラグを自動メモリ管理（ＡＭＭ）モジュールによって実行することは、従来技術において一般的である。ＡＭＭモジュールは、アプリケーションと並列に実行されるかまたはアプリケーションと関連する。ＡＭＭモジュールは、所定の規則に従って動作する。ＡＭＭは、従来技術において「ガベージコレクション」としても周知である。ＡＭＭモジュールまたはＡＭＭを提供する他のプログラムまたはツールは、「ガベージコレクタ」としても周知である。
【０００６】
上述したように、アプリケーションは、オブジェクト間の参照関係を変える。ＡＭＭに関して、アプリケーションは、オブジェクトグラフを変化させるので、アプリケーションは、「ミューテータ」と呼ばれている。
【０００７】
第１のシナリオでは、アプリケーション（すなわちミューテータ）は、コンピュータ上で直接動作し、ＡＭＭモジュールは、コンピュータのオペレーティングシステムの機能として実施される。
【０００８】
第２のシナリオでは、アプリケーションは、ランタイム環境（ＲＴＥ）を実行のために必要とする。ＡＭＭモジュールは、ＲＴＥの機能として実施可能である。この場合、ＡＭＭモジュールは、（コンピュータの）オペレーティングシステムの外側のプロセスとして実行される。例えば、ＲＴＥは、特定のプログラミング言語、例えばＪＡＶＡに特化することができる。
【０００９】
しかしながら、両方のシナリオにおいて、ＡＭＭモジュールは、コンピュータリソース、例えばプロセッサ時間およびメモリを消費する。少なくとも２つの態様を有するリソースの競合が存在する。ＡＭＭモジュールが割当、割当解除、デフラグ等を実行する間、アプリケーションは、停止または中断しなければならない。代替例では、ＡＭＭモジュールは、より複雑にプログラムされ、並列実行が可能でなければならない。
【００１０】
より詳細には、（上述したコンパクションの間）オブジェクトを移動することは、オブジェクトが移動している間、アプリケーションがオブジェクトにアクセスするのを妨げる。これによって、アプリケーションの連続実行に中断が生じる。さらに、ＲＡＭ内でオブジェクトを移動するのに必要な時間は、オブジェクトのサイズに依存する。この時間対サイズの依存性は、通常線形関係であり、大きいオブジェクトを移動することは、小さいオブジェクトを移動することより時間がかかる。任意のサイズのオブジェクトを移動可能にすることによって、アプリケーションは、任意の時間間隔で停止しうる。
【００１１】
また、再び両方のシナリオにおいて、ＡＭＭは、多数の理由により、アプリケーションの故障を生じさせうる。多数の理由とは、例えば以下の通りである。（ｉ）断片化は、隣接するメモリ空間がオブジェクトに割り当てられるのを妨げうる。（ｉｉ）ＡＭＭモジュールによって、アプリケーションの実行に中断が生じうる。（ｉｉｉ）ＡＭＭモジュールは、十分に高速に再利用（未使用のメモリを回収）するためにメモリを識別することに失敗しうる。
【００１２】
いくつかのアプリケーションは、電気通信において、産業機械を制御する際に、または、アプリケーションのリアルタイムの連続利用可能性が必須な他の領域において用いられる。例えば、いくつかのアプリケーションは、タスクの周期的実行（周期は、例えば１００マイクロ秒である）を必要とする。
【００１３】
米国特許出願公開第２０１２／１０２２８９号明細書（ＵＳ２０１２／１０２２８９Ａ１）によれば、異なるサイズ、タイプまたは他の態様のオブジェクトは、異なって処理されうる。例えば、小さいオブジェクトおよび大きいオブジェクトは区別され、メモリは、ヒープメモリの反対の端に割り当てられる。この方法は、圧縮に必要な作業を減少する。しかしながら、これは、メモリ管理装置（ＭＭＵ）を用いずに実行される。
【００１４】
米国特許出願公開第２０１０／２５０８９３号明細書（ＵＳ２０１０／２５０８９３Ａ１）によれば、ＭＭＵを用いることは、物理メモリのコピーを回避する。この方法により、下にある物理メモリをコピーすることなく、オブジェクトの仮想アドレスを圧縮することができる。その代わりに、オブジェクトの新しい仮想アドレスは、元の物理アドレスにマッピングされる。これは、物理データをコピーする必要を回避する。
【発明の概要】
【発明が解決しようとする課題】
【００１５】
本発明の実施形態は、改良された自動メモリ管理（ＡＭＭ）モジュールを有するコンピュータシステムにおいて上述した競合を解決するための方法、コンピュータ実施方法およびコンピュータプログラム製品を提供する。上述した従来技術の方法とは対照的に、大きいオブジェクトを圧縮することは、完全に（仮想メモリおよび物理メモリにおいて）回避可能である。
【００１６】
方法は、現代のコンピューティングの発展を利用し、コンピュータシステムは、メモリ管理装置（ＭＭＵ）、すなわち、論理から物理へのアドレスマッピングを提供するハードウェアを有し、コンピュータシステムは、実際の物理メモリのサイズより大きいアドレス空間（例えば、２６４のアドレス）を有する。論理アドレスのための空間（または「範囲」）は、少なくとも２つの部分空間に分けられ、２つの部分空間とは、（デフラグの間の）コンパクションが有効な第１の部分空間、いわゆる「コンパクション空間」およびコンパクションが無効な第２の部分空間、いわゆる「非コンパクション空間」である。換言すれば、第１の部分空間は、「圧縮可能であり」、第２の部分空間は、「圧縮不可能である」。第２の部分空間は、すべてのサイズカテゴリのすべての潜在的オブジェクトに適応するのに十分大きく、第２の部分空間は、ＭＭＵによってマッピングされ、ＲＡＭ内でオブジェクトを移動する必要なく、物理メモリを割当解除する。
【００１７】
アプリケーション／ミューテータが特定のオブジェクトのためのメモリを要求するとき、ＡＭＭモジュールは、少なくとも１つの所定の区別基準を適用し、オブジェクトを「コンパクションオブジェクト」および「非コンパクションオブジェクト」に区別し、論理アドレスをコンパクション空間内または非コンパクション空間内にそれぞれ割り当てる。
【００１８】
区別基準は、上述した競合に関連する。リソースの競合に対処するために、オブジェクトは、オブジェクトサイズによって区別される。閾値サイズ未満のサイズを有するオブジェクトおよび閾値サイズ超の（または閾値サイズに等しい）サイズを有するオブジェクトが存在する。説明において、これらのオブジェクトは、「小さいオブジェクト」および「大きいオブジェクト」としてそれぞれ区別される。
【００１９】
ＡＭＭモジュールは、コンパクション空間内の論理アドレスを小さいオブジェクトに割り当て、非コンパクション空間内の論理アドレスを大きいオブジェクトに割り当てる。
【００２０】
大きいオブジェクトを格納するＲＡＭの一部を圧縮することが回避可能である、または、少なくとも、リソースをＡＭＭモジュールと競合しないＭＭＵ（すなわちハードウェア）による動作に制限可能であるという意味で、上述した時間対サイズの依存性は考慮される。閾値サイズは、論理アドレスのコンパクション空間および非コンパクション空間に対する割当を区別する圧縮制限とすることができる。
【００２１】
オプションとして、オブジェクトは、基準の組み合わせに従って区別される。
【００２２】
ＡＭＭモジュールは、圧縮をコンパクション空間内の論理アドレスにおける小さいオブジェクトに適用するが、圧縮を非コンパクション空間内の（論理アドレスにおける）大きいオブジェクトに適用する必要はない。リソースの競合を考慮すると、（ＭＭＵおよびＲＡＭと組み合わせて）ＡＭＭモジュールによって圧縮に必要とされる時間が制限されることに留意されたい。この時間は、（コンパクション空間内のその論理アドレスを有する）最大のオブジェクトのサイズに、実質的に線形関係を有する。それゆえ、アプリケーションが停止されなければならない時間は、制限されうる。
【００２３】
複数のミューテータは、（非コンパクション空間の）同じオブジェクトに、経時的に（時間が経っても）不変のままであるアドレスでアクセスすることができる。複数のミューテータに対して、および、複数のミューテータ間で、アドレス更新を伝える必要はない。
【００２４】
実施パラメータは、コンピュータシステムおよび／またはアプリケーションの詳細を考慮することができる。オブジェクトをオブジェクトサイズによって区別する場合、コンパクション空間は、閾値サイズに従って間隔をおかれる論理アドレスを有する。閾値サイズは、ＲＡＭのページの粒度に関連するものとすることができる。
【００２５】
代替実施形態が実施可能である。例えば、コンパクションの有効化／無効化の代わりに、または、コンパクション／非コンパクションの代わりに、圧縮は、異なる圧縮モードによって実行可能であり、例えば比較的短い間隔の圧縮（第１の部分空間のみ）および比較的大きい間隔の圧縮（両方の部分空間）である。
【課題を解決するための手段】
【００２６】
コンピュータシステム内の自動メモリ管理（ＡＭＭ）モジュールを動作するためのコンピュータ実施方法は、確保するステップと、受信するステップと、割り当てるステップと、マッピングするステップと、圧縮するステップと、を含む。論理アドレス空間は、第１および第２の部分空間を有する。
【００２７】
確保するステップにおいて、ＡＭＭモジュールは、異なるサイズクラスのスロットを有する部分を有する第２の部分空間を確保する。ＡＭＭモジュールは、第２の部分空間のサイズを、係数とミューテータの最大ヒープサイズとの積として計算する。
【００２８】
受信するステップにおいて、ＡＭＭモジュールは、メモリ割当要求をミューテータから受信する。要求は、コンピュータシステムのランダムアクセスメモリ内に格納されうる特定のオブジェクトのためのものである。割り当てるステップにおいて、ＡＭＭモジュールは、論理アドレス空間内の特定の論理アドレスを特定のオブジェクトに割り当てる。ＡＭＭモジュールは、このことにより、少なくとも１つの基準に従って、特定のオブジェクトを区別し、第１の部分空間からの論理アドレスおよび第２の部分空間からの論理アドレスを割り当てる。マッピングするステップにおいて、メモリ管理装置（ＭＭＵ）は、第２の部分空間から割り当てられた論理アドレスをランダムアクセスメモリ内の物理メモリにマッピングする。圧縮するステップにおいて、ＭＭＵは、ランダムアクセスメモリ内で対応するオブジェクトを移動する間、第１の部分空間内の論理アドレスを圧縮する。
【００２９】
割り当てるステップにおいて、オプションとして、ＡＭＭモジュールは、オブジェクトサイズ基準である少なくとも１つの基準に従って、特定のオブジェクトを区別する。
【００３０】
割り当てるステップにおいて、オプションとして、ＡＭＭモジュールは、所定の閾値サイズをオブジェクトサイズ基準として用い、第１の部分空間内の論理アドレスを、所定の閾値サイズ未満のオブジェクトサイズを有するオブジェクトに割り当て、第２の部分空間内の論理アドレスを、所定の閾値サイズ以上のオブジェクトサイズを有するオブジェクトに割り当てる。
【００３１】
オプションとして、所定の閾値サイズは、ランダムアクセスメモリのページサイズに関連するものとすることができる。所定の閾値サイズは、ページサイズに等しい、または、ページサイズの倍数に等しいものとすることができる。
【００３２】
確保するステップにおいて、ＡＭＭモジュールは、異なるサイズクラスのオブジェクトのためのスロットを有する部分を有する論理アドレス空間の第２の部分空間を確保することができる。確保するステップは、等しいサイズの部分のために実行可能である。確保するステップは、ミューテータの最大ヒープサイズに対応する部分のサイズを計算することを含むことができ、そのサイズは、第２の部分空間内に潜在的に格納されうるオブジェクトの累算されたサイズである。確保するステップは、部分を確保することを含むことができる。第１の部分は、所定の閾値で除算されるヒープサイズに対応する第１の数のスロットを有することができ、第２の部分は、２で除算される第１の数に対応する第２の数のスロットを有することができる。代替的には、確保するステップは、部分を確保することを含むことができ、開始部分は、第１の数のスロットを２の累乗の数として有し、隣接するスロットは、第１の数のスロットから等比数列で計算されるスロットの数を有する。
【００３３】
方法は、いずれの部分空間からの特定の論理アドレスのいくつかを割当解除するさらなるステップを有することができる。ＡＭＭモジュールは、ランダムアクセスメモリ内のオブジェクトを圧縮せずに、第２の部分空間内の以前に割り当てられた論理アドレスから物理メモリへのマッピングを解除するようにＭＭＵに命令する。
【００３４】
オプションとして、ＡＭＭモジュールは、オブジェクト属性である少なくとも１つの基準に従って、特定のオブジェクトを区別することができる。オブジェクト属性は、オブジェクトタイプ、オブジェクトアクセスの頻度、外部コードに渡されるオブジェクトおよびハードウェアによって直接アクセスされるオブジェクトから選択される属性を備えることができる。
【００３５】
コンピュータシステムは、コンピュータ実施方法のステップを実行することができ、コンピュータプログラム製品は、コンピュータのメモリ内にロードされ、コンピュータの少なくとも１つのプロセッサによって実行されるとき、コンピュータ実施方法のステップを実行する。コンピュータプログラム製品は、ＡＭＭモジュールが、プログラミング言語、例えばＪＡＶＡ、Ｃ＃、ＰＹＴＨＯＮ、ＪＡＶＡＳＣＲＩＰＴ、ＳＣＡＬＡまたはＧＯで記述されるミューテータのためのランタイム環境の一部であるように提供可能である。
【図面の簡単な説明】
【００３６】
【図１】コンピュータシステムのブロック図を示し、コンピュータシステムは、プロセッサ、ランダムアクセスメモリ、メモリ管理装置、ミューテータおよび自動メモリ管理（ＡＭＭ）モジュールを有する。
【図２】連続時点でのコンピュータシステム内のＡＭＭモジュールの論理アドレス空間を示す。
【図３】コンピュータシステムのブロック図を示すが、コンピュータシステムは、２つのミューテータと、２つの論理アドレス空間を有するＡＭＭモジュールと、を有する。
【図４】コンピュータ実施方法のフローチャート図を示す。
【図５】複数の部分に分けられる論理アドレス部分空間を示す。
【図６】本明細書に記載されている技術によって用いられてもよい汎用コンピュータデバイスおよび汎用モバイル・コンピュータデバイスの一例を示す。
【発明を実施するための形態】
【００３７】
詳細な説明は、概略図の説明から開始する。説明は、オブジェクトサイズ（ＯＳ）である区別基準を用いてリソースの競合を解決することに焦点をおき、経時的なＡＭＭモジュールの動作を一例として示す。説明は、フローチャート図および実施パラメータについてさらに議論し、汎用コンピュータシステムを記載することによって締めくくる。
【００３８】
図１は、コンピュータシステム１００のブロック図を示し、コンピュータシステム１００は、プロセッサ１１０（例えば中央処理装置ＣＰＵ）、ランダムアクセスメモリ（ＲＡＭ）１２０およびメモリ管理装置（ＭＭＵ）１３０を有する。説明を簡単にするために、さらなるハードウェア構成要素、例えばデータおよび／またはアドレスを通信するバスは示されない。コンピュータシステム１００は、コンピュータ実施方法（図４参照）を実施するのに使用可能なシステムである。
【００３９】
図１は、（破線の長方形により示す）ソフトウェアモジュール、すなわち、ミューテータ１４０およびＡＭＭモジュール１５０もまた示す。ソフトウェアモジュールは、ＲＡＭ１２０内で実施され、プロセッサ１１０によって実行され、他の実施態様が可能である。説明を簡単にするために、図１は、ＲＡＭ１２０の外側のモジュールを示す。オプションとして、ＭＭＵ１３０がソフトウェアによって実施可能であることに留意されたい。
【００４０】
ソフトウェアモジュールおよびハードウェアは、コンピュータシステムのオペレーティングシステムと相互作用し、例えば要求を実際に実施する。当業者は、本明細書においてさらなる説明を必要とせずにオペレーティングシステムを考慮することができる。
【００４１】
ミューテータ１４０は、プログラムコード、すなわちアプリケーションのためのコードによって実施される。ミューテータ１４０は、ランタイム環境（ＲＴＥ、時々仮想マシン）を実行のために必要とするアプリケーションとすることができる。例えば、ミューテータ１４０は、プログラミング言語、例えばＪＡＶＡ、Ｃ＃、ＰＹＴＨＯＮ、ＪＡＶＡＳＣＲＩＰＴ、ＳＣＡＬＡまたはＧＯで記述可能である。ＡＭＭモジュール１５０は、そのＲＴＥの一部とすることができる。
【００４２】
説明を簡単にするために、プロセッサ１１０がある時点で１つのソフトウェアモジュールのみを実行できると仮定される。これは、ＡＭＭモジュール１５０（およびＡＭＭモジュールと相互作用する構成要素、例えばＭＭＵおよびＲＡＭ）が排他的に（ミューテータではなくＡＭＭモジュールのみ、または、その逆のいずれか）動作している時間を制限する要求につながる。この時間的制限は、通常数マイクロ秒で測定される、最大の許容時間（または制限時間）ＴＭＡＸとして、ここで、記号で表される。制限は、相対的とすることができ、ＴＭＡＸは、（ミューテータの実行時間に対して）ミューテータの一部の時間とすることができる。制限は、所定の期間にミューテータのためのプロセッサの利用可能性を保証するために、絶対的な時間間隔とすることもできる。
【００４３】
ミューテータ１４０は、プロセッサ１１０によって実行されており、オブジェクトをＲＡＭ１２０内に一時的に格納するためのメモリ割当要求１４１（Ｒｅｑ［ｉ］）を出す。オブジェクトは、データオブジェクト（例えば、画像データ、音声データ、ビデオデータ、制御データ）および／またはコードオブジェクト（例えば、プログラムルーチンのためのコード）またはＲＡＭ１２０内に格納されうるビットおよびバイトの任意の他の収集とすることができる。以下、オブジェクトは、ミューテータ１４０が要求を出す順序に従って、Ｏ［１］、Ｏ［２］、・・・Ｏ［ｉ］、・・・とラベル付けされる。
【００４４】
ＡＭＭモジュール１５０は、論理アドレスＡｘ．ｙを有する論理アドレス空間１５５を備える。本明細書において、「Ａｘ．ｙ」という表記は、単純化され、開始アドレスおよび終了アドレス、開始アドレスおよび終了アドレスの計算を可能にする範囲、アドレス空間内のスロットまたは論理アドレスを識別する任意の他の慣例を含むことができる。
【００４５】
本例において、連続するアドレスＡｘ．ｙとＡｘ．ｙ＋１との間の距離（バイトで測定される）は、「アドレス空間の間」であり、ｄｅｌｔａｘ（例えばｄｅｌｔａ１、ｄｅｌｔａ２）として与えられる。
【００４６】
論理アドレス空間１５５は、ミューテータ１４０に割り当てられる。ＡＭＭモジュール１５０は、機能モジュール１５６をさらに備え、機能モジュール１５６は、少なくとも、割当、割当解除および選択的コンパクションという機能を実行する。これらの機能を考慮した経時的な論理アドレス空間１５５のステータスは、図２の一例に示される。
【００４７】
割当機能では、ＡＭＭモジュール１５０は、ミューテータ１４０からメモリ割当要求１４１を受信し、論理アドレス空間１５５内の論理アドレスＡｘ．ｙをオブジェクトに割り当てる。論理アドレスＡｘ．ｙを割り当てることは、少なくとも第１の部分空間１５５−１（論理アドレスＡ１．１・・Ａ１．Ｋ）および第２の部分空間１５５−２（論理アドレスＡ２．１・・・Ａ２．Ｌ）に選択的である。（２つの）部分空間の区別は、（後の時点での）コンパクション機能に関連するので、第１の部分空間１５５−１は、「コンパクション空間」とも称され、第２の部分空間１５５−２は「非コンパクション空間」とも称される。区別は、少なくとも１つの基準に依存する。上述したように、図１は、オブジェクトサイズの基準に焦点をおく。
【００４８】
第２の部分空間１５５−２のサイズＳ２は、係数によって乗算されるヒープサイズ（ＨＳ）に関連し、第２の部分空間１５５−２のサイズＳ２の決定に関する詳細は、図４（確保）および図５に関連して説明される。
【００４９】
ＭＭＵ１３０は、アドレス空間１５５の論理アドレスＡｘ．ｙをＲＡＭ１２０の物理アドレス（Ｐ１、Ｐ２、・・・）にマッピングするためのマッピング機能を有する。ＭＭＵ１３０は、固定サイズのページを管理する。通常のページサイズは、例えば、４ＫＢ（キロバイト）または１２８ＭＢ（メガバイト）とすることができる。図１の例は、４ＫＢのページサイズを仮定する。上述したように、非コンパクション空間内の論理アドレスは、大きいオブジェクト（すなわち、ページサイズより大きいオブジェクト）に割り当て可能である。ＭＭＵ１３０は、いくつかまたはより多くのメモリページを隣接する論理アドレスにマッピングする。本例において、オブジェクトＯ［１］は８ＫＢ（または２ページ）のオブジェクトサイズを有し、オブジェクトＯ［２］も同様に８ＫＢを有する。Ｏ［１］は、非コンパクション空間内のオブジェクトであり、２つのメモリページを必要とする。破線矢印で示すように、論理アドレスＡ２．１ａおよびＡ２．１ｂは、オブジェクトＯ［１］に割り当てられ、ＭＭＵ１３０は、Ａ２．１ａをＰ１（１ページのサイズを有する）にマッピングし、Ａ２．１ｂをＰ２（同様に１ページのサイズを有する）にマッピングする。また、論理アドレスＡ２．２ａおよびＡ２．２ｂは、オブジェクトＯ［２］に割り当てられ、ＭＭＵ１３０は、Ａ２．２ａをＰ６（１ページのサイズを有する）にマッピングし、Ａ２．２ｂをＰ１０（同様に１ページのサイズを有する）にマッピングする。異なるオブジェクトサイズ（例えば、オブジェクト当たりｎページ）を有するオブジェクトは、それに応じてマッピング可能である。
【００５０】
（第１の部分空間の）論理アドレスＡ１．１は、物理アドレスＰ１０１にマッピングされる。説明を簡単にするために、さらなるマッピングは示されない。
【００５１】
部分空間１５５−１（コンパクション）内の論理アドレスのための（ＭＭＵ１３０内の）論理から物理へのマッピングは、スタティックとすることができ、それは、割当要求を満たすために変わる必要はない。
【００５２】
図１は、オブジェクトがＲＡＭ１２０内のメモリ内に格納されることを示し、ＲＡＭ１２０が断片化されうることをさらに示す。例えば、物理アドレスＰ１およびＰ２は隣接し（他のアドレスを間に挟まない）、物理アドレスＰ６およびＰ１０は隣接していない（図示されないＰ７、Ｐ８、Ｐ９によって分離される）。ＭＭＵ１３０は、ＲＡＭ内の大きいオブジェクトのための断片化に適応することができる。しかし、マッピングのため、単一のオブジェクトは単一の論理アドレスを有することができるので、ミューテータ１４０は、この種の単一のオブジェクトにその単一の論理アドレスでアクセスすることができる（例えば、Ａ２．２においてＯ［２］）。ミューテータ１４０の実行のために、隣接する論理アドレスを有することは、有利になりうる。本例において、論理アドレスＡ２．１およびＡ２．２は隣接するが、ＲＡＭ内に物理的に格納されているオブジェクトの非隣接は、ＭＭＵ１３０によって適応される。
【００５３】
図面を左から右に見ると、ミューテータ１４０は、特定のオブジェクトＯ［１］、Ｏ［２］等のためのメモリ割当要求１４１（Ｒｅｑ［１］、Ｒｅｑ［２］・・・）を出す。ＡＭＭモジュール１５０は、要求１４１を受信し、論理アドレスＡｘ．ｙを各オブジェクトに割り当てる。ＭＭＵ１３０は、マッピングを物理アドレスに提供するので、オブジェクトは、ＲＡＭ１２０内に格納される。
【００５４】
図１は、論理アドレスがオブジェクトＯ［１］からＯ［９］に割り当てられ、これらのオブジェクトがＲＡＭ１２０内の対応する物理アドレス下に格納された時点を示す。
【００５５】
ミューテータ１４０は、しばしば、オブジェクトを読み出し、作成し、削除し、または、異なるオブジェクトＯ［ｊ］（図示せず）とＯ［ｉ］との間の参照を変える。その名前が示唆するように、ミューテータ１４０は、オブジェクトグラフを連続的に変化させ、すなわち、ミューテータ１４０は、オブジェクト間の参照を変える。結果として、いくつかのオブジェクトは、オブジェクトグラフから到達できなくなり、それゆえ、ミューテータ１４０によってアクセスできなくなりうるので、もはやＲＡＭ内に残る必要はない（いわゆる「ガベージオブジェクト」）一方、到達可能またはアクセス可能なオブジェクトは、ＲＡＭ内に残る必要がある（いわゆる「ライブオブジェクト」）。
【００５６】
割当解除機能を実行することによって、ＡＭＭモジュール１５０は、ＡＭＭモジュール１５０によりガベージオブジェクトとして識別されたオブジェクトから論理アドレスを周期的に割当解除する。経時的な割当および割当解除は、断片化につながるので、コンパクション機能を実行することによって、ＡＭＭモジュール１５０は、（ライブ）オブジェクトを他の論理アドレスＡｘ．ｙに再割り当てすることによって、論理アドレス空間を圧縮する。上述した競合に適応するために、ＡＭＭモジュール１５０は、コンパクション機能を第１の部分空間のためにのみ実行する。それゆえ、ＭＭＵ１３０は、オプションとして用いられる。コンパクションの代わりに、ＡＭＭモジュール１５０は、さもなければ周知技術によって、例えば従来のガベージコレクションによって、（第１の部分空間の）断片化に対抗することができる。
【００５７】
ＭＭＵ１３０は、（基準である）オブジェクトＯ［ｉ］のサイズに従って、メモリ割当要求Ｒｅｑ［ｉ］を区別することができる。オブジェクト（およびアドレス空間）のサイズは、測定単位、例えばバイト（Ｂ）、キロバイト（ＫＢ）、メガバイト（ＭＢ）、ギガバイト（ＧＢ）等において測定可能である。閾値サイズ（ＴＳ）未満のサイズを有するオブジェクトは、論理アドレスＡ１．ｙ（コンパクション空間）に割り当てられる。コンパクションの間、この小さいオブジェクト（ライブの場合）は、ＲＡＭ１２０内で移動されなければならないだろうが、オブジェクトを移動するのに必要な時間は、最大の許容時間ＴＭＡＸ未満である。閾値サイズ（ＴＳ）超の（または閾値サイズ（ＴＳ）に等しい）サイズを有するオブジェクトは、論理アドレスＡ２．ｙ（非コンパクション）に割り当てられるので、大きいオブジェクトは、ＲＡＭ１２０内で移動されないであろう。オブジェクトがガベージとして識別される場合、ＡＭＭモジュール１５０は、ＭＭＵ１３０内における（オブジェクトの）論理アドレスの物理メモリへのマッピングを削除することによって、物理メモリを単に解放するであろう。
【００５８】
図１の例において、論理アドレスＡ１．ｙは、少なくともｄｅｌｔａ１によって間隔がおかれ、ｄｅｌｔａ１は、閾値サイズＴＳに対応する（ｄｅｌｔａ１＝ＴＳ）。閾値サイズＴＳは、ＲＡＭ１２０内のページの粒度に等しくすることができる。例えば、ＴＳは、ページサイズＰＳ＝４ＫＢに等しくすることができる。
【００５９】
論理アドレスＡ２．ｙは、少なくともｄｅｌｔａ２によって間隔がおかれる。論理アドレスＡ２．ｙのために、ｄｅｌｔａ２は、異なるサイズクラスのために実施可能である。図１は、Ａ２．Ｌのためにｄｅｌｔａ２’を示す。大きいオブジェクトをさらに区別するこの種の方法に関する詳細は、図５に関連して記載されている。
【００６０】
図２は、連続時点における図１のコンピュータシステム１００内のＡＭＭモジュール１５０の論理アドレス空間１５５（部分空間１５５−１、１５５−２）を示す。ＡＭＭモジュール１５０がオブジェクトサイズ基準に従って区別され、小さいオブジェクト（＜ＴＳ）を大きいオブジェクト（≧ＴＳ）から区別すると仮定される。
【００６１】
時点ｔ［２］において、ＡＭＭモジュール１５０は、Ｒｅｑ［１］およびＲｅｑ［２］を受信し、Ａ２．１をオブジェクトＯ［１］に割り当て、Ａ２．２をオブジェクトＯ［２］に割り当てた。両方のオブジェクトは、ＴＳ超のサイズであるが、ｄｅｌｔａ２に適合するサイズを有する。
【００６２】
時点ｔ［４］において、ＡＭＭモジュール１５０は、Ｒｅｑ［３］およびＲｅｑ［４］をさらに受信し、Ａ２．３をオブジェクトＯ［３］に割り当て、Ａ２．４をオブジェクトＯ［４］に割り当てた。再び、両方のオブジェクトは、ＴＳ超のサイズであるが、ｄｅｌｔａ２に適合するサイズを有する。
【００６３】
時点ｔ［１０］において、ＡＭＭモジュール１５０は、Ｒｅｑ［５］からＲｅｑ［１０］をさらに受信し、論理アドレスＡ２．５をＯ［８］（大きいオブジェクト）に割り当て、Ａ１．１をＯ［５］に、Ａ１．２をＯ［６］に、Ａ１．３をＯ［７］に、Ａ１．４をＯ［９］に、Ａ１．５をＯ［１０］に割り当てた（小さいオブジェクト）。Ｏ［１］、Ｏ［２］、Ｏ［３］、Ｏ［４］、Ｏ［８］のためのアドレスＡ２．１からＡ２．５は、隣接し（すなわち、ギャップなし）、Ｏ［５］、Ｏ［６］、Ｏ［７］、Ｏ［９］、Ｏ［１０］のためのアドレスＡ１．１からＡ１．５は、隣接する（すなわち、ギャップなし）。
【００６４】
後の時点ｔ’において、ＡＭＭモジュール１５０は、オブジェクトＯ［３］、Ｏ［４］、Ｏ［６］およびＯ［９］がガベージオブジェクトであると決定した。結果として、ＡＭＭモジュール１５０は、論理アドレスＡ２．３、Ａ２．４を割当解除し、物理アドレスに対する対応するマッピングを削除するようにＭＭＵ１３０に命令する。ＡＭＭモジュール１５０はまた、Ａ１．２、Ａ１．４も割当解除するが、ＭＭＵ１３０またはＲＡＭ１２０との相互作用はない。割当解除のため、両方の部分空間１５５−１および１５５−２のアドレス空間は、もはや隣接しない。
【００６５】
後の時点ｔ”において、ＡＭＭモジュール１５０は、第１の空間１５５−１（のみ）のアドレスを圧縮したが、第２の空間１５５−２のアドレスを圧縮しなかった。圧縮は、オブジェクトが移動するようなＲＡＭ１２０との相互作用を含む。しかしながら、小さいオブジェクトＯ［５］、Ｏ［７］またはＯ［１０］のうちの１つを移動するのに必要な時間は、ＴＭＡＸより小さい。
【００６６】
その短い時間中断の後、ミューテータ１４０は、実行され続け、さらなる要求を送信する。ＡＭＭモジュール１５０は、アドレスをさらなるオブジェクト、例えば大きいオブジェクト（例えば、Ｏ［１３］）および小さいオブジェクト（例えば、Ｏ［１４］、Ｏ［１５］）に割り当て続けることができる。
【００６７】
図１および図２は、基準としてオブジェクトサイズに焦点をおくが、ＡＭＭ１５０は、オブジェクト属性（ＯＡ）に従って、特定のオブジェクトを区別することもできる。オブジェクト属性（ＯＡ）は、属性、例えば（１）オブジェクトタイプ、（２）オブジェクトへのアクセスの頻度、（３）ミューテータ外にあるコードに渡されるオブジェクトと、ミューテータ内でのみ処理されるオブジェクトと、の間の区別、および、（４）ハードウェアにより直接アクセスされるオブジェクトを備えることができる。
【００６８】
図３は、コンピュータシステム１００のブロック図を示すが、コンピュータシステム１００は、２つのミューテータ１４０、１４０’と、２つの論理アドレス空間１５５、１５５’を有するＡＭＭモジュール１５０と、を有する。
【００６９】
ＡＭＭモジュール１５０は、部分空間（圧縮、非圧縮）を有することができるアドレス空間１５５および１５５’を割り当てる。アドレス空間の全体のサイズは、互いに異なりうる。ＡＭＭモジュール１５０は、メモリ割当要求１４１、１４１’（Ｒｅｑ）をミューテータ１４０、１４０’から受信する。機能モジュール１５６は、両方の空間のために共通とすることができる。
【００７０】
図４は、コンピュータシステム１００（図１参照）内のＡＭＭモジュール１５０を動作するためのコンピュータ実施方法４００のフローチャート図を示す。
【００７１】
上述したように、論理アドレス空間１５５は、第１の部分空間１５５−１および第２の部分空間１５５−２を有する。確保するステップ４１０において、ＡＭＭモジュール１５０は、（論理アドレス空間１５５の）第２の部分空間１５５−２を確保し、第２の部分空間１５５−２は、異なるサイズクラスのオブジェクトのためのスロットを有する部分を有する。確保するステップ４１０は、第２の部分空間１５５−２のサイズ（Ｓ２）を、係数（Ｍ）とミューテータ（１４０）の最大ヒープサイズ（ＨＳ）との積として計算することを含む。上述したように、ヒープサイズ（ＨＳ）は、部分空間１５５−２内に潜在的に格納されうるオブジェクトの累算されたサイズである。サイズに関するさらなる詳細は、図５に関連して説明される。
【００７２】
受信するステップ４２０において、ＡＭＭモジュール１５０は、特定のオブジェクトのためのメモリ割当要求をミューテータから受信する。特定のオブジェクトは、コンピュータシステムのランダムアクセスメモリ内に格納されうる。
【００７３】
割り当てるステップ４３０において、ＡＭＭモジュール１５０は、論理アドレス空間内の特定の論理アドレスを特定のオブジェクトに割り当てる。このことにより、ＡＭＭモジュール１５０は、少なくとも１つの基準（例えば閾値ＴＳ、オブジェクト属性ＯＡ）に従って、特定のオブジェクトを区別し（４３５）、第１の部分空間（コンパクション空間）からの論理アドレス（例えばＡ１．ｙ）を割り当て（４３１）、第２の部分空間（非コンパクション空間）からの論理アドレス（例えばＡ２．ｙ）を割り当てる（４３２）。
【００７４】
マッピングするステップ４４２において、ＡＭＭモジュール１５０は、第２の部分空間（すなわち、非コンパクション空間）からの割り当てられた論理アドレスを、ＲＡＭ内の物理メモリにマッピングするようにメモリ管理装置１３０に命令する。
【００７５】
圧縮するステップ４５１において、ＡＭＭモジュール１５０は、ランダムアクセスメモリ内で対応するオブジェクトを移動することと組み合わせて、第１の部分空間（コンパクション空間）内の論理アドレス内のライブオブジェクトを圧縮する。対照的に、ＡＭＭモジュール１５０は、第２の部分空間（非コンパクション空間）内の論理アドレス内のライブオブジェクトを圧縮せず、この場合、ＭＭＵは、ＲＡＭ内でオブジェクトを移動することなく、未使用の物理メモリを、新しく割り当てられたオブジェクトのために使われる論理アドレスに再マッピングする。
【００７６】
割り当てるステップ４３０において、ＡＭＭモジュール１５０は、オブジェクトサイズ基準である少なくとも１つの基準に従って、特定のオブジェクトを区別することができる（４３５）。所定の閾値サイズ（ＴＳ）は、オブジェクトサイズ基準とすることができ、ＡＭＭモジュール１５０は、第１の部分空間内の論理アドレスを、所定の閾値サイズ（ＴＳ）未満のオブジェクトサイズを有するオブジェクトに割り当てることができ（４３１）、第２の部分空間内の論理アドレスを、ＴＳ以上のオブジェクトサイズを有するオブジェクトに割り当てることができる（４３２）。所定の閾値サイズは、ＲＡＭ１２０のページサイズ（ＰＳ）に関連するものとすることができ、ＰＳに等しくすることができる。
【００７７】
図４はまた、論理アドレスを物理メモリに変換することを意味するマッピング４４１／４４２を実行するＭＭＵ１３０の動作を示す。両方のマッピングステップは、一旦ＡＭＭモジュール１５０が論理アドレスを割り当てたとき適用されるが、コンパクション空間からの論理アドレスを用いたマッピング４４１および非コンパクション空間からの論理アドレスを用いたマッピング４４２は区別される。マッピング４４１は、スタティックであると考えられ、経時的な変化はないが（時間が経っても変化しないが）、マッピング４４２は、実際、物理メモリを、ライブオブジェクトによって現在用いられている論理アドレスにダイナミックにマッピングする連続的な再マッピングである。圧縮するステップ４５１において、ＭＭＵ１３０は、メモリ内でライブオブジェクト（コンパクション空間内で割り当てられるそれらの論理アドレスを有する）を移動する。ＭＭＵ１３０は、オブジェクトを移動するので、（コンパクション空間内の）空き論理メモリは、ページサイズ（ＰＳ）までの割り当てに用いるのに十分大きい隣接する範囲内で利用できるようになる。
【００７８】
再びＡＭＭモジュール１５０の動作に戻ると、確保するさらなるステップ４１０において、ＡＭＭモジュール１５０は、スロットを有する部分を有する論理アドレス空間の第２の部分空間を異なるサイズクラスのオブジェクトのために確保する（図５参照）。確保するステップ４１０は、等しいサイズの部分のために実行可能である。
【００７９】
確保するステップ４１０は、ミューテータの最大ヒープサイズに対応する部分のサイズを計算することを含むことができ、そのサイズは、第２の部分空間内に潜在的に格納されうるオブジェクトの累算されたサイズである。確保するステップ４１０は、部分を確保することを含むことができ、第１の部分は、所定の閾値サイズ（ＴＳ）で除算されるヒープサイズ（ＨＳ）に対応する第１の数のスロットを有し、第２の部分は、２で除算される第１の数に対応する第２の数のスロットを有する。代替例において、開始部分は、２の累乗の数である第１の数のスロットを有し、隣接するスロットは、第１の数から等比数列で計算される数を有する。
【００８０】
方法４００は、特定の論理アドレスのいくつかをいずれかの部分空間から割当解除するさらなるステップを有することができる。ＡＭＭモジュール１５０は、ＲＡＭ内のオブジェクトを圧縮せずに、第２の部分空間内の以前に割り当てられた論理アドレスから物理メモリのマッピングを解除するようにＭＭＵに命令する。
【００８１】
オプションとして、ＡＭＭモジュール１５０は、オブジェクト属性（ＯＡ）である少なくとも１つの基準に従って、特定のオブジェクトを区別することができ（４３５）、属性は、例えば実行優先度、実行頻度、ファイルタイプ、データを外部コード（他の言語で記述されるまたはハードウェアによってアクセスされる）に渡すオブジェクトの使用である。
【００８２】
図４はまた、コンピュータプログラムまたはコンピュータプログラム製品を示す。コンピュータプログラム製品は、コンピュータのメモリ内にロードされ、コンピュータの少なくとも１つのプロセッサによって実行されるとき、コンピュータ実施方法４００のステップを実行する。実施形態において、メモリは、ＲＡＭ１２０とすることができ、プロセッサは、ＣＰＵ１１０とすることができる。
【００８３】
以下、説明は、確保するステップ４１０において考慮されるオブジェクトサイズに焦点をおく実施態様に移る。
【００８４】
上述したように、図１は、ＲＡＭ１２０内のオブジェクトが断片化されていないことを示す。しかしながら、大きいオブジェクトの断片化を保持し、（上述した概略のように）小さいオブジェクトのためのみの圧縮を実行することができる。
【００８５】
図５は、複数の部分に分けられる論理アドレス部分空間５５５−２を示す。論理アドレス空間５５５−２は、図１の論理アドレス空間１５５−２、すなわち、非コンパクション空間に対応する。本例において、部分は、（バイトで測定される）等しいサイズを有するが、この表記は、説明のために用いられるのみである。
【００８６】
以下の表記が用いられる、すなわち、Ａ２．ｍ．ｙは、特定の部分ｍ内の特定の論理アドレスを表し、ｙは、各部分内の識別子である（図１参照）。上述したように、論理アドレスＡ２．ｍ．ｙは、開始アドレスおよび終了アドレスを含むことができる。図５において、これは、部分７および８のために示される。例えば、Ａ２．７．２の終了アドレスは、Ａ２．８．１の開始アドレスの下の１バイトのオフセットを有する。縦列で示されるが、部分は、隣接するアドレス空間を形成するように考慮される。
【００８７】
部分は、異なるサイズクラスのスロットを有し、アドレス可能なオブジェクトの最大サイズにより測定される（最大オブジェクトサイズＭＯＳ）。
【００８８】
部分８は、５１２ＫＢの最大オブジェクトサイズ（ＭＯＳ）を有する単一のオブジェクトのための論理アドレスＡ２．８．１を有する。部分７は、２つの論理アドレスＡ２．７．１およびＡ２．７．２を２つのオブジェクトのために有し、各々は、ＭＯＳ＝２５６ＫＢを有する。部分６は、４つの論理アドレスＡ２．６．１からＡ２．６．４を４つのオブジェクトのために有し、各々は、ＭＯＳ＝１２８ＫＢを有する。部分５は、８の論理アドレスをＭＯＳ＝６４ＫＢで有し、部分４は、１６の論理アドレスをＭＯＳ＝３２ＫＢで有し、これは、部分１が１２８の論理アドレスをＭＯＳ＝４ＫＢで有するまで続く。２の累乗方式を用いることは、都合がよいが、オプションである。
【００８９】
ミューテータのメモリ要求の全体は、すべての大きいオブジェクト（すなわちＯＳ≧ＴＳ）の全体のサイズである最大ヒープサイズ（ＨＳ）として利用でき、実行中の任意の所定の時点において、ミューテータ１４０がアクセスし続ける小さい。オブジェクト（すなわちＯＳ＜ＴＳ）のメモリ要求は、別々に考慮可能である。
【００９０】
部分１から８の各々のサイズが最大ヒープサイズに対応するので、ミューテータ１４０が最大ヒープサイズ内に存在する（すなわち、ヒープサイズを超えるライブオブジェクトの合計サイズを有するオブジェクトの割当のための要求を出さない）限り、アドレスの割当は失敗しない。極端な場合、ミューテータ１４０は、単一のオブジェクト（例えば、５１２ＫＢ）のみのための単一のメモリ割当要求を出すことができるか、または、４ＫＢのオブジェクトサイズを有する１２８のオブジェクトのための要求を出すことができる。通常、ミューテータ１４０は、異なるサイズを有するオブジェクトのための要求を出す。
【００９１】
（第２の）論理アドレス空間５５５−２の全体の要求は、例えば、部分のサイズ（例えば、等しいサイズ）によって乗算された部分の数Ｍとして、本例では８×５１２ＫＢとして計算可能である。コンピュータのアドレス空間（例えば、上述したように２６４）と比較して、この全体の要求は、通常はるかに小さい。
【００９２】
一実施形態において、各部分は、ヒープサイズ（ＨＳ、例えば５１２ＫＢ）に対応するサイズを有することができる。部分の数Ｍは、係数であり、（第２の）論理アドレス空間５５５−２の全体のサイズＳ２は、係数とヒープサイズとの積として、すなわちＳ２＝Ｍ×ＨＳとして計算される。
【００９３】
本例において、ＲＡＭ１２０は、アドレス指定方式が有効なページを有することができ、ページは、（例えば）部分１のＭＯＳに対応するページサイズ（ＰＳ）、すなわち４ＫＢを有する。
【００９４】
ＡＭＭモジュール１５０は、スタートアップ時に、部分１〜８を有する部分空間５５５−２を割り当てる。例えば、ＡＭＭモジュール１５０がＲＴＥ（例えばＪａｖａ仮想マシン）の一部である場合、部分空間５５５−２は、ＲＴＥのスタートアップ時に割り当てられる。部分空間５５５−２を、ラウンチされている新規なミューテータ１４０の各々（図１、図２の１４０’参照、）のために割り当てることもできる。スタートアップ時に、ＡＭＭモジュール１５０は、通常はまだミューテータ１４０からメモリ割当要求（Ｒｅｑ）を受信しておらず、ＭＭＵ１３０は、論理アドレスＡ２．ｍ．ｙをＲＡＭ１２０にまだマッピングしていない。
【００９５】
以下の説明は、第２の部分空間１５５−２（例えば、５５５−２）内のみに格納されうる大きいオブジェクトのためのメモリ割当要求（図１のＲｅｑ）に関するものであり、ＡＭＭモジュール１５０が、ＲＡＭ１２０のページサイズＰＳ＝４ＫＢに対応する閾値４ＫＢを有するオブジェクトサイズ基準を用いることを仮定する。
【００９６】
図１に関して詳細に上述したように、特定のオブジェクトのためのメモリ割当要求（Ｒｅｑ）を受信すると、ＡＭＭモジュール１５０は、第１の部分空間１５５−１（コンパクション空間）または第２の部分空間１５５−２（非コンパクション空間）が用いられうるかを決定する。
【００９７】
ＡＭＭモジュール１５０は、オブジェクトのサイズに従って、部分空間５５５−２の部分１〜８内の特定の論理アドレスを特定の大きいオブジェクトに割り当てる。例えば、ＡＭＭモジュール１５０は、部分１内のＡ２．１．ｙを、サイズ４ＫＢを有するオブジェクトに割り当て、部分２内のＡ２．２．ｙを、サイズ８ＫＢ（またはより小さい）を有するオブジェクトに割り当てる等である。
【００９８】
次に、ＡＭＭモジュール１５０は、割り当てられた論理アドレスＡ２．ｍ．ｙのマッピングをＲＡＭ１２０内の物理メモリに提供するようにＭＭＵ１３０に命令する。
【００９９】
ミューテータ１４０が実行される間、ＡＭＭモジュール１５０は、いくつかの論理アドレスを割当解除し、いくつかの論理アドレスを再割り当てする（図２参照）。結果として、部分空間５５５−２内の部分１〜８は、断片化されたものになる。図５の例は、「スナップショット」を示し、黒い塗りつぶしで示される論理アドレスは、（ＭＭＵ１３０により）ＲＡＭ１２０内の物理メモリＰに割り当てられる。例えば、（部分５内の）論理アドレスＡ２．５．２は、６４ＫＢのサイズを有する特定のオブジェクトのために、ＲＡＭ１２０内の物理メモリの１６ページ（それぞれ４ＫＢを有する）にマッピングされ、（部分４内の）論理アドレスＡ２．４．８は、３２ＫＢのサイズを有する特定のオブジェクトのために、ＲＡＭにマッピングされ、ＲＡＭ内のオブジェクトを有する部分３、２および１の論理アドレスが存在する。
【０１００】
論理アドレスを物理メモリに対して１対１でマッピングする必要はない。図５の例において、論理アドレスのより大きな部分は、物理メモリにマッピングされない。
【０１０１】
単一のオブジェクトのために用いられる物理メモリが隣接することもできるし、隣接しないこともできることに留意されたい。例えば、８ＫＢのオブジェクトを有する（部分２内の）論理アドレスＡ２．２．１２は、２ページ（各４ＫＢ）のみの物理メモリを必要とし、ＭＭＵ１３０は、隣接するアドレスにマッピングすることができる（Ｏ［１］のためのＰ１およびＰ２である図１の例参照）。必要な場合、ＭＭＵ１３０は、ＲＡＭ内の隣接しないアドレスに、例えば、より大きい割当のための単一の物理ページをグループ化することによってマッピングすることができる（例えば、Ａ２．４．８でのオブジェクトのために４ページ）。非隣接は、ミューテータに隠されているままである。
【０１０２】
図５における最大オブジェクトサイズ（ＭＯＳ）は、一例としてのみ示される。２の累乗方式は、中間のＭＯＳによって補完可能であり、中間のＭＯＳは、例えば６ＫＢ（４ＫＢと８ＫＢとの間）、１２ＫＢ（８ＫＢと１６ＫＢとの間）、２４ＫＢ等であり、これは１２８ＧＢまで続く。
【０１０３】
他のページサイズ（ＰＳ）を、例えば１ＧＢのページサイズまで用いることができる。
【０１０４】
変更されたサイズＳ２’＜Ｓ２から開始することもできる。換言すれば、係数は、より小さいであろう。この種の方法は、理論的なサイズＳ２＝Ｍ×ＨＳと、より現実的なサイズと、の間の妥協であり、すべての理論的に可能なオブジェクトサイズが用いられるわけではないということが仮定される。
【０１０５】
図６は、本明細書に記載されている技術によって用いられてもよい汎用コンピュータデバイス９００および汎用モバイル・コンピュータデバイス９５０の一例を示す。コンピュータデバイス９００は、さまざまな形のデジタルコンピュータ、例えばラップトップ、デスクトップ、ワークステーション、携帯情報端末、サーバ、ブレードサーバ、メインフレームおよび他の適切なコンピュータを表すことを意図する。汎用コンピュータデバイス９００は、図１のコンピュータシステム１００に対応してもよい。コンピュータデバイス９５０は、さまざまな形のモバイルデバイス、例えば携帯情報端末、携帯電話、スマートフォンおよび他の類似のコンピュータデバイスを表すことを意図する。図示される構成要素、それらの接続および関係、ならびに、それらの機能は、例示的であることのみを意味し、この文書における明細書および／または特許請求の範囲の本発明の実施態様を制限することを意味しない。
【０１０６】
コンピュータデバイス９００は、プロセッサ９０２、メモリ９０４、ストレージデバイス９０６、メモリ９０４と高速拡張ポート９１０とを接続する高速インタフェース９０８、および、低速バス９１４とストレージデバイス９０６とを接続する低速インタフェース９１２を含む。構成要素９０２、９０４、９０６、９０８、９１０および９１２の各々は、さまざまなバスを用いて相互接続され、共通のマザーボード上に、または、他の適切な方法で取り付けられてもよい。プロセッサ９０２は、コンピュータデバイス９００内で実行するための命令を処理することができ、命令は、メモリ９０４内またはストレージデバイス９０６上に格納され、ＧＵＩのためのグラフィック情報を外部の入出力デバイス、例えば、高速インタフェース９０８に結合されるディスプレイ９１６上に表示するための命令を含む。他の実施態様では、必要に応じて、複数のプロセッサおよび／または複数のバスが、複数のメモリおよびメモリのタイプとともに用いられてもよい。また、複数のコンピュータデバイス９００が接続され、各デバイスが、必要な動作の部分を提供してもよい（例えばサーババンク、一群のブレードサーバまたはマルチプロセッサシステムとして）。
【０１０７】
メモリ９０４は、コンピュータデバイス９００内の情報を格納する。一実施態様では、メモリ９０４は、１つまたは複数の揮発性メモリ装置である。他の実施態様では、メモリ９０４は、１つまたは複数の不揮発性メモリ装置である。メモリ９０４は、他の形のコンピュータ可読媒体、例えば磁気または光ディスクでもよい。
【０１０８】
ストレージデバイス９０６は、コンピュータデバイス９００のためのマスストレージを提供することができる。一実施態様では、ストレージデバイス９０６は、コンピュータ可読媒体でもよいし、コンピュータ可読媒体を含んでもよく、コンピュータ可読媒体は、例えばフロッピーディスクデバイス、ハードディスクデバイス、光ディスクデバイスまたはテープデバイス、フラッシュメモリまたは他の類似の固体メモリデバイスまたはデバイスのアレイであり、ストレージエリアネットワークまたは他の構成内のデバイスを含む。コンピュータプログラム製品は、情報担体内に非一時的に実施可能である。コンピュータプログラム製品は、実行時に１つまたは複数の方法、例えば上述した方法を実行する命令を含んでもよい。情報担体は、コンピュータ可読媒体または機械可読媒体、例えばメモリ９０４、ストレージデバイス９０６またはプロセッサ９０２上のメモリである。
【０１０９】
高速制御装置９０８は、コンピュータデバイス９００のための帯域幅集中動作を管理する一方、低速制御装置９１２は、低帯域幅集中動作を管理する。機能のこの種の割り当ては、例示的なだけである。一実施態様では、高速制御装置９０８は、メモリ９０４、（例えばグラフィックプロセッサまたはアクセラレータを介して）ディスプレイ９１６、および、さまざまな拡張カード（図示せず）を受け入れてもよい高速拡張ポート９１０に結合される。実施態様では、低速制御装置９１２は、ストレージデバイス９０６および低速拡張ポート９１４に結合される。低速拡張ポートは、さまざまな通信ポート（例えばＵＳＢ、ブルートゥース、イーサネット、無線イーサネット）を含んでもよく、１つまたは複数の入出力デバイスに例えばネットワークアダプタを介して結合されてもよく、入出力デバイスは、例えばキーボード、ポインティングデバイス、スキャナまたはネットワークデバイス（例えばスイッチまたはルータ）である。
【０１１０】
コンピュータデバイス９００は、図示のように、多数の異なる形で実施されてもよい。例えば、コンピュータデバイス９００は、標準サーバ９２０として、または、この種のサーバの一群の多重時間として実施されてもよい。コンピュータデバイス９００は、ラック・サーバシステム９２４の一部として実施されてもよい。さらに、コンピュータデバイス９００は、パーソナルコンピュータ、例えばラップトップコンピュータ９２２内で実施されてもよい。代替的には、コンピュータデバイス９００からの構成要素は、デバイス９５０のようなモバイルデバイス内の他の構成要素に組み合わせられてもよい（図示せず）。この種のデバイスの各々は、１つまたは複数のコンピュータデバイス９００、９５０を含んでもよく、システム全体は、互いに通信する複数のコンピュータデバイス９００、９５０から構成されてもよい。
【０１１１】
コンピュータデバイス９５０は、他の構成要素の中でも、プロセッサ９５２、メモリ９６４、入出力デバイス、例えばディスプレイ９５４、通信インタフェース９６６およびトランシーバ９６８を含む。デバイス９５０には、ストレージデバイス、例えばマイクロドライブまたは他のデバイスが提供され、追加のストレージを提供してもよい。構成要素９５０、９５２、９６４、９５４、９６６および９６８の各々は、さまざまなバスを用いて相互接続され、構成要素のいくつかは、共通のマザーボード上に、または、他の適切な方法で取り付けられてもよい。
【０１１２】
プロセッサ９５２は、コンピュータデバイス９５０内の命令を実行することができ、命令は、メモリ９６４内に格納される命令を含む。プロセッサは、別々のおよび複数のアナログおよびデジタルプロセッサを含むチップのチップセットとして実施されてもよい。プロセッサは、例えば、デバイス９５０の他の構成要素の調整を提供してもよく、例えば、ユーザインタフェース、デバイス９５０により動作されるアプリケーションおよびデバイス９５０による無線通信を制御してもよい。
【０１１３】
プロセッサ９５２は、ディスプレイ９５４に結合される制御インタフェース９５８およびディスプレイインタフェース９５６を介してユーザと通信してもよい。ディスプレイ９５４は、例えば、ＴＦＴＬＣＤ（薄膜トランジスタ液晶ディスプレイ）またはＯＬＥＤ（有機発光ダイオード）ディスプレイでもよいし、または、他の適切な表示技術でもよい。ディスプレイインタフェース９５６は、ディスプレイ９５４を駆動するための適切な回路を備え、グラフィックおよび他の情報をユーザに示してもよい。制御インタフェース９５８は、ユーザからの命令を受信し、命令を変換し、プロセッサ９５２に提供してもよい。さらに、プロセッサ９５２と通信する外部インタフェース９６２が提供され、デバイス９５０が、他のデバイスと近距離通信を行うことができてもよい。外部インタフェース９６２は、例えば、いくつかの実施態様では有線通信を提供し、または、他の実施態様では無線通信を提供してもよく、複数のインタフェースが用いられてもよい。
【０１１４】
メモリ９６４は、コンピュータデバイス９５０内の情報を格納する。メモリ９６４は、１つまたは複数のコンピュータ可読媒体、１つまたは複数の揮発性メモリ装置または１つまたは複数の不揮発性メモリ装置のうちの１つまたは複数として実施可能である。増設メモリ９７４が提供され、拡張インタフェース９７２を介してデバイス９５０に接続されてもよく、拡張インタフェース９７２は、例えば、ＳＩＭＭ（シングル・インライン・メモリ・モジュール）カードインタフェースを含んでもよい。この種の増設メモリ９７４は、余分のストレージ空間をデバイス９５０に提供してもよいし、または、デバイス９５０用のアプリケーションまたは他の情報を格納してもよい。具体的には、増設メモリ９７４は、上述したプロセスを実行または補完するための命令を含んでもよく、安全な情報もまた含んでもよい。このように、例えば、増設メモリ９７４は、デバイス９５０のための安全モジュールとして作用してもよく、デバイス９５０の安全な使用を可能にする命令によってプログラムされてもよい。さらに、例えば、安全なアプリケーションは、ＳＩＭＭカードを介して追加情報とともに、例えば、識別情報をハッキングできない方法でＳＩＭＭカードに配置することによって提供されてもよい。
【０１１５】
メモリは、後述するように、例えばフラッシュメモリおよび／またはＮＶＲＡＭメモリを含んでもよい。一実施態様では、コンピュータプログラム製品は、情報担体内に非一時的に実施される。コンピュータプログラム製品は、実行時に、１つまたは複数の方法、例えば上述した方法を実行する命令を含む。情報担体は、コンピュータ可読媒体または機械可読媒体、例えばメモリ９６４、増設メモリ９７４、または、例えばトランシーバ９６８または外部インタフェース９６２を介して受信されてもよいプロセッサ９５２上のメモリである。
【０１１６】
デバイス９５０は、通信インタフェース９６６を介して無線で通信してもよく、通信インタフェース９６６は、必要な場合、デジタル信号処理回路要素を含んでもよい。通信インタフェース９６６は、さまざまなモードまたはプロトコルで通信を提供してもよく、さまざまなモードまたはプロトコルは、中でも例えばＧＳＭ音声通話、ＳＭＳ、ＥＭＳまたはＭＭＳメッセージング、ＣＤＭＡ、ＴＤＭＡ、ＰＤＣ、ＷＣＤＭＡ、ＣＤＭＡ２０００またはＧＰＲＳである。この種の通信は、例えば、無線周波数トランシーバ９６８によって生じてもよい。さらに、例えばブルートゥース、ＷｉＦｉまたは他のこの種のトランシーバ（図示せず）を用いた近距離通信が生じてもよい。さらに、ＧＰＳ（全地球測位システム）受信機モジュール９８０は、追加のナビゲーションおよび位置に関連する無線データをデバイス９５０に提供してもよく、無線データは、必要に応じてデバイス９５０上で動作するアプリケーションによって用いられてもよい。
【０１１７】
デバイス９５０はまた、音声コーデック９６０を用いて音声通信をしてもよいし、音声コーデック９６０は、音声情報をユーザから受信し、この音声情報を使用可能なデジタル情報に変換してもよい。音声コーデック９６０は、同様に、可聴音をユーザのために、例えばデバイス９５０の送受話器内の例えばスピーカを介して生成してもよい。この種の音は、電話音声からの音を含んでもよく、記録された音（例えば音声メッセージ、音楽ファイル等）を含んでもよく、デバイス９５０上で動作するアプリケーションによって生成される音を含んでもよい。
【０１１８】
コンピュータデバイス９５０は、図示のように、多数の異なる形で実施されてもよい。例えば、コンピュータデバイス９５０は、携帯電話９８０として実施されてもよい。コンピュータデバイス９５０は、スマートフォン９８２、携帯情報端末または他の類似のモバイルデバイスの一部として実施されてもよい。
【０１１９】
本明細書に記載されているシステムおよび技術のさまざまな実施態様は、デジタル電子回路、集積回路、特別に設計されたＡＳＩＣ（特定用途向け集積回路）、コンピュータハードウェア、ファームウェア、ソフトウェアおよび／またはそれらの組み合わせにおいて実現可能である。これらのさまざまな実施態様は、少なくとも１つのプログラム可能プロセッサを含むプログラム可能システム上で実行可能および／または解釈可能な１つまたは複数のコンピュータプログラムにおける実施を含むことができ、プロセッサは、専用でも汎用でもよく、データおよび命令を送受信するために、ストレージシステム、少なくとも１つの入力装置および少なくとも１つの出力装置に結合されている。
【０１２０】
これらのコンピュータプログラム（プログラム、ソフトウェア、ソフトウェアアプリケーションまたはコードとしても知られている）は、プログラム可能プロセッサのための機械命令を含み、高レベル手順および／またはオブジェクト指向プログラミング言語および／またはアセンブリ／機械言語で実施可能である。本明細書において、「機械可読媒体」「コンピュータ可読媒体」という用語は、機械命令および／またはデータをプログラム可能プロセッサに提供するのに用いられる任意のコンピュータプログラム製品、装置および／またはデバイス（例えば、磁気ディスク、光ディスク、メモリ、プログラム可能論理回路（ＰＬＤ））を意味し、機械命令を機械可読信号として受信する機械可読媒体を含む。「機械可読信号」という用語は、機械命令および／またはデータをプログラム可能プロセッサに提供するのに用いられる任意の信号を意味する。
【０１２１】
ユーザとの相互作用を提供するために、本明細書に記載されているシステムおよび技術は、コンピュータ上で実施可能であり、コンピュータは、情報をユーザに表示するためのディスプレイデバイス（例えば、ＣＲＴ（陰極線管）またはＬＣＤ（液晶ディスプレイ）モニタ）およびユーザが入力をコンピュータに提供できるキーボードおよびポインティングデバイス（例えば、マウスまたはトラックボール）を有する。他の種類のデバイスを用いて、同様にユーザとの相互作用を提供することができ、例えば、ユーザに提供されるフィードバックは、任意の形の感覚フィードバック（例えば、視覚フィードバック、聴覚フィードバックまたは触覚フィードバック）とすることができ、ユーザからの入力は、音、発話または触覚の入力を含む任意の形で受信可能である。
【０１２２】
本明細書に記載されているシステムおよび技術は、コンピュータデバイスにおいて実施可能であり、コンピュータデバイスは、バックエンド構成要素を（例えばデータサーバとして）含み、または、ミドルウェア構成要素（例えばアプリケーションサーバ）を含み、または、フロントエンド構成要素（例えば、グラフィカル・ユーザ・インタフェースを有するクライアントコンピュータ、または、ユーザが本明細書に記載されているシステムおよび技術の実施態様と相互作用することができるウェブブラウザ）を含み、または、この種のバックエンド、ミドルウェアまたはフロントエンド構成要素の任意の組み合わせを含む。システムの構成要素は、任意の形または媒体のデジタルデータ通信（例えば通信ネットワーク）によって相互接続可能である。通信ネットワークの例は、ローカル・エリア・ネットワーク（ＬＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）およびインターネットを含む。
【０１２３】
コンピュータデバイスは、クライアントおよびサーバを含むことができる。クライアントおよびサーバは、一般的には互いに遠隔にあり、典型的には通信ネットワークを介して相互作用する。クライアントおよびサーバの関係は、それぞれのコンピュータ上で動作するとともに、互いにクライアントサーバ関係を有するコンピュータプログラムによって生ずる。
【０１２４】
多数の実施形態が記載されてきた。それにもかかわらず、さまざまな変更が本発明の精神および範囲から逸脱することなくなされうることを理解されたい。
【０１２５】
さらに、図示される論理フローは、所望の結果を達成するのに図示の特定の順序または順番を必要としない。さらに、他のステップが提供されてもよいし、記載されているフローからステップが除去されてもよいし、他の構成要素が記載されたシステムに追加されてもよいし、記載されたシステムから削除されてもよい。したがって、他の実施形態は、以下の特許請求の範囲内にある。
【図１】
0006505266.tif 000002
【図２】
0006505266.tif 000003
【図３】
0006505266.tif 000004
【図４】
0006505266.tif 000005
【図５】
0006505266.tif 000006
【図６】
0006505266.tif 000007