(57)【要約】【課題】高いスループットと短い停止時間を両立したガベージコレクション処理を可能にする計算機システムを提供する。【解決手段】プログラムがガベージコレクションを実行すべき状態であるかどうかの判定を行い、ガベージコレクションを実行すべき状態であればプログラムが使用しているメモリ内容を別処理系にコピーし、プログラムの処理継続と並行して、別処理系でコピーされたメモリ内容に対して不要メモリ領域の判定処理を行い、別処理系は判定結果を送信すべき状態になるまで待機した後、判定結果を送信し、プログラムは送信結果を受け付けてメモリ領域中の不要メモリ領域を開放する。【選択図】図１
2010272059.tif 000002
【特許請求の範囲】
【請求項１】
演算装置とメモリを備えた計算機システムで、
前記メモリに格納されて前記演算装置で実行されるプログラムが使用するメモリ領域中の不要になった領域を開放するメモリ管理方法であって、
前記演算装置が、前記プログラムを実行する第１の処理系を前記メモリに生成するステップと、
前記演算装置が、第１の契機となったときに、前記第２の処理系を前記メモリに生成するステップと、
前記演算装置が、前記メモリの前記第１の処理系の内容を前記第２の処理系にコピーするステップと、
前記演算装置が、前記コピーされた第２の処理系のメモリ領域中の不要領域の判定を行うステップと、
前記演算装置が、第２の契機となったときに、前記不要領域の判定結果を前記第１の処理系の前記プログラムに送信するステップと、
前記演算装置が、前記第１の処理系で前記判定結果を受信するステップと、
前記演算装置が、前記第１の処理系で前記受信した前記不要領域の判定結果に基づいて、第１の処理系の前記メモリ領域中の前記不要領域を開放するステップと、
を含むことを特徴とするメモリ管理方法。
【請求項２】
請求項１に記載のメモリ管理方法であって、
前記演算装置が、前記第１の契機となったときに、前記第２の処理系を前記メモリに生成するステップ及び前記メモリの前記第１の処理系の内容を前記第２の処理系にコピーするステップにおいて、
前記演算装置は、前記第２の処理系を前記第１の処理系とは異なる計算機に生成することを特徴とするメモリ管理方法。
【請求項３】
請求項１に記載のメモリ管理方法であって、
前記演算装置が、前記第１の契機となったときに、前記第２の処理系を前記メモリに生成するステップは、
前記演算装置が、前記第２の処理系を前記第１の処理系とは異なるプロセスとして生成することを特徴とするメモリ管理方法。
【請求項４】
請求項１に記載のメモリ管理方法であって、
前記演算装置が、前記第１の処理系の前記プログラムが使用する前記メモリの領域の残量を測定するステップをさらに含み、
前記第１の契機は、前記第１の処理系の前記プログラムが使用する前記メモリの領域の残量が所定の第１の閾値以下となったときであることを特徴とするメモリ管理方法。
【請求項５】
請求項１に記載のメモリ管理方法であって、
前記演算装置が、前記第１の処理系の前記プログラムが使用する前記メモリの領域の残量の減少率を測定するステップをさらに含み、
前記第１の契機は、前記第１の処理系で前記プログラムが使用する前記メモリの領域の残量の減少率が所定の第２の閾値を超えたときであることを特徴とするメモリ管理方法。
【請求項６】
請求項１に記載のメモリ管理方法であって、
前記演算装置が、前記第１の処理系の前記プログラムが使用する前記演算装置の使用率を測定するステップをさらに含み、
前記第１の契機が、前記第１の処理系で前記プログラムを実行する演算装置の使用率が所定の第３の閾値以下のときであることを特徴とするメモリ管理方法。
【請求項７】
請求項１に記載のメモリ管理方法であって、
前記演算装置が、前記第２の処理系で使用する前記メモリの領域の残量を測定するステップと、
前記演算装置が、前記第２の処理系で使用する前記演算装置の使用率を測定するステップと、をさらに含み、
前記第１の契機は、前記第２の処理系が使用する前記メモリの領域の残量が所定の第４の閾値以下となったとき、または前記演算装置の使用率が所定の第５の閾値以下のときであることを特徴とするメモリ管理方法。
【請求項８】
請求項１に記載のメモリ管理方法であって、
前記演算装置が、前記プログラムを実行する第１の処理系を前記メモリに生成するステップは、
前記第１の処理系を監視する第３の処理系を生成し、前記第３の処理系が前記第１の処理系の監視結果を前記第１の処理系に通知する処理を含み、
前記第１の契機は、前記第１の処理系で前記第３の処理系からの前記通知を受け付けたときであることを特徴とするメモリ管理方法。
【請求項９】
請求項１に記載のメモリ管理方法であって、
前記第２の契機は、前記第２の処理系で前記メモリ領域中の不要領域の判定が完了したときであることを特徴とするメモリ管理方法。
【請求項１０】
請求項１に記載のメモリ管理方法であって、
前記演算装置が、前記第１の処理系の前記プログラムが使用する前記メモリの領域の残量の減少率を測定するステップをさらに含み、
前記第２の契機は、前記第１の処理系の前記プログラムが使用する前記メモリの領域の残量が所定の第１の閾値以下となったときであることを特徴とするメモリ管理方法。
【請求項１１】
請求項１に記載のメモリ管理方法であって、
前記演算装置が、前記第１の処理系の前記プログラムが使用する前記演算装置の使用率を測定するステップをさらに含み、
前記第１の契機は、前記第１の処理系で前記プログラムを実行する演算装置の使用率が所定の第３の閾値以下のときであることを特徴とするメモリ管理方法。
【請求項１２】
請求項１に記載のメモリ管理方法であって、
前記演算装置が、前記第２の処理系で使用する前記メモリの領域の残量を測定するステップと、
前記演算装置が、前記第２の処理系で使用する前記演算装置の使用率を測定するステップと、をさらに含み、
前記第２の契機は、前記第２の処理系が使用する前記メモリの領域の残量が所定の第４の閾値以下となったとき、または前記演算装置の使用率が所定の第５の閾値以下のときであることを特徴とするメモリ管理方法。
【請求項１３】
演算装置とメモリを備えてプログラムを実行し、前記プログラムが使用するメモリ領域中の不要になった領域を開放する計算機システムであって、
前記メモリに設定されて前記プログラムを実行する第１の処理系と、
第１の契機となったときに、第２の処理系を前記メモリに生成する回収処理開始部と、
前記第１の処理系を前記第２の処理系にコピーするコピー部と、
前記コピーされた第２の処理系のメモリ領域中の不要領域の判定を行う判定部と、
第２の契機となったときに、前記不要領域の判定結果を前記第１の処理系に送信する判定結果送信部と、
前記第１の処理系で前記判定結果を受信し、前記受信した不要領域の判定結果に基づいて、第１の処理系の前記メモリ領域中の前記不要領域を開放する回収処理実行部と、
を備えたことを特徴とする計算機システム。
【請求項１４】
プログラムが格納されるメモリと、前記メモリに格納された前記プログラムを実行する演算装置と、を備える計算機に、
前記プログラムを実行する第１の処理系を前記メモリに生成して実行する手順と、
第１の契機となったときに、第２の処理系を前記メモリに生成する手順と、
前記メモリの前記第１の処理系の内容を前記第２の処理系にコピーする手順と、
前記コピーされた第２の処理系のメモリ領域中の不要領域の判定を行う手順と、
第２の契機となったときに、前記不要領域の判定結果を前記第１の処理系の前記プログラムに送信する手順と、
前記第１の処理系で前記判定結果を受信する手順と、
前記第１の処理系で前記受信した前記不要領域の判定結果に基づいて、第１の処理系の前記メモリ領域中の前記不要領域を開放する手順と、
を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ管理方法、計算機システム及びプログラムに係り、特に、ガベージコレクション処理に関するメモリ管理方法、計算機システム及びプログラムに関する。
【背景技術】
【０００２】
計算機システムにおいて、プログラムが使用しているメモリ上に確保されているオブジェクトの暗黙的な回収手段としてガベージコレクション(以後、ＧＣと呼ぶ）がある。ＧＣはメモリ上にある各オブジェクトに対して、プログラムから使用される可能性の有無を判定し、使用される可能性がないオブジェクト（以後、ゴミオブジェクトと呼ぶ）を回収する。ＧＣは、Ｊａｖａ（ＴＭ）仮想マシン（以後、ＪａｖａＶＭと呼ぶ）（ＪａｖａおよびすべてのＪａｖａ関連の商標およびロゴは、米国およびその他の国における米国Sun Microsystems, Inc.の商標または登録商標である）等で使用されている。
【０００３】
ＧＣの基本的な処理は、プログラムが参照を辿ることができる元（以後、参照ルートと呼ぶ）からメモリ上のオブジェクトの参照関係を辿り、最後まで到達できなかったオブジェクトをゴミオブジェクトと判定して回収することで行われる。
【０００４】
ＧＣの一般的な方式として、Stop the World方式とConcurrent方式が存在する。Stop the World方式では、ＧＣ開始時にプログラムの処理実行を停止させ、メモリ上のオブジェクトの参照関係が変更されない状態で判定および回収処理を行い、回収処理後にプログラムの処理を再開させる。Concurrent方式では、プログラムの処理実行と並行して判定および回収処理を行うため、プログラムの処理停止はほとんど発生しない（例えば、非特許文献１）。
【０００５】
また、多くの計算機システムでは、メモリ領域はページと呼ばれる固定長の領域で管理されている。ゴミオブジェクト回収処理の際に、ゴミオブジェクトしか存在しないメモリページ（以後、ゴミページと呼ぶ）中のゴミオブジェクトのみを回収対象とし、非ゴミオブジェクトが含まれているメモリページ中のゴミオブジェクトの回収を省略することで、非常に効率のよいゴミオブジェクト回収処理が可能であることが知られている（例えば、非特許文献２）。
【０００６】
また、近年、ハイパーバイザーと呼ばれるソフトウェアを用いて、一つの計算機システム上で複数の仮想的な計算機システムを動作させる構成が普及し始めている。この構成では、仮想計算機システム上のプログラムの実行をほとんど停止させることなく、複数のハイパーバイザー間で仮想計算機システムを移動させる機能（ライブマイグレーション機能）をハイパーバイザーが提供している（例えば、非特許文献３）。
【０００７】
ライブマイグレーションは、仮想計算機システム全体を使用中のメモリ内容まで含めて別のハイパーバイザー上にコピーすることで実現されている。なお、従来から広く用いられているオペレーティングシステムと呼ばれるソフトウェアも、実行中のプログラムのコピーを生成する機能を提供している（例えば、非特許文献４）。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】Garbage Collection: Algorithms for Automatic Dynamic Memory Management(Richard Jones, Rafael Lins, 1996, John Wiley & Sons Inc, ISBN:978-0471941484), p183
【非特許文献２】Michal Wegiel and Chandra Krintz, The Mapping Collector: Virtual Memory Support for Generational, Parallel, and Concurrent Compaction, ACM SIGOPS Operating Systems Review Vol.42 Issue2, 2008, p.91-102
【非特許文献３】Christopher Clark, Keir Fraser, Steven H, Jacob Gorm Hansen, Eric Jul, Christian Limpach, Ian Pratt, and Andrew Warfield, Live Migration of Virtual Machines, 2nd ACM/USENIX Symposium on Networked Systems Design and Implementation, 2005, p.273-286
【非特許文献４】オペレーティングシステム 第3版 (Andrew S. Tanenbaum, 2007, ピアソンエデュケーション, ISBN: 978-4894717695), p29
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上記Stop the World方式のＧＣでは、ＧＣ処理中はプログラムの処理が停止するため、応答性に難がある。Stop the World方式では、大規模な環境での運用や半導体技術の向上により計算機システムが扱うメモリ量が増大するにつれ、ＧＣ処理による停止時間も伸びるため、業務アプリケーションのレスポンスタイムに深刻な影響を及ぼす。
【００１０】
Concurrent方式のＧＣでは、ＧＣ処理中にプログラムの処理実行によって変更されたメモリ上のオブジェクト間の参照関係を記録しておき、変更箇所を再度調査する処理が必要となる。これは、プログラムに使用される可能性のあるオブジェクト（以後、非ゴミオブジェクトと呼ぶ）をゴミオブジェクトと誤判定し、回収してしまう事態を防ぐためである。そのため、Concurrent方式では、プログラムはメモリ上のオブジェクトの参照関係を変更するたびに、本来の処理実行には不要な記録処理を行う必要があり、Stop the World方式に比べてスループット（実行時性能）が著しく低下する、という問題があった。
【００１１】
本発明の目的は上記のような課題に鑑みてなされたものであり、高いスループットと短い停止時間を両立したＧＣ処理を可能とすることにある。
【課題を解決するための手段】
【００１２】
本発明は、プログラムが使用しているメモリの内容を別の処理系にコピーし、別処理系でコピーされたメモリ中のゴミオブジェクトの判定処理を行い、別処理系から元プログラムに判定結果を伝達し、元プログラムが伝達された判定結果を基にゴミオブジェクトの回収処理を行うことを特徴とする。
【発明の効果】
【００１３】
したがって、ＧＣ処理の一部を別の処理系で行うことで、高いスループットと短い停止時間を両立したＧＣ処理を行うことができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施の形態１の計算機システムの構成ブロック図である。
【図２】本発明の第１の実施の形態のＧＣ処理の動作の概要を示す説明図である。
【図３】本発明の第１の実施の形態の閾値管理テーブルの一例の説明図である。
【図４】本発明の第１の実施の形態のメモリ残量管理テーブルの一例の説明図である。
【図５Ａ】本発明の第１の実施の形態の非ゴミオブジェクト情報管理テーブルの一例を示す説明図である。
【図５Ｂ】本発明の第１の実施の形態の非ゴミオブジェクト情報管理テーブル１２４をヒープ領域１１２に適用した例を示すメモリマップである。
【図６】本発明の第１の実施の形態のＧＣ開始条件判定処理のフローチャートである。
【図７】本発明の第１の実施の形態の非ゴミオブジェクト情報管理テーブルへの判定結果格納処理のフローチャートである。
【図８】本発明の第１の実施の形態の送信開始条件判定処理のフローチャートである。
【図９】本発明の第１の実施の形態の判定結果を基にした非ゴミオブジェクトへの印付加処理のフローチャートである。
【図１０】本発明の第２の実施の形態の計算機システムの構成ブロック図である。
【図１１】本発明の第２の実施の形態のＧＣ処理の動作の概要を示す説明図である。
【図１２】本発明の第２の実施の形態のＧＣ制御閾値テーブルの一例の説明図である。
【図１３】本発明の第２の実施の形態のＧＣ開始条件判定処理のフローチャートである。
【図１４】本発明の実施の形態３の回収対象領域増加処理の動作の概要を示す説明図である。
【図１５】本発明の第３の実施の形態のＧＣ処理の動作の概要を示す説明図である。
【図１６】本発明の第３の実施の形態の計算機システムの構成ブロック図である。
【図１７】本発明の第３の実施の形態の回収対象領域閾値管理テーブルの一例の説明図である。
【図１８】本発明の第３の実施の形態のオブジェクト移動先管理テーブルの一例の説明図である。
【図１９】本発明の第３の実施の形態の回収対象領域増加処理のフローチャートである。
【図２０】本発明の第４の実施の形態の計算機システムの構成ブロック図である。
【図２１】本発明の第４の実施の形態のＧＣ処理の動作の概要を示す説明図である。
【発明を実施するための形態】
【００１５】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００１６】
計算機システム１００上で動作するプログラムとして、Ｊａｖａ（登録商標、以下同じ）ＶＭ１１１（１１１Ａ及び１１１Ｂ）を使用し、ＪａｖａＶＭ１１１のガベージコレクション（ＧＣ）処理をＪａｖａＶＭ１１１の内部での監視による所定の契機に基づいて開始する場合の実施の形態について、図面を用いて詳細に説明する。
【００１７】
図１は、本実施形態の計算機システムの構成を示すブロック図である。図１に示す様に、本実施形態の計算機システム１００は、ＣＰＵ１８１とメモリ１８２と入出力装置１８３を備える。なお、計算機システム１００は、物理計算機システムである。
【００１８】
メモリ１８２上にはハイパーバイザー１７０が格納される。ハイパーバイザー１７０は、ＣＰＵ１８１により実行されることで、メモリ１８２上に仮想マシン１１０（１１０Ａ及び１１０Ｂ）を構成する。ハイパーバイザー１７０は、仮想マシン１１０に対するＣＰＵ１８１、メモリ１８２および入出力装置１８３の割り当てを制御する。上記の割り当ての設定は予め管理者等によりなされる。仮想マシン１１０は、割り当てられたＣＰＵ１８１、メモリ１８２および入出力装置１８３により、物理計算機システムのエミュレーションを行う。また、仮想マシン１１０は、ハイパーバイザー１７０により一意な値が設定された仮想マシン識別子１１８（１１８Ａ及び１１８Ｂ）を持つ。
【００１９】
ハイパーバイザー１７０は、仮想マシンコピー部１７１を含む。仮想マシンコピー部１７１は、ハイパーバイザー１７０が管理する仮想マシン１１０のコピーを生成する処理部である。仮想マシンコピー部１７１によるコピー処理は、ライブマイグレーション機能によるコピー生成後に、コピー元の仮想マシンを消去しないことで実現可能である。仮想マシンのコピー生成後に、仮想マシンコピー部１７１は、コピー先の仮想マシンの仮想マシン識別子１１８をコピー元の仮想マシンの仮想マシン識別子１１８とは異なる値に設定する。上記仮想マシン識別子１１８以外の点では、生成された仮想マシンのコピーは、コピー元の仮想マシンと全く同じ構成要素を含む。また、コピーされた仮想マシンの各構成要素は、コピーが完了した時点での対応するコピー元の構成要素と全く同じ状態で動作を開始する。仮想マシンコピー部１７１によるコピー処理の完了は、仮想マシンコピー部１７１にコピー元仮想マシンに関する処理状況を問い合わせることで把握可能である。あるいは、仮想マシンコピー部１７１は、コピー処理完了後に、コピー元仮想マシンに対して割り込み等により処理完了を通知してもよい。
【００２０】
仮想マシン１１０Ｂは、ＪａｖａＶＭ１１１ＡのＧＣ処理中に、仮想マシンコピー部１７１により仮想マシン１１０Ａをコピーすることで生成された仮想マシンである。
【００２１】
なお、仮想マシン１１０Ａの数は必ずしも一台である必要はなく、メモリ１８２上に複数台の仮想マシン１１０Ａが存在していてもよい。
【００２２】
仮想マシン１１０Ａ上では、オペレーティングシステム１６０ＡとＪａｖａＶＭ１１１Ａが動作する。ＪａｖａＶＭ１１１Ａは、ヒープ領域１１２Ａ、参照ルート１１４Ａ、Ｊａｖａプログラム実行部１１５Ａ、ＧＣ処理部１２０Ａ、および監視部１３０Ａから構成される。ＪａｖａＶＭ１１１Ａ上では、入出力装置１８３から読み込まれたＪａｖａプログラム１１３がＪａｖａプログラム実行部１１５により実行される。Ｊａｖａプログラム実行部１１５は、Ｊａｖａプログラム１１３の処理実行中に必要となったオブジェクトを、ヒープ領域１１２Ａ中に確保する。また、Ｊａｖａプログラム実行部１１５Ａ、１１５Ｂは、参照ルート１１４（１１４Ａ及び１１４Ｂ）にヒープ領域１１２Ａ、１１２Ｂ中のオブジェクトへの参照を格納し、当該オブジェクトへの操作を行う。
【００２３】
また、仮想マシン１１０Ｂ上では、オペレーティングシステム１６０ＢとＪａｖａＶＭ１１１Ｂが動作する。ＪａｖａＶＭ１１１Ｂは、ヒープ領域１１２Ｂ、参照ルート１１１４Ｂ、Ｊａｖａプログラム実行部１１５Ｂ、ＧＣ処理部１２０Ｂ、および監視部１３０Ｂから構成される。
【００２４】
また、仮想マシン１１０Ａと仮想マシン１１０Ｂの監視部１３０Ａ、１３０Ｂの総称を監視部１３０とし、他の機能部位の総称も同様にして添え字「Ａ」または「Ｂ」のない符号で表すものとする。
【００２５】
本発明は、Ｊａｖａプログラム実行部１１５によりヒープ領域１１２Ａ中に確保されたオブジェクトの開放を行うＧＣ処理に適用される。仮想マシン１１０ＡのＧＣ処理はＧＣ処理部１２０Ａ、１２０Ｂおよび監視部１３０Ａ、１３０Ｂにより実行される。ＧＣ処理部１２０Ａは、ＧＣ処理開始部１２１、ゴミオブジェクト判定部１２２Ａ、ゴミオブジェクト回収部１２３、ゴミオブジェクト情報送信部１２５Ａ、ゴミオブジェクト情報受信部１２６、および非ゴミオブジェクト情報管理テーブル１２４Ａから構成される。なお、非ゴミオブジェクト情報は、ヒープ領域１１２に格納されているオブジェクトのうち、Ｊａｖａプログラム実行部１１５によって実行中または実行予定（あるいは使用予定）のオブジェクトに関する情報である。一方、ゴミオブジェクトは実行予定や使用予定がなくヒープ領域１１２から削除可能なオブジェクトを指す。
【００２６】
仮想マシン１１０ＢのＧＣ処理部１２０Ｂは、ゴミオブジェクト判定部１２２Ｂ、ゴミオブジェクト情報送信部１２５Ｂ、および非ゴミオブジェクト情報管理テーブル１２４Ｂから構成される。なお、仮想マシン１１０Ａの複製である仮想マシン１１０ＢにはＧＣ処理開始部１２１、ゴミオブジェクト回収部１２３及びゴミオブジェクト情報受信部１２６もコピーされるが、各機能は停止させてあるため図示は省略する。
【００２７】
仮想マシン１１０ＡのＧＣ処理開始部１２１は、ハイパーバイザ１７０の仮想マシンコピー部１７１に要求して仮想マシン１１０Ａのコピーを作成し、ＧＣ処理を開始する処理部である。
【００２８】
ゴミオブジェクト判定部１２２Ａ、１２２Ｂは、ヒープ領域１１２Ａ、１１２Ｂ中の非ゴミオブジェクトに印をつける処理部である。ゴミオブジェクト回収部１２３は、ヒープ領域１１２Ａ中の印のついていないオブジェクトを回収する処理部である。
【００２９】
仮想マシン１１０Ｂのゴミオブジェクト情報送信部１２５Ｂは、ヒープ領域１１２Ｂ中の印のついているオブジェクトの情報を、仮想マシン１１０Ａのゴミオブジェクト情報受信部１２６に送信する処理部である。仮想マシン１１０Ａのゴミオブジェクト情報受信部１２６は、仮想マシン１１０Ｂのゴミオブジェクト情報送信部１２５Ｂから受信した非ゴミオブジェクトの情報を基にヒープ領域１１２Ａ中の非ゴミオブジェクトに印をつける処理部である。非ゴミオブジェクト情報管理テーブル１２４Ａ、１２４Ｂは、非ゴミオブジェクトの情報を格納するテーブルであり、ゴミオブジェクト情報送信部１２５Ｂおよびゴミオブジェクト情報受信部１２６による送受信処理および印付加処理の際に使用される。監視部１３０Ａ、１３０Ｂは、ＧＣ処理および非ゴミオブジェクト情報送信処理の開始条件を判定し、処理開始の契機を通知する処理部である。
【００３０】
図２は、本第１実施形態におけるＧＣ処理の概要を示す図である。
【００３１】
まず、計算機システム１００では、管理者またはユーザの指令によって、ハイパーバイザ１７０が仮想マシン１１０Ａをメモリ１８２に生成し、仮想マシン１１０ＡでＯＳ１６０Ａを起動してからＪａｖａＶＭ１１１Ａを実行する。
【００３２】
ＧＣ処理は、所定の契機（Ｓ１０１）で、ＧＣ処理開始部１２１Ａが、仮想マシン識別子１１８Ａの値を確認し（Ｓ１０９）、ハイパーバイザー１７０の仮想マシンコピー部１７１に仮想マシン１１０Ａのコピーを要求することで開始される（Ｓ１０２）。コピーの生成要求を受けた仮想マシンコピー部１７１は新たに仮想マシン１１０Ａをコピーした仮想マシン１１０Ｂを生成する。上記ＧＣ開始の契機は監視部１３０Ａにより判定され（Ｓ１０１）、ＧＣ処理開始部１２１Ａは監視部１３０ＡがＧＣ開始フラグをセットしていればＧＣを開始する。
【００３３】
ＧＣ処理開始部１２１Ａは仮想マシンコピー部１７１に定期的に問い合わせを行い、仮想マシン１１０Ａのコピー処理が完了したと判定されるまで待機する。この間、Ｊａｖａプログラム実行部１１５ＡによるＪａｖａプログラム１１３の実行は継続される。仮想マシン１１０Ｂの生成後、仮想マシン１１０Ａと仮想マシン１１０Ｂは同時に動作する。
【００３４】
まず、各仮想マシン１１０上で、ＧＣ処理開始部１２１が仮想マシン識別子１１８を再確認する（Ｓ１１０）。仮想マシンコピー部１７１により、仮想マシン１１０Ｂの仮想マシン識別子１１８Ｂは仮想マシン１１０Ａの仮想マシン識別子１１８Ａとは異なる値に設定されるため、再確認した仮想マシン識別子１１８の値をＳ１０９ステップで確認した仮想マシン識別子１１８Ａの値と比較することで、各ＧＣ処理開始部１２１は自分が動作している仮想マシン１１０を識別することが可能である。これに基づき、各ＧＣ処理開始部１２１Ａ、１２１Ｂは、それぞれ異なる処理を行う。
【００３５】
仮想マシン１１０Ｂでは、ＧＣ処理開始部１２１ＢがＪａｖａプログラム実行部１１５Ｂを停止させ、ゴミオブジェクト判定部１２２Ｂを起動させる。ゴミオブジェクト判定部１２２Ｂは、ヒープ領域１１２Ｂに対するゴミオブジェクト判定処理を行う（Ｓ２０３）。ゴミオブジェクト判定処理は、ゴミオブジェクト判定部１２２Ｂが参照ルート１１４Ｂから開始してヒープ領域１１２Ｂ上のオブジェクトの参照関係を辿り、辿ったオブジェクトに印を付けてゆくことで行われる。この処理は、参照ルート１１４Ｂから辿れるヒープ領域１１２Ｂ中の全てのオブジェクトに印を付け終わるまで続けられる。ゴミオブジェクト判定処理の終了後、仮想マシン１１０Ｂでは、ゴミオブジェクト情報送信部１２５Ｂが、ヒープ領域１１２Ｂ中の各オブジェクトにつけられた印を基に、非ゴミオブジェクト情報を非ゴミオブジェクト情報管理テーブル１２４Ｂに格納する（Ｓ２０４）。
【００３６】
仮想マシン１１０Ｂによる上記ゴミオブジェクト判定処理の間、仮想マシン１１０Ａでは、Ｊａｖａプログラム実行部１１５によるＪａｖａプログラム１１３の実行が継続される（Ｓ１０３）。
【００３７】
仮想マシン１１０Ｂでは、上記非ゴミオブジェクト情報の非ゴミオブジェクト情報管理テーブル１２４Ｂへの格納処理後、所定の契機で、ゴミオブジェクト情報送信部１２５Ｂが仮想マシン１１０Ａに非ゴミオブジェクト情報管理テーブル１２４Ｂの内容を送信する（Ｓ２０６）。
【００３８】
仮想マシン１１０Ａでは、ゴミオブジェクト情報受信部１２６が仮想マシン１１０Ｂからの非ゴミオブジェクト情報管理テーブル１２４Ｂの内容を受信して（Ｓ１０６）、テーブル中の判定結果を基に、ヒープ領域１１２Ａ中の非ゴミオブジェクトに印をつける（Ｓ１０７）。上記ステップＳ２０６の送信開始の契機は監視部１３０Ｂにより判定され（Ｓ２０５）、ゴミオブジェクト情報送信部１２５Ｂは監視部１３０Ｂが送信開始フラグをセットしていれば送信を開始する。その後、仮想マシン１１０Ａでは、ゴミオブジェクト回収部１２３が、仮想マシン１１０Ｂから受信した上記の印に基づいてヒープ領域１１２Ａ中のゴミオブジェクトを回収する（Ｓ１０８）。
【００３９】
上記ＧＣ開始の契機、および送信開始契機の判定を行う監視部１３０（１３０Ａ、１３０Ｂ）は、メモリ残量監視部１３２（１３２Ａ及び１３２Ｂ）、実行系処理負荷監視部１３３（１３３Ａ及び１３３Ｂ）、別処理系用リソース監視部１３４（１３４Ａ及び１３４Ｂ）および閾値管理テーブル１３１（１３１Ａ及び１３１Ｂ）から構成され、構成要素である各監視部が取得し、算出した値を予め設定した閾値管理テーブル１３１中の閾値と比較することで、契機を決定する。監視部１３０による開始契機判定により、適切な時点でＪａｖａＶＭ１１１ＡにＧＣ開始処理およびゴミオブジェクト回収処理を実行させることが可能となる。
【００４０】
仮想マシン１１０Ａ中で、監視部１３０Ａは、Ｊａｖａプログラム実行部１１５Ａがヒープ領域１１２Ａにオブジェクトを確保する際に呼び出されてＧＣ開始条件の判定を行う。あるいは、Ｊａｖａプログラム実行部１１５Ａは、一定の時間間隔で、監視部１３０Ａを呼び出してもよい。仮想マシン１１０Ｂ中で、監視部１３０Ｂは、仮想マシン１１０Ｂのゴミオブジェクト情報送信部１２５Ｂにより、一定の時間間隔で呼び出されて送信開始条件の判定を行う。
【００４１】
図３は、本第１実施形態の仮想マシン１１０Ａ及び仮想マシン１１０Ｂにそれぞれ設定される閾値管理テーブル１３１のデータ形式の一例を示す図である。閾値管理テーブル１３１は、閾値種別フィールド２１１と閾値フィールド２１２から構成される。閾値種別フィールド２１１は、設定される閾値の種別を格納する。閾値フィールド２１２は、その閾値を格納する。
【００４２】
図示の例では、ＧＣ開始条件用のメモリ残量閾値と、送信開始条件用のメモリ残量閾値と、を仮想マシン１１０Ａに割り当てられたヒープ領域１１２Ａの記憶領域の空き容量で指定する。また、ＧＣ開始条件用のメモリ残量減少率閾値と、送信開始条件用のメモリ残量減少率閾値と、を仮想マシン１１０Ａに割り当てられたヒープ領域１１２Ａの空き容量の減少率で指定する。なお、減少率は単位時間当たりの空き容量で示し、例えば、ＭＢ/secである。また、ＧＣ開始条件用の実行系ＣＰＵ使用率閾値と、送信開始条件用の実行系ＣＰＵ使用率閾値を、仮想マシン１１０Ａが利用するＣＰＵ１８１の使用率で設定し、ＧＣ開始条件用の別処理系用ＣＰＵ使用率閾値と、送信開始条件用の別処理系用ＣＰＵ使用率閾値とを仮想マシン１１０Ｂが利用するＣＰＵ１８１の使用率で設定し、ＧＣ開始条件用の別処理系用メモリ使用率閾値と、送信開始条件用の別処理系用メモリ使用率閾値とを、仮想マシン１１０Ｂにおけるヒープ領域１１２Ｂの使用率として予め設定する。なお、仮想マシン１１０Ｂの閾値管理テーブル１３１Ｂは、仮想マシン１１０Ａの複製である。
【００４３】
図５Ａは、本第１実施形態の非ゴミオブジェクト情報管理テーブル１２４のデータ形式の一例を示し、図５Ｂは非ゴミオブジェクト情報管理テーブル１２４をヒープ領域１１２に適用した例を示すメモリマップである。仮想マシン１１０Ｂ中の非ゴミオブジェクト情報管理テーブル１２４Ｂは、ゴミオブジェクト判定部１２２Ｂによる、判定処理の結果を格納する。仮想マシン１１０Ａ中の非ゴミオブジェクト情報管理テーブル１２４Ａは、仮想マシン１１０Ａのゴミオブジェクト情報受信部１２６が、仮想マシン１１０Ｂのゴミオブジェクト情報送信部１２５Ｂから受信した非ゴミオブジェクト情報を格納する。
【００４４】
非ゴミオブジェクト情報管理テーブル１２４は、先頭アドレスフィールド２３１と終端アドレスフィールド２３２を含む。先頭アドレスフィールド２３１は、各非ゴミオブジェクトの先頭のアドレスを格納する。終端アドレスフィールド２３２は、その非ゴミオブジェクトの終端のアドレスを格納する。
【００４５】
非ゴミオブジェクト情報管理テーブル１２４の要素数は可変であり、その数はヒープ領域１１２中の非ゴミオブジェクトの個数＋１に等しい。例えば、図５Ｂに示されているように、ヒープ領域１１２中に、非ゴミオブジェクト３０１と非ゴミオブジェクト３０２と非ゴミオブジェクト３０３の３つの非ゴミオブジェクトが存在した場合、非ゴミオブジェクト情報管理テーブル１２４の要素数は４であり、図５Ａの要素Ｅ３０１、および要素Ｅ３０２、および要素Ｅ３０３は、それぞれ非ゴミオブジェクト３０１、および非ゴミオブジェクト３０２、および非ゴミオブジェクト３０３の先頭のメモリアドレスと終端のメモリアドレスを格納する。非ゴミオブジェクト情報管理テーブル１２４の終端を示すため、最終要素Ｅ３００は先頭アドレス、終端アドレスともに０とする。
【００４６】
本実施形態において、ゴミオブジェクト判定部１２２Ｂが行うゴミオブジェクト判定処理は、上述したようにゴミオブジェクト判定部１２２Ｂがヒープ領域１１２Ｂを探索し、オブジェクトの参照関係から使用中のオブジェクトを非ゴミオブジェクトと判定し、非ゴミオブジェクトのヒープ領域１１２Ｂの記憶領域（先頭アドレスと終端アドレス）を決定する処理であり、非ゴミオブジェクト以外の領域がゴミとして判定される。
【００４７】
次に、図２のステップ中で、特に発明で特徴的であるステップＳ１０１、Ｓ２０４、Ｓ２０５、Ｓ１０７について、フローチャートを用いて説明する。
【００４８】
まず、図２のＧＣ開始条件判定処理Ｓ１０１について、処理の詳細を図６のフローチャートを用いて説明する。
【００４９】
仮想マシン１１０Ａの監視部１３０Ａは、まずメモリ残量監視部１３２ＡにＧＣ開始条件判定を要求する（Ｓ３３０）。メモリ残量監視部１３２Ａは、ヒープ領域１１２Ａのメモリ残量を取得し、メモリ残量が閾値管理テーブル１３１Ａに設定された閾値以下であればＧＣ開始フラグを有効な状態（例えば「１」）に設定する。また、メモリ残量監視部１３２Ａは、ヒープ領域１１２Ａの残量の減少率も算出し、減少率が閾値管理テーブル１３１Ａに設定された閾値以上であればＧＣ開始フラグを同様に設定する。各閾値の取得は、閾値管理テーブル１３１Ａを参照することで行う。減少率の算出には、メモリ残量監視テーブル１３５Ａを用いる。具体的には、メモリ残量監視部１３２Ａは、ヒープ領域１１２Ａのメモリ残量を取得するたびに、メモリ残量監視テーブル１３５Ａにそのときの時間と残量を格納する。減少率の算出は、現在の残量と以前の残量の差分を、現在の時間と以前の時間の差分で割り、単位時間当たりの残量の変化を求めることで行う。メモリ残量監視部１３２Ａにより、空きメモリ残量の不足によりＪａｖａＶＭ１１１Ａの実行が困難になる前に、ＧＣ処理を開始することが可能となる。
【００５０】
次に、監視部１３０Ａは、実行系処理負荷監視部１３３ＡにＧＣ開始条件判定を要求する（Ｓ３３１）。実行系処理負荷監視部１３３Ａは、実行系である仮想マシン１１０ＡのＪａｖａＶＭ１１１ＡによるＣＰＵ１８１の使用率をハイパーバイザ１７０から取得し、使用率が閾値以下であればＧＣ開始フラグを有効な状態（例えば「１」）に設定する。ＣＰＵ１８１の使用率の取得は、実行系処理負荷監視部１３３Ａが、ＣＰＵ１８１の仮想マシン１１０Ａへのリソースの割り当てを管理しているハイパーバイザー１７０と通信することで行う。各閾値の取得は、閾値管理テーブル１３１Ａを参照することで行う。実行系処理負荷監視部１３３Ａにより、ＣＰＵ１８１の処理能力がＪａｖａＶＭ１１１Ａの処理に余裕がある時点で、仮想マシン１１０Ａのコピー生成処理を行うことが可能となる。
【００５１】
なお、ハイパーバイザ１７０は、仮想マシン１１０Ａ、１１０Ｂにそれぞれ仮想ＣＰＵ（または論理ＣＰＵ）を割り当てて、仮想ＣＰＵの使用率をＣＰＵ１８１の使用率として応答する。この場合は、仮想マシン１１０Ａ、１１０Ｂの仮想ＣＰＵの使用率を便宜上ＪａｖａＶＭ１１１のＣＰＵ使用率として利用する。あるいは、ハイパーバイザ１７０から取得した仮想マシンの仮想ＣＰＵの使用率に、ＯＳ１６０Ａ、１６０Ｂから取得したＪａｖａＶＭ１１１のＣＰＵ使用率を乗じて、実際にＪａｖａＶＭ１１１が使用しているＣＰＵ使用率をもとめても良い。
【００５２】
最後に、仮想マシン１１０Ａの監視部１３０Ａは、別処理系用リソース監視部１３４ＡにＧＣ開始条件判定を要求する（Ｓ３３２）。別処理系用リソース監視部１３４Ａは、仮想マシン１１０ＢにおけるＣＰＵ１８１およびメモリ１８２（ヒープ領域１１２Ｂ）の使用率を取得し、ＣＰＵ１８１の使用率またはメモリ使用率が閾値（別処理系のＣＰＵ処理系閾値、別処理系のメモリ使用率閾値）以下であればＧＣ開始フラグを設定する。仮想マシン１１０Ｂの各使用率の取得は、別処理系用リソース監視部１３４Ａが、ＣＰＵ１８１およびメモリ１８２を管理しているハイパーバイザー１７０と通信を行うことで行う。閾値の取得は、閾値管理テーブル１３１Ａを参照することで行う。別処理系用リソース監視部１３４Ａにより、別処理系である仮想マシン１１０Ｂを生成、実行させる際に必要となる計算機リソースに余裕がある時点で、ＧＣ処理を開始することが可能となる。別処理系用リソース監視部１３４Ａによる制御は、特にハイパーバイザー１７０上で複数のＪａｖａＶＭ１１１が動作しており、全ＪａｖａＶＭ１１１が同時に別処理系を生成、実行するのに十分な計算機リソースが計算システム１００にない場合に有効である。
【００５３】
上記図６のステップＳ３３０〜Ｓ３３２の要求の順序は異なっていてもよく、あるいは複数の要求を並列に出してもよい。
【００５４】
図４は、本第１実施形態のメモリ残量管理テーブル１３５（１３５Ａ、１３５Ｂ）のデータ形式の一例を示す図である。メモリ残量管理テーブル１３５（１３５Ａ、１３５Ｂ）は、各仮想マシン１１０Ａ、１１０Ｂのメモリ残量監視部１３２（１３２Ａ、１３２Ｂ）によってヒープ領域１１２Ａ、１１２Ｂの空き容量（記憶領域の残量）が記録、参照される値を格納する。
【００５５】
メモリ残量管理テーブル１３５は、時刻フィールド２２１と残量フィールド２２２を含む。時刻フィールド２２１は、メモリ残量監視部１３５がメモリ残量管理テーブル１３５にヒープ領域１１２Ａ、１１２Ｂの空き容量の値を記録した時刻を格納する。残量フィールド２２２は、時刻フィールド２２１の時点でのヒープ領域１１２（１１２Ａ、１１２Ｂ）のメモリ残量を格納する。
【００５６】
次に、図２の非ゴミオブジェクト情報格納処理Ｓ２０４について説明する。非ゴミオブジェクト情報の格納処理では、仮想マシン１１０Ｂのゴミオブジェクト情報送信部１２５Ｂが、ヒープ領域１１２Ｂ中の全てのオブジェクトを先頭から順に辿り、印がついているオブジェクトの情報を非ゴミオブジェクト情報管理テーブル１２４Ｂに格納する。この処理の詳細を図７のフローチャートを用いて説明する。
【００５７】
まず、ゴミオブジェクト情報送信部１２５Ｂは、ヒープ領域１１２Ｂ中の先頭のオブジェクトを取得し、当該オブジェクトの情報を変数ｘに格納する（Ｓ４５１）。
【００５８】
つづくステップＳ４５４で、ゴミオブジェクト情報送信部１２５Ｂは、ヒープ領域１１２Ｂ中に未処理のオブジェクトがあることを判定する。未処理のオブジェクトがある場合、ゴミオブジェクト情報送信部１２５Ｂは、ステップＳ４６０に移行する。未処理のオブジェクトがなければ、ゴミオブジェクト情報送信部１２５Ｂは、図７のフローチャートの処理を終了する。
【００５９】
ステップＳ４６０では、ゴミオブジェクト情報送信部１２５Ｂは、変数ｘに格納したオブジェクトの情報について、ゴミオブジェクト判定部１２２Ｂによる印の有無を調べる。
【００６０】
つづくステップＳ４６１で、変数ｘのオブジェクトに予め設定した印がある場合には、ゴミオブジェクト情報送信部１２５Ｂは、ステップＳ４６４に移行する。印がなければ、ゴミオブジェクト情報送信部１２５Ｂは、ステップＳ４６７に移行する。
【００６１】
ステップＳ４６４では、ゴミオブジェクト情報送信部１２５Ｂは、上記印の有無から非ゴミオブジェクトであると判定した当該オブジェクトの先頭アドレスと終端アドレスを、非ゴミオブジェクト情報管理テーブル１２４Ｂに格納し、ステップＳ４６７に移行する。
【００６２】
ステップＳ４６７では、ゴミオブジェクト情報送信部１２５Ｂは、変数ｘの値をヒープ領域１１２Ｂ中のｘの次のオブジェクトに更新し、ステップＳ４５４に移行する。
【００６３】
以後、ヒープ領域１１２Ｂ中の全てのオブジェクトについて上記処理が終わるまで、ゴミオブジェクト情報送信部１２５Ｂは、ステップＳ４５４〜ステップＳ４６７のループを繰り返す。
【００６４】
次に、図２の判定結果送信開始条件判定処理Ｓ２０５について、詳細を図８のフローチャートを用いて説明する。
【００６５】
仮想マシン１１０Ｂの監視部１３０Ｂは、まずメモリ残量監視部１３２Ｂに送信開始条件判定を要求する（Ｓ３５０）。メモリ残量監視部１３２Ｂは、仮想マシン１１０Ａと通信を行って、ヒープ領域１１２Ａのメモリ残量を取得し、仮想マシン１１０Ａのメモリ１８２の残量が閾値以下であれば送信開始フラグを有効な状態（例えば「１」）に設定する。また、監視部１３０Ｂはヒープ領域１１２Ａの残量の減少率も仮想マシン１１０Ａから取得し、減少率が閾値以上であれば送信開始フラグを有効な状態に設定する。ヒープ領域１１２Ａの残量および残量の減少率の取得は、メモリ残量監視部１３２Ｂが、仮想マシン１１０Ａのメモリ残量監視部１３２Ａと通信することによって行う。各閾値の取得は、閾値管理テーブル１３１Ｂを参照することで行う。メモリ残量監視部１３２Ｂにより、ヒープ領域１１２Ａの空きメモリ残量の不足によりＪａｖａＶＭ１１１Ａの実行が困難になる前に、送信開始フラグを有効な状態に設定して判定結果の送信を開始し、メモリの空き領域の回収を行うことが可能となる。
【００６６】
次に、監視部１３０Ｂは、実行系処理負荷監視部１３３ＢにＧＣ開始条件判定を要求する（Ｓ３５１）。実行系処理負荷監視部１３３Ｂは、ＪａｖａＶＭ１１１ＡによるＣＰＵ１８１の使用率を仮想マシン１１０Ａから取得し、使用率が閾値以下であれば送信開始フラグを有効な状態（例えば「１」）に設定する。ＣＰＵ１８１の使用率の取得は、上述したように実行系処理負荷監視部１３３Ｂが、ハイパーバイザー１７０と通信することで仮想ＣＰＵの使用率を取得する。ＣＰＵ１８１の使用率の閾値の取得は、実行系処理負荷監視部１３３Ｂが閾値管理テーブル１３１Ｂを参照することで行う。実行系処理負荷監視部１３３Ｂにより、仮想マシン１１０ＡでＪａｖａＶＭ１１１Ａの処理に余裕がある時点で、ゴミオブジェクト情報の受信処理およびゴミオブジェクトの回収処理を行うことが可能となる。
【００６７】
最後に、監視部１３０Ｂは、別処理系用リソース監視部１３４ＢにＧＣ開始条件判定を要求する（Ｓ３５２）。別処理系用リソース監視部１３４Ｂは、ＣＰＵ１８１およびメモリ１８２の使用率を取得し、使用率が閾値以上であれば送信開始フラグを有効な状態（例えば「１」）に設定する。ＣＰＵ１８１およびメモリ１８２の使用率の取得は、処理系用リソース監視部１３４Ｂが、ハイパーバイザー１７０と通信を行うことで上記と同様に行う。ＣＰＵ１８１およびメモリ１８２の使用率の閾値の取得は、閾値管理テーブル１３１Ｂを参照することで行う。
【００６８】
別処理系用リソース監視部１３４Ｂにより、仮想マシン１１０Ｂの生成と、実行に必要な計算機リソースが逼迫した時点で送信処理を開始し、仮想マシン１１０Ｂが使用していたＣＰＵ１８１およびメモリ１８２をハイパーバイザー１７０に返却することが可能となる。
【００６９】
監視部１３０Ａ同様、監視部１３０Ｂの上記ステップＳ３５０〜Ｓ３５２の要求の順序は異なっていてもよく、あるいは複数の要求を並列に出してもよい。
【００７０】
次に、図２の非ゴミオブジェクトへの印付加処理Ｓ１０７について説明する。非ゴミオブジェクトへの印付加処理は、ゴミオブジェクト情報受信部１２６がヒープ領域１１２Ａ中の全てのオブジェクトを先頭から順に辿り、非ゴミオブジェクトテーブル１２４Ａ中に登録されているオブジェクトに対して印をつける。この処理の詳細を図９のフローチャートを用いて説明する。
【００７１】
まず、ゴミオブジェクト情報受信部１２６Ａは、ヒープ領域１１２Ａ中の先頭のオブジェクトを取得し、オブジェクトの情報を変数ｘに格納する（Ｓ５５１）。
【００７２】
つづくステップＳ５５４で、ゴミオブジェクト情報受信部１２６は、メモリ領域（ヒープ領域１１２Ａ）中に未処理のオブジェクトがあるか否かを判定する。未処理のオブジェクトがある場合は、ゴミオブジェクト情報受信部１２６は、ステップＳ５６０に移行する。未処理のオブジェクトがなければ、ゴミオブジェクト情報受信部１２６は、図９のフローチャートの処理を終了する。
【００７３】
ステップＳ５６０では、ゴミオブジェクト情報受信部１２６は、変数ｘに格納したオブジェクトが非ゴミオブジェクト情報管理テーブル１２４Ａに格納されているかどうかを調べる。
【００７４】
つづくステップＳ５６１で、変数ｘに格納したオブジェクトが非ゴミオブジェクト情報管理テーブル１２４Ａに格納されていた場合には、ゴミオブジェクト情報受信部１２６は、ステップＳ５６４に移行する。格納されていなければ、ゴミオブジェクト情報受信部１２６は、ステップＳ５６７に移行する。
【００７５】
ステップＳ５６４では、ゴミオブジェクト情報受信部１２６は、非ゴミオブジェクトであると判定した当該オブジェクトに印をつけ、ステップＳ５６７に移行する。
【００７６】
ステップＳ５６７では、ゴミオブジェクト情報受信部１２６は、変数ｘの値をヒープ領域１１２Ａ中の変数ｘの次のオブジェクトに更新し、ステップＳ５５４に移行する。
【００７７】
以後、ヒープ領域１１２Ａ中の全てのオブジェクトについて上記処理が終わるまで、ゴミオブジェクト情報受信部１２６は、ステップＳ５５４〜ステップＳ５６７のループを繰り返す。
【００７８】
以上により、本第１実施形態の計算機システム１００では、ＪａｖａＶＭ１１１Ａを実行する仮想マシン１１０Ａ（第１の処理系）の代わりに、仮想マシン１１０Ａの複製である仮想マシン１１０Ｂ（第２の処理系＝別処理系）を生成し、仮想マシン１１０ＢのＪａｖａＶＭ１１１Ｂのヒープ領域１１２Ｂでゴミオブジェクト判定処理を行うことにより、仮想マシン１１０Ａで実行されるＪａｖａＶＭ１１１Ａで高スループットを維持しながら短いＧＣ停止時間でＧＣ処理を実現することが可能である。
【００７９】
そして、ＧＣ処理の開始の契機（第１の契機）をヒープ領域１１２Ａのメモリ残量（ＪａｖａＶＭ１１１Ａが使用可能な空き領域の量）が閾値以下、またはメモリ残量の減少率が閾値以上とすることで、空きメモリ残量の不足によりＪａｖａＶＭ１１１Ａの実行が困難になる前に、ＧＣ処理を開始することが可能となる。
【００８０】
さらに、ＪａｖａＶＭ１１１Ａを実行する仮想マシン１１０Ａとは別処理系の仮想マシン１１０Ｂでヒープ領域の非ゴミオブジェクトの判定を行うことで、仮想マシン１１０Ａの処理負荷に影響を与えることなくゴミオブジェクトの判定処理を実施できる。
【００８１】
そして、仮想マシン１１０Ｂから非ゴミオブジェクトの判定結果を仮想マシン１１０Ｂに送信する契機（第２の契機）を仮想マシン１１０Ａ（実行系）のＣＰＵ使用率が閾値以下、または仮想マシン１１０Ａのヒープ領域１１２Ａのメモリ残量が閾値以下となった時点とすることで、ＪａｖａＶＭ１１１Ａの実行が困難になる前、またはＪａｖａＶＭ１１１Ａの実行に影響を与えないＣＰＵ使用率でＧＣ処理を実行することが可能となる。
【００８２】
＜第２実施形態＞
次に、本発明の第２の実施形態を示す。第２の実施形態は、計算機システム１００上で動作するプログラムとしてＪａｖａＶＭ１１１を使用し、ＪａｖａＶＭ１１１のＧＣ処理をＪａｖａＶＭ１１１の外部の処理系からの通知を契機として開始する場合について、図面を用いて詳細に説明する。
【００８３】
本第２実施形態は、図１０に示すように、計算機システム１００上で動作する１台以上の仮想マシン１１０Ａ上のＪａｖａＶＭ１１１に対して、仮想マシン１１０Ａとは異なる仮想マシン上で動作するＧＣ制御用のプログラムからＧＣ処理開始の契機を通知することにより、ゴミオブジェクト判定処理に用いられる計算リソースをＪａｖａＶＭ１１１間で効率的に共有するものである。ＧＣ制御プログラムは、ＧＣ処理を開始することが適切と判断したＪａｖａＶＭ１１１にＧＣ処理開始の契機を通知する。ＧＣ制御プログラムは、ＧＣ処理の開始契機を通知したＪａｖａＶＭ１１１により作成されたコピー仮想マシンのゴミオブジェクト判定処理中は、新たなＧＣ開始契機の通知を行わずに待機し、ＧＣ処理の開始契機を通知したＪａｖａＶＭ１１１からＧＣ終了通知を受けると、ＧＣ開始契機の通知を再開する。以上により、コピー仮想マシン１台分の計算リソースをＪａｖａＶＭ間で効率よく共有することが可能である。
【００８４】
以上の処理は、前記第１実施形態の構成にＧＣ制御プログラムを実行する第３の処理系として仮想マシン１１０Ｃを追加し、前記図２のステップＳ１０１にＪａｖａＶＭ１１１とＧＣ制御プログラムでＧＣ開始命令の送受信を行い、Ｓ１０６ステップ後にＪａｖａＶＭ１１１とＧＣ制御プログラムでＧＣ終了通知の送受信を行うことで実現される。
【００８５】
図１０は、本第２実施形態の計算機システムの構成ブロック図である。なお、メモリ１８２上に二台以上の仮想マシン１１０Ａが存在してもよい。
【００８６】
メモリ１８２には仮想マシン１１０Ｃが格納されており、仮想マシン１１０Ｃ上では、オペレーティングシステム１６０ＣとＧＣ制御プログラム１１９１が動作する。
【００８７】
ＧＣ制御プログラム１１９１は、ＣＰＵ使用率取得部１１９７、メモリ残量取得部１１９８、ＧＣ制御閾値テーブル１１９６、ＧＣ開始命令送信部１１９５、ＧＣ処理終了通知受信部１１９９から構成される。ＣＰＵ使用率取得部１１９７は仮想マシン１１０ＡのＪａｖａＶＭ１１１のＣＰＵ使用率をハイパーバイザ１７０から取得する処理部である。メモリ残量取得部１１９８は仮想マシン１１０Ａのヒープ領域１１２のメモリ残量を取得する処理部である。ＧＣ制御閾値テーブル１１９６は、ＧＣ制御プログラム１１９１によりＧＣ処理を開始させるＪａｖａＶＭ１１１を選択するために参照される各種閾値を格納するテーブルである。ＧＣ開始命令送信部１１９５は、ＧＣ開始命令を送信する処理部である。ＧＣ処理終了通知受信部１１９９は、ＧＣ処理終了通知を受け取る処理部である。
【００８８】
仮想マシン１１０Ａで実行されるＪａｖａＶＭ１１１の監視部１３０に含まれるメモリ残量送信部１１２８は、ヒープ領域１１２のメモリ残量を仮想マシン１１０ＣのＧＣ制御プログラム１１９１に通知する処理部である。ＪａｖａＶＭ１１１のＧＣ処理部１２０に含まれるＧＣ開始命令受信部１１２５は、ＧＣ制御プログラム１１９１によるＧＣ開始通知を受けて、ヒープ領域１１２に対するＧＣ処理を開始する処理部である。その他の構成は、前記第１実施形態と同様であり、図示は省略する。また、図１０において、ＪａｖａＶＭ１１１を実行する仮想マシン１１０Ａを図示したが、図示しない仮想マシンにおいてもＪａｖａＶＭ１１１が実行されているものとする。
【００８９】
図１１は、本実施形態におけるＧＣ処理の概要を示す図である。
【００９０】
まず、ＧＣ制御プログラム１１９１は、所定の条件が成立したときにＧＣ処理を開始するべきＪａｖａＶＭ１１１を選択する（Ｓ１３００）。
【００９１】
次に、ＧＣ制御プログラム１１９１は、選択したＪａｖａＶＭ１１１に対してＧＣ開始命令を送信する（Ｓ１３０１）。ＪａｖａＶＭ１１１を実行する仮想マシン１１０ＡのＧＣ開始命令受信部１１２５は、ＧＣ開始命令を受信すると（Ｓ１１０１）、ハイパーバイザ１７０の仮想マシンコピー部１７１に前記第１実施形態と同様に指令して、仮想マシン１１０Ａのコピーを仮想マシン１１０Ｂとして作成してＧＣ処理を開始する（Ｓ１０２）。以降、仮想マシン１１０ＡにおけるＳ１０９、Ｓ１０２、Ｓ１１０、Ｓ１０３、Ｓ１０６の処理、及び仮想マシン１１０ＢにおけるＳ１１０、Ｓ２０３、Ｓ２０４、Ｓ２０５、Ｓ２０６の処理は前記第１実施形態の処理と同様である。この間、ＧＣ制御プログラム１１９１は待機する（Ｓ１３０２）。
【００９２】
ステップＳ１０６の後、ＪａｖａＶＭ１１１のＧＣ処理終了通知送信部１１２６は、ＧＣ制御プログラム１１９１に対してＧＣ処理終了通知を送信する（Ｓ１１０７）。ＧＣ処理終了通知受信部１１９９がＧＣ処理終了通知を受信すると、ＧＣ制御プログラム１１９１は再度Ｓ１３００の判定処理に戻る。また、ステップＳ１１０７の後にＪａｖａＶＭ１１１で実行されるＳ１０７、Ｓ１０８は前記第１実施形態の処理と同様である。
【００９３】
以下、本第２実施形態と前記第１実施形態との差分箇所について、詳細に説明する。
【００９４】
図１２は、本第２実施形態のＧＣ制御閾値テーブル１１９６のデータ形式の一例を示す図である。ＧＣ制御閾値テーブル１１９６は、ＧＣ開始命令送信部１１９５によって参照される各種の閾値を格納する。ＧＣ制御閾値テーブル１１９６は、本第１実施形態の閾値管理テーブル１３１と同様に、閾値種別フィールド１２１１と閾値フィールド１２１２とを含む。
【００９５】
次に、図１１中のステップ中で、特に本実施形態で特徴的であるステップＳ１３００について、図１３のフローチャートを用いて説明する。
【００９６】
ＧＣ制御処理Ｓ１３００では、ＧＣ制御プログラム１１９１が、仮想マシン１１０Ａ及び図示しない仮想マシンのＪａｖａＶＭ１１１のＣＰＵ使用率およびメモリ残量がどちらも閾値以下のＪａｖａＶＭ１１１の中で、最もメモリ残量が少ないＪａｖａＶＭ１１１に対して、ＧＣ開始命令を送信する。なお、各閾値は、ＧＣ制御閾値テーブル１１９６に予め設定された値である。ＣＰＵ使用率が閾値以下という条件は、ＧＣ処理を開始する余裕があるＪａｖａＶＭ１１１を選択するためのものである。また、メモリ残量が閾値以下という条件は、ＧＣ処理を実行する必要性が高いＪａｖａＶＭ１１１を選択するためのものである。最もメモリ残量が少ないという条件により、特にＧＣ処理の必要性が高いＪａｖａＶＭ１１１にＧＣ処理を開始させることが可能となる。
【００９７】
まず、ＧＣ制御プログラム１１９１は、複数のＪａｖａＶＭ１１１のＣＰＵ使用率およびメモリ残量をそれぞれ取得する。ＣＰＵ使用率は、前記第１実施形態と同様に、ＣＰＵ使用率取得部１１９７がハイパーバイザー１７０と通信することで取得する（Ｓ１５０１）。メモリ残量は、メモリ残量取得部１１９８がＪａｖａＶＭ１１１のメモリ残量送信部１１２８と通信することで取得する（Ｓ１５０２）。
【００９８】
次に、ＧＣ制御プログラム１１９１は、ＣＰＵ使用率およびメモリ残量がともに閾値以下であるＪａｖａＶＭが存在することを判定する。各種閾値はＧＣ制御閾値テーブル１１９６を参照することで取得する（Ｓ１５０３、Ｓ１５０５）。各閾値の条件を満たすＪａｖａＶＭ１１１が存在しない場合には、ＧＣ制御プログラム１１９１は、予め管理者等により設定された一定時間だけ待機した（Ｓ１５０６）後、再度Ｓ１５０１に戻り処理を繰り返す。
【００９９】
ＣＰＵ使用率およびメモリ残量がともに閾値以下であるＪａｖａＶＭ１１１が存在する場合、ＧＣ制御プログラム１１９１は上記条件を満たすＪａｖａＶＭ１１１のなかで最もメモリ残量が少ないＪａｖａＶＭ１１１を、ＧＣ処理開始通知の送信対象のＪａｖａＶＭとして選択する（Ｓ１５０７）。
【０１００】
以上により、本実施形態２の計算機システム１００では、ＧＣ制御プログラム１１９１が１台以上のＪａｖａＶＭ１１１のＧＣ処理を制御することで、ＪａｖａＶＭ１１１間でゴミオブジェクト判定処理に用いられる計算リソースを効率よく共有することが可能である。
【０１０１】
＜第３実施形態＞
次に、本発明の第３の実施形態として計算機システム１００上で動作するプログラムとしてＪａｖａＶＭ１１１を使用し、ＪａｖａＶＭ１１１のＧＣ処理をＪａｖａＶＭ１１１内部での監視による契機に基づいて開始し、さらに回収処理の際にメモリページ単位でゴミオブジェクトを回収する場合の実施例について、図面を用いて詳細に説明する。なお、本第３実施形態では、ＪａｖａＶＭ１１１（またはＯＳ１６０）が、ヒープ領域１１２を所定の記憶領域（例えば、数キロバイト）であるページ単位で管理する。
【０１０２】
メモリページ単位での回収手法によるゴミオブジェクト回収処理の改善と、本発明によるゴミオブジェクト判定処理の改善を組み合わせることで、ゴミオブジェクト判定処理とゴミオブジェクト回収処理の両方を、高いスループットを維持したまま短い停止時間で行うことができ、非常に効果的である。しかし、従来手法でゴミオブジェクト回収をメモリページ単位で行う場合には、ページ内に少しでも非ゴミオブジェクトが存在していると、そのページ全体が回収対象にならないため、メモリの使用効率が悪化するという問題があった。本第３実施形態は、本発明の実施において、ゴミオブジェクト回収処理にメモリページ単位での回収方式を採用し、なおかつ、非ゴミオブジェクトが少量しか存在しないページから非ゴミオブジェクトを移動させる処理を追加することで、ゴミページ量を増やし上記メモリ使用効率の問題も解決した形態である。
【０１０３】
図１４は、本第３実施形態における回収対象領域増加処理によるメモリ使用効率改善効果の例を示すものである。
【０１０４】
ヒープ領域（メモリ領域）１１２は、メモリページ２２１０と、メモリページ２２２０と、メモリページ２２３０を含む。メモリページ２２２０は、領域内に非ゴミオブジェクトを含んでいないページである。メモリページ２２１０は、領域内に非ゴミオブジェクト２２００を含んでいるページである。メモリページ２２３０は、領域内に非ゴミオブジェクト２２００よりも大きいゴミオブジェクト領域を含んでいるページである。回収対象領域増加処理を行わない場合、メモリページ２２２０は回収対象になるが、メモリページ２２１０は非ゴミオブジェクトが存在するため回収対象にならない。
【０１０５】
回収対象領域増加処理は、非ゴミオブジェクト２２００をメモリページ２２３０中のゴミオブジェクト領域に移動させる。これにより、メモリページ２２１０は非ゴミオブジェクトを含まなくなる。よって、メモリページ２２１０も回収対象となり、メモリ（ヒープ領域１１２）の空き領域の連続性を高めて使用効率が向上する。
【０１０６】
図１５は、本第３実施形態におけるＧＣ処理の概要を示したものである。本実施形態では、前記第１実施形態の図２に示した処理ステップ中の非ゴミオブジェクトへの印付加処理（Ｓ１０７）の後に、回収対象領域増加処理（Ｓ２１０８）を行い、その後にゴミオブジェクト回収処理（Ｓ１０８）を行うことで、上記メモリ使用効率の向上を実現する。その他の構成は、前記第１実施形態の図２と同様である。
【０１０７】
図１６は、本第３実施形態の計算機システムの構成ブロック図である。前記第１実施形態の構成要素に加え、ＧＣ処理部１２０中に、回収対象領域増加処理部２１３１と、回収対象領域閾値管理テーブル２１３２と、オブジェクト移動先管理テーブル２１３３を含むのが特徴である。
【０１０８】
回収対象領域増加処理部２１３１は、ゴミオブジェクト容量が閾値以上に大きいページから非ゴミオブジェクトを移動させ、ゴミページ数を増加させる処理部である。回収対象領域閾値管理テーブル２１３２は、回収対象領域増加処理部２１３１から参照される閾値を格納するテーブルである。この閾値は予め管理者等によって設定される。オブジェクト移動先管理テーブル２１３３は、回収対象領域増加処理部２１３１により移動させられた非ゴミオブジェクトの、移動元と移動先のアドレスを格納するテーブルである。その他の構成は、前記第１実施形態と同様である。
【０１０９】
以下、本第３実施形態と前記第１実施形態との差分についてのみ詳細に説明する。
【０１１０】
図１７は、本第３実施形態の回収対象領域閾値管理テーブル２１３２のデータ形式の一例を示す図である。回収対象領域閾値管理テーブル２１３２は、閾値管理テーブル１３１同様、閾値種別フィールド２２１１と閾値フィールド２２１２から構成される。
【０１１１】
図１８は、本第３実施形態のオブジェクト移動先管理テーブル２１３３のデータ形式の一例を示す図である。オブジェクト移動先管理テーブル２１３３は、移動元アドレスフィールド２３１１と移動先アドレスフィールド２３１２から構成される。移動元アドレスフィールド２３１１は、回収対象領域増加処理部２１３１によって移動させられたオブジェクトの移動元のアドレスを格納する。移動先アドレスフィールド２３１２は、そのオブジェクトの移動先のアドレスを格納する。オブジェクト移動先管理テーブル２１３３の最終要素Ｅ２３００は、オブジェクト移動先管理テーブル２１３３の終端を示すために、移動元アドレス、移動先アドレスともに０とする。
【０１１２】
次に、図１５の回収対象領域増加処理Ｓ２１０８について、詳細を図１９のフローチャートを用いて説明する。
【０１１３】
まず、回収対象領域増加処理部２１３１は、非ゴミオブジェクトの移動処理後にヒープ領域１１２に存在しうるゴミページ数の最大値を算出する。この最大値はヒープ領域１１２中に含まれるゴミオブジェクトの総容量をヒープ領域１１２中の総メモリページ数で割ることで得られる。この際、小数点以下の端数は切捨てとする。回収対象領域増加処理部２１３１は、上記最大値を変数ｎに格納する（Ｓ２２０５）。
【０１１４】
次に、回収対象領域増加処理部２１３１は、ゴミページ数を示す変数ｍの値をヒープ領域１１２中のゴミページ数で初期化する（Ｓ２２０７）。
【０１１５】
以降の処理で、回収対象領域増加処理部２１３１は、ヒープ領域１１２中のメモリページのうち閾値以上のゴミオブジェクトを含む非ゴミページに対して、非ゴミオブジェクトの移動処理を行う。移動処理はこれ以上のゴミページ数の増加が不可能になるか、閾値以上のゴミオブジェクトを含む非ゴミページが存在しなくなるまで繰り返される。
【０１１６】
まず、回収対象領域増加処理部２１３１は、変数ｎとｍの値を比較する。変数ｍはゴミページであるページ数を示し、変数ｎは移動処理後に存在しうるゴミページの最大数を示すため、変数ｍが変数ｎ未満でなければ、これ以上ゴミページを増加させることはできない。変数ｍが変数ｎと等しい場合は、回収対象領域増加処理部２１３１は、図１９のフローチャートの処理を終了する（Ｓ２２１５）。
【０１１７】
ゴミページ数を増加できる可能性がある場合には、回収対象領域増加処理部２１３１は、閾値以上のゴミオブジェクトを含む非ゴミページが存在するかどうかを判定する。まず、回収対象領域増加処理部２１３１は、非ゴミページの存在を確認し、非ゴミページが存在しなければ図１９のフローチャートの処理を終了する（Ｓ２２１６）。非ゴミページが存在した場合は、メモリページ中に含まれるゴミオブジェクトの総容量が最も大きい非ゴミページを取得して変数ｐに格納し（Ｓ２２１７）、そのゴミオブジェクト容量が回収対象領域増加処理閾値より大きいか否かを判定する。回収対象領域増加処理閾値は、回収対象領域閾値管理テーブル２１３２を参照することで取得する。変数ｐのゴミオブジェクト容量が閾値よりも小さい場合、ヒープ領域１１２中に閾値以上のゴミオブジェクトを含む非ゴミページは存在しないため、回収対象領域増加処理部２１３１は、図１９のフローチャートの処理を終了する（Ｓ２２１８）。
【０１１８】
次に、回収対象領域増加処理部２１３１は、変数ｐ中の非ゴミオブジェクトを別のメモリページ内に移動させる。移動先のページはゴミオブジェクト容量が減少し回収対象領域増加処理の対象になりづらくなる。そのため、回収対象領域増加処理部２１３１は移動先になりうるページのうち、もともと対象になりづらいゴミオブジェクト容量が最も少ないページに非ゴミオブジェクトを移動させる。
【０１１９】
まず、回収対象領域増加処理部２１３１は、ページ中に含まれるゴミオブジェクトの総容量が最も小さい非ゴミページを取得して変数ｑに格納し（Ｓ２２２２）、変数ｐ中の非ゴミオブジェクトを移動可能な限り変数ｑに移動させる（Ｓ２２２３）。オブジェクトを移動させる際には、回収対象領域増加処理部２１３１は、移動させるオブジェクトの移動前のアドレスと移動後のアドレスをオブジェクト移動先管理テーブル２１３３に格納する。もし、移動処理後に変数ｐ中に非ゴミオブジェクトが残っていた場合には、Ｓ２２２２に戻り（Ｓ２２２５）、再度ゴミオブジェクトの総容量が最も小さい非ゴミページへの移動処理を繰り返す。以下、変数ｐがゴミページになるまでこの移動処理を繰り返す。Ｓ２２１５での変数ｎと変数ｍの比較結果より、変数ｐ中の非ゴミオブジェクトは全て変数ｐ以外のページに移動させることが可能であるため、このアルゴリズムは常に停止する。
【０１２０】
次に、回収対象領域増加処理部２１３１は、ヒープ領域１１２中の変数ｐから移動させた非ゴミオブジェクトの移動前のアドレスに対する参照を、移動後の新しいアドレスに書き換える（Ｓ２２２６）。
【０１２１】
最後に、回収対象領域増加処理部２１３１は、ゴミページ数を示す変数ｍの値を一つ増加させ（Ｓ２２２７）、変数ｐに対する移動処理を完了する。その後、回収対象領域増加処理部２１３１は、Ｓ２２１５に戻り、新たなページに対する移動処理を繰り返す。
【０１２２】
以上により、本第３実施形態を用いることで、メモリ使用効率の悪化を抑えつつ、高スループットと短い停止時間を両立したゴミオブジェクト判定処理およびゴミオブジェクト回収処理を行うことが可能である。
【０１２３】
＜第４実施形態＞
次に、本発明の第４の実施形態として計算機システム１００上で動作するプログラムとしてＪａｖａＶＭ１１１（１１１Ａおよび１１１Ｂ）を使用し、ゴミオブジェクト処理を行う別処理系として別プロセス（別処理系）を用いる場合の実施の形態について、図面を用いて詳細に説明する。
【０１２４】
本第４実施形態では、ハイパーバイザー１７０が持つ仮想マシンコピー機能の代わりに、オペレーティングシステムが持つプロセスコピー機能を利用し、生成したコピープロセスでゴミオブジェクト判定処理を実行する。なお、本第４実施形態では、前記第１実施形態と同じくＪａｖａＶＭ１１１のＧＣ処理をＪａｖａＶＭ１１１内部での監視による契機に基づいて開始するが、前記第２実施形態と同じくＪａｖａＶＭ１１１のＧＣ処理をＪａｖａＶＭ１１１の外部からの通知を契機として開始してもよい。
【０１２５】
図２０は、本第４実施形態の計算機システムの構成ブロック図である。メモリ１８２には、ＪａｖａＶＭ１１１（１１１Ａおよび１１１Ｂ）およびオペレーティングシステム１６０が格納されている。ＪａｖａＶＭ１１１は、オペレーティングシステム１６０により一意な値が設定されたプロセス識別子３１１８（３１１８Ａおよび３１１８Ｂ）を持つ。
【０１２６】
オペレーティングシステム１６０は、プロセスコピー部３１６１を含む。プロセスコピー部３１６１は、オペレーティングシステム１６０が管理しているプロセスのコピーを生成する処理部である。前記第１実施形態の仮想マシンコピー部１７１によるコピー処理と同様に、プロセスコピー部３１６１によるＪａｖａＶＭ１１１Ａ（実行系＝第１の処理系）のコピーをプロセス１１１Ｂ（別処理系＝第２の処理系）として生成した後、オペレーティングシステム１６０は、コピー先のプロセス１１１Ｂ中のプロセス識別子３１１８Ｂをコピー元のプロセスのプロセス識別子３１１８Ａとは異なる値に設定する。上記プロセス識別子３１１８Ａ、Ｂ以外の点では、生成されたコピープロセスは、コピー元のプロセスと全く同じ構成要素を含み、コピーされた各構成要素は、コピーが行われた時点での対応するコピー元の構成要素と全く同じ状態で動作を開始する。
【０１２７】
コピーされたＪａｖａＶＭ１１１Ｂは、ＪａｖａＶＭ１１１ＡのＧＣ処理中に、プロセスコピー部３１６１によりＪａｖａＶＭ１１１Ａをコピーすることで生成されるプロセスである。
【０１２８】
なお、メモリ１８２上に二つ以上のＪａｖａＶＭ１１１Ａが存在してもよい。また、計算機システム１００では、管理者またはユーザの指令によって、ＯＳ１６０Ａがメモリ１８２に第１の処理系としてのＪａｖａＶＭ１１１Ａを実行する領域を生成（または確保）し、ＪａｖａＶＭ１１１Ａを実行しておくものとする。
【０１２９】
図２１は、本実施形態におけるＧＣ処理の概要を示す図である。本実施形態では、実施形態１の処理ステップ中の仮想マシン１１０Ｂの生成Ｓ１０２の代わりに、ＪａｖａＶＭ１１１Ｂの生成Ｓ３１０２を実行する。また、前記第１実施形態の処理ステップ中の仮想マシン識別子の確認Ｓ１０９、及び仮想マシン識別子の再確認Ｓ１１０の代わりに、プロセス識別子の確認Ｓ３１０９、及びプロセス識別子の再確認Ｓ３１１０を実行する。
【０１３０】
ＪａｖａＶＭ１１１Ｂの生成Ｓ３１０２では、ＧＣ処理開始部１２１がプロセスコピー部３１６１にＪａｖａＶＭ１１１Ａのコピーを要求し、新たにコピーされたＪａｖａＶＭ１１１Ｂを生成する。
【０１３１】
プロセス識別子の確認Ｓ３１０９では、ＧＣ処理開始部１２１がプロセス識別子３１１８Ａの値を確認する。また、プロセス識別子の再確認Ｓ３１１０では、各ＧＣ処理開始部１２１が、プロセス識別子の確認Ｓ３１０９で確認したプロセス識別子３１１８Ａと各プロセス識別子３１１８の値を比較することで、自分がどちらのＪａｖａＶＭ１１１であるかを判定する。
【０１３２】
その他の処理は、前記第１実施形態の場合と同じである。
【０１３３】
以上により、本第４実施形態４の計算機システム１００では、オペレーティングシステムのプロセスコピー機能を用いることで、ＪａｖａＶＭ１１１Ａで高スループットと短いＧＣ停止時間を両立させてＧＣ処理を実行することが可能である。
【０１３４】
また、上記第１ないし第４実施形態では、ＪａｖａＶＭ１１１Ａを実行する第１の処理系と、ＪａｖａＶＭ１１１Ａの複製でＧＣ処理を行うＪａｖａＶＭ１１１Ｂを含む第２の処理系を、ひとつの計算機１００で行う例を示したが、図示はしないが、計算機システムを複数の計算機で構成し、第２の処理系を他の計算機に生成してＧＣ処理を行い、ネットワークを介して不要領域の判定結果を第１の処理系に通知するようにしてもよい。
【０１３５】
＜補足＞
不要メモリ領域回収処理を開始する処理部と、不要メモリ領域判定処理を行う処理部と、不要メモリ領域回収処理を行う処理部と、不要メモリ領域情報を送信する処理部と、不要メモリ領域情報を受信する処理部と、メモリ領域を別の処理系内にコピーする処理部と、メモリ領域中のメモリ残量を監視する処理部と、プログラムによる演算装置の使用率を監視する処理部と、別処理系実行に必要となる演算装置またはメモリの使用率を監視する処理部と、不要メモリ領域判定開始指示を受信する処理部を有する装置であって、前記メモリ領域中のメモリ残量を監視する処理部および前記不要メモリ領域判定開始指示を受信する処理部および前記プログラムによる演算装置の使用率を監視する処理部および前記別処理系実行に必要となる演算装置またはメモリの使用率を監視する処理部は、不要メモリ領域回収処理を開始する契機を前記不要メモリ領域回収処理を開始する処理部に通達し、前記不要メモリ領域回収処理を開始する処理部は、前記通達を受けると、前記メモリ領域を別の処理系内にコピーする処理部に要求して、メモリ領域のコピーを別の処理系内に生成し、前記不要メモリ領域判定処理を行う処理部は、前記メモリ領域のコピーが生成されると、前記メモリ領域のコピーした不要メモリ領域を判定し、前記メモリ残量を監視する処理部および前記プログラムによる演算装置の使用率を監視する処理部および前記別処理系実行に必要となる演算装置またはメモリの使用率を監視する処理部は、判定結果の送信処理を開始する契機を前記不要メモリ領域情報送信処理部に通達し、前記不要メモリ領域情報送信処理部は、前記通達を受けると、前記判定結果を前記不要メモリ領域情報受信処理部に送信し、前記不要メモリ領域情報受信処理部は、前記判定結果の通知を受けると、前記判定結果を前記不要メモリ領域回収処理部に連絡し、前記不要メモリ領域回収処理部は前記連絡に基づいて前記メモリ領域中の前記不要メモリ領域を回収することを特徴とする計算機システム。
【産業上の利用可能性】
【０１３６】
以上のように、本発明はメモリ領域のガベージコレクションを行う計算機システム及びプログラムに適用することができ、特に、ＪａｖａＶＭを実行する計算機システムにおいてヒープ領域のガベージコレクションに好適である。
【符号の説明】
【０１３７】
１００  計算機システム
１８１  ＣＰＵ
１８２  メモリ
１８３  入出力装置
１７０  ハイパーバイザー
１７１  仮想マシンコピー部
１６０  オペレーティングシステム
１１０  仮想マシン
１１８  仮想マシン識別子
１１１  ＪａｖａＶＭ
１１２  ヒープ領域
１１４  参照ルート
１１５  Ｊａｖａプログラム実行部
１２０  ＧＣ処理部
１２１  ＧＣ処理開始部
１２２  ゴミオブジェクト判定部
１２３  ゴミオブジェクト回収部
１２５  ゴミオブジェクト情報送信部
１２６  ゴミオブジェクト情報受信部
１２４  非ゴミオブジェクト情報管理テーブル
１３０  監視部
１３１  閾値管理テーブル
１３２  メモリ残量監視部
１３５  メモリ残量監視テーブル
１３３  実行系処理負荷監視部
１３４  別処理系用リソース監視部
【図１】
2010272059.tif 000003
【図２】
2010272059.tif 000004
【図３】
2010272059.tif 000005
【図４】
2010272059.tif 000006
【図６】
2010272059.tif 000007
【図７】
2010272059.tif 000008
【図８】
2010272059.tif 000009
【図９】
2010272059.tif 000010
【図１０】
2010272059.tif 000011
【図１１】
2010272059.tif 000012
【図１２】
2010272059.tif 000013
【図１３】
2010272059.tif 000014
【図１５】
2010272059.tif 000015
【図１６】
2010272059.tif 000016
【図１７】
2010272059.tif 000017
【図１８】
2010272059.tif 000018
【図１９】
2010272059.tif 000019
【図２０】
2010272059.tif 000020
【図２１】
2010272059.tif 000021
【図５Ａ】
2010272059.tif 000022
【図５Ｂ】
2010272059.tif 000023
【図１４】
2010272059.tif 000024