(57)【要約】【課題】メモリ容量を貸与する側のプログラムにおいてメモリ容量不足が生じないようにしつつ、プログラム間でメモリ容量を貸し借りすることのできるメモリ管理手法を提供する。【解決手段】本発明に係るメモリ管理方法では、初めに計算機上で稼動する第１プログラムおよび第２プログラムにメモリ容量を割り当てる。次に、第２プログラムに割り当てられたメモリ容量を第１プログラムに割り当て直す（貸与する）。その後、第２プログラムが使用するメモリ容量が不足する前に、第１プログラムから第２プログラムへメモリ容量が割り当て戻される（返却される）タイミングで、第１プログラムへメモリ割り当て戻し要求（返却要求）を通知する。【選択図】図８
2012033041.tif 000002
【特許請求の範囲】
【請求項１】
演算装置、メモリ、第１プログラムおよび第２プログラムを備えた計算機の前記メモリを管理する方法であって、
前記メモリの記憶容量のうち、前記第１プログラムおよび前記第２プログラムがそれぞれ使用することができる記憶容量を割り当てる割当ステップと、
前記第２プログラムに割り当てられた前記記憶容量の少なくとも一部を、前記第１プログラムが使用することができる記憶容量として割り当て直すステップと、
前記割り当て直した記憶容量を、前記第２プログラムが使用することができる記憶容量として割り当て戻す契機を判定する契機判定ステップと、
前記契機判定ステップで判定された契機に達した時点で、前記割り当て直した記憶容量を前記第２プログラムが使用できる記憶容量として割り当て戻すように前記第１プログラムへ指示するステップと、
前記指示にしたがって、前記割り当て直した記憶容量を、前記第２プログラムが使用することができる記憶容量として割り当て戻す返却ステップと、
を有し、
前記契機判定ステップでは、
前記割り当て直した記憶容量を、前記第２プログラムが使用することができる記憶容量として割り当て戻すために要する時間を推定し、
前記第２プログラムが使用することができる記憶容量が不足して前記第２プログラムの実行性能が低下する前に、前記第２プログラムが使用することができる記憶容量として前記割り当て直した記憶容量が割り当て戻されるように、前記契機を判定する
ことを特徴とするメモリ管理方法。
【請求項２】
前記契機判定ステップでは、
前記第１プログラムが使用することができる記憶容量の総サイズに基づき、前記割り当て直した記憶容量を、前記第２プログラムが使用することができる記憶容量として割り当て戻すために要する時間を推定し、
その推定結果に基づき、前記第２プログラムが使用することができる記憶容量が不足する前に前記割り当て直した記憶容量が割り当て戻されるように、前記契機を判定する
ことを特徴とする請求項１記載のメモリ管理方法。
【請求項３】
前記契機判定ステップでは、
前記第２プログラムが使用することができる記憶容量が単位時間当たりに減少する速度に基づき、前記第２プログラムが使用することができる記憶容量が不足するまでにかかる時間を推定する
ことを特徴とする請求項１記載のメモリ管理方法。
【請求項４】
前記契機判定ステップでは、
前記第１プログラムが使用することができる記憶容量として割り当て直した記憶容量サイズに基づき、前記割り当て直した記憶容量を、前記第２プログラムが使用することができる記憶容量として割り当て戻すために要する時間を推定し、
その推定結果に基づき、前記第２プログラムが使用することができる記憶容量が不足する前に前記割り当て直した記憶容量が割り当て戻されるように、前記契機を判定する
ことを特徴とする請求項１記載のメモリ管理方法。
【請求項５】
前記返却ステップでは、
前記第１プログラムが使用することができる記憶容量として割り当てられている前記メモリの記憶容量のうち、前記第１プログラムが使用していない不要領域を解放することにより、前記第１プログラムが使用することができる記憶容量を削減し、
その削減した分の記憶容量を、前記第２プログラムが使用することができる記憶容量として割り当て戻す
ことを特徴とする請求項１記載のメモリ管理方法。
【請求項６】
前記返却ステップでは、
前記第１プログラムが使用することができる記憶容量として割り当てられている前記メモリの記憶容量のうち、冗長なデータを格納している部分を圧縮することにより、前記第１プログラムが使用することができる記憶容量を削減し、
その削減した分の記憶容量を、前記第２プログラムが使用することができる記憶容量として割り当て戻す
ことを特徴とする請求項１記載のメモリ管理方法。
【請求項７】
前記返却ステップでは、
前記第１プログラムが使用することができる記憶容量として割り当てられている前記メモリの記憶容量の少なくとも一部を、前記メモリ以外の記憶媒体に書き込むことにより、前記第１プログラムが使用することができる記憶容量を削減し、
その削減した分の記憶容量を、前記第２プログラムが使用することができる記憶容量として割り当て戻す
ことを特徴とする請求項１記載のメモリ管理方法。
【請求項８】
前記計算機は、前記第１プログラムおよび前記第２プログラムとは異なる第３プログラムを備えており、
前記割当ステップでは、
前記メモリの記憶容量のうち、前記第１プログラム、前記第２プログラム、および前記第３プログラムがそれぞれ使用することができる記憶容量を割り当て、
前記返却ステップでは、
前記第３プログラムに割り当てられている前記メモリの記憶容量のうち前記第３プログラムが使用していない記憶容量を、前記第２プログラムが使用することができる記憶容量として割り当て戻す
ことを特徴とする請求項１記載のメモリ管理方法。
【請求項９】
前記契機判定ステップでは、
前記第３プログラムに割り当てられている前記メモリの記憶容量のうち前記第３プログラムが使用していない記憶容量が、前記第１プログラムが使用することができる記憶容量として一時的に割り当て直した記憶容量よりも小さいとき、
前記第１プログラムが使用することができる記憶容量として一時的に割り当て直した記憶容量を、前記第２プログラムが使用できる記憶容量として割り当て戻す
ことを特徴とする請求項８記載のメモリ管理方法。
【請求項１０】
演算装置、メモリ、第１プログラムおよび第２プログラムを有する計算機に、
前記メモリの記憶容量のうち、前記第１プログラムおよび前記第２プログラムがそれぞれ使用することができる記憶容量を割り当てる割当機能と、
前記第２プログラムに割り当てられた前記記憶容量の少なくとも一部を、前記第１プログラムが使用することができる記憶容量として割り当て直す機能と、
前記割り当て直した記憶容量を、前記第２プログラムが使用することができる記憶容量として割り当て戻すために要する時間を推定し、前記第２プログラムが使用することができる記憶容量が不足して前記第２プログラムの実行性能が低下する前に、前記第２プログラムが使用することができる記憶容量として前記割り当て直した記憶容量が割り当て戻されるように、前記契機を判定する契機判定機能と、
前記契機判定機能で判定された契機に達した時点で、前記割り当て直した記憶容量を前記第２プログラムが使用できる記憶容量として割り当て戻すように前記第１プログラムへ指示する機能と、
前記指示にしたがって、前記割り当て直した記憶容量を、前記第２プログラムが使用することができる記憶容量として割り当て戻す返却機能と、
を実行させることを特徴とするプログラム。
【請求項１１】
演算装置、メモリ、第１プログラム、および第２プログラムを備えた計算機であって、
前記メモリの記憶容量のうち、前記第１プログラムおよび前記第２プログラムがそれぞれ使用することができる記憶容量を割り当てる処理部と、
前記第２プログラムに割り当てられた前記記憶容量のうち全部または一部を、前記第１プログラムが使用することができる記憶容量として一時的に割り当て直す処理部と、
前記割り当て直した記憶容量を、前記第２プログラムが使用することができる記憶容量として割り当て戻す契機を判定する契機判定部と、
前記契機判定部が判定された契機に達した時点で、前記割り当て直した記憶容量を前記第２プログラムが使用できる記憶容量として割り当て戻すように前記第１プログラムへ指示する処理部と、
前記指示にしたがって、前記割り当て直した記憶容量を、前記第２プログラムが使用することができる記憶容量として割り当て戻す処理部と、
を有し、
前記契機判定部は、
前記割り当て直した記憶容量を、前記第２プログラムが使用することができる記憶容量として割り当て戻すために要する時間を推定し、
前記第２プログラムが使用することができる記憶容量が不足して前記第２プログラムの実行性能が低下する前に、前記第２プログラムが使用することができる記憶容量として前記割り当て直した記憶容量が割り当て戻されるように、前記契機を判定する
ことを特徴とする計算機。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機上で稼動するプログラムに割り当てるメモリ容量を管理する技術に関するものである。
【背景技術】
【０００２】
近年、計算機において、ハイパーバイザと呼ばれるソフトウェアを用いて、一つの計算機上で複数の仮想的な計算機（仮想マシン）を動作させる構成が普及している。この構成では、実際の計算機（物理マシン）に搭載されている物理メモリは、ハイパーバイザ上で稼動する複数の仮想マシンに割り当てられて使用される。
【０００３】
各仮想マシンへ物理メモリを割り当てる量が固定である場合、各仮想マシンが使用することができるメモリ量は変動しない。そのため、仮想マシンの性能は容易に予測することができる。具体的には、ピーク負荷時の性能を確保するため、処理ピーク時に使用される最大メモリ容量を固定的に割り当てる設定が一般的である。この設定の下では、ピーク負荷以外のとき、割り当てたメモリの一部が使用されないまま占有されてしまうため、メモリの利用が非効率となる場合がある。
【０００４】
上記問題を解決するため、ハイパーバイザは、仮想マシン上で稼動しているプログラムに対して提供するメモリ容量プールを確保している。ハイパーバイザは、仮想マシンに割り当てられたメモリのうち使用されていない部分の割り当てを解放し、メモリプールに戻す。ハイパーバイザは、プールされているメモリを、他の仮想マシンに必要に応じて割り当てることができる。これにより、計算機全体としてのメモリ利用効率が向上する（非特許文献３参照）。
【０００５】
なお以下では、上記のように２つのプログラム間で、一方が割り当てメモリ量を減少させ、もう一方が割り当てメモリ量を増加させる処理を、メモリの貸与と呼称する場合がある。また、メモリの貸与を実行した後に、割り当てメモリ量を増加させたプログラムが割り当てメモリ量を減少させ、割り当てメモリ量を減少させたプログラムが割り当てメモリ量を増加させる処理を、メモリの返却と呼称する場合がある。また、メモリに限らず他の計算リソースについても、同様に一方が割り当て量を減少させ、もう一方が割り当て量を増加させる処理を、貸与あるいは返却と呼称する場合がある。
【０００６】
上記のように、計算機リソースを貸与する際の課題として、貸与した計算機リソースが返却される保証がないことが挙げられる。リソースが返却されない場合、リソース使用量が規定の割当量より少なくても、貸与によって想定外のリソース不足が生じ、性能が低下する可能性がある。そのため、貸与した計算機リソースが返却されない可能性があると、仮想マシンの性能を予測することが困難となる。
【０００７】
下記特許文献１には、返却を保証しつつリソースを貸与する技術が記載されている。同文献は、リソースの中でも、特にネットワーク帯域の貸与に関するものである。同文献では、帯域が不足しているプログラムが他プログラムに対して帯域を貸与するよう要求し、これに対して、未使用帯域が存在するプログラムは貸与量を含んだ応答を返す。この際、各プログラムは貸与先および貸与量に関する情報を記録する。貸与元の通信量がある閾値を超えた場合には、貸与元は貸与終了通知を送信し、貸与先はそれに応じて通信量を削減し、貸与されているリソースを返却する。
【０００８】
特許文献１に開示されたネットワーク帯域に関する技術をメモリ容量の貸与について適用するには、後述する理由により困難である。その理由について述べる前に、まず、メモリ使用量を削減する種々の代表的な技術について述べる。第1に、ガベージコレクション（ＧＣ）がある。ガベージコレクションはメモリ上にある各オブジェクトに対して、プログラムから使用される可能性の有無を判定し、使用される可能性がないオブジェクト（以後、ゴミオブジェクトと呼ぶ）を回収する。ガベージコレクションは、Ｊａｖａ(登録商標)仮想マシン（Java VM）等で使用されている。
【０００９】
ガベージコレクションの基本的な処理は、プログラムが確実に使用するであろうオブジェクト群（参照ルート）を基点としてメモリ上のオブジェクトの参照関係を辿り、最後まで到達できなかったオブジェクトをゴミオブジェクトと判定して、判定されたゴミオブジェクトを回収することにより実施される（非特許文献１参照）。
【００１０】
第２に、データ圧縮がある。データ圧縮は、データ中に含まれる様々な冗長性を検出し、冗長性の排除を行うことにより、データの内容を保ったまま、必要となる記憶容量が小さい別のデータに変換するものである（非特許文献２参照）。
【００１１】
第３に、メモリのページング処理がある。ページング処理は、メモリ中のデータを磁気ディスク等の別の記憶媒体に退避するものである。退避したデータが改めて必要になった時には、退避先の記憶媒体からメモリへデータを複製し直すことにより、データをメモリ上に復元することができる。このページング処理により、データをメモリ上に保持し続ける必要がなくなり、メモリ使用量を削減することができる。ハイパーバイザには、仮想マシンが使用するメモリに対するページング処理を提供しているものが存在する（非特許文献３参照）。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００１−９４５７５号公報
【非特許文献】
【００１３】
【非特許文献１】Garbage Collection: Algorithms for Automatic Dynamic Memory Management (Richard Jones, Rafael Lins, 1996, John Wiley & Sons Inc, ISBN:978-0471941484)
【非特許文献２】Introduction to Data Compression, Third Edition (Khalid Sayood, 2005, Morgan Kaufmann, ISBN: 978-0126208627)
【非特許文献３】Carl A. Waldspurger, Memory resource management in VMware ESX server, ACM SIGOPS Operating Systems Review Volume 36, Issue SI(Winter 2002), p.181-194
【発明の概要】
【発明が解決しようとする課題】
【００１４】
上述したように、特許文献１に開示されたネットワーク帯域に関する技術をメモリ要領の貸与に適用する場合には、その返却に際して格別の配慮が必要である。すなわち、特許文献１に開示するネットワーク帯域であれば、単に通信速度を落とすのみでリソース使用量を削減して貸与元へ返却することができるが、メモリ容量の貸与では、使用しているメモリ容量を突然解放すると、当該メモリ内に格納されているデータが破棄され、プログラムが正常可動しなくなってしまうという問題がある。したがって、メモリ容量を返却する際には、まず使用中のメモリ容量を解放する処理を実施しておく必要がある。
【００１５】
ここで、メモリ使用量を削減する技術として挙げられている上記非特許文献１〜３の技術は、ある程度の実行時間を必要とする。そのため、メモリ容量を貸与した側がメモリ容量を返却するよう要求したとき、返却されるまでに時間がかかり、貸与側でメモリ容量不足が生じる可能性がある。
【００１６】
本発明は、上記のような課題を解決するためになされたものであり、プログラム間において、メモリ容量の適切な動的配分を実現するメモリ管理手法を提供することを目的とする。
【課題を解決するための手段】
【００１７】
本発明に係るメモリ管理方法では、初めに計算機上で稼動する第１プログラムおよび第２プログラムにメモリ容量を割り当てる。次に、第２プログラムに割り当てられたメモリ容量を第１プログラムに割り当て直す（貸与する）。その後、第２プログラムが使用するメモリ容量が不足する前に、第１プログラムから第２プログラムへメモリ容量が割り当て戻される（返却される）タイミングで、第１プログラムへメモリ割り当て戻し要求（返却要求）を通知する。
【発明の効果】
【００１８】
本発明に係るメモリ管理方法によれば、プログラム間におけるメモリ容量の動的配分を適切に行うことができる。
【図面の簡単な説明】
【００１９】
【図１】実施の形態１に係る計算機１００の機能ブロック図である。
【図２】仮想マシン１４０Ａの詳細構成を示す図である。
【図３】仮想マシン１４０Ｂの詳細構成を示す図である。
【図４】貸与情報管理テーブル１４１１Ｂの構成とデータ例を示す図である。
【図５】メモリ管理プログラム１４１Ａおよび１４１Ｂの間でメモリ容量を貸し借りする処理シーケンスを示す図である。
【図６】図５のシーケンス図におけるメモリ管理プログラム１４１Ａの処理フローを示す図である。
【図７】図５のシーケンス図におけるメモリ管理プログラム１４１Ｂの処理フローを示す図である。
【図８】ステップＳ２０５における詳細処理を説明するフローチャートである。
【図９】実施形態２における仮想マシン１４０Ａの詳細構成を示す図である。
【図１０】実施形態２における貸与情報管理テーブル１４１１Ｂの構成とデータ例を示す図である。
【図１１】ステップＳ２０５における詳細処理を説明するフローチャートである。
【図１２】実施形態３に係る計算機１００の機能ブロック図である。
【図１３】実施形態３における仮想マシン１４０Ａの詳細構成を示す図である。
【図１４】実施形態３における貸与情報管理テーブル１４１１Ｂの構成とデータ例を示す図である。
【図１５】ステップＳ２０５における詳細処理を説明するフローチャートである。
【図１６】実施形態４に係る計算機１００の機能ブロック図である。
【図１７】実施形態４における仮想マシン１４０Ｂの詳細構成を示す図である。
【図１８】仮想マシン１４０Ｃの詳細構成を示す図である。
【図１９】実施形態４における貸与情報管理テーブル１４１１Ｂの構成とデータ例を示す図である。
【図２０】実施形態４におけるステップＳ１０７の詳細を示す図である。
【図２１】実施形態４におけるステップＳ２０５の詳細処理を説明するフローチャートである。
【発明を実施するための形態】
【００２０】
＜実施の形態１＞
図１は、本発明の実施の形態１に係る計算機１００の機能ブロック図である。計算機１００は、ＪａｖａＶＭ１４２Ａ（第１プログラム）とＪａｖａＶＭ１４２Ｂ（第２プログラム）を実行するコンピュータである。ここでは、ＪａｖａＶＭ１４２ＢからＪａｖａＶＭ１４２Ａへメモリ容量を貸与する例を説明する。
【００２１】
計算機１００は、ＣＰＵ１１０、記憶部１２０、メモリ１３０、ハイパーバイザ１５０を備える。ＣＰＵ１１０は、メモリ１３０上の記憶領域にハイパーバイザ１５０を展開して実行する。メモリ１３０上には、ハイパーバイザ１５０の配下で、仮想マシン１４０Ａおよび１４０Ｂが作成される。
【００２２】
仮想マシン１４０Ａおよび１４０Ｂは概ね同様の構成を有するため、これらを総称するときは、添字を省略して仮想マシン１４０と呼ぶ。仮想マシン配下の各構成要素についても同様に、共通する事項を総称的に説明するときは、添字を省略する。
【００２３】
以下では、記載の便宜上、ハイパーバイザ１５０、仮想マシン１４０、メモリ管理プログラム１４１などの各プログラムを動作主体として説明する場合があるが、実際にこれらのプログラムを実行するのはＣＰＵ１１０などの演算装置であることを付言しておく。
【００２４】
ハイパーバイザ１５０は、メモリ１３０上に仮想マシン１４０Ａおよび１４０Ｂを構成する。ハイパーバイザ１５０は、計算機１００が備えるリソース、すなわちＣＰＵ１１０、記憶部１２０、メモリ１３０を、各仮想マシンに割り当てる。割り当て量は、計算機１００の運用管理者があらかじめ設定しておく。
【００２５】
仮想マシン１４０Ａおよび１４０Ｂは、ハイパーバイザ１５０から割り当てられた各計算機リソースを用いて計算機をエミュレートし、仮想的な計算機として動作する。ここでは２台の仮想マシンを例示したが、仮想マシンの数は任意でよい。また、後述するメモリ貸与元となる仮想マシン、およびメモリ貸与先となる仮想マシンの数も任意でよい。
【００２６】
仮想マシン１４０Ａの配下では、メモリ管理プログラム１４１Ａ、ＪａｖａＶＭ１４２Ａ、オペレーティングシステム１４３Ａが動作する。仮想マシン１４０Ｂの配下では、メモリ管理プログラム１４１Ｂ、ＪａｖａＶＭ１４２Ｂ、オペレーティングシステム１４３Ｂが動作する。
【００２７】
メモリ管理プログラム１４１Ａは、メモリ管理プログラム１４１Ｂに対して、メモリ容量を貸与するように要求する。メモリ管理プログラム１４１Ｂは、ＪａｖａＶＭ１４２Ｂが使用していないメモリ領域をメモリ管理プログラム１４１Ａに貸与し、また必要になった時点で返却するよう要求する。これら動作の詳細については後述する。
【００２８】
なお、本実施形態１ではハイパーバイザ１５０が計算機１００のリソースを管理しているため、メモリ管理プログラム１４１は、ハイパーバイザ１５０を介してメモリ容量を貸し借りすることを付言しておく。
【００２９】
オペレーティングシステム１４３Ａおよび１４３Ｂは、それぞれ仮想マシン１４０Ａおよび１４０Ｂがエミュレートする計算機のオペレーティングシステムである。ＪａｖａＶＭ１４２ＡおよびＪａｖａＶＭ１４２Ｂは、各仮想マシンからメモリ容量の割り当てを受けて動作するアプリケーションプログラムである。
【００３０】
図２は、仮想マシン１４０Ａの詳細構成を示す図である。メモリ管理プログラム１４１Ａは、通知受信部１４１２Ａ、情報送信部１４１３Ａ、貸与要求送信部１４１４Ａ、貸与要求契機判定部１４１６Ａを備える。これら各機能部は、メモリ管理プログラム１４１Ａ配下のソフトウェアモジュールなどの形態で実装することができる。
【００３１】
通知受信部１４１２Ａは、メモリ管理プログラム１４１Ｂからの通知を受信する。情報送信部１４１３Ａは、ＪａｖａＶＭ１４２Ａの設定パラメータなどの情報を、メモリ管理プログラム１４２Ｂへ送信する。貸与要求契機判定部１４１６Ａは、メモリ容量を貸与するようにメモリ管理プログラム１４２Ｂへ要求すべき契機（タイミング）を判定する。貸与要求送信部１４１４Ａは、貸与要求契機判定部１４１６Ａが判定した契機にしたがって、メモリ容量を貸与するようにメモリ管理プログラム１４２Ｂへ要求する。
【００３２】
ＪａｖａＶＭ１４２Ａは、ヒープ領域１４２１Ａ、ＧＣ処理部１４２２Ａ、メモリ割り当て変更部１４２３Ａ、参照ルート１４２４Ａ、Ｊａｖａプログラム実行部１４２５Ａを備える。Ｊａｖａプログラム実行部１４２５Ａは、記憶部１２０からＪａｖａプログラム１２１を読み込んで実行する。Ｊａｖａプログラム実行部１４２５Ａは、Ｊａｖａプログラム１２１を実行している途中で必要となったオブジェクトを、ヒープ領域１４２１Ａ内に確保する。また、Ｊａｖａプログラム実行部１４２５Ａは、ヒープ領域１４２１Ａ内のオブジェクトに対する参照経路を参照ルート１４２４Ａに格納し、当該オブジェクトを操作する。
【００３３】
ＧＣ処理部１４２２Ａは、参照ルート１４２４Ａに格納されている、オブジェクトの参照関係を辿ることにより、使用されていないオブジェクトを特定し、対応するメモリ領域を解放する。そのため、ＧＣ処理の対象となるメモリ量が大きいほど、ＧＣ処理部１４２２Ａの処理時間は増加する。
【００３４】
本実施形態１では、ＧＣ処理部１４２２Ａによる処理時間が対象メモリ量にほぼ比例すると想定し、単位メモリ量当たりのＧＣ処理時間と対象メモリ量に基づいて、返却要求をいつ発行すべきかの契機を判定する。詳細は後述する。
【００３５】
図３は、仮想マシン１４０Ｂの詳細構成を示す図である。メモリ管理プログラム１４１Ｂは、貸与情報管理テーブル１４１１Ｂ、通知受信部１４１２Ｂ、返却要求送信部１４１５Ｂ、返却要求契機判定部１４１７Ｂを備える。これら各機能部は、メモリ管理プログラム１４１Ｂ配下のソフトウェアモジュールなどの形態で実装することができる。
【００３６】
貸与情報管理テーブル１４１１Ｂは、ＪａｖａＶＭ１４２Ａに関する情報を格納するデータテーブルである。詳細は、後述の図４で説明する。通知受信部１４１２Ｂは、メモリ管理プログラム１４１Ａからの通知を受信する。返却要求契機判定部１４１７Ｂは、貸与したメモリ容量を返却するよう要求すべき契機を判定する。返却要求送信部１４１５Ｂは、返却要求契機判定部１４１７Ｂが判定した契機にしたがって、メモリ容量を返却するようにメモリ管理プログラム１４２Ａへ要求する。
【００３７】
図４は、貸与情報管理テーブル１４１１Ｂの構成とデータ例を示す図である。貸与情報管理テーブル１４１１Ｂは、メモリ容量の貸し借りに関連する情報を格納するデータテーブルであり、貸与量フィールド１４１１１Ｂ、貸与先メモリ総量フィールド１４１１２Ｂ、ＧＣ処理速度フィールド１４１１３Ｂを有する。
【００３８】
貸与量フィールド１４１１１Ｂは、ＪａｖａＶＭ１４２Ａに対してＪａｖａＶＭ１４２Ｂが貸与しているメモリ容量の値を保持する。
【００３９】
貸与先メモリ総量フィールド１４１１２Ｂは、メモリ容量を貸与する先で使用するメモリ総量の値を保持する。ここでは、ＪａｖａＶＭ１４２Ａのヒープ領域１４２１Ａの容量が相当する。本フィールドを設けているのは、ＪａｖａＶＭ１４２ＡがＪａｖａＶＭ１４２Ｂから借りているメモリ容量を返却する際に、ＧＣ処理を実施する必要があることに鑑みたものである。ＧＣ処理の実行時間は、解放すべきヒープ領域１４２１Ａのサイズに依拠するため、本フィールドを設けて解放時間を予測するために用いることとした。
【００４０】
ＧＣ処理速度フィールド１４１１３Ｂは、ＪａｖａＶＭ１４２ＡのＧＣ処理部１４２２Ａがヒープ領域１４２１Ａの単位メモリ量（ここではＭＢ）に対してＧＣ処理を実施するために要する時間を保持する。
【００４１】
貸与先メモリ総量フィールド１４１１２Ｂの値とＧＣ処理速度フィールド１４１１３Ｂの値を参照することにより、ＪａｖａＶＭ１４２ＡのＧＣ処理部１４２２Ａがヒープ領域１４２１ＡをＧＣ処理によって解放するために要する時間が分かる。本実施形態１では、この時間を、ＪａｖａＶＭ１４２Ａが借りているメモリ容量を返却するのに要する時間であるとみなす。メモリ管理プログラム１４１Ｂは、メモリ管理プログラム１４１Ａに対してメモリ返却要求を発行する際に、この時間を勘案して早目に返却要求を発行する。
【００４２】
以上、本実施形態１に係る計算機１００の構成を説明した。次に、計算機１００の全体的な動作、および各メモリ管理プログラム１４１間でメモリ容量を貸し借りする動作について説明する。
【００４３】
計算機１００の運用管理者は、ハイパーバイザ１５０に対し、仮想マシン１４０Ａおよび仮想マシン１４０Ｂをメモリ１３０上に生成するよう指示する。運用管理者は、仮想マシン１４０Ａ上でオペレーティングシステム１４３Ａを起動し、ＪａｖａＶＭ１４２Ａを実行する。また、運用管理者は、仮想マシン１４０Ｂ上でオペレーティングシステム１４３Ｂを起動し、ＪａｖａＶＭ１４２Ｂを実行する。
【００４４】
情報送信部１４１３Ａは、ＪａｖａＶＭ１４２Ａが起動する時に、通知受信部１４１２Ｂに対して、ヒープ領域１４２１Ａのサイズ、ＧＣ処理部１４２２Ａが単位メモリ量当たりのＧＣ処理に要する時間を通知する。これらの値は、あらかじめ運用管理者等が指定してＪａｖａＶＭ１４２の設定ファイルなどに記述しておく。あるいは、情報送信部１４１３Ａが、ＧＣ処理部１４２２ＡにＧＣ処理を実行させ、その際に計測した処理時間を通知受信部１４１２Ｂに通知することも考えられる。通知を受けた通知受信部１４１２Ｂは、その内容を貸与情報管理テーブル１４１１Ｂの各フィールドに格納する。
【００４５】
なお、情報送信部１４１３Ａは、ＪａｖａＶＭ１４２Ａが起動する時に代えて、またはこれと併用して、ＪａｖａＶＭ１４２Ａが稼働している間に、所定時間間隔で上記各情報を通知するようにしてもよい。
【００４６】
図５は、メモリ管理プログラム１４１Ａおよび１４１Ｂの間でメモリ容量を貸し借りする処理シーケンスを示す図である。以下、図５の各ステップについて説明する。説明の便宜上、仮想マシン１４０Ａ側の処理にはステップ番号１００番台を付与し、仮想マシン１４０Ｂ側の処理にはステップ番号２００番台を付与した。
【００４７】
（図５：ステップＳ１０１）
貸与要求契機判定部１４１６Ａは、所定時間間隔でヒープ領域１４２１Ａの空き容量と所定閾値を比較し、空き容量が閾値を下回っていれば、メモリ管理プログラム１４１Ｂに対してメモリ貸与要求を発行すべき契機であると判定する。あるいは、Ｊａｖａプログラム実行部１４２５Ａの処理によりヒープ領域１４２１Ａの空き容量が減少した契機で、ＪａｖａＶＭ１４２Ａが貸与要求契機判定部１４１６Ａに対し、メモリ貸与要求を発行すべきか否かを判定するよう要求してもよい。
【００４８】
（図５：ステップＳ１０１：補足）
本ステップにおいて貸与要求の契機を判定する方法は、ヒープ領域１４２１Ａの空き容量と閾値を比較する手法に限定されるものではない。
【００４９】
（図５：ステップＳ１０２）
貸与要求送信部１４１４Ａは、通知受信部１４１２Ｂに貸与要求を通知する。貸与要求内に、貸与するよう要求するメモリ量を記述してもよい。
【００５０】
（図５：ステップＳ２０１）
通知受信部１４１２Ｂは、貸与要求送信部１４１４Ａが送信した貸与要求を受信する。通知受信部１４１２Ｂは、ＪａｖａＶＭ１４２Ｂに対し、ヒープ領域１４２１Ｂを使用する量を減少させるよう要求する。
【００５１】
（図５：ステップＳ２０２）
ＪａｖａＶＭ１４２Ｂのメモリ割り当て変更部１４２３Ｂは、ヒープ領域１４２１Ｂのサイズを減少させる。メモリ割り当て変更部１３０Ｂは、ヒープ領域１４２１Ｂのサイズを減少させる量を、ヒープ領域１４２１Ｂが使用されている量に基づき決定する。あるいは、貸与要求送信部１４１４Ａが送信した貸与要求内で、貸与すべきメモリ量が指定されている場合、その量に基づいてヒープ領域１４２１Ｂのサイズ減少量を決定してもよい。
【００５２】
（図５：ステップＳ２０２：補足）
メモリ割り当て変更部１４２３Ｂは、ヒープ領域１４２１Ｂのサイズを減少させる際にＪａｖａＶＭ１４２Ｂの再起動など必要な処理がある場合は、適宜実施する。また、本実施形態１では、各仮想マシン１４０はハイパーバイザ１５０を介して物理メモリ１３０の割り当てを受けているので、ヒープ領域１４２１Ｂのサイズを削減した分は、ハイパーバイザ１５０のメモリプールに戻されることになる。
【００５３】
（図５：ステップＳ２０３）
ヒープ領域１４２１Ｂのサイズを減少させた後、通知受信部１４１２Ｂは、ヒープ領域１４２１Ｂのサイズ減少量を含む応答を、貸与要求送信部１４１４Ａに返す。このとき、通知受信部１４１２Ｂは、貸与情報管理テーブル１４１１Ｂの貸与量フィールド１４１１１Ｂの値を、ヒープ領域１４２１Ｂのサイズ減少量分だけ増加させる。
【００５４】
（図５：ステップＳ１０３）
貸与要求送信部１４１４Ａは、通知受信部１４１２Ｂが送信した応答を受信する。貸与要求送信部１４１４Ａは、ＪａｖａＶＭ１４２Ａに対し、ヒープ領域１４２１Ａのサイズを増加させるよう指示する。
【００５５】
（図５：ステップＳ１０４）
ＪａｖａＶＭ１４２Ａのメモリ割り当て変更部１４２３Ａは、ヒープ領域１４２１Ａのサイズを、ステップＳ２０２で増加した分のメモリ容量の分だけ増加させる。本ステップが完了すると、ＪａｖａＶＭ１４２Ｂに割り当てられたメモリ容量をＪａｖａＶＭ１４２Ａに一時的に割り当て直したことになる。
【００５６】
（図５：ステップＳ１０４：補足）
メモリ割り当て変更部１４２３Ａは、ヒープ領域１４２１Ａのサイズを増加させる際にＪａｖａＶＭ１４２Ａの再起動など必要な処理がある場合は、適宜実施する。また、本実施形態１では、各仮想マシン１４０はハイパーバイザ１５０を介して物理メモリ１３０の割り当てを受けているので、ヒープ領域１４２１Ａのサイズ増加分は、ハイパーバイザ１５０のメモリプールから割り当てを受けることになる。
【００５７】
（図５：ステップＳ１０５、Ｓ２０４）
ＪａｖａＶＭ１４２Ａおよび１４２Ｂは、Ｊａｖａプログラム１２１を実行する。
【００５８】
（図５：ステップＳ２０５）
返却要求契機判定部１４１７Ｂは、所定時間間隔で、メモリ管理プログラム１４１Ａに貸与したメモリ容量を返却するよう要求すべきか否かを判定する。あるいは、Ｊａｖａプログラム実行部１４２５Ｂの処理によりヒープ領域１４２１Ｂの空き容量が減少した契機で、ＪａｖａＶＭ１４２Ｂが返却要求契機判定部１４１７Ｂに対し、メモリ返却要求を発行すべきか否かを判定するよう要求してもよい。
【００５９】
（図５：ステップＳ２０６）
返却要求送信部１４１５Ｂは、返却要求を送信すべきと返却要求契機判定部１４１７Ｂが判定した時点で、通知受信部１４１２Ａに返却要求を送信する。この返却要求内で、返却を要求するメモリ量を指定してもよい。
【００６０】
（図５：ステップＳ１０６）
通知受信部１４１２Ａは、返却要求送信部１４１５Ｂが送信した返却要求を受信する。通知受信部１４１２Ａは、ＪａｖａＶＭ１４２Ａに対し、ヒープ領域１４２１Ａを使用する量を減少させるよう要求する。
【００６１】
（図５：ステップＳ１０７）
ＪａｖａＶＭ１４２ＡのＧＣ処理部１４２２Ａは、ヒープ領域１４２１Ａに対してＧＣ処理を実施する。メモリ割り当て変更部１４２３Ａは、ヒープ領域１４２１Ａのサイズを減少させる。
【００６２】
（図５：ステップＳ１０８）
通知受信部１４１２Ａは、ヒープ領域１４２１Ａのサイズ減少量を含む応答を、返却要求送信部１４１５Ｂに返す。
【００６３】
（図５：ステップＳ２０７）
返却要求送信部１４１５Ｂは、通知受信部１４１２Ａが送信した応答を受信する。返却要求送信部１４１５Ｂは、ＪａｖａＶＭ１４２Ｂに対し、ヒープ領域１４２１Ｂのサイズを増加させるよう指示する。また、貸与情報管理テーブル１４１１Ｂの貸与量フィールド１４１１１Ｂの値を、ヒープ領域１４２１Ａのサイズ減少量分だけ減少させる。
【００６４】
（図５：ステップＳ２０８）
ＪａｖａＶＭ１４２Ｂのメモリ割り当て変更部１４２３Ｂは、ヒープ領域１４２１Ｂのサイズを、ヒープ領域１４２１Ａのサイズ減少量分だけ増加させる。本ステップが完了すると、ＪａｖａＶＭ１４２Ａに一時的に割り当て直したメモリ容量をＪａｖａＶＭ１４２Ｂに割り当て戻したことになる。
【００６５】
図６は、図５のシーケンス図におけるメモリ管理プログラム１４１Ａの処理フローを示す図である。以下、図６の各ステップについて説明する。なお、図５と同じステップについては同じステップ番号を付与した。
【００６６】
（図６：ステップＳ１００）
メモリ管理プログラム１４１Ａは、所定時間間隔、ＪａｖａＶＭ１４２Ａが貸与要求契機判定部１４１６Ａに契機判定を要求した時点、あるいは通知受信部１４１２Ａが返却要求送信部１４１５Ｂからメモリ返却要求を受けた時点などの所定タイミングで、本処理フローを開始する。
【００６７】
（図６：ステップＳ１０６）
メモリ管理プログラム１４１Ａは、返却要求送信部１４１５Ｂからメモリ返却要求を受信したか否かを判定する。受信した場合はステップＳ１０７へ進み、受信していない場合はステップＳ１０１へスキップする。
【００６８】
（図６：ステップＳ１０７〜Ｓ１０８）
メモリ管理プログラム１４１Ａは、ヒープ領域１４２１Ａのサイズを減少させてその分のメモリ容量を返却する（Ｓ１０７）。メモリ管理プログラム１４１Ａは、返却要求送信部１４１５Ｂに応答を返す（Ｓ１０８）。
【００６９】
（図６：ステップＳ１０１）
メモリ管理プログラム１４１Ａは、ＪａｖａＶＭ１４２Ａが使用するメモリ量が不足しているか否かを判定する。判定手法は、図５のステップＳ１０１で説明した通りである。メモリが不足していると判定した場合はステップＳ１０２に進み、不足していないと判定した場合は本処理フローを終了する。
【００７０】
（図６：ステップＳ１０２〜Ｓ１０４）
メモリ管理プログラム１４１Ａは、通知受信部１４１２Ｂにメモリ貸与要求を送信する（Ｓ１０２）。メモリ管理プログラム１４１Ａは、通知受信部１４１２Ｂからの応答を受信すると（Ｓ１０３）、ヒープ領域１４２１Ａのサイズを増加させる（Ｓ１０４）。
【００７１】
図７は、図５のシーケンス図におけるメモリ管理プログラム１４１Ｂの処理フローを示す図である。以下、図７の各ステップについて説明する。なお、図５と同じステップについては同じステップ番号を付与した。
【００７２】
（図７：ステップＳ２００）
メモリ管理プログラム１４１Ｂは、所定時間間隔、ＪａｖａＶＭ１４２Ｂが返却要求契機判定部１４１６Ｂに契機判定を要求した時点、あるいは通知受信部１４１２Ｂが貸与要求送信部１４１４Ａから通知を受けた時点などの所定タイミングで、本処理フローを開始する。
【００７３】
（図７：ステップＳ２０１）
メモリ管理プログラム１４１Ｂは、貸与要求送信部１４１４Ａからメモリ貸与要求を受信したか否かを判定する。受信した場合はステップＳ２０２へ進み、受信していない場合はステップＳ２０５にスキップする。
【００７４】
（図７：ステップＳ２０２〜Ｓ２０３）
メモリ管理プログラム１４１Ｂは、ヒープ領域１４２１Ｂのサイズを減少させてその分のメモリ容量を貸与する（Ｓ２０２）。メモリ管理プログラム１４１Ｂは、返却要求送信部１４１４Ａに応答を返す（Ｓ２０３）。
【００７５】
（図７：ステップＳ２０５）
メモリ管理プログラム１４１Ｂは、返却要求を送信する契機であるか否かを判定する。返却要求を送信する契機であると判定した場合はステップＳ２０６に進み、契機ではないと判定した場合は本処理フローを終了する。
【００７６】
（図７：ステップＳ２０６〜Ｓ２０８）
メモリ管理プログラム１４１Ｂは、通知受信部１４１２Ａにメモリ返却要求を送信する（Ｓ２０６）。メモリ管理プログラム１４１Ｂは、通知受信部１４１２Ａからの応答を受信すると（Ｓ２０７）、ヒープ領域１４２１Ｂのサイズを増加させる（Ｓ２０８）。
【００７７】
図８は、ステップＳ２０５における詳細処理を説明するフローチャートである。以下、図８の各ステップについて説明する。
【００７８】
（図８：ステップＳ２０５１）
返却要求契機判定部１４１７Ｂは、返却要求契機フラグを無効な値（例えば「０」）に設定する。返却要求契機フラグとは、返却要求を発行すべき契機に達しているか否かを示すフラグである。返却要求契機判定部１４１７Ｂは、同フラグの値を、例えばメモリ１２０内の適当な記憶領域に格納する。
【００７９】
（図８：ステップＳ２０５２）
返却要求契機判定部１４１７Ｂは、貸与情報管理テーブル１４１１ＢのＧＣ処理速度フィールド１４１１３Ｂの値を読み取り、変数ｙに格納する。
【００８０】
（図８：ステップＳ２０５３）
返却要求契機判定部１４１７Ｂは、貸与情報管理テーブル１４１１Ｂの貸与先メモリ総量フィールド１４１１２Ｂの値を読み出し、変数ｚに格納する。
【００８１】
（図８：ステップＳ２０５４）
返却要求契機判定部１４１７Ｂは、ＪａｖａＶＭ１４２Ｂのヒープ領域１４２１Ｂの空き容量を取得し、変数ｍに格納する。
【００８２】
（図８：ステップＳ２０５５）
返却要求契機判定部１４１７Ｂは、ヒープ領域１４２１Ｂの空き容量が単位時間当たりに減少する量を算出し、変数ｎに格納する。具体的には、返却要求契機判定部１４１７ＢがステップＳ２０５４を前回実行した時に取得したヒープ領域１４２１Ｂの空き容量と、今回実行した時に取得したヒープ領域１４２１Ｂの空き容量との差分を求め、前回実行時からの経過時間で除算する。
【００８３】
（図８：ステップＳ２０５５：補足）
返却要求契機判定部１４１７ＢがステップＳ２０５４を最初に実行する時には、前回処理時の空き容量が存在しないので、前回実行時からの差分を求めることができない。この場合は例えば、前回処理時の空き容量の代わりにヒープ領域１４２１Ｂのサイズを用い、前回処理時からの経過時間の代わりにＪａｖａＶＭ１４２Ｂが起動してから現時点までの経過時間を用いることができる。
【００８４】
（図８：ステップＳ２０５６）
返却要求契機判定部１４１７Ｂは、下記式（１）が成立するか否かを判定する。成立する場合はステップＳ２０５７へ進み、成立しない場合は本フローチャートを終了する。
【００８５】
ｚ×ｙ≧ｍ／ｎ   ・・・（１）
【００８６】
（図８：ステップＳ２０５６：補足その１）
式（１）の左辺（「ｚ×ｙ」）は、ＧＣの対象となるメモリ総量（ｚ）に単位メモリ量当たりのＧＣ処理時間（ｙ）を掛けたものである。これは、ＪａｖａＶＭ１４２Ａのヒープ領域１４２１Ａに対してＧＣ処理を実施するために要する時間を表す。式（１）の右辺（「ｍ／ｎ」）は、ヒープ領域１４２１Ｂの空き容量（ｍ）を単位時間当たりでヒープ領域１４２１Ｂの空き容量が減少する量（ｎ）で割ったものである。これは、ヒープ領域１４２１Ｂの空き領域がなくなるまでの時間を表す。式（１）が成立する場合、ヒープ領域１４２１Ｂの空き領域がなくなるまでの時間より、ヒープ領域１４２１Ａを解放するために要する時間のほうが大きい（あるいは両者が等しい）ことになる。この場合、返却要求をすぐに送信しておかないと、ヒープ領域１４２１Ｂに空き領域が枯渇してしまう。そこで、返却要求契機判定部１４１７Ｂは、返却要求を送信すべき契機に到達したと判定する。
【００８７】
（図８：ステップＳ２０５６：補足その２）
返却要求契機判定部１４１７Ｂが契機判定のために用いる判定式は、式（１）に限定されるものではない。例えば、メモリ割り当て変更部１４２３がヒープ領域１４２１のサイズを変更する処理にかかる時間が無視できないほど大きい場合には、式（１）の左辺にサイズ変更処理にかかる時間を加えてもよい。また式（１）では、ステップＳ２０５の実行タイミングによっては、契機判定する時点でヒープ領域１４２１Ｂに空き領域がなくなるまでの時間よりもヒープ領域１４２１Ａを解放するために要する時間のほうが大きくなっており、返却が間に合わない恐れがある。そこで、式（１）の左辺に安全係数を表す値を加えてもよい。
【００８８】
（図８：ステップＳ２０５７）
返却要求契機判定部１４１７Ｂは、返却契機フラグを有効な値（例えば「１」）に設定し、本フローチャートを終了する。
【００８９】
＜実施の形態１：まとめ＞
以上のように、本実施形態１に係る計算機１００によれば、メモリ管理プログラム１４１Ｂは、ＪａｖａＶＭ１４２ＡがＧＣを実行するために時間を要する前提の下、ＪａｖａＶＭ１４２Ｂが使用するメモリ領域が枯渇する前にメモリ管理プログラム１４１Ａへメモリ返却要求を送信する。これにより、ＪａｖａＶＭ１４２Ａへ貸与したメモリ容量を返却する処理に時間がかかっても、ＪａｖａＶＭ１４２Ｂの性能を低下させる可能性を低減することができる。
【００９０】
なお、本実施形態１において、仮想マシン１４０Ａにはメモリ容量を借りるメモリ管理プログラム１４１Ａを配置し、仮想マシン１４０Ｂにはメモリ容量を貸与するメモリ管理プログラム１４１Ｂを配置したが、１台の仮想マシン１４０に双方のメモリ管理プログラム１４１を配置することもできる。この場合、ＪａｖａＶＭ１４２はメモリ容量を貸すことも借りることもできる。以下の実施形態でも同様である。
【００９１】
また、本実施形態１において、２つのＪａｖａＶＭ１４２間でメモリ容量を貸し借りする例を説明したが、３つ以上のＪａｖａＶＭ１４２間でメモリ容量を貸し借りする場合でも、本実施形態１と同様の手法を用いることができる。以下の実施形態でも同様である。
【００９２】
また、本実施形態１において、メモリ管理プログラム１４１とＪａｖａＶＭ１４２を一体的に構成することもできる。同様に、メモリ管理プログラム１４１Ａと１４１Ｂを一体的に構成し、メモリ容量を借りる機能と貸与する機能を双方とも持たせることもできる。以下の実施形態でも同様である。
【００９３】
また、本実施形態１において、ＧＣ処理時間がＧＣ対象のメモリ総量に比例すると想定して、返却要求を発行する契機を判定したが、必ずしもこれに限られるものではない。ＧＣ処理時間を推定することができるその他の手法を採用することもできる。以下の実施形態でも同様である。
【００９４】
また、本実施形態１において、メモリ容量を貸し借りするプログラムとしてＪａｖａＶＭ１４２を採り上げたが、本発明を適用することができるプログラムはＪａｖａＶＭに限定されるものではない。メモリ容量を使用するその他のプログラムに対しても、本発明を適用することができる。以下の実施形態でも同様である。
【００９５】
また、本実施形態１において、仮想マシン１４０の配下で各プログラムを動作させ、ハイパーバイザ１５０を介してメモリ容量を貸し借りする例を説明したが、仮想マシン１４０の配下で動作するプログラム以外のプログラムについても、本発明で説明した手法を適用することができる。以下の実施形態でも同様である。
【００９６】
＜実施の形態２＞
本発明の実施形態２では、実施形態１で説明したＪａｖａＶＭ１４２のＧＣ処理に代えて、またはこれと併用して、ヒープ領域１４２１内のデータを圧縮することにより、メモリ使用量を削減する手法を説明する。計算機１００の全体的な構成は実施形態１と同様であるため、以下では差異点を中心に説明する。
【００９７】
実施形態１で用いたＧＣ処理によるメモリ容量返却では、ヒープ領域１４２１Ａのほとんどがゴミオブジェクトではないオブジェクト（以下、非ゴミオブジェクト）で占められている場合、十分にメモリ容量を削減できない可能性がある。メモリ容量を十分に削減できない場合、ＧＣ処理時間を考慮に入れた契機で返却要求を発行したとしても、ＪａｖａＶＭ１４２Ｂがメモリ容量を必要とする時までにメモリ容量を返却できず、ＪａｖａＶＭ１４２Ｂの性能が低下する恐れがある。
【００９８】
これに対し、データ圧縮処理によってメモリ使用量を削減する場合は、非ゴミオブジェクトが占めるメモリ領域も削減対象とすることができ、上記問題が発生しない。
【００９９】
データ圧縮処理は、前述の通り、メモリ中のデータの冗長性を検出することで行われるため、処理対象となるメモリ量が大きいほど処理時間は増加する。本実施形態２では、データ圧縮にかかる処理時間が対象のメモリ量にほぼ比例すると想定し、単位メモリ量当たりのデータ圧縮処理時間と処理対象メモリ量に基づいて、メモリ返却要求を送信する契機を判定する。
【０１００】
図９は、本実施形態２における仮想マシン１４０Ａの詳細構成を示す図である。本実施形態２において、ＪａｖａＶＭ１４２Ａは、実施形態１の図２で説明した構成に加え、新たにデータ圧縮処理部１４２６Ａを備える。仮想マシン１４０Ａのその他の構成は、実施形態１と同様である。データ圧縮処理部１４２６Ａの動作は後述する。
【０１０１】
図１０は、本実施形態２における貸与情報管理テーブル１４１１Ｂの構成とデータ例を示す図である。仮想マシン１４０Ｂの構成は実施形態１と概ね同様であるが、貸与情報管理テーブル１４１１Ｂの構成が異なる。本実施形態２において、貸与情報管理テーブル１４１１Ｂは、ＧＣ処理速度フィールド１４１１３Ｂに代えて、圧縮処理速度フィールド１４１１４Ｂを有する。
【０１０２】
圧縮処理速度フィールド１４１１４Ｂは、ＪａｖａＶＭ１４２Ａのデータ圧縮処理部１４２６Ａがヒープ領域１４２１Ａの単位メモリ量（ここではＭＢ）に対してデータ圧縮処理を実施するために要する時間を保持する。
【０１０３】
貸与先メモリ総量フィールド１４１１２Ｂの値と圧縮処理速度フィールド１４１１４Ｂの値を参照することにより、ＪａｖａＶＭ１４２Ａのデータ圧縮処理部１４２６Ａがヒープ領域１４２１Ａ内のオブジェクトを圧縮してメモリ使用量を削減するために要する時間が分かる。本実施形態２では、この時間を、ＪａｖａＶＭ１４２Ａが借りているメモリ容量を返却するのに要する時間であるとみなす。
【０１０４】
以上、本実施形態２に係る計算機１００の構成を説明した。次に、計算機１００の全体的な動作、および各メモリ管理プログラム１４１間でメモリ容量を貸し借りする動作について説明する。
【０１０５】
情報送信部１４１３Ａは、ＪａｖａＶＭ１４２Ａが起動する時に、通知受信部１４１２Ｂに対して、ヒープ領域１４２１Ａのサイズ、データ圧縮処理部１４２６Ａが単位メモリ量当たりのデータ圧縮処理に要する時間を通知する。これらの値は、あらかじめ運用管理者等が指定しておく。あるいは、情報送信部１４１３Ａが、データ圧縮処理部１４２６Ａにデータ圧縮処理を実行させ、その際に計測した処理時間を通知受信部１４１２Ｂに通知することも考えられる。通知を受けた通知受信部１４１２Ｂは、その内容を貸与情報管理テーブル１４１１Ｂの各フィールドに格納する。
【０１０６】
なお、情報送信部１４１３Ａは、ＪａｖａＶＭ１４２Ａが起動する時に代えて、またはこれと併用して、ＪａｖａＶＭ１４２Ａが稼働している間に、所定時間間隔で上記各情報を通知するようにしてもよい。
【０１０７】
本実施形態２では、図５で説明したステップＳ１０７において、データ圧縮処理部１４２６Ａがヒープ領域１４２１Ａ内のデータを圧縮することにより、ＪａｖａＶＭ１４２Ａが使用しているメモリ量を削減する。このとき、データの使用頻度に基づいて使用頻度が小さいデータのみを圧縮してもよい。あるいは、圧縮後のデータ量を予測し、データ量削減効果の高いデータのみを圧縮してもよい。データ圧縮処理部１４２６Ａは、任意の圧縮アルゴリズムを使用することができる。
【０１０８】
データ圧縮処理部１４２６Ａがヒープ領域１４２１Ａ内のデータを圧縮した後、メモリ割り当て変更部１４２３Ａは、ヒープ領域１４２１Ａのサイズを減少させる。
【０１０９】
図１１は、ステップＳ２０５における詳細処理を説明するフローチャートである。本実施形態２において、ステップＳ２０５の処理は、図８で説明したステップＳ２０５２の内容が異なる。その他のステップは図８と同様である。
【０１１０】
（図１１：ステップＳ２０５２）
返却要求契機判定部１４１７Ｂは、貸与情報管理テーブル１４１１Ｂの圧縮処理速度フィールド１４１１４Ｂの値を読み取り、変数ｙに格納する。
【０１１１】
（図１１：ステップＳ２０５６）
本実施形態２における本ステップは、ＪａｖａＶＭ１４２Ａのヒープ領域１４２１Ａ内のデータを圧縮するのに要する時間と、ＪａｖａＶＭ１４２Ｂのヒープ領域１４２１Ｂが枯渇するまでにかかる見込み時間とを比較していることになる。
【０１１２】
＜実施の形態２：まとめ＞
以上のように、本実施形態２に係る計算機１００によれば、ヒープ領域１４２１Ａのほとんどが非ゴミオブジェクトで占められている場合でも、ＪａｖａＶＭ１４２Ａが使用するメモリ容量を削減することができる。これによって、ＪａｖａＶＭ１４２Ｂの性能が低下する可能性をより確実に抑えつつ、メモリ容量をＪａｖａＶＭ１４２Ａに貸与することができる。
【０１１３】
なお、本実施形態２では、データ圧縮処理時間が圧縮対象のメモリ総量に比例すると想定して、返却要求を発行する契機を判定したが、必ずしもこれに限られるものではない。データ圧縮処理時間を推定することができるその他の手法を採用することもできる。その他の実施形態でも同様である。
【０１１４】
また、本実施形態２において、データ圧縮処理によるメモリ使用量削減と、ＧＣ処理によるメモリ使用量削減を、併用することもできる。例えば、まずはＧＣ処理を実施してメモリ使用量を削減し、削減量が不足している場合にはデータ圧縮処理を追加実施する、などの手法が考えられる。
【０１１５】
＜実施の形態３＞
本発明の実施形態３では、実施形態１で説明したＪａｖａＶＭ１４２のＧＣ処理、および実施形態２で説明したデータ圧縮処理に代えて、またはこれらと併用して、ハイパーバイザ１５０のページング機能により、メモリ使用量を削減する手法を説明する。計算機１００の全体的な構成は実施形態１と同様であるため、以下では差異点を中心に説明する。
【０１１６】
実施形態１で用いたＧＣ処理によりメモリ使用量を削減する場合、上述したように、十分にメモリ使用量を削減できない可能性がある。また、実施形態２で用いたデータ圧縮処理によってメモリ使用量を削減する場合、ヒープ領域１４２１内のデータ冗長性が小さいと、十分にメモリ使用量を削減できない可能性がある。
【０１１７】
これに対し、ページング機能によるメモリ使用量の削減では、ヒープ領域１４２１内の非ゴミオブジェクトや冗長性の程度によらずメモリ使用量を削減することができ、上記課題が発生しない。
【０１１８】
ページング処理は、前述の通り、メモリ内のデータを他の記憶媒体に複製することで行われるため、ページング対象となるメモリ量にほぼ比例した処理時間が必要となる。本実施形態３では、単位メモリ量当たりのページング処理時間と対象メモリ量に基づいて、メモリ返却要求を発行すべき契機を判定する。
【０１１９】
図１２は、本実施形態３に係る計算機１００の機能ブロック図である。本実施形態３において、計算機１００のハイパーバイザ１５０は、ページング処理部１５１を備える。その他の構成は実施形態１〜２と概ね同様であるため、以下では差異点を中心に説明する。
【０１２０】
ページング処理部１５１は、各仮想マシン１４０が使用しているメモリ１３０内のデータを、ページング処理によって他の記憶媒体（例えば記憶部１２０）に複製する。
【０１２１】
図１３は、本実施形態３における仮想マシン１４０Ａの詳細構成を示す図である。本実施形態３において、メモリ管理プログラム１４１Ａは、実施形態１〜２で説明した構成に加え、ページング要求部１４１８Ａを備える。ページング要求部１４１８Ａは、メモリ管理プログラム１４１Ａ配下のソフトウェアモジュールなどの形態で実装することができる。
【０１２２】
ページング要求部１４１８Ａは、ハイパーバイザ１５０に対し、ページング処理を実行するように要求する。ページング処理により、仮想マシン１４０Ａが使用しているメモリ使用量を削減することを図る。なお、ヒープ領域１４２１Ａのみをメモリ使用量の削減対象としてもよい。
【０１２３】
図１４は、本実施形態３における貸与情報管理テーブル１４１１Ｂの構成とデータ例を示す図である。仮想マシン１４０Ｂの構成は実施形態１と概ね同様であるが、貸与情報管理テーブル１４１１Ｂの構成が異なる。本実施形態３において、貸与情報管理テーブル１４１１Ｂは、ＧＣ処理速度フィールド１４１１３Ｂに代えて、ページング処理速度フィールド１４１１５Ｂを有する。貸与している分のメモリ量に対してのみページング処理を実施する場合、貸与先メモリ総量フィールド１４１１２Ｂは省略することができる。
【０１２４】
ページング処理速度フィールド１４１１５Ｂは、ハイパーバイザ１５０のページング処理部１５１がメモリ１３０の単位メモリ量（ここではＭＢ）に対してページング処理を実施するために要する時間を保持する。
【０１２５】
貸与量フィールド１４１１１Ｂの値とページング処理速度フィールド１４１１５Ｂの値を参照することにより、ハイパーバイザ１５０のページング処理部１５１がヒープ領域１４２１Ａ内のオブジェクトを圧縮してメモリ使用量を削減するために要する時間が分かる。本実施形態３では、この時間を、ＪａｖａＶＭ１４２Ａが借りているメモリ容量を返却するのに要する時間であるとみなす。
【０１２６】
以上、本実施形態３に係る計算機１００の構成を説明した。次に、計算機１００の全体的な動作、および各メモリ管理プログラム１４１間でメモリ容量を貸し借りする動作について説明する。
【０１２７】
情報送信部１４１３Ａは、ＪａｖａＶＭ１４２Ａが起動する時に、通知受信部１４１２Ｂに対して、ページング処理部１５１が単位メモリ量当たりのページング処理に要する時間を通知する。これらの値は、あらかじめ運用管理者等が指定しておく。あるいは、情報送信部１４１３Ａが、ページング処理部１５１にページング処理を実行させ、その際に計測した処理時間を通知受信部１４１２Ｂに通知することも考えられる。通知を受けた通知受信部１４１２Ｂは、その内容を貸与情報管理テーブル１４１１Ｂの対応するフィールドに格納する。
【０１２８】
なお、情報送信部１４１３Ａは、ＪａｖａＶＭ１４２Ａが起動する時に代えて、またはこれと併用して、ＪａｖａＶＭ１４２Ａが稼働している間に、所定時間間隔で上記各情報を通知するようにしてもよい。
【０１２９】
本実施形態３では、図５で説明したステップＳ１０７において、ページング要求部１４１８Ａからページング処理部１５１に対してページングを実行するように要求する。ページング処理部１５１は、仮想マシン１４０Ａに割り当てられているメモリ領域に対してページング処理を実施する。このとき、ヒープ領域１４２１Ａに割り当てられているメモリ領域に対して優先的にページング処理を実施するようにしてもよい。また、必ずしも仮想マシン１４０Ａまたはヒープ領域１４２１Ａに割り当てられているメモリ領域の全てに対してページング処理を実施する必要はなく、一部のメモリ領域のみに対して実施するようにしてもよい。
【０１３０】
ページング処理部１５１がページング処理を実施した後、メモリ割り当て変更部１４２３Ａは、ヒープ領域１４２１Ａのサイズを減少させる。
【０１３１】
図１５は、ステップＳ２０５における詳細処理を説明するフローチャートである。本実施形態３において、ステップＳ２０５の処理は、図８で説明したステップＳ２０５２〜Ｓ２０５３の内容が異なる。その他のステップは図８と同様である。
【０１３２】
（図１５：ステップＳ２０５２）
返却要求契機判定部１４１７Ｂは、貸与情報管理テーブル１４１１Ｂのページング処理速度フィールド１４１１５Ｂの値を読み取り、変数ｙに格納する。
【０１３３】
（図１５：ステップＳ２０５３）
返却要求契機判定部１４１７Ｂは、貸与情報管理テーブル１４１１Ｂの貸与量フィールド１４１１１Ｂの値を読み取り、変数ｚに格納する。
【０１３４】
（図１５：ステップＳ２０５６）
本実施形態３における本ステップは、ＪａｖａＶＭ１４２Ａが借りているメモリ容量相当分をページング処理するのに要する時間と、ＪａｖａＶＭ１４２Ｂのヒープ領域１４２１Ｂが枯渇するまでにかかる見込み時間とを比較していることになる。
【０１３５】
＜実施の形態３：まとめ＞
以上のように、本実施形態３に係る計算機１００によれば、ヒープ領域１４２１Ａ内のデータに冗長性があまりない場合でも、ＪａｖａＶＭ１４２Ａが使用するメモリ容量を削減することができる。これによって、ＪａｖａＶＭ１４２Ｂの性能が低下する可能性をより確実に抑えつつ、メモリ容量をＪａｖａＶＭ１４２Ａに貸与することができる。
【０１３６】
なお、本実施形態３において、メモリ管理プログラム１４１Ａがページング要求部１４１８Ａを備えることを説明したが、これに代えてメモリ管理プログラム１４１Ｂがページング要求部１４１８Ａを備えるように構成することもできる。この場合、仮想マシン１４０Ａまたはヒープ領域１４２１Ａに割り当てられているメモリ容量に対して、メモリ管理プログラム１４１Ｂからページング処理を要求することになる。これにより、メモリ管理プログラム１４１Ａが障害などによってページング処理要求を発行できない場合でも、ＪａｖａＶＭ１４２が借りているメモリ容量を返却することができる。
【０１３７】
また、本実施形態３において、メモリ管理プログラム１４１がページング要求部１４１８を備えることを説明したが、メモリ管理プログラム１４１以外のプログラム（例えばＪａｖａＶＭ１４２）がページング要求部１４１８を備えるように構成することもできる。
【０１３８】
また、本実施形態３において、ページング処理によるメモリ使用量削減に加えて、データ圧縮処理によるメモリ使用量削減、またはＧＣ処理によるメモリ使用量削減のうち少なくともいずれかを併用することもできる。例えば、まずはＧＣ処理を実施してメモリ使用量を削減し、削減量が不足していればデータ圧縮処理を実施し、なお削減量が不足している場合にページングを実施する、などの手法が考えられる。
【０１３９】
＜実施の形態４＞
本発明の実施形態４では、仮想マシン１４０が３台存在し、メモリ容量をこれら３台の仮想マシン１４０の間で貸し借りする構成例を説明する。ＪａｖａＶＭ１４２ＢからＪａｖａＶＭ１４２Ａにメモリ容量を貸与する点は、実施形態１〜３と同様である。本実施形態４では、ＪａｖａＶＭ１４２ＡからＪａｖａＶＭ１４２Ｂへメモリ容量を返却する際の処理が、実施形態１〜３とは異なる。
【０１４０】
図１６は、本実施形態４に係る計算機１００の機能ブロック図である。本実施形態４において、計算機１００は、３台の仮想マシン１４０Ａ、１４０Ｂ、１４０Ｃを備える。仮想マシン１４０Ｃの詳細構成については後述する。その他の構成は実施形態１〜３と概ね同様であるため、以下では差異点を中心に説明する。
【０１４１】
ＪａｖａＶＭ１４２Ａは、ＪａｖａＶＭ１４２Ｂから借りているメモリ容量を使用中であるなどの理由で返却できないとき、ＪａｖａＶＭ１４２Ｃからメモリ容量を借りてＪａｖａＶＭ１４２Ｂに返却する。これにより、ＪａｖａＶＭ１４２Ａは、ＪａｖａＶＭ１４２Ｂからメモリ返却要求を受けたときでも、使用するメモリ容量を減少させることなく稼動し続けることができる。すなわち、複数の仮想マシン１４０間で空きメモリ容量を互いに融通し合うことにより、計算機１００全体としてのメモリ使用効率を向上させることを図る。
【０１４２】
図１７は、本実施形態４における仮想マシン１４０Ｂの詳細構成を示す図である。本実施形態４において、メモリ管理プログラム１４１Ｂは、実施形態１〜３で説明した構成に加え、貸与可能量送受信部１４１９Ｂを備える。貸与可能量送受信部１４１９Ｂは、メモリ管理プログラム１４１Ｂ配下のソフトウェアモジュールなどの形態で実装することができる。
【０１４３】
図１７では、実施形態１の図３で説明した構成に加えて貸与可能量送受信部１４１９Ｂを備えた構成を例示したが、その他の実施形態におけるメモリ管理プログラム１４１Ｂの構成に加えて貸与可能量送受信部１４１９Ｂを設けることもできる。
【０１４４】
貸与可能量送受信部１４１９Ｂは、後述する貸与可能量送受信部１４１９Ｃから、ＪａｖａＶＭ１４２Ｃが貸与することができるメモリ容量の値を受信する。この値は、図１９で説明する貸与情報管理テーブル１４１Ｂに格納される。
【０１４５】
図１８は、仮想マシン１４０Ｃの詳細構成を示す図である。仮想マシン１４０Ｃは、仮想マシン１４０Ａに対してメモリ容量を貸与するので、その構成は仮想マシン１４０Ｂと概ね同様である。貸与情報管理テーブル１４１１Ｃの構成は、実施形態１の図４で説明したものと同様である。
【０１４６】
貸与可能量送受信部１４１９Ｃは、メモリ管理プログラム１４１Ｂの貸与可能量送受信部１４１９Ｂに対して、ＪａｖａＶＭ１４２Ｃが貸与することができるメモリ容量の値を送信する。
【０１４７】
図１９は、本実施形態４における貸与情報管理テーブル１４１１Ｂの構成とデータ例を示す図である。本実施形態４における貸与情報管理テーブル１４１１Ｂは、実施形態１〜３で説明した構成に加え、新たに貸与可能量フィールド１４１１６Ｂを有する。
【０１４８】
貸与可能量送受信部１４１９Ｂは、後述する貸与可能量送受信部１４１９Ｃから、ＪａｖａＶＭ１４２Ｃが貸与することができるメモリ容量の値を受信すると、その値を貸与可能量フィールド１４１１６Ｂに格納する。
【０１４９】
図１９では、実施形態１の図４で説明した構成に加えて貸与可能量フィールド１４１１６Ｂを設けた構成を例示したが、その他の実施形態における貸与情報管理テーブル１４１１Ｂの構成に加えて同フィールドを設けることもできる。
【０１５０】
以上、本実施形態４に係る計算機１００の構成を説明した。次に、計算機１００の全体的な動作、および各メモリ管理プログラム１４１間でメモリ容量を貸し借りする動作について説明する。
【０１５１】
情報送信部１４１３Ａは、ＪａｖａＶＭ１４２Ａが起動する時、通知受信部１４１２Ｂおよび１４１２Ｃに対して、ヒープ領域１４２１Ａのサイズ、ＧＣ処理部１４２２Ａが単位メモリ量当たりのＧＣ処理に要する時間を通知する。通知を受けた通知受信部１４１２Ｂおよび１４１２Ｃは、その内容を貸与情報管理テーブル１４１１Ｂおよび１４１１Ｃの各フィールドに格納する。
【０１５２】
メモリ管理プログラム１４１Ｃの貸与可能量送受信部１４１９Ｃは、ＪａｖａＶＭ１４２Ｃの稼働中に、所定時間間隔で、メモリ管理プログラム１４１Ｂの貸与可能量送受信部１４１９Ｂに対して、ＪａｖａＶＭ１４２Ｃが貸与することができるメモリ量を通知する。ＪａｖａＶＭ１４２Ｃが貸与できるメモリ量として、例えば、ヒープ領域１４２１Ｃの空き容量を通知することが考えられる。通知を受けた貸与可能量送受信部１４１９Ｂは、貸与可能量フィールド１４１１６Ｂに通知された値を格納する。
【０１５３】
なお、貸与可能量送受信部１４１９Ｃが貸与可能量を所定時間間隔で通知する代わりに、Ｊａｖａプログラム実行部１４２５Ｃの処理によりヒープ領域１４２１Ｃの空き容量が変化した契機で通知してもよい。
【０１５４】
図２０は、本実施形態４におけるステップＳ１０７の詳細を示す図である。実施形態１〜３では、メモリ管理プログラム１４１Ａはメモリ管理プログラム１４１Ｂからメモリ返却要求を受けると、ステップＳ１０７でヒープ領域１４２１Ａのサイズを減少させるなどしてＪａｖａＶＭ１４２Ａのメモリ使用量を減少させ、メモリ容量を返却していた。しかし、ステップＳ１０７の時点でＪａｖａＶＭ１４２Ａが借りているメモリ容量を使用中である場合、即座にメモリ容量を返却すると、ＪａｖａＶＭ１４２Ａの性能を低下させてしまう可能性がある。そこで本実施形態４では、ステップＳ１０７において、仮想マシン１４０Ｃからメモリ容量を借りた上で返却することとした。以下、図２０の各ステップについて説明する。
【０１５５】
（図２０：ステップＳ１０７１）
貸与要求送信部１４１４Ａは、通知受信部１４１２Ｃに対し、メモリ容量を貸与するよう要求する。
【０１５６】
（図２０：ステップＳ１０７２〜Ｓ１０７３）
通知受信部１４１２Ｃは、ステップＳ１０７１で貸与要求送信部１４１４Ａが送信した貸与要求を受信する（Ｓ１０７２）。通知受信部１４１２Ｃは、ステップＳ２０２と同様の手順で、ヒープ領域１４２１Ｃのサイズを減少させる（Ｓ１０７３）。
【０１５７】
（図２０：ステップＳ１０７４）
通知受信部１４１２Ｃは、ヒープ領域１４２１Ｃのサイズを減少させた後、貸与情報管理テーブル１４１１Ｃの貸与量フィールド１４１１１Ｃの値をヒープ領域１４２１Ｃのサイズ減少量分だけ増加させ、ヒープ領域１４２１Ｃのサイズ減少量を含んだ応答を、貸与要求送信部１４１４Ａに返す。
【０１５８】
（図２０：ステップＳ１０７５）
貸与要求送信部１４１４Ａは、ステップＳ１０７４で通知受信部１４１２Ｃが送信した応答を受信し、本処理シーケンスを終了する。
【０１５９】
図２１は、本実施形態４におけるステップＳ２０５の詳細処理を説明するフローチャートである。本実施形態４では、実施形態１〜３とは異なり、ヒープ領域１４２１Ｃの空き容量が十分あるか否かによって、メモリ管理プログラム１４１Ｂがメモリ返却要求を発行するタイミングが異なる。以下、図２１の各ステップについて説明する。
【０１６０】
（図２１：ステップＳ２０５１〜Ｓ２０５５）
これらのステップは、実施形態１の図８と同様である。ただし、ステップＳ２０５５の後にステップＳ２０５８〜Ｓ２０５９が新たに追加されている。
【０１６１】
（図２１：ステップＳ２０５８）
返却要求契機判定部１４１７Ｂは、貸与情報管理テーブル１４１１Ｂから貸与量フィールド１４１１１Ｂの値を読み出し、変数ａに格納する。
【０１６２】
（図２１：ステップＳ２０５９）
返却要求契機判定部１４１７Ｂは、貸与情報管理テーブル１４１１Ｂから貸与可能量フィールド１４１１６Ｂの値（ＪａｖａＶＭ１４２Ｃが貸与できるメモリ容量）を読み出し、変数ｂに格納する。
【０１６３】
（図２１：ステップＳ２０５６）
返却要求契機判定部１４１７Ｂは、式（１）および下記式（２）が成立するか否かを判定する。成立する場合はステップＳ２０５７へ進み、成立しない場合は本フローチャートを終了する。
【０１６４】
ｂ≦ａ   ・・・（２）
【０１６５】
（図２１：ステップＳ２０５６：補足その１）
式（２）が成立する場合、ＪａｖａＶＭ１４２Ｃが貸与できるメモリ量（ｂ）よりもＪａｖａＶＭ１４２Ａが借りているメモリ容量（ａ）の方が大きい。そのため、ＪａｖａＶＭ１４２Ｃからメモリ容量を貸与するのみでは、ＪａｖａＶＭ１４２Ｂから借りたメモリ容量を返却することができない。この場合、ＪａｖａＶＭ１４２ＡがＧＣを実施する必要がある。
【０１６６】
（図２１：ステップＳ２０５６：補足その２）
式（１）が成立していても、式（２）が成立しないのであれば、ＪａｖａＶＭ１４２Ｃからメモリ容量を貸与して、ＪａｖａＶＭ１４２Ｂに借りている分を返却することができる。同様に式（２）が成立していても、式（１）が成立しないのであれば、ヒープ領域１４２１Ｂが枯渇するまでの時間に余裕があることになるので、返却要求を発行しなくともよい。すなわち、式（１）（２）双方が成立する場合に限り、メモリ返却要求を発行すべきタイミングに到達していると判定することになる。
【０１６７】
（図２１：ステップＳ２０５６：補足その３）
図８と同様に、本ステップで返却要求契機判定部１４１７Ｂが契機判定のために用いる判定式は、式（１）（２）に限定されるものではない。安全係数などを適宜加味することができる。
【０１６８】
＜実施の形態４：まとめ＞
以上のように、本実施形態４に係る計算機１００によれば、ＪａｖａＶＭ１４２Ｂから借りているメモリ容量を使用中であっても、ＪａｖａＶＭ１４２Ｃから新たにメモリ容量を借り受けてＪａｖａＶＭ１４２Ｂに返却することができる。これにより、計算機１００全体としてメモリ使用効率を向上させることができる。
【０１６９】
なお、本実施形態４において、１台の仮想マシン１４０に３つのメモリ管理プログラム１４１Ａ〜１４１Ｃのうちいずれか２以上を配置することもできる。この場合、ＪａｖａＶＭ１４２は、メモリ容量の貸手、借手、２番目の貸手のうちいずれか２以上の役割を兼ねることができる。
【０１７０】
また、本実施形態４において、実施形態１で説明した構成の下で新たに仮想マシン１４０Ｃを設けた例を示したが、その他の実施形態で説明した構成の下で仮想マシン１４０Ｃを設け、本実施形態４と同様に相互にメモリ容量を貸し借りすることもできる。
【０１７１】
＜実施の形態５＞
以上の実施形態１〜４で説明した各プログラムを、半導体メモリ、磁気ディスク、工学ディスクなどの種々の記録媒体にその一部または全部を格納し、計算機にインストールすることにより、各実施形態で説明した計算機１００の機能を構成することができる。同様にインターネットなどの通信線を介して同プログラムを計算機に提供し、各実施形態で説明した計算機１００の機能を構成することもできる。
【符号の説明】
【０１７２】
１００：計算機、１１０：ＣＰＵ、１２０：記憶部、１２１：Ｊａｖａプログラム、１３０：メモリ、１４０：仮想マシン、１４１：メモリ管理プログラム、１４１１：貸与情報管理テーブル、１４１１１：貸与量フィールド、１４１１２：貸与先メモリ総量フィールド、１４１１３：ＧＣ処理速度フィールド、１４１１４：圧縮処理速度フィールド、１４１１５：ページング処理速度フィールド、１４１１６：貸与可能量フィールド、１４１２：通知受信部、１４１３：情報送信部、１４１４：貸与要求送信部、１４１５：返却要求送信部、１４１６：貸与要求契機判定部、１４１７：返却要求契機判定部、１４１８：ページング要求部、１４１９：貸与可能量送受信部、１４２：ＪａｖａＶＭ、１４２１：ヒープ領域、１４２２：ＧＣ処理部、１４２３：メモリ割り当て変更部、１４２４：参照ルート、１４２５：Ｊａｖａプログラム実行部、１４３：オペレーティングシステム、１５０：ハイパーバイザ、１５１：ページング処理部。
【図１】
2012033041.tif 000003
【図２】
2012033041.tif 000004
【図３】
2012033041.tif 000005
【図４】
2012033041.tif 000006
【図５】
2012033041.tif 000007
【図６】
2012033041.tif 000008
【図７】
2012033041.tif 000009
【図８】
2012033041.tif 000010
【図９】
2012033041.tif 000011
【図１０】
2012033041.tif 000012
【図１１】
2012033041.tif 000013
【図１２】
2012033041.tif 000014
【図１３】
2012033041.tif 000015
【図１４】
2012033041.tif 000016
【図１５】
2012033041.tif 000017
【図１６】
2012033041.tif 000018
【図１７】
2012033041.tif 000019
【図１８】
2012033041.tif 000020
【図１９】
2012033041.tif 000021
【図２０】
2012033041.tif 000022
【図２１】
2012033041.tif 000023