JP2011107746A - メモリ管理方法、計算機システム及びプログラム - Google Patents

メモリ管理方法、計算機システム及びプログラム Download PDF

Info

Publication number
JP2011107746A
JP2011107746A JP2009258816A JP2009258816A JP2011107746A JP 2011107746 A JP2011107746 A JP 2011107746A JP 2009258816 A JP2009258816 A JP 2009258816A JP 2009258816 A JP2009258816 A JP 2009258816A JP 2011107746 A JP2011107746 A JP 2011107746A
Authority
JP
Japan
Prior art keywords
memory
programs
program
java
threshold
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2009258816A
Other languages
English (en)
Inventor
Ryozo Yamashita
諒蔵 山下
Hiroyasu Nishiyama
博泰 西山
Tomoya Ota
智也 太田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2009258816A priority Critical patent/JP2011107746A/ja
Priority to US13/391,566 priority patent/US20120324199A1/en
Priority to PCT/JP2010/054060 priority patent/WO2011058768A1/ja
Publication of JP2011107746A publication Critical patent/JP2011107746A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)

Abstract

【課題】ガベージコレクションを行う複数のプログラムを従来よりも少ない物理メモリ量で安定して稼動する計算機システムを提供する。
【解決手段】メモリに格納されて演算装置で実行される複数のプログラムがそれぞれ使用する複数のメモリ領域中の不要になった領域をそれぞれ解放するメモリ管理方法であって、演算装置が、メモリ領域の解放の開始を判定する指標を取得し、前記指標と所定の閾値とを比較して、前記指標が前記閾値を超えたときに、前記複数のプログラムのうちのひとつを選択し、前記選択したプログラムが利用する前記メモリ領域の不要になった領域を回収し、前記回収した領域を解放する。
【選択図】図2

Description

本発明は、メモリ管理方法、計算機システム及びプログラムに係り、特に、オブジェクトのガベージコレクション処理に関する。
計算機システムにおいて、プログラムが使用しているメモリ上に確保されているオブジェクトの暗黙的な回収手法としてガベージコレクション(以下、「GC」という。)が知られている(例えば、非特許文献1)。GCはメモリ上にある各オブジェクトに対して、プログラムから使用される可能性の有無を判定し、使用される可能性がないオブジェクト(以下、「ゴミオブジェクト」という。)を回収してメモリ上の領域を解放する処理である。GCは、Java(TM)仮想マシン(以下、「JavaVM」という。)(Java並びにすべてのJava関連の商標およびロゴは、米国およびその他の国における米国Sun Microsystems, Inc.の商標または登録商標である)等で使用されている。
一般に、メモリ管理にGCを用いるプログラムは、メモリ領域中に空き領域がある間は新しいオブジェクトの確保を続けるのみでGC処理は行わず、空き領域がなくなった時点でGC処理を行う。このため、GCを用いるプログラムのメモリ使用率は、GC実行後が最小であり、その後、時間経過とともに増加し、次回のGCの実行直前にピークに達するという特性を持つ。この特性により、GCを用いるプログラムが複数台同時に稼動する場合、同時に必要とされるメモリ量は全てのプログラムのGC処理実行のタイミングが同じになる場合に最大となり、逆に、プログラム間でGC実行タイミングがずれるほど小さくなる傾向にある。
また、近年、ハイパーバイザーと呼ばれるソフトウェアを用いて、一つの計算機システム上で複数の仮想的な計算機システム(仮想マシン)を動作させる構成が普及し始めている。ハイパーバイザーは、仮想マシン上で稼動しているプログラムに対し、不要になった物理メモリを解放する機能を提供している。ハイパーバイザーは、解放された物理メモリを必要に応じて他の仮想マシンに割り当てることができ、これによりシステム全体としてのメモリ使用効率の向上が実現される(例えば、非特許文献2)。また、従来から広く用いられているオペレーティングシステムも一つの計算機システム上で複数のプログラムを動作させる機能を有しており、上記ハイパーバイザーと同様、実行中のプログラムに対して、不要となった物理メモリを解放する機能を提供している(例えば、非特許文献3)。
なお、本発明はメモリを適用対象とするものであるが、ログ構造ファイルシステム(例えば、非特許文献4)や追記型データベース(例えば、非特許文献5)によるディスク等の記憶装置の使用率も上述のメモリの使用率特性と同様の使用率特性を示すことが知られている。
Garbage Collection: Algorithms for Automatic Dynamic Memory Management(Richard Jones, Rafael Lins, 1996, John Wiley & Sons Inc, ISBN:978-0471941484), p183 Carl A. Waldspurger, Memory resource management in VMware ESX server, ACM SIGOPS Operating Systems Review Volume 36, Issue SI(Winter 2002), p.181-194 詳解Linuxカーネル 第3版 (Daniel P. Bovet, Marco Cesati, 2007, オライリー・ジャパン, ISBN: 978-4873113135), p377 Rosenblum, Mendel and Ousterhout, John K., The LFS Storage Manager, Proceedings of the 1990 Summer Usenix, p.315-324 Philip A. Bernstein, Nathan Goodman, Concurrency Control in Distributed Database Systems, ACM Computing Surveys (CSUR) Volume 13, Issue 2 (June 1981), p.185-221
上記従来例では、複数のプログラムを同時に稼動させる場合、全プログラムで使用するメモリ領域の量の合計に等しい物理メモリを予め用意しておくことが一般的であった。しかし、上記GCの特性により、複数のプログラムがGCを用いており且つプログラム間でGC実行タイミングが常にずれている場合は、プログラム間で不要な物理メモリを融通し合うことで性能的な劣化を伴わずに合計の物理メモリ使用量を削減することが可能である。これは、プログラムを実行するために予め用意する必要がある物理メモリ量が従来よりも少なくてすむということを意味する。
しかし、逆に、プログラム間でGC実行タイミングがずれていない場合には、不要物理メモリの融通の有無によらず、従来と同量の物理メモリが必要となる。上記従来技術では複数プログラム間でのGC実行タイミングを制御できなかったため、GCタイミングがずれることを想定して用意する物理メモリ量を削減した場合、GCタイミングが重なってしまった際にメモリ不足に陥り、著しく性能が劣化する恐れがあった。
また、GCタイミングが重なった際には、上記問題に加えて、複数プログラムがGC処理実行のために計算処理を停止してしまうため、応答性が低下するという問題もあった。
本発明は、上記のような課題に鑑みてなされたものであり、GCを用いる複数プログラム間でGC実行のタイミングを制御し、従来よりも少ない物理メモリ量で安定して稼動する計算機システムを提供することにある。
本発明は、複数プログラム合計でのメモリ使用量に関連したある指標が予め指定された閾値を越えた際に、複数のプログラムのうちのひとつでガベージコレクション処理を実行し、ガベージコレクションの後に不要となった物理メモリを解放する。
したがって、本発明によると、ガベージコレクションを用いる複数プログラムの間でGC実行のタイミングを制御することで、従来よりも少ないメモリ量で安定してプログラムを稼動させることが可能である。また、GC実行のタイミングを制御することにより、複数プログラムが同時に計算処理を停止することを排除し、安定した応答性を確保することが可能である。
本発明の第1の実施形態を示し、計算機システムの構成を示すブロック図である。 本発明の第1の実施形態を示し、GC処理制御の動作概要を示す説明図である。 本発明の第1の実施形態を示し、制御情報管理テーブルの一例の説明図である。 本発明の第1の実施形態を示し、メモリ量管理テーブルの一例の説明図である。 本発明の第1の実施形態を示し、ヒープ使用量問い合わせ処理のフローチャートである。 本発明の第1の実施形態を示し、GC実行契機判定処理のフローチャートである。 本発明の第1の実施形態を示し、GCを実行するJavaVMの選択処理のフローチャートである。 本発明の第1の実施形態を示し、回収処理のフローチャートである。 従来例を示し、GC実行タイミングが同一の場合のヒープ使用量とヒープ容量との関係を示すグラフである。 従来例を示し、GC実行タイミングが同一の場合のヒープ使用量とメモリ上に確保する物理的な合計容量との関係を示すグラフである。 本発明の第1の実施形態を示し、GC実行タイミングのずれによるヒープ使用量とヒープ容量との関係を示すグラフである。 本発明の第1の実施形態を示し、GC実行タイミングのずれによるヒープ使用量とメモリ上に確保する物理的な合計容量との関係を示すグラフである。 本発明の第2の実施形態を示し、制御情報管理テーブルの一例の説明図である。 本発明の第2の実施形態を示し、回収処理指示対象のJavaVMの選択処理のフローチャートである。 本発明の第3の実施形態を示し、計算機システムの構成ブロック図である。 本発明の第3の実施形態を示し、GC処理制御の動作概要を示す説明図である。 本発明の第3の実施形態を示し、制御情報管理テーブルの一例の説明図である。 本発明の第3の実施形態を示し、処理リクエスト数管理テーブルの一例の説明図である。 本発明の第3の実施形態を示し、振分け情報管理テーブルの一例の説明図である。 本発明の第4の実施形態を示し、計算機システムの構成ブロック図である。 本発明の第4の実施形態を示し、回収処理のフローチャートである。 本発明の第5の実施形態を示し、計算機システムの構成ブロック図である。 本発明の第5の実施形態を示し、GC処理制御の動作概要を示す説明図である。 本発明の第6の実施形態を示し、計算機システムの構成ブロック図である。 本発明の第6の実施形態を示し、閾値算出処理の計算方法の概要を示す説明図である。 本発明の第6の実施形態を示し、閾値算出処理のフローチャートである。 本発明の第6の実施形態を示し、制御情報管理テーブルの一例の説明図である。 本発明の第6の実施形態を示し、メモリ量管理テーブルの一例の説明図である。 本発明の第6の実施形態を示し、GC処理制御の動作概要を示す説明図である。 本発明の第7の実施形態を示し、回収処理指示対象のJavaVMの選択処理のフローチャートである。
以下、本発明の実施の形態について、図面を用いて詳細に説明する。なお、以下の実施形態においては、ガベージコレクションを用いるプログラムとしてJavaVMを用いる例を示す。
<第1実施形態>
まず、GC実行の契機判定をJavaVMの外部の管理プログラムが行い、契機判定の指標として複数のプログラムがそれぞれ使用するヒープ領域での合計メモリ使用量を用い、GC実行指示を通知する対象として、GC実行の契機に到達した時点で次回GC実行契機が最も近いJavaVMを選択する場合の実施の形態について説明する。
図1は、本実施形態の計算機の構成ブロック図である。図1に示す様に、本実施形態の計算機100は、CPU181とメモリ182と入出力装置183とを備える。なお、入出力装置183は、ディスク装置やマウス、キーボード、ディスプレイ等を含み、図示のJavaプログラム113は記憶媒体としてのディスク装置に格納される。
メモリ182上にはハイパーバイザー170が格納される。ハイパーバイザー170は、CPU181により実行されることで、メモリ182上に複数の仮想マシン110(110A、110B及び110C以下同様。)を構成する。ハイパーバイザー170は、仮想マシン110に対するCPU181、メモリ182および入出力装置183の割り当てを制御する。割り当ての設定は予め管理者等によりなされる。仮想マシン110は、割り当てられたCPU181、メモリ182および入出力装置183により、物理計算機システムのエミュレーションを行う。なお、物理的な計算機資源を仮想化して仮想マシンを生成する仮想化機能については、ハイパーバイザー170に代わって、ホストOS上に仮想マシン110を生成することで実現しても良い。
ハイパーバイザー170は、物理メモリマッピング制御部171を含む。物理メモリマッピング制御部171は、ハイパーバイザー170が管理する仮想マシン110上で稼動するプログラム(JavaVM111(111A及び111B、以下同様。))が使用可能なメモリ182の量を制御する処理部である。仮想マシン110上のプログラムは、物理メモリマッピング制御部171に対して、自分が稼動している仮想マシン110に対する新たなメモリの割り当てあるいは既に割り当てられたメモリの解放を要求することが可能である。
仮想マシン110A及び110B上では、オペレーティングシステム160(160A及び160B、以下同様。)とJavaVM111が稼動する。JavaVM111は、JavaVM識別子116(116A及び116B、以下同様。)、ヒープ領域112(112A及び112B、以下同様。)、参照ルート114(114A及び114B、以下同様。)、Javaプログラム実行部115(115A及び115B、以下同様。)、GC処理部120(120A及び120B、以下同様。)および回収タイミング制御部130(130A及び130B、以下同様。)から構成される。
JavaVM識別子116は、計算機100内の各JavaVM111間で一意な値を識別子として保持する。JavaVM識別子116の値は予め管理者等により設定される。JavaVM111上では、入出力装置183からメモリ182に読み込まれたJavaプログラム113がJavaプログラム実行部115により実行される。なお、JavaVM111Aと111Bは、異なるJavaプログラムをそれぞれ実行しても良い。
Javaプログラム実行部115は、Javaプログラム113の処理実行中に必要となったオブジェクトを、ヒープ領域112中に確保する。また、Javaプログラム実行部115は、参照ルート114にヒープ領域112中のオブジェクトへの参照を格納し、当該オブジェクトへの操作を行う。ヒープ領域112に空き領域がなくなった場合、JavaVM111はGC処理部120を呼び出し、GC処理部120がヒープ領域112中のゴミオブジェクト(不要なオブジェクト)を回収する。
GC処理部120によるGC処理は、参照ルート114から開始してヒープ領域112上のオブジェクトの参照関係を辿り、最後の参照先まで到達できなかったオブジェクトをゴミオブジェクトと判定して回収する。この回収はゴミオブジェクトが占有していたヒープ領域112を解放し、新たなオブジェクトを格納可能にする処理である。回収タイミング制御部130は、メモリ量送信部131と回収指示通知受信部132から構成される。
メモリ量送信部131は、現在のヒープ領域112の使用量を送信する処理部である。回収指示通知受信部132は、GC実行指示を受け付け、ヒープ領域112に対する回収処理を行う処理部である。
なお、JavaVM111が稼動する仮想マシン110(110A、110B)の数は必ずしも図示のように2つである必要はなく、多数の仮想マシンが存在してJavaVM111を稼動させても良い。
仮想マシン110C上では、オペレーティングシステム160C及び回収管理プログラム140が稼動する。回収管理プログラム140は各JavaVM111のGC実行タイミングを制御するプログラムであり、制御情報管理テーブル144、メモリ量管理テーブル142、メモリ量監視部147、GC実行JavaVM選択部145及び回収指示通知送信部146から構成される。回収管理プログラム140は、メモリ量監視部147を用いて各JavaVM111のメモリ量を問い合わせ、合計メモリ使用量が閾値を越えた場合、GC実行JavaVM選択部145を用いてGCを実行させるJavaVM111を選択し、回収指示通知送信部146を用いて選択したJavaVM111にGC実行指示を通知する。制御情報管理テーブル144は上記閾値を格納するテーブルである。メモリ量管理テーブル142は上記問い合わせ結果を格納するテーブルである。
なお、回収管理プログラム140は、必ずしもJavaVM111と同一の物理マシン上で稼動する必要はなく、異なる物理マシン上で稼動していてもよい。
上記JavaVM111及び回収管理プログラム140は記憶媒体としてのディスク装置(入出力装置183)に格納されており、CPU181がメモリ182にロードして実行する。
図2は、第1実施形態におけるGC処理制御の概要を示す図である。回収管理プログラム140は、定期的(予め設定した周期など)に図2の処理を実行する。
まず、回収管理プログラム140は、メモリ量監視部147を用いて定期的(予め設定した周期など)にメモリ量送信部131に対して問い合わせを行う(S331)。メモリ量送信部131は上記問い合わせに対して現在のヒープ領域112の使用量であるヒープ使用量、ヒープ容量及びJavaVM111の識別子を応答する(S321)。
メモリ量送信部131からの応答結果は、メモリ量監視部147によりメモリ量管理テーブル142に格納される。メモリ量監視部147は、上記問い合わせ結果よりGC実行の必要性があると判定した場合、回収管理プログラム140が管理するGC実行フラグを有効な状態に設定する(S332)。回収管理プログラム140は計算機100に対してひとつのGC実行フラグを管理する。
回収管理プログラム140は、GC実行フラグの設定が有効または無効の何れであるかを判定する(S333)。この判定でGC実行フラグが有効な状態である場合は、GC実行JavaVM選択部145を用いてJavaVM111中のひとつを選択する(S336)。
次に、回収管理プログラム140は、回収指示通知送信部146を用いて選択したJavaVM中の回収指示通知受信部132に対してGC実行指示を送信する(S337)。選択したJavaVMでは、指示を受けた回収指示通知受信部132が、ヒープ領域112の回収処理を行い、物理メモリを解放する(S322)。
なお、上記S331のステップは、必ずしも回収管理プログラム140から全JavaVM111に問い合わせを行う必要はなく、代わりに全JavaVM111が定期的(所定の周期)に回収管理プログラム140にヒープ使用量とJavaVM111の識別子(JVM識別子221)を報告することにしてもよい。
図3は、第1実施形態の制御情報管理テーブル144のデータ形式の一例を示す図である。制御情報管理テーブル144は、仮想マシン110Cの回収管理プログラム140によりメモリ182に設定されて、制御情報種別フィールド211と制御情報値フィールド212から構成される。制御情報種別フィールド211は、設定される制御情報の種別を格納する。制御情報値フィールド212は、その制御情報値を格納する。第1実施形態では、制御情報管理テーブル144に格納されるデータは、閾値メモリ使用量と閾値算出用サンプル数である。閾値メモリ使用量情報は、ひとつの計算機100内の全JavaVM111合計でのヒープ使用量の閾値を示す。閾値算出用サンプル数情報は、GC契機判定時に使用する過去のヒープ使用量増分情報の最大個数(N個)を示す。制御情報管理テーブル144中の値は、予め管理者等により設定される。
図4は、第1実施形態1のメモリ量管理テーブル142のデータ形式の一例を示す図である。メモリ量管理テーブル142は、JavaVM識別子フィールド221、ヒープ容量フィールド222及びヒープ使用量フィールド223、ヒープ使用量増分フィールド224から構成される。
JavaVM識別子フィールド221は、メモリ量管理テーブル142中の各データ列に対応するJavaVM111のJavaVM識別子116を格納する。ヒープ容量フィールド222は、該当するJavaVM111中のヒープ領域112の容量を格納する。ヒープ領域112の容量は、JavaVM111がメモリ182上に確保したメモリ領域の値である。
ヒープ使用量フィールド223は、該当するJavaVM111中のヒープ領域112の使用量(ヒープ使用量)を格納する。即ちヒープ使用量は、Javaプログラム実行部115がJavaプログラム113を実行してヒープ領域112に書き込んだオブジェクトが占有するメモリ領域が、ヒープ領域112の使用量である。このヒープ使用量は、JavaVM111がメモリ182上に確保したヒープ領域112のうち、実際にオブジェクトを格納している領域を示す値である。
ヒープ使用量増分フィールド224は、過去最大N回のヒープ使用量問い合わせ時における、該当するJavaVM111中のヒープ領域112の使用量の増分を格納する。上記増分は、ヒープ使用量問い合わせ処理終了後のヒープ使用量フィールド223の新しい値と、ヒープ使用量問い合わせ処理開始時におけるヒープ使用量フィールド223の古い値の差を計算することで算出される。なお、上記のNは、制御情報管理テーブル144の閾値算出用サンプル数に格納されている数値である。
メモリ量管理テーブル142中の各列の作成及びJavaVM識別子フィールド221並びにヒープ容量フィールド222の設定は、予め管理者等によりなされる。また、各列のヒープ使用量フィールド223は予め0に初期化される。ヒープ使用量増分フィールド224は、管理プログラム140の起動時に、管理プログラム140により空のリストに初期化される。
次に、図2の処理中で、特に、第1の実施形態で特徴的な処理であるS331、S332、S336、S321について、フローチャートを用いて説明する。
まず、仮想マシン110Cの回収管理プログラム140のメモリ量監視部147によるヒープ使用量の問い合わせ処理S331について、詳細を図5のフローチャートを用いて説明する。
図5において、メモリ量監視部147は、メモリ量管理テーブル142に登録されている全JavaVM111のメモリ量送信部131に対して、現在のヒープ使用量を問い合わせる。各JavaVM111のメモリ量送信部131は、回収管理プログラム140のメモリ量監視部147からの問い合わせに対して、ヒープ使用量を取得し、回収管理プログラム140を実行する仮想マシン110Cにヒープ使用量とJavaVM111の識別子を応答する。
回収管理プログラム140のメモリ量監視部147は、前記メモリ量送信部131から問い合わせ結果を受信した後に、問い合わせ先のJavaVM111の識別子に対応するメモリ量管理テーブル142中のヒープ使用量フィールド223を問い合わせ結果で更新する。また、対応するメモリ量管理テーブル142中のヒープ使用量増分フィールド224に、ヒープ使用量フィールド223の増分を追加する。なお、ヒープ使用量フィールド223の増分は、更新後のヒープ使用量フィールド223―更新前のヒープ使用量フィールド223とする。また、データの追加によりヒープ使用量増分フィールド224のリストの要素数が閾値算出用サンプル数を超える場合は、閾値算出用サンプル数と同数になるまで、古い要素から順にデータをリストから削除してもよい(S361、S362)。
次に、回収管理プログラム140によるGC実行契機判定処理S332の詳細を図6のフローチャートを用いて説明する。
図6において、回収管理プログラム140は、メモリ量管理テーブル142の全てのヒープ使用量223の合計を求め、この合計(ヒープ使用量合計値)が、制御情報管理テーブル144の閾値メモリ使用量の値以上になったか否かを判定する。ヒープ使用量合計値が閾値(閾値メモリ使用量)以上である場合にGC実行フラグを有効な状態(例えば、「1」。)に設定し、逆にヒープ使用量合計値が閾値(閾値メモリ使用量)未満である場合はGC開始フラグを無効な状態(例えば、「0」。)に設定する。
まず、回収管理プログラム140は、GC開始フラグを無効な状態に設定する(S371)。
次に、回収管理プログラム140は、現在のヒープ使用量合計値と閾値(閾値メモリ使用量)との比較を行う。より詳細には、回収管理プログラム140は、メモリ量管理テーブル142中の全JavaVM111分のヒープ使用量フィールド223の合計値を算出することによりヒープ使用量合計値を取得し(S372)、次いで、制御情報管理テーブル144から閾値(閾値メモリ使用量)を取得し(S373)、その後、取得した現在のヒープ使用量合計値と閾値との比較を行う(S374)。
ヒープ使用量合計値が閾値以上である場合(S374:Yes)、回収管理プログラム140は、GC開始フラグを有効な状態に設定し(S375)、図6のGC実行契機判定処理を終了する。
逆に、ヒープ使用量合計値が閾値未満である場合(S374:No)、回収管理プログラム140は、図6のGC実行契機判定処理を終了する。
次に、図7に示すGC実行JavaVM選択部145によるGCを実行するJavaVMの選択処理S336について、説明する。この処理は、GC実行JavaVM選択部145が、メモリ量管理テーブル142に登録されている全JavaVM111中で最も次回のGC実行契機が近いJavaVM111を選択する処理である。本処理を、以下に詳細に説明する。
まず、GC実行JavaVM選択部145は、メモリ量管理テーブル142の先頭のエントリのJavaVM111のJavaVM識別子221を変数Xに格納する(S341)。
次に、GC実行JavaVM選択部145は、Xに対応するヒープ使用量増分224に含まれる値の平均値をヒープ使用量増分平均値X3として求める(S342)。
次に、GC実行JavaVM選択部145は、メモリ量管理テーブル142の中に未調査のJVMがあるかを判断し(S343)、ある場合(S343:Yes)には、S344の処理に進み、無い場合(S343:No)には、S348の処理に進む。
次に、GC実行JavaVM選択部145は、メモリ量管理テーブル142上の次のエントリのJavaVM識別子221を変数Yに格納する(S344)。
次に、GC実行JavaVM選択部145は、Yに対応するヒープ使用量増分224に含まれる値の平均値をヒープ使用量増分平均値Y3として求める(S345)。
次に、GC実行JavaVM選択部145は、ヒープ使用量増分平均値X3及びY3に格納しているJavaVM111同士の次回GC実行契機を比較する(S346)。この判定では、GC実行JavaVM選択部145は、以下の式(1)及び式(2)を計算する。
(Xのヒープ容量222−Xのヒープ使用量223) /
ヒープ使用量増分平均値X3 ・・・(1)
(Yのヒープ容量222−Yのヒープ使用量223) /
ヒープ使用量増分平均値Y3 ・・・(2)
式(1)の値が式(2)の値より大きい場合(S346:Yes)には、S347の処理に進む、即ちGC実行JavaVM選択部145は、変数Xの値をYに更新し、変数X3の値をY3に更新する(S347)。なお、式(1)の値が式(2)の値以下の場合(S346:No)、S343の処理に戻り、メモリ量管理テーブル142に未処理の要素(エントリ)がなくなるまで、上記S343〜S347の処理を繰り返す。
最後に、GC実行JavaVM選択部145は、変数Xに格納されているJavaVM111を選択対象に指定し(S348)、処理を終了する。
上記処理により、メモリ量管理テーブル142の先頭のエントリから順に次回GC実行契機を比較して、最も次回GC実行契機が近いJavaVM111の識別子221を決定することができる。
次に、回収指示通知受信部132による回収処理S322の処理の詳細を図8のフローチャートを用いて説明する。
まず、回収管理プログラム140からヒープ領域112内のゴミオブジェクトの回収を指示されたJavaVM111の識別子221の回収指示通知受信部132は、GC処理部120を呼び出し、ヒープ領域112に対するGC処理を実行する(S351)。このGC処理は、上述したように参照ルート114から開始してヒープ領域112上のオブジェクトの参照関係を辿り、最後の参照先まで到達できなかったオブジェクトをゴミオブジェクトと判定する。そして、ゴミオブジェクトが占有していたヒープ領域112を解放する。
続いて、回収指示通知受信部132は、上記S351で解放したヒープ領域112に対応するメモリ182(物理メモリ)を解放するため、ハイパーバイザ170の物理メモリマッピング制御部171に対して、上記GC処理で不要になった物理メモリに対して解放要求を行う(S352)。回収指示通知受信部132から解放要求を受信したハイパーバイザ170の物理メモリマッピング制御部171は、GC処理部120が解放したヒープ領域112に対応するメモリ182を解放し、他の仮想マシンやOSなどに当該記憶領域を提供することができる。
以上により、第1実施形態の計算機100では、JavaVM111は監視プログラム140を実行する仮想マシン110からのGC実行指示を受けた際にのみGC処理部120がGC処理を行い、また監視プログラム140は一回のGC実行契機につき1つのJavaVM111(または仮想マシン110)にしか指示を出さないため、前記従来例のように複数のJavaVM111が同時にGC処理を実行することはない。このため、複数JavaVM111間でGC実行のタイミングは常にずれることとなり、従来よりも少ないメモリ量で安定して稼動させることが可能である。
即ち前記従来例で述べたように、複数のヒープ領域112で同時にGC処理を行った場合は、図9A、図9Bで示すように、メモリ182を実際に使用する容量は、複数のヒープ領域112の合計値と一致するため、各ヒープ領域112が確保した記憶領域をメモリ182に確保する必要がある。図9A、図9Bは、5つのプログラム(Javaプログラム113)がそれぞれヒープ領域を確保して時刻t0から実行を開始し、時刻t1でGC処理を同時に開始する例を示している。なお、図9A、図9Bの例では、計算機100で5つのJavaVM(図中プログラム1〜5)が稼動している例を示す。各JavaVMはヒープ領域112の容量としてM1〜M5の容量をメモリ182に確保している。これら各JavaVMのヒープ領域112の容量M1〜M5の合計は、図9Bで示すように合計容量Maとなる。
したがって、従来例では時刻t0からは各Javaプログラム実行部115が、それぞれのヒープ領域112にオブジェクトを徐々に書き込むためヒープ使用量は徐々に増大し、時刻t1ではヒープ領域112の空き領域が無くなるためヒープ使用量はヒープ容量M1〜M5にそれぞれ等しくなる。この時刻t1では、各ヒープ領域112の空き領域がなくなるため、メモリ182上に確保する物理的なメモリ領域の容量はヒープ容量M1〜M5の和である合計容量Maが必須となる。
一方、第1実施形態では、ヒープ使用量とヒープ容量の関係が図10A、図10Bで示すようになる。図10Aは、図9Aと同様に、計算機100で5つのJavaVM(図中プログラム1〜5)が稼動している例を示し、各JavaVMはヒープ領域112の容量としてM1〜M5の容量をメモリ182に確保している。これら各JavaVMのヒープ領域112の容量M1〜M5の合計は、図10Bで示すように図9Aと同様の合計容量Maとなる。
第1実施形態では、時刻t0でプログラム5のGC処理が行われ、その後、時刻t1でプログラム4のGC処理が行われ、時刻t2でプログラム3のGC処理が行われ、時刻t3でプログラム2のGC処理が行われ、時刻t4でプログラム1のGC処理が行われ、各JavaVMのGC処理のタイミングは異なっている。各プログラムはGC処理後に、各Javaプログラム実行部115が、それぞれのヒープ領域112にオブジェクトを徐々に書き込むためヒープ使用量は徐々に増大する。そして、各プログラムのGC処理が行われる時刻で、各プログラムが使用するヒープ使用量の和が最大となるメモリ使用量ピークとなる。
各プログラムで使用するヒープ領域112の和と、実際に使用されたヒープ使用量の和の関係は、図10Bのようになる。各プログラム(JavaVM)でGC処理を開始する時点で、ヒープ使用量の和は最大値であるMbとなる。そして、各プログラムでGC処理が完了した後は、前記従来例の図9Bのようにヒープ領域112の全てが空き領域となることなくオブジェクトの増加につれてヒープ使用量の和も増大する。各プログラムのGC処理の開始時期を異なる時刻にすることで、メモリ182を実際に使用するヒープ使用量の和の最大値Mbは、各プログラムのヒープ領域112の和である合計容量Maよりも小さな値となる。
したがって、本発明では、計算機100のメモリ182に確保するヒープ領域112用の領域は、図10Bのヒープ使用量の和の最大値Mbを確保することで、各プログラムを実行することができる。即ちハイパーバイザ170の物理メモリマッピング制御部171は、JavaVM111を実行する各仮想マシン110のヒープ領域112用のメモリ量として、図10Bに示すヒープ領域112の和である合計容量Maを仮想記憶領域で割り当て、メモリ182上には実際に使用するヒープ使用量の和の最大値Mbの物理アドレスを割り当てる。
以上のように、第1実施形態によれば前記従来例よりもメモリ182の容量を削減して複数のJavaVM111を実行することができ、計算機100のリソースを効率よく利用することができる。
また、第1実施形態によれば、複数のJavaVM111のうちのひとつのみにGC処理の開始を指令するため、GC処理を実行するタイミングはJavaVM111毎に異なることになって、複数のJavaプログラム113が同時に計算処理を停止することを排除し、安定した応答性を確保することができる。さらに、GC処理の開始を判定する指標として、ヒープ使用割合を用いるようにしたため、適切な時期にGC処理を行うことができる。
<第2実施形態>
次に、図11、図12に本発明の第2の実施形態を示す。第2実施形態は、第1実施形態と同じ契機判定処理を行うが、GC実行指示を通知する対象は各JavaVM111を順繰りに選択するもので、その他の構成は第1実施形態と同様である。なお、本第2実施形態では順繰りにJavaVM111を選択する手法としてラウンドロビンを用いる例を示すが、選択手法はラウンドロビン方式に限定されるものではない。
第1実施形態の図7で示した「GC実行指示を通知する対象として契機に到達した時点で次回GC実行契機に最も近いJavaVM」という選択処理は、次回GC実行契機に最も近いJavaVMのヒープ領域112のほとんどがゴミオブジェクトで占められている場合に、特に、有効な手法である。
他方、第1の実施形態では、対象のJavaVM111のヒープ領域112中に不要領域がほとんどない場合には、回収処理を実行しても当該JavaVM111のヒープ使用量は回収処理前と比べてほとんど減少しない。このため、当該JavaVM111はその後繰り返しGC指示対象に選ばれ続けることになる。
この間、他のJavaVM111のヒープ使用量も徐々にピークに近づいてゆくため、結果として、当該JavaVM111と他のJavaVM111のヒープ使用量のピーク時を十分にずらすことができず、合計ヒープ使用量が閾値(閾値メモリ使用量)を上回る虞がある。
そこで、第2実施形態は指示対象となるJavaVM111を順繰りに選択した場合に、同一のJavaVMが、繰り返し回収処理対象として選ばれる事態を防止することを特徴の1つとするものである。
以上の処理は、第1実施形態の制御情報管理テーブル144に格納するデータを後述するように変更し、第1実施形態の図2に示したGC処理を実行するJavaVM111の選択処理S336ステップを変更することで実現される。
本第2実施形態における計算機100の構成およびGC処理の概要は、それぞれ第1実施形態の図1および図2と同様であるため省略する。
以下、第2実施形態と第1実施形態との差分箇所について、詳細に説明する。
図11は、第2実施形態において制御情報管理テーブル144に格納されるデータを示す図である。第2実施形態においては、制御情報管理テーブル144は、閾値メモリ使用量と次回GC対象識別子の情報を含む。閾値メモリ使用量に格納されるデータは、第1実施形態の場合と同じである。次回GC対象識別子には、次回のGC実行契機でGC指示を出す対象のJavaVMの識別子が格納される。次回GC対象識別子は、管理プログラム140の起動時に、管理プログラム140によりメモリ量管理テーブル142の先頭のJavaVM識別子の値に初期化される。
次に、第2実施形態におけるGCを実行するJavaVMの選択処理S336について、詳細を図12のフローチャートを用いて説明する。
GC実行JavaVM選択部145は、制御情報管理テーブル144に格納されている次回GC対象識別子に基づいて指示対象のJavaVM111を選択し、次回GC対象識別子を、メモリ量管理テーブル142上にある次のエントリのJavaVM111を指すよう更新する。
まず、GC実行JavaVM選択部145は、制御情報管理テーブル144から次回GC対象識別子を取得し、変数Xに格納する(S1341)。
次に、GC実行JavaVM選択部145は、メモリ量管理テーブル142上でJavaVM識別子221が変数Xの値に該当する項目を探索する。
まず、GC実行JavaVM選択部145は、メモリ量管理テーブル142の先頭のエントリを変数Yに格納する(S1342)。
次に、GC実行JavaVM選択部145は、XとYのJavaVM識別子221を比較する(S1343)。等しい場合(S1343:Yes)には、S1345の処理に進む。異なる場合(S1343:No)には、S1344の処理に進む、即ちGC実行JavaVM選択部145は、メモリ量管理テーブル142のYの次のエントリを変数Yに格納し(S1344)、S1343の処理に戻る。
次に、GC実行JavaVM選択部145は、変数Yの値がメモリ量管理テーブル142の最後のエントリか否かを判定する(S1345)。
最後のエントリでない場合(S1345:Yes)には、S1346の処理に進む、即ちGC実行JavaVM選択部145は、メモリ量管理テーブル142上でYの次のエントリのJavaVM識別子221を変数Zに設定する(S1346)。
最後のエントリである場合(S1345:No)には、S1347の処理に進む、即ちGC実行JavaVM選択部145は、メモリ量管理テーブル142の先頭のエントリのJavaVM識別子221を変数Zに設定する(S1347)。
次に、GC実行JavaVM選択部145は、制御情報管理テーブル144中の次回GC対象識別子を変数Zの値に更新し(S1348)、変数Xに格納されているJavaVM111を選択対象として指定する(S1349)。
以上により、第2実施形態の計算機100では、ヒープ領域112のほとんどが非ゴミオブジェクトで占められているJavaVM111がGCの指示対象に選ばれた場合でも、GC処理を実行するJavaVM111をラウンドロビンによって順繰り(メモリ量管理テーブル142のエントリの順)に選択するため、次回以降のGC契機においては当該JavaVM111以外のJavaVM111がGCの指示対象となり、当該JavaVM111と他JavaVM111との間でGC実行のタイミングを十分にずらすことが可能である。
このため、ヒープ領域112のほとんどが非ゴミオブジェクトで占められているJavaVM111が存在した場合でも、同一のJavaVM111が連続してGC処理の対象に選択されるのを防ぐことができ、GC処理を効果的に実行し、少ないメモリ量で複数のJavaプログラム113を安定して稼動させることが可能である。
<第3実施形態>
次に、図13〜図17に本発明の第3の実施形態を示す。第3実施形態では、第1実施形態に示したGC実行契機の判定を、複数プログラムでの合計リクエスト処理数を用いて行う例について説明する。
第1実施形態のように、GC実行契機の判定にヒープ使用量を用いる場合、契機判定のため各JavaVM111にヒープ使用量の問い合わせを行う必要がある。このため、JavaVM111の内部に問い合わせに応答する処理部がない場合には制御が行えない。また、回収管理プログラム140がJavaVM111へ頻繁に問い合わせを行う場合では、JavaVM111の処理性能を下げる虞がある。
これに対し、JavaVM111に対するリクエスト処理数は、図11の負荷分散装置を用いた構成では負荷分散装置に問い合わせを行うことで取得可能である。また、一般的なサーバアプリケーションでは、クライアントからのリクエストに応じて処理を実行するため、サーバのヒープ使用量は処理したリクエスト数に比例すると考えられる。
本実施形態は、契機の判定にヒープ使用量の代わりにリクエスト処理数を用いることで、JavaVMへの問い合わせを行うことなく制御することを可能とするものである。
図13は、本第3実施形態の計算機200を中心とした計算機システムの構成を示すブロック図である。第3実施形態の計算機システムでは、計算機200が、負荷分散装置20に接続されている。負荷分散装置20は、ネットワークなどを介して図示しないクライアント計算機に接続され、クライアント計算機からリクエストを受け付け、計算機200上のJavaVM111A及び111Bに受け付けたリクエストを分配する装置である。
また、負荷分散装置20は、振分け情報管理テーブル3133及び処理リクエスト数送信部3131を含む。振分け情報管理テーブル3133は、負荷分散装置20が各JavaVM111に振り分けたクライアント計算機からのリクエストの総和である総リクエスト数を格納するテーブルである。負荷分散装置20は、各JavaVM111にクライアント計算機からのリクエストを分配するたびに振分け情報管理テーブル3133の値を更新する。処理リクエスト数送信部3131は、振分け情報管理テーブル3133内の情報を送信する処理部である。
また、第3実施形態における計算機200は、第1実施形態の計算機200と以下の点で異なる。まず、本第3実施形態では、JavaVM111中の回収タイミング制御部130がメモリ量送信部131を含まない。次に、回収管理プログラム140は、メモリ量管理テーブル142とメモリ量監視部147の代わりに、処理リクエスト数管理テーブル3142と処理リクエスト数監視部3147を含む。上記以外の点では、本第3実施形態における計算機200は第1実施形態の計算機200と同じである。
なお、図では省略したが、第1実施形態の場合と同じく、JavaVM111BはJavaVM111Aと同様の構成要素を含むものとし、特に必要のある場合は各機能部位の名称の末尾に添え字「A」又は「B」をつけることで区別するものとする。
以下、本実施形態と第1実施形態との差分箇所について、詳細に説明する。
図15は、第3実施形態において制御情報管理テーブル144に格納されるデータを示す図である。本第3実施形態においては、制御情報管理テーブル144は第1実施形態におけるデータの代わりに、GC実行の判定を行うための閾値として閾値リクエスト処理数の情報を含む。閾値リクエスト処理数は、GC実行後、次回のGC実行までの間に処理される全JavaVM111でのリクエスト数の合計と比較する閾値を格納する。閾値リクエスト処理数情報は、予め管理者等により設定される。
図16は、本実施形態の処理リクエスト数管理テーブル3142のデータ形式の一例を示す図である。処理リクエスト数管理テーブル3142は、JavaVM識別子フィールド3221、処理リクエスト数フィールド3222、前回GC処理時処理リクエスト数フィールド3223、から構成される。
JavaVM識別子フィールド3221は、本テーブル中の各データ列に対応するJavaVM111のJavaVM識別子116を格納する。処理リクエスト数フィールド3222は、該当するJavaVM111が処理したリクエストの総数を格納する。前回GC処理時処理リクエスト数フィールド3223は、全JavaVM111の合計処理リクエスト数が閾値を越えた直近の契機までに、該当するJavaVM111が処理したリクエストの総数を格納する。
図17は、本実施形態の振分け情報管理テーブル3133のデータ形式の一例を示す図である。振分け情報管理テーブル3133は、JavaVM識別子フィールド3321、処理リクエスト数フィールド3322、から構成される。JavaVM識別子フィールド3321は、テーブル中の各データ列に対応するJavaVM111のJavaVM識別子116を格納する。処理リクエスト数フィールド3322は、該当するJavaVM111が処理したリクエストの総数を格納する。
図14は、第3実施形態におけるGC制御処理の概要を示す図である。第1実施形態の場合と同様、回収管理プログラム140は、定期的(例えば、所定の周期毎)に図14の処理を実行する。
まず、回収管理プログラム140は、処理リクエスト数監視部3147を用いて負荷分散装置20内の処理リクエスト数送信部3131に対して問い合わせを行い(S3331)、処理リクエスト数送信部3131は上記問い合わせに対して、振分け情報管理テーブル3133に格納しているJavaVM識別子3321の処理リクエスト数3322を応答する(S3321)。応答結果は、処理リクエスト数監視部3147により処理リクエスト数管理テーブル3142の処理リクエスト数フィールド3222に格納される。
処理リクエスト数監視部3147が、応答結果よりGC実行の必要性があると判定した場合(S3332、S3333)、回収管理プログラム140はGC実行JavaVM選択部145を用いてJavaVM111中のひとつを選択する(S3336)。その後の処理(S337、S322)は、第1実施形態の場合と同様である。
上記S3332のGC契機判定処理は、各JavaVM111が前回GC契機以降に処理したリクエスト数の合計値を算出し、上記合計値が閾値を超えていた場合、GC実行契機であると判定する。各JavaVM111が前回GC契機以降に処理したリクエスト数は、処理リクエスト数管理テーブル3142中の対応するJavaVMの処理リクエスト数フィールド3222の値から前回GC処理時処理リクエスト数フィールド3223の値を引くことで取得可能である。また、上記閾値は、制御情報管理テーブル144の閾値メモリ使用量より取得可能である。
また、上記S3336の選択処理では、前回GC契機以降に処理したリクエスト数が最も多いJavaVM111を選択する。この処理は、第1実施形態のS336ステップと同様の処理を処理リクエスト数管理テーブル3142に対して行うことで実行可能である。なお、選択処理が終わった際に、GC実行JavaVM選択部145は、処理リクエスト数管理テーブル3142中の各JavaVMの処理リクエスト数フィールド3222の値を前回GC処理時処理リクエスト数フィールド3223にコピーするものとする。
なお、GCを実行するJavaVMの選択手法は上記方法に限定されるものではなく、第2実施形態のようにラウンドロビン方式を用いてもよい。
以上により、本実施形態の計算機200では、GC実行の契機を負荷分散装置20から取得した処理リクエスト数情報に基づいて判定することで、JavaVM111への問い合わせを行うことなく制御することが可能である。これにより、第1実施形態と同様に、少ないメモリ量で複数のJavaプログラム113を安定して稼動させるのに加え、JavaVM111の負荷を低減することが可能である。なお、用いる指標は、必ずしもリクエスト処理数に限定されるものではなく、他の指標を用いてもよい。
<第4実施形態>
次に、図18、図19に第4の実施形態を示す。第4実施形態は、一つのオペレーティングシステム上で稼動する複数のJavaVMプロセスに対して制御を行う場合の実施の形態について説明する。
本第4実施形態は、第1実施形態のハイパーバイザ170の物理メモリマッピング制御部171の代わりに、オペレーティングシステム160の物理メモリマッピング制御部161を用いることで第1実施形態と同様の制御を行うものである。
図18は、本実施形態の計算機300の構成ブロック図である。メモリ182には、JavaVM111(111A及び111B)、回収管理プログラム140及びオペレーティングシステム160が格納されている。JavaVM111及び回収管理プログラム140は、オペレーティングシステム160により管理されるプロセスとして稼動する。
オペレーティングシステム160は、物理メモリマッピング制御部161を含む。物理メモリマッピング制御部161は、第1実施形態の物理メモリマッピング制御部171と同様、オペレーティングシステム160が管理するプロセスが使用可能なメモリ182の量を制御する処理部であり、各プロセスは、物理メモリマッピング制御部161に対して、新たなメモリの割り当てあるいは既に割り当てられたメモリの解放を要求することが可能である。なお、物理メモリマッピング制御部161は、各プロセスに対して仮想記憶空間を割り当て、メモリ182の物理的な記憶空間と仮想記憶空間の変換を行うことができる。また、メモリ182の物理的な記憶空間と仮想記憶空間の変換は、CPU181のハードウェアで行うようにしても良い。
第4実施形態におけるGC処理の流れは、第1実施形態における図2と同様であるため省略する。本実施形態と第1実施形態で処理が異なる点は、第1実施形態の図8に示した回収処理S322の内容のみである。
以下、本実施形態と第1実施形態との差分箇所である回収処理S322について、詳細を図19のフローチャートを用いて説明する。
まず、回収指示通知受信部132は、第1実施形態の場合と同様、GC処理部120を呼び出し、ヒープ領域112に対するGC処理を実行する(S351)。次に、回収指示通知受信部132は、オペレーティングシステム160中の物理メモリマッピング制御部161に対して、上記GC処理で不要になった物理メモリに対する解放要求を行う(S4352)。
以上により、本実施形態の計算機300では、不要物理メモリ解放処理にオペレーティングシステム160の物理メモリマッピング制御部161を用いることで、ハイパーバイザーが存在しない環境においても、複数のJavaVM111をより少ないメモリ量で安定して稼動させることが可能である。
なお、GC処理を実行するJavaVM111の選択手法には、第2実施形態と同様にして、ラウンドロビンを用いてもよい。また同様に、GC実行契機の判定に、第3実施形態と同様、クライアント計算機からの処理リクエスト数を用いてもよい。
<第5実施形態>
次に、図20、図21に本発明の第5の実施形態を示す。第5実施形態は、GC実行契機の判定に管理プログラムを用いず、代わりにJavaVM間の通信によりGC開始の契機を判定する例を示す。
第1実施形態等のように回収管理プログラム140を用いる場合、管理プログラム140に障害が発生するとGC処理の制御が不可能となるため、可用性が低くなる恐れがある。このため、本第5実施形態では管理プログラム140を用いずにJavaVM間の通信のみで契機を判定することにより、上記問題を解決することが可能である。
図20は、本実施形態の計算機400の構成を示すブロック図である。第1実施形態の構成要素との差異は、メモリ182上に仮想マシン110C(及び仮想マシン110Cに含まれる回収管理プログラム140)が存在せず、代わりにJavaVM111の回収タイミング制御部130内に、制御情報管理テーブル144(144A及び144B)、メモリ量管理テーブル142(142A及び142B)、メモリ量監視部147(147A及び147B)、GC実行JavaVM選択部145(145A及び145B)、を含む点である。上記、制御情報管理テーブル144、メモリ量管理テーブル142、に格納される値は第1実施形態の場合と同様である。また、上記メモリ量監視部147、GC実行JavaVM選択部145は、第1実施形態と同様の処理を行う。
図21は、本実施形態におけるGC制御処理の概要を示す図である。JavaVM111は実行中に定期的(所定の周期)に図21の処理を呼び出す。
なお、図21及び以下の説明では、JavaVM111Aの処理のみを説明するが、JavaVM111Bも同様の契機で同様の処理を行うものとする。
まず、JavaVM111Aは、メモリ量管理テーブル142A中の自身のヒープ使用量フィールド223を、ヒープ領域112Aの現在の使用割合の値に更新し、ヒープ使用量増分フィールド224に、ヒープ使用量フィールド223の増分を追加する(S5331)。なお、ヒープ使用量フィールド223の増分は、第1実施形態と同様であり、更新後のヒープ使用量フィールド223―更新前のヒープ使用量フィールド223である。
次に、メモリ量監視部147Aを用いて、JavaVM111B中のメモリ量送信部131Bに対して問い合わせを行う(S331)。問い合わせを受けたメモリ量送信部131Bは上記問い合わせに対して現在のヒープ領域112Bのヒープ使用量を応答する(S321)。メモリ量監視部147Aが、問い合わせの結果よりGC実行の必要性があると判定した場合(S332、S333)、JavaVM111AはGC実行JavaVM選択部145Aを用いて、全JavaVM111中のひとつのプロセスを選択する(S336)。選択されたJavaVM111が自身(すなわち、JavaVM111A)でない場合、JavaVM111Aは図21の処理を終了する。逆に、選択されたJavaVM111が自身である場合、JavaVM111Aは回収指示通知受信部132Aを用いて回収処理を実行する(S322)。
なお、上記S331、S321、S332、S333、S336、S332の処理は、第1実施形態の場合と同様である。
以上の処理により、本第5実施形態の計算機100では、GC実行契機を全JavaVM111同士の通信のみに基づいて判定することができ、これにより第1実施形態の管理プログラム140の障害によりヒープ領域112が制御不能状態に陥ることなく、より少ない物理メモリ量でありながら、安定してJavaプログラム113を稼動させることが可能である。
なお、GCを実行するJavaVMの選択手法には、第2実施形態と同様、ラウンドロビン方式を用いてもよい。また同様に、GC実行契機の判定に、第3実施形態と同様、処理リクエスト数を用いてもよい。また、第4実施形態4と同様、ハイパーバイザーがない環境においては、オペレーティングシステム160の物理メモリ制御部161を用いてもよい。
<第6実施形態>
次に、図22〜図27に本発明の第6の実施形態を示す。本第6実施形態では、GC開始の契機を判定する指標としてヒープ使用量を用い、GC開始の契機を判定するためのヒープ使用量の閾値を、第1実施形態のように管理者等が予め設定する代わりに、計算機500の各JavaVM111のGC処理後のヒープ使用率情報(ヒープ使用割合)を基にして、自動的に適切な閾値を算出する場合を示す。
一般に、GC実行後にも一定数のオブジェクトはゴミオブジェクトとならず非ゴミオブジェクトとしてヒープ領域112に残存する。GC実行後にもヒープ領域112に残る非ゴミオブジェクトについては、GC実行タイミングをずらしてもヒープ使用量は削減されない。このため、各JavaVM111毎のヒープ使用量の総和である合計ヒープ使用量をGC開始の指標とする場合に、合計ヒープ使用量に対する閾値を適切に算出するためには、ヒープ領域112に残存する非ゴミオブジェクトの容量の分を差し引く必要がある。しかし、GC処理後に残る非ゴミオブジェクトが占有するメモリ182の容量は各Javaプログラム113の振る舞いに依存するため、適切な閾値の算出は困難である。閾値が適切な値よりも大きい場合、不必要なメモリを消費してしまい無駄が発生する。逆に、閾値が適切な値よりも小さい場合、各JavaVM111のGC実行の間隔が短くなりJavaプログラム113の処理性能が低下する、という問題があった。
本第6実施形態は、実際にJavaプログラム113を稼動させた際に非ゴミオブジェクトがヒープ領域112に残存する量を残存量情報として取得し、この残存量情報を基にGC開始の契機を判定するための閾値を算出することで、上記問題を解決するものである。
本第6実施形態では、以上の効果を実現するため、第1実施形態の構成要素に加えて、閾値を算出する処理部を用いる。また、第6実施形態で実行する処理は、第1実施形態の処理に加えて、ゴミオブジェクトの回収処理の実行後にヒープ領域112に残った非ゴミオブジェクトの残存量情報を送受信する処理と、上記残存量情報を基に閾値を算出する処理を含む。また、第6実施形態における制御情報管理テーブル144とメモリ量管理テーブル142は、第1実施形態のデータに加えて、閾値の算出に必要となるデータを含む。
図22は、本第6実施形態の計算機システムの構成を示すブロック図である。第1実施形態の構成要素に加え、回収管理プログラム140中に閾値算出処理部6144を含むのが特徴である。閾値算出処理部6144は、制御情報管理テーブル144及びメモリ量管理テーブル142に格納された値に基づき、後述するように閾値を算出する処理部である。その他の構成は第1実施形態と同様である。
図24は、第6実施形態におけるGC制御処理の概要を示す図である。第1実施形態の図2の処理に加え、JavaVM111での回収処理S322後に、非ゴミオブジェクトの残存量情報を検出して管理プログラム140に送信する回収後ヒープ残存量送信処理S6322を含み、回収管理プログラム140での回収処理通知送信処理S337後に、JavaVM111からの残存量情報を受信するヒープ残存量受信処理S6337と、受信した残存量情報から次回の閾値を算出する閾値算出処理S6338を含むのが特徴である。
図24において、S331〜S337及びS321、S322は第1実施形態の図2で示した処理と同一であるため重複した説明は省略する。JavaVM111では、回収指示通知受信部132による回収処理S322を実行した後、メモリ量送信部131によりGC処理後のヒープ領域112の使用量情報(ヒープ使用量)が非ゴミオブジェクトの残存量情報として回収管理プログラム140に送信される(S6322)。
回収管理プログラム140では、回収処理通知送信処理S337の実行後に、回収指示通知送信部146がJavaVM111からの残存量情報を受信してメモリ量管理テーブル142中のGC時残存量フィールド6224のリストに受信した残存量情報を追加した(S6337)後、閾値算出処理部6144による閾値の算出処理が行われる(S6338)。
以下、本実施形態と第1実施形態との差分箇所について、詳細に説明する。
図23は、上記図22の閾値算出処理部6144で行われる閾値の算出方法の概要を示したものである。閾値算出処理部6144が算出に用いる情報は、各JavaVM111のヒープ領域112のヒープ容量(図中領域長情報(図中、h))と、過去N回の当該JavaVM111によるGC実行後の非ゴミオブジェクトの残存量(図中、g1、g2、g3、…)である。Javaプログラム113の実行時のヒープ領域112の平均的な使用量は非ゴミオブジェクトの残存量とヒープ領域長(ヒープ容量)の間で変動するため、時間平均すると非ゴミオブジェクトの残存量とヒープ領域長のちょうど中間の値となる。閾値算出処理部6144は、過去N回分の残存量の平均値を算出し、この平均値を平均残存量とし、平均残存量とヒープ領域長の平均値を平均ヒープ使用量として求めることで閾値を算出する。
図25は、第6実施形態において制御情報管理テーブル144に格納されるデータを示す図である。第6実施形態においては、制御情報管理テーブル144は閾値メモリ使用量と閾値算出用サンプル数の情報を含む。閾値メモリ使用量に格納されるデータは、第1実施形態の場合と同じである。閾値算出用サンプル数情報は、閾値算出処理部6144が閾値の算出に使用する過去のGC時の非ゴミオブジェクトの残存量情報の最大個数(N個)を格納する。閾値算出用サンプル数情報は、予め管理者等により設定される。
図26は、第6実施形態においてメモリ量管理テーブル142に格納されるデータを示す図である。第6実施形態においては、メモリ量管理テーブル142は第1実施形態のフィールドに加えて、GC時残存量フィールド6224を含む。GC時残存量フィールド6224は、JVM識別子221に対応するJavaVM111の過去最大N回のGC実行時の非ゴミオブジェクトのヒープ残存量を保持するリストを格納する。なお、上記のNは、制御情報管理テーブル144の閾値算出用サンプル数に格納されている数値である。GC時残存量フィールド6224は、管理プログラム140の起動時に、管理プログラム140により空のリストに初期化される。また、前記S6337ステップの際にGC時残存量フィールド6224のリストの要素数が閾値算出用サンプル数に達している場合は、最も古い要素を削除し、新しいデータをリストに追加する。
次に、図24のステップ中で、特に、第6実施形態で特徴的であるS6338について、処理の詳細を図27のフローチャートを用いて説明する。図27は、図24のS6338で行われる処理の詳細を示すフローチャートである。
まず、閾値算出処理部6144は新しい閾値を格納する変数Sを用意し、変数Sの値を0に初期化する(S6341)。
次に、閾値算出処理部6144は、メモリ量管理テーブル142の中に未調査のJVMがあるかを判断し(S6342)、ある場合(S6342:Yes)には、S6343の処理に進み、無い場合(S6342:No)には、S6348の処理に進む。
次に、GC実行JavaVM選択部145は、メモリ量管理テーブル142上の次のエントリのJavaVM識別子221を変数Yに格納する(S6343)。
次に、閾値算出処理部6144は、Yに対応するヒープ容量222を変数Hに設定する(S6344)。
次に、閾値算出処理部6144は、Yに対応するGC時残存量6224の(N個の残存量)を変数Lに設定する(S6345)。
次に、閾値算出処理部6144は、変数Lに含まれるN個の残存量の平均値をGC時残存量の平均値Gとして求める(S6346)。
次に、閾値算出処理部6144は、平均ヒープ使用量を、該当JavaVM111のヒープ領域長を変数H、GC時残存量の平均値をGとすると、以下に示す式(3)で算出する。
平均ヒープ使用量 = (H + G) / 2 ・・・(3)
そして、閾値算出処理部6144は、各JavaVM111の平均ヒープ使用量の合計値を求めるため、変数Sの値を、次の(4)式のように更新する(S6347)。
変数S = S+((H + G) / 2) ・・・(4)
最後に、閾値算出処理部6144は、制御情報管理テーブル144中の閾値メモリ使用量223の値を変数Sの値に更新する(S6348)。
なお、閾値の算出式は上記の式(3)に限定されるものではない。
以上により、本実施形態の計算機500では、閾値算出処理部6144が制御に用いる閾値情報を各ヒープ領域112のGC処理後のヒープ領域112の使用率情報を基に算出することで、非ゴミオブジェクトのヒープ残存量を差し引いた適切な閾値(閾値メモリ使用量)によるGC処理を実現することが可能である。
なお、上記では複数のJavaVM111の平均ヒープ使用量から閾値メモリ使用量を求めたが、上記(3)式の平均ヒープ使用量を用い、各JavaVM111毎に閾値メモリ使用量を設定するようにしても良い。
<第7実施形態>
次に、図28に本発明の第7の実施形態を示す。第7実施形態は、第1実施形態と同じ契機判定処理を行うが、GC実行指示を通知する対象を判定する指標として、各JavaVM111のヒープ使用量223を用いるもので、その他の構成は第1実施形態と同様である。
第1実施形態の図7で示した「GC実行指示を通知する対象として契機に到達した時点で次回GC実行契機に最も近いJavaVM」という選択処理は、対象のJavaVM111のヒープ使用量223が小さい場合には、回収処理を実行しても合計ヒープ使用量の減少量が小さいため、頻繁な回収処理が必要となる。
第7実施形態は、ヒープ使用量223が大きいJavaVM111を指示対象として選択することにより、各回収契機での回収量を最大化し、効率のよい回収処理を行うことを特徴の1つとするものである。
この処理は、第1実施形態の図2に示したGC処理を実行するJavaVM111の選択処理S336ステップを変更することで実現される。
本第7実施形態における計算機100の構成およびGC処理の概要は、それぞれ第1実施形態の図1および図2と同様であるため省略する。
以下、第7実施形態と第1実施形態との差分箇所であるGCを実行するJavaVMの選択処理S336について、詳細を図28のフローチャートを用いて説明する。
この処理は、GC実行JavaVM選択部145が、メモリ量管理テーブル142に登録されている全JavaVM111中で最もヒープ使用量が高いJavaVM111を選択する処理である。
まず、GC実行JavaVM選択部145は、メモリ使用量管理テーブル142の先頭のエントリのJavaVM111のJavaVM識別子221を変数Xに格納する(S7341)。そして、GC実行JavaVM選択部145は、JavaVM識別子221に対応するヒープ使用量223を変数X2に格納する(S7342)。
次に、GC実行JavaVM選択部145は、メモリ使用量管理テーブル142の中に未調査のJVMがあるかを判断し(S7343)、ある場合(S7343:Yes)には、S344の処理に進み、無い場合(S7343:No)には、S7347の処理に進む。
次に、GC実行JavaVM選択部145は、メモリ量管理テーブル142上の次のエントリのJavaVM識別子221を変数Yに格納する(S7344)。
次に、GC実行JavaVM選択部145は、当該JavaVM識別子221に対応するヒープ使用量223を変数Y2に格納する(S7345)。
次に、ヒープ使用量X2及びY2に格納しているJavaVM111同士のヒープ使用量を比較する(S7346)。この判定では、ヒープ使用量Y2が、ピープ使用量X2よりも大きいかを判断する。
ピープ使用量Y2の方がX2より大きい場合(S7346:Yes)には、S7347の処理に進む、即ちGC実行JavaVM選択部145は、変数Xの値をYに更新し、変数X2の値をY2に更新する(S7347)。なお、Y2がX2以下の場合(S7346:No)、S7343の処理に戻り、メモリ量管理テーブル142に未処理の要素(エントリ)がなくなるまで、上記S7343〜S7345の処理を繰り返す。
最後に、GC実行JavaVM選択部145は、変数Xに格納されているJavaVM111を選択対象に指定し(S7346)、処理を終了する。
上記処理により、メモリ量管理テーブル142の先頭のエントリから順にヒープ使用量を比較して、最もヒープ使用量が大きいJavaVM111の識別子221を決定することができる。
以上により、本実施形態の計算機100では、GC実行JavaVM選択部145が、ヒープ使用量223が大きいJavaVM111を指示対象として選択することにより、
各回収契機での回収量を最大化し、効率のよい回収処理を行うことが可能である。
なお、GC実行指示を通知する対象を判定する指標は、必ずしもヒープ使用量に限定されるものではなく、他の指標を用いてもよい。他の指標の例としては、ヒープ使用量から平均残存量を引いた値とすることが考えられる。なお、平均残存量は、第6実施形態と同様、当該JavaVM111による過去N回のGC実行後の非ゴミオブジェクトの残存量とする。あるいは、別の指標の例としては、各JavaVM111のヒープ使用割合を指標とすることも考えられる。なお、ヒープ使用割合は、ヒープ使用量223/ヒープ容量222とする。
また、上記第1から第7実施形態では、メモリ182を適用対象とするGC処理について述べたが、ログ構造ファイルシステム(例えば、非特許文献4)や追記型データベース(例えば、非特許文献5)によるディスク等の記憶装置の使用率も上述のメモリの使用率特性と同様の使用率特性を示すことが知られており、本発明を適用しても良い。
以上のように、本発明はGC処理を行う計算機や計算機システムに適用することができ、特に、JavaVMを実行する計算機のメモリ管理方法やプログラムに適用することができる。
100、200、300、400、500 計算機
181 CPU
182 メモリ
183 入出力装置
113 Javaプログラム
170 ハイパーバイザー
171 物理メモリマッピング制御部
110 仮想マシン
160 オペレーティングシステム
111 JavaVM
116 JavaVM識別子
112 ヒープ領域
114 参照ルート
115 Javaプログラム実行部
120 GC処理部
130 回収タイミング制御部
131 メモリ量送信部
132 回収指示通知受信部
140 回収管理プログラム
144 制御情報管理テーブル
142 メモリ量管理テーブル
147 メモリ量監視部
145 GC実行JavaVM選択部
146 回収指示通知送信部

Claims (13)

  1. 演算装置とメモリを備えた計算機で、
    前記メモリに格納されて前記演算装置で実行される複数のプログラムがそれぞれ使用する複数のメモリ領域中の不要になった領域をそれぞれ解放するメモリ管理方法であって、
    前記演算装置が、前記プログラムに関連したメモリ領域の解放の開始を判定する指標をそれぞれ取得するステップと、
    前記演算装置が、前記指標の合計値と所定の閾値とを比較して、前記合計値が前記閾値を超えたときに、前記複数のプログラムのうち前記複数のプログラムよりも少ない数のプログラムを選択するステップと、
    前記演算装置が、前記選択したプログラムが利用する前記メモリ領域の不要になった領域を回収するステップと、
    前記演算装置が、前記メモリ領域のうち前記回収した領域を解放するステップと、
    を含むことを特徴とするメモリ管理方法。
  2. 請求項1に記載のメモリ管理方法において、
    前記指標は、前記プログラムが実際に利用しているメモリ領域のメモリ使用量であることを特徴とするメモリ管理方法。
  3. 請求項1に記載のメモリ管理方法において、
    前記指標は、前記各プログラムが、前記プログラム自身の直近の回収処理実行契機以降に受け付けたリクエストの数であることを特徴とするメモリ管理方法。
  4. 請求項2に記載のメモリ管理方法において、
    前記演算装置が、前記指標の合計値と所定の閾値とを比較して、前記合計値が前記閾値を超えたときに、前記複数のプログラムのうち前記複数のプログラムよりも少ない数のプログラムを選択するステップは、
    前記演算装置が、前記各プログラムが利用するメモリ領域に空き領域がなくなる次回の契機を予測し、
    前記合計値が前記閾値を超えた時点で、前期契機が最も近いプログラムを選択することを特徴とするメモリ管理方法。
  5. 請求項2に記載のメモリ管理方法において、
    前記演算装置が、前記指標の合計値と所定の閾値とを比較して、前記合計値が前記閾値を超えたときに、前記複数のプログラムのうち前記複数のプログラムよりも少ない数のプログラムを選択するステップは、
    前記指標が前記閾値を超えた時点で、前記各プログラムが利用するメモリ領域のメモリ使用量が最大のプログラムを選択することを特徴とするメモリ管理方法。
  6. 請求項2に記載のメモリ管理方法において、
    前記演算装置が、前記指標の合計値と所定の閾値とを比較して、前記合計値が前記閾値を超えたときに、前記複数のプログラムのうち前記複数のプログラムよりも少ない数のプログラムを選択するステップは、
    前記指標が前記閾値を超えた時点で、前記複数のプログラムのうち前記複数のプログラムよりも少ない数のプログラムを所定順序で選択することを特徴とするメモリ管理方法。
  7. 請求項1に記載のメモリ管理方法において、
    前記演算装置が、前記指標の合計値と所定の閾値とを比較して、前記合計値が前記閾値を超えたときに、前記複数のプログラムのうち前記複数のプログラムよりも少ない数のプログラムを選択するステップは、
    前記複数のプログラムとは異なる管理プログラムが実行することを特徴とするメモリ管理方法。
  8. 請求項1に記載のメモリ管理方法において、
    前記演算装置が、前記指標の合計値と所定の閾値とを比較して、前記合計値が前記閾値を超えたときに、前記複数のプログラムのうち前記複数のプログラムよりも少ない数のプログラムを選択するステップは、
    前記複数のプログラム自身が実行することを特徴とするメモリ管理方法。
  9. 請求項1に記載のメモリ管理方法において、
    前記複数のプログラムは、前記計算機の物理的な計算機資源を仮想化する仮想化部が生成した複数の仮想計算機上で実行され、
    前記演算装置が、前記回収した領域を解放するステップは、
    前記仮想化部が前記メモリ領域の解放を実行することを特徴とするメモリ管理方法。
  10. 請求項1に記載のメモリ管理方法において、
    前記複数のプログラムは、前記計算機の物理的な計算機資源を管理するオペレーティングシステムが生成する複数のプロセスとして実行され、
    前記演算装置が、前記メモリ領域のうち前記回収した領域を解放するステップは、
    前記オペレーティングシステムが前記メモリ領域の解放を実行することを特徴とするメモリ管理方法。
  11. 請求項1に記載のメモリ管理方法において、
    前記演算装置が、
    前記プログラムが利用するメモリ領域の容量と
    前記プログラムによる前記回収した領域を解放するステップ実行後の前記プログラムが利用するメモリ領域の使用量を取得し、
    当該量から前記閾値を演算するステップをさらに含むことを特徴とするメモリ管理方法。
  12. 演算装置とメモリを備えて複数のプログラムを実行し、前記複数のプログラムがそれぞれ使用する複数のメモリ領域中の不要になった領域をそれぞれ解放する計算機システムであって、
    前記複数のプログラムのそれぞれに前記メモリを割り当てる物理メモリ制御部と、
    前記プログラムを実行するために利用するメモリ領域を前記複数のプログラムのそれぞれについて前記メモリに設定する実行管理部と、
    前記複数のプログラムのそれぞれが利用する前記メモリ領域の解放の開始を判定する指標を取得する回収タイミング制御部と、
    前記複数のプログラムのそれぞれが利用する前記メモリ領域のうち不要領域を検出し、当該不要領域を回収する回収処理部と、
    前記複数のプログラムの各回収タイミング制御部から前記指標をそれぞれ取得し、取得した指標の合計値と所定の閾値とを比較して、前記合計値が前記閾値を超えたときに、前記回収処理部に不要領域の回収を指令する回収管理部と、を備え、
    前記回収管理部は、
    前記取得した指標の合計値と所定の閾値とを比較して、前記合計値が前記閾値を超えたときに、前記複数のプログラムのうち前記複数のプログラムよりも少ない数のプログラムを選択し、当該選択したプログラムの前記回収処理部に不要領域の回収を指令し、
    前記回収処理部は、
    前記メモリ領域のうち不要領域を検出し、当該不要領域を回収した後に、前記物理メモリ制御部に対して前記回収した不要領域の解放を指令することを特徴とする計算機システム。
  13. 計算機を制御するプログラムであって、
    前記計算機は、プログラムが格納されるメモリと、前記メモリに格納された前記プログラムを実行する演算装置と、を備え、
    前記メモリ領域の解放の開始を判定する指標を取得する手順と、
    前記指標の合計値と所定の閾値とを比較して、前記合計値が前記閾値を超えたときに、前記複数のプログラムのうち前記複数のプログラムよりも少ない数のプログラムを選択する手順と、
    前記選択したプログラムが利用する前記メモリ領域の不要になった領域を回収する手順と、
    前記メモリ領域のうち前記回収した領域を解放する手順と、
    を前記演算装置に実行させることを特徴とするプログラム。
JP2009258816A 2009-11-12 2009-11-12 メモリ管理方法、計算機システム及びプログラム Pending JP2011107746A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2009258816A JP2011107746A (ja) 2009-11-12 2009-11-12 メモリ管理方法、計算機システム及びプログラム
US13/391,566 US20120324199A1 (en) 2009-11-12 2010-03-04 Memory management method, computer system and program
PCT/JP2010/054060 WO2011058768A1 (ja) 2009-11-12 2010-03-04 メモリ管理方法、計算機システム及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009258816A JP2011107746A (ja) 2009-11-12 2009-11-12 メモリ管理方法、計算機システム及びプログラム

Publications (1)

Publication Number Publication Date
JP2011107746A true JP2011107746A (ja) 2011-06-02

Family

ID=43991434

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009258816A Pending JP2011107746A (ja) 2009-11-12 2009-11-12 メモリ管理方法、計算機システム及びプログラム

Country Status (3)

Country Link
US (1) US20120324199A1 (ja)
JP (1) JP2011107746A (ja)
WO (1) WO2011058768A1 (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9268678B2 (en) * 2011-12-02 2016-02-23 Vmware, Inc. Memory defragmentation in a hosted hypervisor
JP2014078175A (ja) * 2012-10-11 2014-05-01 Canon Inc 情報処理装置、その制御方法、及びプログラム
CN103902394B (zh) 2012-12-26 2017-04-12 腾讯科技(深圳)有限公司 清理终端冗余信息的方法及装置
CN103345447B (zh) * 2013-06-21 2016-06-08 大唐移动通信设备有限公司 内存管理方法及系统
US9146862B2 (en) 2013-07-18 2015-09-29 International Business Machines Corporation Optimizing memory usage across multiple garbage collected computer environments
US9176869B2 (en) * 2013-07-18 2015-11-03 Globalfoundries Inc Memory use for garbage collected computer environments
CN104484282B (zh) * 2014-12-31 2017-07-07 广东欧珀移动通信有限公司 一种内存回收方法和装置
TWI566229B (zh) * 2015-06-03 2017-01-11 友達光電股份有限公司 顯示裝置之時序控制器及其操作方法
US11030262B2 (en) * 2015-08-25 2021-06-08 Verizon Media Inc. Recyclable private memory heaps for dynamic search indexes
CN107220076B (zh) * 2016-09-27 2018-10-30 华为技术有限公司 一种内存回收方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006134136A (ja) * 2004-11-08 2006-05-25 Mitsubishi Electric Corp アプリケーション処理装置、ガーベージコレクション実行方法、記憶領域管理方法及びガーベージコレクション実行プログラム
JP2006285871A (ja) * 2005-04-04 2006-10-19 Canon Inc 情報処理装置、制御方法、プログラム、及び記憶媒体

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6629113B1 (en) * 1999-06-30 2003-09-30 International Business Machines Corporation Method and system for dynamically adjustable and configurable garbage collector
US7552153B2 (en) * 2004-12-28 2009-06-23 Sap Ag Virtual machine monitoring using shared memory
US8060543B1 (en) * 2005-04-29 2011-11-15 Micro Focus (Ip) Limited Tracking software object use
US20070033240A1 (en) * 2005-08-04 2007-02-08 International Business Machines Corporation Scheduling garbage collection
US20070136402A1 (en) * 2005-11-30 2007-06-14 International Business Machines Corporation Automatic prediction of future out of memory exceptions in a garbage collected virtual machine
US8001341B2 (en) * 2008-01-23 2011-08-16 International Business Machines Corporation Managing dynamically allocated memory in a computer system
US20090265707A1 (en) * 2008-04-21 2009-10-22 Microsoft Corporation Optimizing application performance on virtual machines automatically with end-user preferences
US7870257B2 (en) * 2008-06-02 2011-01-11 International Business Machines Corporation Enhancing real-time performance for java application serving
US8166269B2 (en) * 2009-11-05 2012-04-24 Oracle America, Inc. Adaptive triggering of garbage collection

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006134136A (ja) * 2004-11-08 2006-05-25 Mitsubishi Electric Corp アプリケーション処理装置、ガーベージコレクション実行方法、記憶領域管理方法及びガーベージコレクション実行プログラム
JP2006285871A (ja) * 2005-04-04 2006-10-19 Canon Inc 情報処理装置、制御方法、プログラム、及び記憶媒体

Also Published As

Publication number Publication date
WO2011058768A1 (ja) 2011-05-19
US20120324199A1 (en) 2012-12-20

Similar Documents

Publication Publication Date Title
WO2011058768A1 (ja) メモリ管理方法、計算機システム及びプログラム
US7827217B2 (en) Method and system for a grid-enabled virtual machine with movable objects
US9977689B2 (en) Dynamic scaling of management infrastructure in virtual environments
Ding et al. Fault-tolerant elastic scheduling algorithm for workflow in cloud systems
JP6138774B2 (ja) コンピュータにより実行される方法及びコンピュータシステム
JP5032191B2 (ja) サーバ仮想化環境におけるクラスタシステム構成方法及びクラスタシステム
JP6370218B2 (ja) メモリ管理方法、コンピュータシステム、コンピュータプログラム及び記憶媒体
JP4519098B2 (ja) 計算機の管理方法、計算機システム、及び管理プログラム
JP5834939B2 (ja) プログラム、仮想マシン制御方法、情報処理装置および情報処理システム
US9304803B2 (en) Cooperative application workload scheduling for a consolidated virtual environment
JP5577412B2 (ja) 計算機システム、マイグレーション方法及び管理サーバ
EP1577770A2 (en) Method and system for grid-enabled virtual machines with distributed management of applications
JP5980916B2 (ja) コンピュータにより実行される方法及びコンピュータシステム
US20160156568A1 (en) Computer system and computer resource allocation management method
JP2008293117A (ja) 仮想計算機の性能監視方法及びその方法を用いた装置
JP5803496B2 (ja) ストレージシステム
JP5218985B2 (ja) メモリ管理方法計算機システム及びプログラム
JP2007328413A (ja) 負荷分散方法
JP5740352B2 (ja) 仮想計算機システム及び仮想計算機システムの負荷制御方法
CN112313631A (zh) 闭环垃圾收集器
JP5617586B2 (ja) 情報処理プログラム、中継装置及び中継管理装置
CN107153554B (zh) 信息处理装置和库管理方法
Patrou NUMA awareness: improving thread and memory management in the JVM
JP2022127727A (ja) メモリ割当装置、メモリ割当プログラム、及びメモリ割当方法
WO2012014511A1 (ja) メモリ管理方法、メモリ管理プログラム、計算機

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120213

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120309

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130423

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20131008