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

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

Info

Publication number
JP5218985B2
JP5218985B2 JP2009125274A JP2009125274A JP5218985B2 JP 5218985 B2 JP5218985 B2 JP 5218985B2 JP 2009125274 A JP2009125274 A JP 2009125274A JP 2009125274 A JP2009125274 A JP 2009125274A JP 5218985 B2 JP5218985 B2 JP 5218985B2
Authority
JP
Japan
Prior art keywords
processing system
memory
program
unit
area
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.)
Expired - Fee Related
Application number
JP2009125274A
Other languages
English (en)
Other versions
JP2010272059A (ja
Inventor
諒蔵 山下
博泰 西山
智也 太田
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 JP2009125274A priority Critical patent/JP5218985B2/ja
Priority to US13/322,067 priority patent/US20120166744A1/en
Priority to PCT/JP2010/058853 priority patent/WO2010137600A1/ja
Publication of JP2010272059A publication Critical patent/JP2010272059A/ja
Application granted granted Critical
Publication of JP5218985B2 publication Critical patent/JP5218985B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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/0261Garbage collection, i.e. reclamation of unreferenced memory using reference counting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/151Emulated environment, e.g. virtual machine

Description

本発明は、メモリ管理方法、計算機システム及びプログラムに係り、特に、ガベージコレクション処理に関するメモリ管理方法、計算機システム及びプログラムに関する。
計算機システムにおいて、プログラムが使用しているメモリ上に確保されているオブジェクトの暗黙的な回収手段としてガベージコレクション(以後、GCと呼ぶ)がある。GCはメモリ上にある各オブジェクトに対して、プログラムから使用される可能性の有無を判定し、使用される可能性がないオブジェクト(以後、ゴミオブジェクトと呼ぶ)を回収する。GCは、Java(TM)仮想マシン(以後、JavaVMと呼ぶ)(JavaおよびすべてのJava関連の商標およびロゴは、米国およびその他の国における米国Sun Microsystems, Inc.の商標または登録商標である)等で使用されている。
GCの基本的な処理は、プログラムが参照を辿ることができる元(以後、参照ルートと呼ぶ)からメモリ上のオブジェクトの参照関係を辿り、最後まで到達できなかったオブジェクトをゴミオブジェクトと判定して回収することで行われる。
GCの一般的な方式として、Stop the World方式とConcurrent方式が存在する。Stop the World方式では、GC開始時にプログラムの処理実行を停止させ、メモリ上のオブジェクトの参照関係が変更されない状態で判定および回収処理を行い、回収処理後にプログラムの処理を再開させる。Concurrent方式では、プログラムの処理実行と並行して判定および回収処理を行うため、プログラムの処理停止はほとんど発生しない(例えば、非特許文献1)。
また、多くの計算機システムでは、メモリ領域はページと呼ばれる固定長の領域で管理されている。ゴミオブジェクト回収処理の際に、ゴミオブジェクトしか存在しないメモリページ(以後、ゴミページと呼ぶ)中のゴミオブジェクトのみを回収対象とし、非ゴミオブジェクトが含まれているメモリページ中のゴミオブジェクトの回収を省略することで、非常に効率のよいゴミオブジェクト回収処理が可能であることが知られている(例えば、非特許文献2)。
また、近年、ハイパーバイザーと呼ばれるソフトウェアを用いて、一つの計算機システム上で複数の仮想的な計算機システムを動作させる構成が普及し始めている。この構成では、仮想計算機システム上のプログラムの実行をほとんど停止させることなく、複数のハイパーバイザー間で仮想計算機システムを移動させる機能(ライブマイグレーション機能)をハイパーバイザーが提供している(例えば、非特許文献3)。
ライブマイグレーションは、仮想計算機システム全体を使用中のメモリ内容まで含めて別のハイパーバイザー上にコピーすることで実現されている。なお、従来から広く用いられているオペレーティングシステムと呼ばれるソフトウェアも、実行中のプログラムのコピーを生成する機能を提供している(例えば、非特許文献4)。
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方式のGCでは、GC処理中はプログラムの処理が停止するため、応答性に難がある。Stop the World方式では、大規模な環境での運用や半導体技術の向上により計算機システムが扱うメモリ量が増大するにつれ、GC処理による停止時間も伸びるため、業務アプリケーションのレスポンスタイムに深刻な影響を及ぼす。
Concurrent方式のGCでは、GC処理中にプログラムの処理実行によって変更されたメモリ上のオブジェクト間の参照関係を記録しておき、変更箇所を再度調査する処理が必要となる。これは、プログラムに使用される可能性のあるオブジェクト(以後、非ゴミオブジェクトと呼ぶ)をゴミオブジェクトと誤判定し、回収してしまう事態を防ぐためである。そのため、Concurrent方式では、プログラムはメモリ上のオブジェクトの参照関係を変更するたびに、本来の処理実行には不要な記録処理を行う必要があり、Stop the World方式に比べてスループット(実行時性能)が著しく低下する、という問題があった。
本発明の目的は上記のような課題に鑑みてなされたものであり、高いスループットと短い停止時間を両立したGC処理を可能とすることにある。
本発明は、プログラムが使用しているメモリの内容を別の処理系にコピーし、別処理系でコピーされたメモリ中のゴミオブジェクトの判定処理を行い、別処理系から元プログラムに判定結果を伝達し、元プログラムが伝達された判定結果を基にゴミオブジェクトの回収処理を行うことを特徴とする。
したがって、GC処理の一部を別の処理系で行うことで、高いスループットと短い停止時間を両立したGC処理を行うことができる。
本発明の実施の形態1の計算機システムの構成ブロック図である。 本発明の第1の実施の形態のGC処理の動作の概要を示す説明図である。 本発明の第1の実施の形態の閾値管理テーブルの一例の説明図である。 本発明の第1の実施の形態のメモリ残量管理テーブルの一例の説明図である。 本発明の第1の実施の形態の非ゴミオブジェクト情報管理テーブルの一例を示す説明図である。 本発明の第1の実施の形態の非ゴミオブジェクト情報管理テーブル124をヒープ領域112に適用した例を示すメモリマップである。 本発明の第1の実施の形態のGC開始条件判定処理のフローチャートである。 本発明の第1の実施の形態の非ゴミオブジェクト情報管理テーブルへの判定結果格納処理のフローチャートである。 本発明の第1の実施の形態の送信開始条件判定処理のフローチャートである。 本発明の第1の実施の形態の判定結果を基にした非ゴミオブジェクトへの印付加処理のフローチャートである。 本発明の第2の実施の形態の計算機システムの構成ブロック図である。 本発明の第2の実施の形態のGC処理の動作の概要を示す説明図である。 本発明の第2の実施の形態のGC制御閾値テーブルの一例の説明図である。 本発明の第2の実施の形態のGC開始条件判定処理のフローチャートである。 本発明の実施の形態3の回収対象領域増加処理の動作の概要を示す説明図である。 本発明の第3の実施の形態のGC処理の動作の概要を示す説明図である。 本発明の第3の実施の形態の計算機システムの構成ブロック図である。 本発明の第3の実施の形態の回収対象領域閾値管理テーブルの一例の説明図である。 本発明の第3の実施の形態のオブジェクト移動先管理テーブルの一例の説明図である。 本発明の第3の実施の形態の回収対象領域増加処理のフローチャートである。 本発明の第4の実施の形態の計算機システムの構成ブロック図である。 本発明の第4の実施の形態のGC処理の動作の概要を示す説明図である。
以下、本発明の一実施形態を添付図面に基づいて説明する。
計算機システム100上で動作するプログラムとして、Java(登録商標、以下同じ)VM111(111A及び111B)を使用し、JavaVM111のガベージコレクション(GC)処理をJavaVM111の内部での監視による所定の契機に基づいて開始する場合の実施の形態について、図面を用いて詳細に説明する。
図1は、本実施形態の計算機システムの構成を示すブロック図である。図1に示す様に、本実施形態の計算機システム100は、CPU181とメモリ182と入出力装置183を備える。なお、計算機システム100は、物理計算機システムである。
メモリ182上にはハイパーバイザー170が格納される。ハイパーバイザー170は、CPU181により実行されることで、メモリ182上に仮想マシン110(110A及び110B)を構成する。ハイパーバイザー170は、仮想マシン110に対するCPU181、メモリ182および入出力装置183の割り当てを制御する。上記の割り当ての設定は予め管理者等によりなされる。仮想マシン110は、割り当てられたCPU181、メモリ182および入出力装置183により、物理計算機システムのエミュレーションを行う。また、仮想マシン110は、ハイパーバイザー170により一意な値が設定された仮想マシン識別子118(118A及び118B)を持つ。
ハイパーバイザー170は、仮想マシンコピー部171を含む。仮想マシンコピー部171は、ハイパーバイザー170が管理する仮想マシン110のコピーを生成する処理部である。仮想マシンコピー部171によるコピー処理は、ライブマイグレーション機能によるコピー生成後に、コピー元の仮想マシンを消去しないことで実現可能である。仮想マシンのコピー生成後に、仮想マシンコピー部171は、コピー先の仮想マシンの仮想マシン識別子118をコピー元の仮想マシンの仮想マシン識別子118とは異なる値に設定する。上記仮想マシン識別子118以外の点では、生成された仮想マシンのコピーは、コピー元の仮想マシンと全く同じ構成要素を含む。また、コピーされた仮想マシンの各構成要素は、コピーが完了した時点での対応するコピー元の構成要素と全く同じ状態で動作を開始する。仮想マシンコピー部171によるコピー処理の完了は、仮想マシンコピー部171にコピー元仮想マシンに関する処理状況を問い合わせることで把握可能である。あるいは、仮想マシンコピー部171は、コピー処理完了後に、コピー元仮想マシンに対して割り込み等により処理完了を通知してもよい。
仮想マシン110Bは、JavaVM111AのGC処理中に、仮想マシンコピー部171により仮想マシン110Aをコピーすることで生成された仮想マシンである。
なお、仮想マシン110Aの数は必ずしも一台である必要はなく、メモリ182上に複数台の仮想マシン110Aが存在していてもよい。
仮想マシン110A上では、オペレーティングシステム160AとJavaVM111Aが動作する。JavaVM111Aは、ヒープ領域112A、参照ルート114A、Javaプログラム実行部115A、GC処理部120A、および監視部130Aから構成される。JavaVM111A上では、入出力装置183から読み込まれたJavaプログラム113がJavaプログラム実行部115により実行される。Javaプログラム実行部115は、Javaプログラム113の処理実行中に必要となったオブジェクトを、ヒープ領域112A中に確保する。また、Javaプログラム実行部115A、115Bは、参照ルート114(114A及び114B)にヒープ領域112A、112B中のオブジェクトへの参照を格納し、当該オブジェクトへの操作を行う。
また、仮想マシン110B上では、オペレーティングシステム160BとJavaVM111Bが動作する。JavaVM111Bは、ヒープ領域112B、参照ルート1114B、Javaプログラム実行部115B、GC処理部120B、および監視部130Bから構成される。
また、仮想マシン110Aと仮想マシン110Bの監視部130A、130Bの総称を監視部130とし、他の機能部位の総称も同様にして添え字「A」または「B」のない符号で表すものとする。
本発明は、Javaプログラム実行部115によりヒープ領域112A中に確保されたオブジェクトの開放を行うGC処理に適用される。仮想マシン110AのGC処理はGC処理部120A、120Bおよび監視部130A、130Bにより実行される。GC処理部120Aは、GC処理開始部121、ゴミオブジェクト判定部122A、ゴミオブジェクト回収部123、ゴミオブジェクト情報送信部125A、ゴミオブジェクト情報受信部126、および非ゴミオブジェクト情報管理テーブル124Aから構成される。なお、非ゴミオブジェクト情報は、ヒープ領域112に格納されているオブジェクトのうち、Javaプログラム実行部115によって実行中または実行予定(あるいは使用予定)のオブジェクトに関する情報である。一方、ゴミオブジェクトは実行予定や使用予定がなくヒープ領域112から削除可能なオブジェクトを指す。
仮想マシン110BのGC処理部120Bは、ゴミオブジェクト判定部122B、ゴミオブジェクト情報送信部125B、および非ゴミオブジェクト情報管理テーブル124Bから構成される。なお、仮想マシン110Aの複製である仮想マシン110BにはGC処理開始部121、ゴミオブジェクト回収部123及びゴミオブジェクト情報受信部126もコピーされるが、各機能は停止させてあるため図示は省略する。
仮想マシン110AのGC処理開始部121は、ハイパーバイザ170の仮想マシンコピー部171に要求して仮想マシン110Aのコピーを作成し、GC処理を開始する処理部である。
ゴミオブジェクト判定部122A、122Bは、ヒープ領域112A、112B中の非ゴミオブジェクトに印をつける処理部である。ゴミオブジェクト回収部123は、ヒープ領域112A中の印のついていないオブジェクトを回収する処理部である。
仮想マシン110Bのゴミオブジェクト情報送信部125Bは、ヒープ領域112B中の印のついているオブジェクトの情報を、仮想マシン110Aのゴミオブジェクト情報受信部126に送信する処理部である。仮想マシン110Aのゴミオブジェクト情報受信部126は、仮想マシン110Bのゴミオブジェクト情報送信部125Bから受信した非ゴミオブジェクトの情報を基にヒープ領域112A中の非ゴミオブジェクトに印をつける処理部である。非ゴミオブジェクト情報管理テーブル124A、124Bは、非ゴミオブジェクトの情報を格納するテーブルであり、ゴミオブジェクト情報送信部125Bおよびゴミオブジェクト情報受信部126による送受信処理および印付加処理の際に使用される。監視部130A、130Bは、GC処理および非ゴミオブジェクト情報送信処理の開始条件を判定し、処理開始の契機を通知する処理部である。
図2は、本第1実施形態におけるGC処理の概要を示す図である。
まず、計算機システム100では、管理者またはユーザの指令によって、ハイパーバイザ170が仮想マシン110Aをメモリ182に生成し、仮想マシン110AでOS160Aを起動してからJavaVM111Aを実行する。
GC処理は、所定の契機(S101)で、GC処理開始部121Aが、仮想マシン識別子118Aの値を確認し(S109)、ハイパーバイザー170の仮想マシンコピー部171に仮想マシン110Aのコピーを要求することで開始される(S102)。コピーの生成要求を受けた仮想マシンコピー部171は新たに仮想マシン110Aをコピーした仮想マシン110Bを生成する。上記GC開始の契機は監視部130Aにより判定され(S101)、GC処理開始部121Aは監視部130AがGC開始フラグをセットしていればGCを開始する。
GC処理開始部121Aは仮想マシンコピー部171に定期的に問い合わせを行い、仮想マシン110Aのコピー処理が完了したと判定されるまで待機する。この間、Javaプログラム実行部115AによるJavaプログラム113の実行は継続される。仮想マシン110Bの生成後、仮想マシン110Aと仮想マシン110Bは同時に動作する。
まず、各仮想マシン110上で、GC処理開始部121が仮想マシン識別子118を再確認する(S110)。仮想マシンコピー部171により、仮想マシン110Bの仮想マシン識別子118Bは仮想マシン110Aの仮想マシン識別子118Aとは異なる値に設定されるため、再確認した仮想マシン識別子118の値をS109ステップで確認した仮想マシン識別子118Aの値と比較することで、各GC処理開始部121は自分が動作している仮想マシン110を識別することが可能である。これに基づき、各GC処理開始部121A、121Bは、それぞれ異なる処理を行う。
仮想マシン110Bでは、GC処理開始部121BがJavaプログラム実行部115Bを停止させ、ゴミオブジェクト判定部122Bを起動させる。ゴミオブジェクト判定部122Bは、ヒープ領域112Bに対するゴミオブジェクト判定処理を行う(S203)。ゴミオブジェクト判定処理は、ゴミオブジェクト判定部122Bが参照ルート114Bから開始してヒープ領域112B上のオブジェクトの参照関係を辿り、辿ったオブジェクトに印を付けてゆくことで行われる。この処理は、参照ルート114Bから辿れるヒープ領域112B中の全てのオブジェクトに印を付け終わるまで続けられる。ゴミオブジェクト判定処理の終了後、仮想マシン110Bでは、ゴミオブジェクト情報送信部125Bが、ヒープ領域112B中の各オブジェクトにつけられた印を基に、非ゴミオブジェクト情報を非ゴミオブジェクト情報管理テーブル124Bに格納する(S204)。
仮想マシン110Bによる上記ゴミオブジェクト判定処理の間、仮想マシン110Aでは、Javaプログラム実行部115によるJavaプログラム113の実行が継続される(S103)。
仮想マシン110Bでは、上記非ゴミオブジェクト情報の非ゴミオブジェクト情報管理テーブル124Bへの格納処理後、所定の契機で、ゴミオブジェクト情報送信部125Bが仮想マシン110Aに非ゴミオブジェクト情報管理テーブル124Bの内容を送信する(S206)。
仮想マシン110Aでは、ゴミオブジェクト情報受信部126が仮想マシン110Bからの非ゴミオブジェクト情報管理テーブル124Bの内容を受信して(S106)、テーブル中の判定結果を基に、ヒープ領域112A中の非ゴミオブジェクトに印をつける(S107)。上記ステップS206の送信開始の契機は監視部130Bにより判定され(S205)、ゴミオブジェクト情報送信部125Bは監視部130Bが送信開始フラグをセットしていれば送信を開始する。その後、仮想マシン110Aでは、ゴミオブジェクト回収部123が、仮想マシン110Bから受信した上記の印に基づいてヒープ領域112A中のゴミオブジェクトを回収する(S108)。
上記GC開始の契機、および送信開始契機の判定を行う監視部130(130A、130B)は、メモリ残量監視部132(132A及び132B)、実行系処理負荷監視部133(133A及び133B)、別処理系用リソース監視部134(134A及び134B)および閾値管理テーブル131(131A及び131B)から構成され、構成要素である各監視部が取得し、算出した値を予め設定した閾値管理テーブル131中の閾値と比較することで、契機を決定する。監視部130による開始契機判定により、適切な時点でJavaVM111AにGC開始処理およびゴミオブジェクト回収処理を実行させることが可能となる。
仮想マシン110A中で、監視部130Aは、Javaプログラム実行部115Aがヒープ領域112Aにオブジェクトを確保する際に呼び出されてGC開始条件の判定を行う。あるいは、Javaプログラム実行部115Aは、一定の時間間隔で、監視部130Aを呼び出してもよい。仮想マシン110B中で、監視部130Bは、仮想マシン110Bのゴミオブジェクト情報送信部125Bにより、一定の時間間隔で呼び出されて送信開始条件の判定を行う。
図3は、本第1実施形態の仮想マシン110A及び仮想マシン110Bにそれぞれ設定される閾値管理テーブル131のデータ形式の一例を示す図である。閾値管理テーブル131は、閾値種別フィールド211と閾値フィールド212から構成される。閾値種別フィールド211は、設定される閾値の種別を格納する。閾値フィールド212は、その閾値を格納する。
図示の例では、GC開始条件用のメモリ残量閾値と、送信開始条件用のメモリ残量閾値と、を仮想マシン110Aに割り当てられたヒープ領域112Aの記憶領域の空き容量で指定する。また、GC開始条件用のメモリ残量減少率閾値と、送信開始条件用のメモリ残量減少率閾値と、を仮想マシン110Aに割り当てられたヒープ領域112Aの空き容量の減少率で指定する。なお、減少率は単位時間当たりの空き容量で示し、例えば、MB/secである。また、GC開始条件用の実行系CPU使用率閾値と、送信開始条件用の実行系CPU使用率閾値を、仮想マシン110Aが利用するCPU181の使用率で設定し、GC開始条件用の別処理系用CPU使用率閾値と、送信開始条件用の別処理系用CPU使用率閾値とを仮想マシン110Bが利用するCPU181の使用率で設定し、GC開始条件用の別処理系用メモリ使用率閾値と、送信開始条件用の別処理系用メモリ使用率閾値とを、仮想マシン110Bにおけるヒープ領域112Bの使用率として予め設定する。なお、仮想マシン110Bの閾値管理テーブル131Bは、仮想マシン110Aの複製である。
図5Aは、本第1実施形態の非ゴミオブジェクト情報管理テーブル124のデータ形式の一例を示し、図5Bは非ゴミオブジェクト情報管理テーブル124をヒープ領域112に適用した例を示すメモリマップである。仮想マシン110B中の非ゴミオブジェクト情報管理テーブル124Bは、ゴミオブジェクト判定部122Bによる、判定処理の結果を格納する。仮想マシン110A中の非ゴミオブジェクト情報管理テーブル124Aは、仮想マシン110Aのゴミオブジェクト情報受信部126が、仮想マシン110Bのゴミオブジェクト情報送信部125Bから受信した非ゴミオブジェクト情報を格納する。
非ゴミオブジェクト情報管理テーブル124は、先頭アドレスフィールド231と終端アドレスフィールド232を含む。先頭アドレスフィールド231は、各非ゴミオブジェクトの先頭のアドレスを格納する。終端アドレスフィールド232は、その非ゴミオブジェクトの終端のアドレスを格納する。
非ゴミオブジェクト情報管理テーブル124の要素数は可変であり、その数はヒープ領域112中の非ゴミオブジェクトの個数+1に等しい。例えば、図5Bに示されているように、ヒープ領域112中に、非ゴミオブジェクト301と非ゴミオブジェクト302と非ゴミオブジェクト303の3つの非ゴミオブジェクトが存在した場合、非ゴミオブジェクト情報管理テーブル124の要素数は4であり、図5Aの要素E301、および要素E302、および要素E303は、それぞれ非ゴミオブジェクト301、および非ゴミオブジェクト302、および非ゴミオブジェクト303の先頭のメモリアドレスと終端のメモリアドレスを格納する。非ゴミオブジェクト情報管理テーブル124の終端を示すため、最終要素E300は先頭アドレス、終端アドレスともに0とする。
本実施形態において、ゴミオブジェクト判定部122Bが行うゴミオブジェクト判定処理は、上述したようにゴミオブジェクト判定部122Bがヒープ領域112Bを探索し、オブジェクトの参照関係から使用中のオブジェクトを非ゴミオブジェクトと判定し、非ゴミオブジェクトのヒープ領域112Bの記憶領域(先頭アドレスと終端アドレス)を決定する処理であり、非ゴミオブジェクト以外の領域がゴミとして判定される。
次に、図2のステップ中で、特に発明で特徴的であるステップS101、S204、S205、S107について、フローチャートを用いて説明する。
まず、図2のGC開始条件判定処理S101について、処理の詳細を図6のフローチャートを用いて説明する。
仮想マシン110Aの監視部130Aは、まずメモリ残量監視部132AにGC開始条件判定を要求する(S330)。メモリ残量監視部132Aは、ヒープ領域112Aのメモリ残量を取得し、メモリ残量が閾値管理テーブル131Aに設定された閾値以下であればGC開始フラグを有効な状態(例えば「1」)に設定する。また、メモリ残量監視部132Aは、ヒープ領域112Aの残量の減少率も算出し、減少率が閾値管理テーブル131Aに設定された閾値以上であればGC開始フラグを同様に設定する。各閾値の取得は、閾値管理テーブル131Aを参照することで行う。減少率の算出には、メモリ残量監視テーブル135Aを用いる。具体的には、メモリ残量監視部132Aは、ヒープ領域112Aのメモリ残量を取得するたびに、メモリ残量監視テーブル135Aにそのときの時間と残量を格納する。減少率の算出は、現在の残量と以前の残量の差分を、現在の時間と以前の時間の差分で割り、単位時間当たりの残量の変化を求めることで行う。メモリ残量監視部132Aにより、空きメモリ残量の不足によりJavaVM111Aの実行が困難になる前に、GC処理を開始することが可能となる。
次に、監視部130Aは、実行系処理負荷監視部133AにGC開始条件判定を要求する(S331)。実行系処理負荷監視部133Aは、実行系である仮想マシン110AのJavaVM111AによるCPU181の使用率をハイパーバイザ170から取得し、使用率が閾値以下であればGC開始フラグを有効な状態(例えば「1」)に設定する。CPU181の使用率の取得は、実行系処理負荷監視部133Aが、CPU181の仮想マシン110Aへのリソースの割り当てを管理しているハイパーバイザー170と通信することで行う。各閾値の取得は、閾値管理テーブル131Aを参照することで行う。実行系処理負荷監視部133Aにより、CPU181の処理能力がJavaVM111Aの処理に余裕がある時点で、仮想マシン110Aのコピー生成処理を行うことが可能となる。
なお、ハイパーバイザ170は、仮想マシン110A、110Bにそれぞれ仮想CPU(または論理CPU)を割り当てて、仮想CPUの使用率をCPU181の使用率として応答する。この場合は、仮想マシン110A、110Bの仮想CPUの使用率を便宜上JavaVM111のCPU使用率として利用する。あるいは、ハイパーバイザ170から取得した仮想マシンの仮想CPUの使用率に、OS160A、160Bから取得したJavaVM111のCPU使用率を乗じて、実際にJavaVM111が使用しているCPU使用率をもとめても良い。
最後に、仮想マシン110Aの監視部130Aは、別処理系用リソース監視部134AにGC開始条件判定を要求する(S332)。別処理系用リソース監視部134Aは、仮想マシン110BにおけるCPU181およびメモリ182(ヒープ領域112B)の使用率を取得し、CPU181の使用率またはメモリ使用率が閾値(別処理系のCPU処理系閾値、別処理系のメモリ使用率閾値)以下であればGC開始フラグを設定する。仮想マシン110Bの各使用率の取得は、別処理系用リソース監視部134Aが、CPU181およびメモリ182を管理しているハイパーバイザー170と通信を行うことで行う。閾値の取得は、閾値管理テーブル131Aを参照することで行う。別処理系用リソース監視部134Aにより、別処理系である仮想マシン110Bを生成、実行させる際に必要となる計算機リソースに余裕がある時点で、GC処理を開始することが可能となる。別処理系用リソース監視部134Aによる制御は、特にハイパーバイザー170上で複数のJavaVM111が動作しており、全JavaVM111が同時に別処理系を生成、実行するのに十分な計算機リソースが計算システム100にない場合に有効である。
上記図6のステップS330〜S332の要求の順序は異なっていてもよく、あるいは複数の要求を並列に出してもよい。
図4は、本第1実施形態のメモリ残量管理テーブル135(135A、135B)のデータ形式の一例を示す図である。メモリ残量管理テーブル135(135A、135B)は、各仮想マシン110A、110Bのメモリ残量監視部132(132A、132B)によってヒープ領域112A、112Bの空き容量(記憶領域の残量)が記録、参照される値を格納する。
メモリ残量管理テーブル135は、時刻フィールド221と残量フィールド222を含む。時刻フィールド221は、メモリ残量監視部135がメモリ残量管理テーブル135にヒープ領域112A、112Bの空き容量の値を記録した時刻を格納する。残量フィールド222は、時刻フィールド221の時点でのヒープ領域112(112A、112B)のメモリ残量を格納する。
次に、図2の非ゴミオブジェクト情報格納処理S204について説明する。非ゴミオブジェクト情報の格納処理では、仮想マシン110Bのゴミオブジェクト情報送信部125Bが、ヒープ領域112B中の全てのオブジェクトを先頭から順に辿り、印がついているオブジェクトの情報を非ゴミオブジェクト情報管理テーブル124Bに格納する。この処理の詳細を図7のフローチャートを用いて説明する。
まず、ゴミオブジェクト情報送信部125Bは、ヒープ領域112B中の先頭のオブジェクトを取得し、当該オブジェクトの情報を変数xに格納する(S451)。
つづくステップS454で、ゴミオブジェクト情報送信部125Bは、ヒープ領域112B中に未処理のオブジェクトがあることを判定する。未処理のオブジェクトがある場合、ゴミオブジェクト情報送信部125Bは、ステップS460に移行する。未処理のオブジェクトがなければ、ゴミオブジェクト情報送信部125Bは、図7のフローチャートの処理を終了する。
ステップS460では、ゴミオブジェクト情報送信部125Bは、変数xに格納したオブジェクトの情報について、ゴミオブジェクト判定部122Bによる印の有無を調べる。
つづくステップS461で、変数xのオブジェクトに予め設定した印がある場合には、ゴミオブジェクト情報送信部125Bは、ステップS464に移行する。印がなければ、ゴミオブジェクト情報送信部125Bは、ステップS467に移行する。
ステップS464では、ゴミオブジェクト情報送信部125Bは、上記印の有無から非ゴミオブジェクトであると判定した当該オブジェクトの先頭アドレスと終端アドレスを、非ゴミオブジェクト情報管理テーブル124Bに格納し、ステップS467に移行する。
ステップS467では、ゴミオブジェクト情報送信部125Bは、変数xの値をヒープ領域112B中のxの次のオブジェクトに更新し、ステップS454に移行する。
以後、ヒープ領域112B中の全てのオブジェクトについて上記処理が終わるまで、ゴミオブジェクト情報送信部125Bは、ステップS454〜ステップS467のループを繰り返す。
次に、図2の判定結果送信開始条件判定処理S205について、詳細を図8のフローチャートを用いて説明する。
仮想マシン110Bの監視部130Bは、まずメモリ残量監視部132Bに送信開始条件判定を要求する(S350)。メモリ残量監視部132Bは、仮想マシン110Aと通信を行って、ヒープ領域112Aのメモリ残量を取得し、仮想マシン110Aのメモリ182の残量が閾値以下であれば送信開始フラグを有効な状態(例えば「1」)に設定する。また、監視部130Bはヒープ領域112Aの残量の減少率も仮想マシン110Aから取得し、減少率が閾値以上であれば送信開始フラグを有効な状態に設定する。ヒープ領域112Aの残量および残量の減少率の取得は、メモリ残量監視部132Bが、仮想マシン110Aのメモリ残量監視部132Aと通信することによって行う。各閾値の取得は、閾値管理テーブル131Bを参照することで行う。メモリ残量監視部132Bにより、ヒープ領域112Aの空きメモリ残量の不足によりJavaVM111Aの実行が困難になる前に、送信開始フラグを有効な状態に設定して判定結果の送信を開始し、メモリの空き領域の回収を行うことが可能となる。
次に、監視部130Bは、実行系処理負荷監視部133BにGC開始条件判定を要求する(S351)。実行系処理負荷監視部133Bは、JavaVM111AによるCPU181の使用率を仮想マシン110Aから取得し、使用率が閾値以下であれば送信開始フラグを有効な状態(例えば「1」)に設定する。CPU181の使用率の取得は、上述したように実行系処理負荷監視部133Bが、ハイパーバイザー170と通信することで仮想CPUの使用率を取得する。CPU181の使用率の閾値の取得は、実行系処理負荷監視部133Bが閾値管理テーブル131Bを参照することで行う。実行系処理負荷監視部133Bにより、仮想マシン110AでJavaVM111Aの処理に余裕がある時点で、ゴミオブジェクト情報の受信処理およびゴミオブジェクトの回収処理を行うことが可能となる。
最後に、監視部130Bは、別処理系用リソース監視部134BにGC開始条件判定を要求する(S352)。別処理系用リソース監視部134Bは、CPU181およびメモリ182の使用率を取得し、使用率が閾値以上であれば送信開始フラグを有効な状態(例えば「1」)に設定する。CPU181およびメモリ182の使用率の取得は、処理系用リソース監視部134Bが、ハイパーバイザー170と通信を行うことで上記と同様に行う。CPU181およびメモリ182の使用率の閾値の取得は、閾値管理テーブル131Bを参照することで行う。
別処理系用リソース監視部134Bにより、仮想マシン110Bの生成と、実行に必要な計算機リソースが逼迫した時点で送信処理を開始し、仮想マシン110Bが使用していたCPU181およびメモリ182をハイパーバイザー170に返却することが可能となる。
監視部130A同様、監視部130Bの上記ステップS350〜S352の要求の順序は異なっていてもよく、あるいは複数の要求を並列に出してもよい。
次に、図2の非ゴミオブジェクトへの印付加処理S107について説明する。非ゴミオブジェクトへの印付加処理は、ゴミオブジェクト情報受信部126がヒープ領域112A中の全てのオブジェクトを先頭から順に辿り、非ゴミオブジェクトテーブル124A中に登録されているオブジェクトに対して印をつける。この処理の詳細を図9のフローチャートを用いて説明する。
まず、ゴミオブジェクト情報受信部126Aは、ヒープ領域112A中の先頭のオブジェクトを取得し、オブジェクトの情報を変数xに格納する(S551)。
つづくステップS554で、ゴミオブジェクト情報受信部126は、メモリ領域(ヒープ領域112A)中に未処理のオブジェクトがあるか否かを判定する。未処理のオブジェクトがある場合は、ゴミオブジェクト情報受信部126は、ステップS560に移行する。未処理のオブジェクトがなければ、ゴミオブジェクト情報受信部126は、図9のフローチャートの処理を終了する。
ステップS560では、ゴミオブジェクト情報受信部126は、変数xに格納したオブジェクトが非ゴミオブジェクト情報管理テーブル124Aに格納されているかどうかを調べる。
つづくステップS561で、変数xに格納したオブジェクトが非ゴミオブジェクト情報管理テーブル124Aに格納されていた場合には、ゴミオブジェクト情報受信部126は、ステップS564に移行する。格納されていなければ、ゴミオブジェクト情報受信部126は、ステップS567に移行する。
ステップS564では、ゴミオブジェクト情報受信部126は、非ゴミオブジェクトであると判定した当該オブジェクトに印をつけ、ステップS567に移行する。
ステップS567では、ゴミオブジェクト情報受信部126は、変数xの値をヒープ領域112A中の変数xの次のオブジェクトに更新し、ステップS554に移行する。
以後、ヒープ領域112A中の全てのオブジェクトについて上記処理が終わるまで、ゴミオブジェクト情報受信部126は、ステップS554〜ステップS567のループを繰り返す。
以上により、本第1実施形態の計算機システム100では、JavaVM111Aを実行する仮想マシン110A(第1の処理系)の代わりに、仮想マシン110Aの複製である仮想マシン110B(第2の処理系=別処理系)を生成し、仮想マシン110BのJavaVM111Bのヒープ領域112Bでゴミオブジェクト判定処理を行うことにより、仮想マシン110Aで実行されるJavaVM111Aで高スループットを維持しながら短いGC停止時間でGC処理を実現することが可能である。
そして、GC処理の開始の契機(第1の契機)をヒープ領域112Aのメモリ残量(JavaVM111Aが使用可能な空き領域の量)が閾値以下、またはメモリ残量の減少率が閾値以上とすることで、空きメモリ残量の不足によりJavaVM111Aの実行が困難になる前に、GC処理を開始することが可能となる。
さらに、JavaVM111Aを実行する仮想マシン110Aとは別処理系の仮想マシン110Bでヒープ領域の非ゴミオブジェクトの判定を行うことで、仮想マシン110Aの処理負荷に影響を与えることなくゴミオブジェクトの判定処理を実施できる。
そして、仮想マシン110Bから非ゴミオブジェクトの判定結果を仮想マシン110Bに送信する契機(第2の契機)を仮想マシン110A(実行系)のCPU使用率が閾値以下、または仮想マシン110Aのヒープ領域112Aのメモリ残量が閾値以下となった時点とすることで、JavaVM111Aの実行が困難になる前、またはJavaVM111Aの実行に影響を与えないCPU使用率でGC処理を実行することが可能となる。
<第2実施形態>
次に、本発明の第2の実施形態を示す。第2の実施形態は、計算機システム100上で動作するプログラムとしてJavaVM111を使用し、JavaVM111のGC処理をJavaVM111の外部の処理系からの通知を契機として開始する場合について、図面を用いて詳細に説明する。
本第2実施形態は、図10に示すように、計算機システム100上で動作する1台以上の仮想マシン110A上のJavaVM111に対して、仮想マシン110Aとは異なる仮想マシン上で動作するGC制御用のプログラムからGC処理開始の契機を通知することにより、ゴミオブジェクト判定処理に用いられる計算リソースをJavaVM111間で効率的に共有するものである。GC制御プログラムは、GC処理を開始することが適切と判断したJavaVM111にGC処理開始の契機を通知する。GC制御プログラムは、GC処理の開始契機を通知したJavaVM111により作成されたコピー仮想マシンのゴミオブジェクト判定処理中は、新たなGC開始契機の通知を行わずに待機し、GC処理の開始契機を通知したJavaVM111からGC終了通知を受けると、GC開始契機の通知を再開する。以上により、コピー仮想マシン1台分の計算リソースをJavaVM間で効率よく共有することが可能である。
以上の処理は、前記第1実施形態の構成にGC制御プログラムを実行する第3の処理系として仮想マシン110Cを追加し、前記図2のステップS101にJavaVM111とGC制御プログラムでGC開始命令の送受信を行い、S106ステップ後にJavaVM111とGC制御プログラムでGC終了通知の送受信を行うことで実現される。
図10は、本第2実施形態の計算機システムの構成ブロック図である。なお、メモリ182上に二台以上の仮想マシン110Aが存在してもよい。
メモリ182には仮想マシン110Cが格納されており、仮想マシン110C上では、オペレーティングシステム160CとGC制御プログラム1191が動作する。
GC制御プログラム1191は、CPU使用率取得部1197、メモリ残量取得部1198、GC制御閾値テーブル1196、GC開始命令送信部1195、GC処理終了通知受信部1199から構成される。CPU使用率取得部1197は仮想マシン110AのJavaVM111のCPU使用率をハイパーバイザ170から取得する処理部である。メモリ残量取得部1198は仮想マシン110Aのヒープ領域112のメモリ残量を取得する処理部である。GC制御閾値テーブル1196は、GC制御プログラム1191によりGC処理を開始させるJavaVM111を選択するために参照される各種閾値を格納するテーブルである。GC開始命令送信部1195は、GC開始命令を送信する処理部である。GC処理終了通知受信部1199は、GC処理終了通知を受け取る処理部である。
仮想マシン110Aで実行されるJavaVM111の監視部130に含まれるメモリ残量送信部1128は、ヒープ領域112のメモリ残量を仮想マシン110CのGC制御プログラム1191に通知する処理部である。JavaVM111のGC処理部120に含まれるGC開始命令受信部1125は、GC制御プログラム1191によるGC開始通知を受けて、ヒープ領域112に対するGC処理を開始する処理部である。その他の構成は、前記第1実施形態と同様であり、図示は省略する。また、図10において、JavaVM111を実行する仮想マシン110Aを図示したが、図示しない仮想マシンにおいてもJavaVM111が実行されているものとする。
図11は、本実施形態におけるGC処理の概要を示す図である。
まず、GC制御プログラム1191は、所定の条件が成立したときにGC処理を開始するべきJavaVM111を選択する(S1300)。
次に、GC制御プログラム1191は、選択したJavaVM111に対してGC開始命令を送信する(S1301)。JavaVM111を実行する仮想マシン110AのGC開始命令受信部1125は、GC開始命令を受信すると(S1101)、ハイパーバイザ170の仮想マシンコピー部171に前記第1実施形態と同様に指令して、仮想マシン110Aのコピーを仮想マシン110Bとして作成してGC処理を開始する(S102)。以降、仮想マシン110AにおけるS109、S102、S110、S103、S106の処理、及び仮想マシン110BにおけるS110、S203、S204、S205、S206の処理は前記第1実施形態の処理と同様である。この間、GC制御プログラム1191は待機する(S1302)。
ステップS106の後、JavaVM111のGC処理終了通知送信部1126は、GC制御プログラム1191に対してGC処理終了通知を送信する(S1107)。GC処理終了通知受信部1199がGC処理終了通知を受信すると、GC制御プログラム1191は再度S1300の判定処理に戻る。また、ステップS1107の後にJavaVM111で実行されるS107、S108は前記第1実施形態の処理と同様である。
以下、本第2実施形態と前記第1実施形態との差分箇所について、詳細に説明する。
図12は、本第2実施形態のGC制御閾値テーブル1196のデータ形式の一例を示す図である。GC制御閾値テーブル1196は、GC開始命令送信部1195によって参照される各種の閾値を格納する。GC制御閾値テーブル1196は、本第1実施形態の閾値管理テーブル131と同様に、閾値種別フィールド1211と閾値フィールド1212とを含む。
次に、図11中のステップ中で、特に本実施形態で特徴的であるステップS1300について、図13のフローチャートを用いて説明する。
GC制御処理S1300では、GC制御プログラム1191が、仮想マシン110A及び図示しない仮想マシンのJavaVM111のCPU使用率およびメモリ残量がどちらも閾値以下のJavaVM111の中で、最もメモリ残量が少ないJavaVM111に対して、GC開始命令を送信する。なお、各閾値は、GC制御閾値テーブル1196に予め設定された値である。CPU使用率が閾値以下という条件は、GC処理を開始する余裕があるJavaVM111を選択するためのものである。また、メモリ残量が閾値以下という条件は、GC処理を実行する必要性が高いJavaVM111を選択するためのものである。最もメモリ残量が少ないという条件により、特にGC処理の必要性が高いJavaVM111にGC処理を開始させることが可能となる。
まず、GC制御プログラム1191は、複数のJavaVM111のCPU使用率およびメモリ残量をそれぞれ取得する。CPU使用率は、前記第1実施形態と同様に、CPU使用率取得部1197がハイパーバイザー170と通信することで取得する(S1501)。メモリ残量は、メモリ残量取得部1198がJavaVM111のメモリ残量送信部1128と通信することで取得する(S1502)。
次に、GC制御プログラム1191は、CPU使用率およびメモリ残量がともに閾値以下であるJavaVMが存在することを判定する。各種閾値はGC制御閾値テーブル1196を参照することで取得する(S1503、S1505)。各閾値の条件を満たすJavaVM111が存在しない場合には、GC制御プログラム1191は、予め管理者等により設定された一定時間だけ待機した(S1506)後、再度S1501に戻り処理を繰り返す。
CPU使用率およびメモリ残量がともに閾値以下であるJavaVM111が存在する場合、GC制御プログラム1191は上記条件を満たすJavaVM111のなかで最もメモリ残量が少ないJavaVM111を、GC処理開始通知の送信対象のJavaVMとして選択する(S1507)。
以上により、本実施形態2の計算機システム100では、GC制御プログラム1191が1台以上のJavaVM111のGC処理を制御することで、JavaVM111間でゴミオブジェクト判定処理に用いられる計算リソースを効率よく共有することが可能である。
<第3実施形態>
次に、本発明の第3の実施形態として計算機システム100上で動作するプログラムとしてJavaVM111を使用し、JavaVM111のGC処理をJavaVM111内部での監視による契機に基づいて開始し、さらに回収処理の際にメモリページ単位でゴミオブジェクトを回収する場合の実施例について、図面を用いて詳細に説明する。なお、本第3実施形態では、JavaVM111(またはOS160)が、ヒープ領域112を所定の記憶領域(例えば、数キロバイト)であるページ単位で管理する。
メモリページ単位での回収手法によるゴミオブジェクト回収処理の改善と、本発明によるゴミオブジェクト判定処理の改善を組み合わせることで、ゴミオブジェクト判定処理とゴミオブジェクト回収処理の両方を、高いスループットを維持したまま短い停止時間で行うことができ、非常に効果的である。しかし、従来手法でゴミオブジェクト回収をメモリページ単位で行う場合には、ページ内に少しでも非ゴミオブジェクトが存在していると、そのページ全体が回収対象にならないため、メモリの使用効率が悪化するという問題があった。本第3実施形態は、本発明の実施において、ゴミオブジェクト回収処理にメモリページ単位での回収方式を採用し、なおかつ、非ゴミオブジェクトが少量しか存在しないページから非ゴミオブジェクトを移動させる処理を追加することで、ゴミページ量を増やし上記メモリ使用効率の問題も解決した形態である。
図14は、本第3実施形態における回収対象領域増加処理によるメモリ使用効率改善効果の例を示すものである。
ヒープ領域(メモリ領域)112は、メモリページ2210と、メモリページ2220と、メモリページ2230を含む。メモリページ2220は、領域内に非ゴミオブジェクトを含んでいないページである。メモリページ2210は、領域内に非ゴミオブジェクト2200を含んでいるページである。メモリページ2230は、領域内に非ゴミオブジェクト2200よりも大きいゴミオブジェクト領域を含んでいるページである。回収対象領域増加処理を行わない場合、メモリページ2220は回収対象になるが、メモリページ2210は非ゴミオブジェクトが存在するため回収対象にならない。
回収対象領域増加処理は、非ゴミオブジェクト2200をメモリページ2230中のゴミオブジェクト領域に移動させる。これにより、メモリページ2210は非ゴミオブジェクトを含まなくなる。よって、メモリページ2210も回収対象となり、メモリ(ヒープ領域112)の空き領域の連続性を高めて使用効率が向上する。
図15は、本第3実施形態におけるGC処理の概要を示したものである。本実施形態では、前記第1実施形態の図2に示した処理ステップ中の非ゴミオブジェクトへの印付加処理(S107)の後に、回収対象領域増加処理(S2108)を行い、その後にゴミオブジェクト回収処理(S108)を行うことで、上記メモリ使用効率の向上を実現する。その他の構成は、前記第1実施形態の図2と同様である。
図16は、本第3実施形態の計算機システムの構成ブロック図である。前記第1実施形態の構成要素に加え、GC処理部120中に、回収対象領域増加処理部2131と、回収対象領域閾値管理テーブル2132と、オブジェクト移動先管理テーブル2133を含むのが特徴である。
回収対象領域増加処理部2131は、ゴミオブジェクト容量が閾値以上に大きいページから非ゴミオブジェクトを移動させ、ゴミページ数を増加させる処理部である。回収対象領域閾値管理テーブル2132は、回収対象領域増加処理部2131から参照される閾値を格納するテーブルである。この閾値は予め管理者等によって設定される。オブジェクト移動先管理テーブル2133は、回収対象領域増加処理部2131により移動させられた非ゴミオブジェクトの、移動元と移動先のアドレスを格納するテーブルである。その他の構成は、前記第1実施形態と同様である。
以下、本第3実施形態と前記第1実施形態との差分についてのみ詳細に説明する。
図17は、本第3実施形態の回収対象領域閾値管理テーブル2132のデータ形式の一例を示す図である。回収対象領域閾値管理テーブル2132は、閾値管理テーブル131同様、閾値種別フィールド2211と閾値フィールド2212から構成される。
図18は、本第3実施形態のオブジェクト移動先管理テーブル2133のデータ形式の一例を示す図である。オブジェクト移動先管理テーブル2133は、移動元アドレスフィールド2311と移動先アドレスフィールド2312から構成される。移動元アドレスフィールド2311は、回収対象領域増加処理部2131によって移動させられたオブジェクトの移動元のアドレスを格納する。移動先アドレスフィールド2312は、そのオブジェクトの移動先のアドレスを格納する。オブジェクト移動先管理テーブル2133の最終要素E2300は、オブジェクト移動先管理テーブル2133の終端を示すために、移動元アドレス、移動先アドレスともに0とする。
次に、図15の回収対象領域増加処理S2108について、詳細を図19のフローチャートを用いて説明する。
まず、回収対象領域増加処理部2131は、非ゴミオブジェクトの移動処理後にヒープ領域112に存在しうるゴミページ数の最大値を算出する。この最大値はヒープ領域112中に含まれるゴミオブジェクトの総容量をヒープ領域112中の総メモリページ数で割ることで得られる。この際、小数点以下の端数は切捨てとする。回収対象領域増加処理部2131は、上記最大値を変数nに格納する(S2205)。
次に、回収対象領域増加処理部2131は、ゴミページ数を示す変数mの値をヒープ領域112中のゴミページ数で初期化する(S2207)。
以降の処理で、回収対象領域増加処理部2131は、ヒープ領域112中のメモリページのうち閾値以上のゴミオブジェクトを含む非ゴミページに対して、非ゴミオブジェクトの移動処理を行う。移動処理はこれ以上のゴミページ数の増加が不可能になるか、閾値以上のゴミオブジェクトを含む非ゴミページが存在しなくなるまで繰り返される。
まず、回収対象領域増加処理部2131は、変数nとmの値を比較する。変数mはゴミページであるページ数を示し、変数nは移動処理後に存在しうるゴミページの最大数を示すため、変数mが変数n未満でなければ、これ以上ゴミページを増加させることはできない。変数mが変数nと等しい場合は、回収対象領域増加処理部2131は、図19のフローチャートの処理を終了する(S2215)。
ゴミページ数を増加できる可能性がある場合には、回収対象領域増加処理部2131は、閾値以上のゴミオブジェクトを含む非ゴミページが存在するかどうかを判定する。まず、回収対象領域増加処理部2131は、非ゴミページの存在を確認し、非ゴミページが存在しなければ図19のフローチャートの処理を終了する(S2216)。非ゴミページが存在した場合は、メモリページ中に含まれるゴミオブジェクトの総容量が最も大きい非ゴミページを取得して変数pに格納し(S2217)、そのゴミオブジェクト容量が回収対象領域増加処理閾値より大きいか否かを判定する。回収対象領域増加処理閾値は、回収対象領域閾値管理テーブル2132を参照することで取得する。変数pのゴミオブジェクト容量が閾値よりも小さい場合、ヒープ領域112中に閾値以上のゴミオブジェクトを含む非ゴミページは存在しないため、回収対象領域増加処理部2131は、図19のフローチャートの処理を終了する(S2218)。
次に、回収対象領域増加処理部2131は、変数p中の非ゴミオブジェクトを別のメモリページ内に移動させる。移動先のページはゴミオブジェクト容量が減少し回収対象領域増加処理の対象になりづらくなる。そのため、回収対象領域増加処理部2131は移動先になりうるページのうち、もともと対象になりづらいゴミオブジェクト容量が最も少ないページに非ゴミオブジェクトを移動させる。
まず、回収対象領域増加処理部2131は、ページ中に含まれるゴミオブジェクトの総容量が最も小さい非ゴミページを取得して変数qに格納し(S2222)、変数p中の非ゴミオブジェクトを移動可能な限り変数qに移動させる(S2223)。オブジェクトを移動させる際には、回収対象領域増加処理部2131は、移動させるオブジェクトの移動前のアドレスと移動後のアドレスをオブジェクト移動先管理テーブル2133に格納する。もし、移動処理後に変数p中に非ゴミオブジェクトが残っていた場合には、S2222に戻り(S2225)、再度ゴミオブジェクトの総容量が最も小さい非ゴミページへの移動処理を繰り返す。以下、変数pがゴミページになるまでこの移動処理を繰り返す。S2215での変数nと変数mの比較結果より、変数p中の非ゴミオブジェクトは全て変数p以外のページに移動させることが可能であるため、このアルゴリズムは常に停止する。
次に、回収対象領域増加処理部2131は、ヒープ領域112中の変数pから移動させた非ゴミオブジェクトの移動前のアドレスに対する参照を、移動後の新しいアドレスに書き換える(S2226)。
最後に、回収対象領域増加処理部2131は、ゴミページ数を示す変数mの値を一つ増加させ(S2227)、変数pに対する移動処理を完了する。その後、回収対象領域増加処理部2131は、S2215に戻り、新たなページに対する移動処理を繰り返す。
以上により、本第3実施形態を用いることで、メモリ使用効率の悪化を抑えつつ、高スループットと短い停止時間を両立したゴミオブジェクト判定処理およびゴミオブジェクト回収処理を行うことが可能である。
<第4実施形態>
次に、本発明の第4の実施形態として計算機システム100上で動作するプログラムとしてJavaVM111(111Aおよび111B)を使用し、ゴミオブジェクト処理を行う別処理系として別プロセス(別処理系)を用いる場合の実施の形態について、図面を用いて詳細に説明する。
本第4実施形態では、ハイパーバイザー170が持つ仮想マシンコピー機能の代わりに、オペレーティングシステムが持つプロセスコピー機能を利用し、生成したコピープロセスでゴミオブジェクト判定処理を実行する。なお、本第4実施形態では、前記第1実施形態と同じくJavaVM111のGC処理をJavaVM111内部での監視による契機に基づいて開始するが、前記第2実施形態と同じくJavaVM111のGC処理をJavaVM111の外部からの通知を契機として開始してもよい。
図20は、本第4実施形態の計算機システムの構成ブロック図である。メモリ182には、JavaVM111(111Aおよび111B)およびオペレーティングシステム160が格納されている。JavaVM111は、オペレーティングシステム160により一意な値が設定されたプロセス識別子3118(3118Aおよび3118B)を持つ。
オペレーティングシステム160は、プロセスコピー部3161を含む。プロセスコピー部3161は、オペレーティングシステム160が管理しているプロセスのコピーを生成する処理部である。前記第1実施形態の仮想マシンコピー部171によるコピー処理と同様に、プロセスコピー部3161によるJavaVM111A(実行系=第1の処理系)のコピーをプロセス111B(別処理系=第2の処理系)として生成した後、オペレーティングシステム160は、コピー先のプロセス111B中のプロセス識別子3118Bをコピー元のプロセスのプロセス識別子3118Aとは異なる値に設定する。上記プロセス識別子3118A、B以外の点では、生成されたコピープロセスは、コピー元のプロセスと全く同じ構成要素を含み、コピーされた各構成要素は、コピーが行われた時点での対応するコピー元の構成要素と全く同じ状態で動作を開始する。
コピーされたJavaVM111Bは、JavaVM111AのGC処理中に、プロセスコピー部3161によりJavaVM111Aをコピーすることで生成されるプロセスである。
なお、メモリ182上に二つ以上のJavaVM111Aが存在してもよい。また、計算機システム100では、管理者またはユーザの指令によって、OS160Aがメモリ182に第1の処理系としてのJavaVM111Aを実行する領域を生成(または確保)し、JavaVM111Aを実行しておくものとする。
図21は、本実施形態におけるGC処理の概要を示す図である。本実施形態では、実施形態1の処理ステップ中の仮想マシン110Bの生成S102の代わりに、JavaVM111Bの生成S3102を実行する。また、前記第1実施形態の処理ステップ中の仮想マシン識別子の確認S109、及び仮想マシン識別子の再確認S110の代わりに、プロセス識別子の確認S3109、及びプロセス識別子の再確認S3110を実行する。
JavaVM111Bの生成S3102では、GC処理開始部121がプロセスコピー部3161にJavaVM111Aのコピーを要求し、新たにコピーされたJavaVM111Bを生成する。
プロセス識別子の確認S3109では、GC処理開始部121がプロセス識別子3118Aの値を確認する。また、プロセス識別子の再確認S3110では、各GC処理開始部121が、プロセス識別子の確認S3109で確認したプロセス識別子3118Aと各プロセス識別子3118の値を比較することで、自分がどちらのJavaVM111であるかを判定する。
その他の処理は、前記第1実施形態の場合と同じである。
以上により、本第4実施形態4の計算機システム100では、オペレーティングシステムのプロセスコピー機能を用いることで、JavaVM111Aで高スループットと短いGC停止時間を両立させてGC処理を実行することが可能である。
また、上記第1ないし第4実施形態では、JavaVM111Aを実行する第1の処理系と、JavaVM111Aの複製でGC処理を行うJavaVM111Bを含む第2の処理系を、ひとつの計算機100で行う例を示したが、図示はしないが、計算機システムを複数の計算機で構成し、第2の処理系を他の計算機に生成してGC処理を行い、ネットワークを介して不要領域の判定結果を第1の処理系に通知するようにしてもよい。
<補足>
不要メモリ領域回収処理を開始する処理部と、不要メモリ領域判定処理を行う処理部と、不要メモリ領域回収処理を行う処理部と、不要メモリ領域情報を送信する処理部と、不要メモリ領域情報を受信する処理部と、メモリ領域を別の処理系内にコピーする処理部と、メモリ領域中のメモリ残量を監視する処理部と、プログラムによる演算装置の使用率を監視する処理部と、別処理系実行に必要となる演算装置またはメモリの使用率を監視する処理部と、不要メモリ領域判定開始指示を受信する処理部を有する装置であって、前記メモリ領域中のメモリ残量を監視する処理部および前記不要メモリ領域判定開始指示を受信する処理部および前記プログラムによる演算装置の使用率を監視する処理部および前記別処理系実行に必要となる演算装置またはメモリの使用率を監視する処理部は、不要メモリ領域回収処理を開始する契機を前記不要メモリ領域回収処理を開始する処理部に通達し、前記不要メモリ領域回収処理を開始する処理部は、前記通達を受けると、前記メモリ領域を別の処理系内にコピーする処理部に要求して、メモリ領域のコピーを別の処理系内に生成し、前記不要メモリ領域判定処理を行う処理部は、前記メモリ領域のコピーが生成されると、前記メモリ領域のコピーした不要メモリ領域を判定し、前記メモリ残量を監視する処理部および前記プログラムによる演算装置の使用率を監視する処理部および前記別処理系実行に必要となる演算装置またはメモリの使用率を監視する処理部は、判定結果の送信処理を開始する契機を前記不要メモリ領域情報送信処理部に通達し、前記不要メモリ領域情報送信処理部は、前記通達を受けると、前記判定結果を前記不要メモリ領域情報受信処理部に送信し、前記不要メモリ領域情報受信処理部は、前記判定結果の通知を受けると、前記判定結果を前記不要メモリ領域回収処理部に連絡し、前記不要メモリ領域回収処理部は前記連絡に基づいて前記メモリ領域中の前記不要メモリ領域を回収することを特徴とする計算機システム。
以上のように、本発明はメモリ領域のガベージコレクションを行う計算機システム及びプログラムに適用することができ、特に、JavaVMを実行する計算機システムにおいてヒープ領域のガベージコレクションに好適である。
100 計算機システム
181 CPU
182 メモリ
183 入出力装置
170 ハイパーバイザー
171 仮想マシンコピー部
160 オペレーティングシステム
110 仮想マシン
118 仮想マシン識別子
111 JavaVM
112 ヒープ領域
114 参照ルート
115 Javaプログラム実行部
120 GC処理部
121 GC処理開始部
122 ゴミオブジェクト判定部
123 ゴミオブジェクト回収部
125 ゴミオブジェクト情報送信部
126 ゴミオブジェクト情報受信部
124 非ゴミオブジェクト情報管理テーブル
130 監視部
131 閾値管理テーブル
132 メモリ残量監視部
135 メモリ残量監視テーブル
133 実行系処理負荷監視部
134 別処理系用リソース監視部

Claims (14)

  1. 演算装置とメモリを備えた計算機システムで、
    前記メモリに格納されて前記演算装置で実行されるプログラムが使用するメモリ領域中の不要になった領域を開放するメモリ管理方法であって、
    前記演算装置が、前記プログラムを実行する第1の処理系を前記メモリに生成するステップと、
    前記演算装置が、第1の契機となったときに、前記第2の処理系を前記メモリに生成するステップと、
    前記演算装置が、前記メモリの前記第1の処理系の内容を前記第2の処理系にコピーするステップと、
    前記演算装置が、前記コピーされた第2の処理系のメモリ領域中の不要領域の判定を行うステップと、
    前記演算装置が、第2の契機となったときに、前記不要領域の判定結果を前記第1の処理系の前記プログラムに送信するステップと、
    前記演算装置が、前記第1の処理系で前記判定結果を受信するステップと、
    前記演算装置が、前記第1の処理系で前記受信した前記不要領域の判定結果に基づいて、第1の処理系の前記メモリ領域中の前記不要領域を開放するステップと、
    を含むことを特徴とするメモリ管理方法。
  2. 請求項1に記載のメモリ管理方法であって、
    前記演算装置が、前記第1の契機となったときに、前記第2の処理系を前記メモリに生成するステップ及び前記メモリの前記第1の処理系の内容を前記第2の処理系にコピーするステップにおいて、
    前記演算装置は、前記第2の処理系を前記第1の処理系とは異なる計算機に生成することを特徴とするメモリ管理方法。
  3. 請求項1に記載のメモリ管理方法であって、
    前記演算装置が、前記第1の契機となったときに、前記第2の処理系を前記メモリに生成するステップは、
    前記演算装置が、前記第2の処理系を前記第1の処理系とは異なるプロセスとして生成することを特徴とするメモリ管理方法。
  4. 請求項1に記載のメモリ管理方法であって、
    前記演算装置が、前記第1の処理系の前記プログラムが使用する前記メモリの領域の残量を測定するステップをさらに含み、
    前記第1の契機は、前記第1の処理系の前記プログラムが使用する前記メモリの領域の残量が所定の第1の閾値以下となったときであることを特徴とするメモリ管理方法。
  5. 請求項1に記載のメモリ管理方法であって、
    前記演算装置が、前記第1の処理系の前記プログラムが使用する前記メモリの領域の残量の減少率を測定するステップをさらに含み、
    前記第1の契機は、前記第1の処理系で前記プログラムが使用する前記メモリの領域の残量の減少率が所定の第2の閾値を超えたときであることを特徴とするメモリ管理方法。
  6. 請求項1に記載のメモリ管理方法であって、
    前記演算装置が、前記第1の処理系の前記プログラムが使用する前記演算装置の使用率を測定するステップをさらに含み、
    前記第1の契機が、前記第1の処理系で前記プログラムを実行する演算装置の使用率が所定の第3の閾値以下のときであることを特徴とするメモリ管理方法。
  7. 請求項1に記載のメモリ管理方法であって、
    前記演算装置が、前記第2の処理系で使用する前記メモリの領域の残量を測定するステップと、
    前記演算装置が、前記第2の処理系で使用する前記演算装置の使用率を測定するステップと、をさらに含み、
    前記第1の契機は、前記第2の処理系が使用する前記メモリの領域の残量が所定の第4の閾値以下となったとき、または前記演算装置の使用率が所定の第5の閾値以下のときであることを特徴とするメモリ管理方法。
  8. 請求項1に記載のメモリ管理方法であって、
    前記演算装置が、前記プログラムを実行する第1の処理系を前記メモリに生成するステップは、
    前記第1の処理系を監視する第3の処理系を生成し、前記第3の処理系が前記第1の処理系の監視結果を前記第1の処理系に通知する処理を含み、
    前記第1の契機は、前記第1の処理系で前記第3の処理系からの前記通知を受け付けたときであることを特徴とするメモリ管理方法。
  9. 請求項1に記載のメモリ管理方法であって、
    前記第2の契機は、前記第2の処理系で前記メモリ領域中の不要領域の判定が完了したときであることを特徴とするメモリ管理方法。
  10. 請求項1に記載のメモリ管理方法であって、
    前記演算装置が、前記第1の処理系の前記プログラムが使用する前記メモリの領域の残量の減少率を測定するステップをさらに含み、
    前記第2の契機は、前記第1の処理系の前記プログラムが使用する前記メモリの領域の残量が所定の第1の閾値以下となったときであることを特徴とするメモリ管理方法。
  11. 請求項1に記載のメモリ管理方法であって、
    前記演算装置が、前記第1の処理系の前記プログラムが使用する前記演算装置の使用率を測定するステップをさらに含み、
    前記第1の契機は、前記第1の処理系で前記プログラムを実行する演算装置の使用率が所定の第3の閾値以下のときであることを特徴とするメモリ管理方法。
  12. 請求項1に記載のメモリ管理方法であって、
    前記演算装置が、前記第2の処理系で使用する前記メモリの領域の残量を測定するステップと、
    前記演算装置が、前記第2の処理系で使用する前記演算装置の使用率を測定するステップと、をさらに含み、
    前記第2の契機は、前記第2の処理系が使用する前記メモリの領域の残量が所定の第4の閾値以下となったとき、または前記演算装置の使用率が所定の第5の閾値以下のときであることを特徴とするメモリ管理方法。
  13. 演算装置とメモリを備えてプログラムを実行し、前記プログラムが使用するメモリ領域中の不要になった領域を開放する計算機システムであって、
    前記メモリに設定されて前記プログラムを実行する第1の処理系と、
    第1の契機となったときに、第2の処理系を前記メモリに生成する回収処理開始部と、
    前記第1の処理系を前記第2の処理系にコピーするコピー部と、
    前記コピーされた第2の処理系のメモリ領域中の不要領域の判定を行う判定部と、
    第2の契機となったときに、前記不要領域の判定結果を前記第1の処理系に送信する判定結果送信部と、
    前記第1の処理系で前記判定結果を受信し、前記受信した不要領域の判定結果に基づいて、第1の処理系の前記メモリ領域中の前記不要領域を開放する回収処理実行部と、
    を備えたことを特徴とする計算機システム。
  14. プログラムが格納されるメモリと、前記メモリに格納された前記プログラムを実行する演算装置と、を備える計算機に、
    前記プログラムを実行する第1の処理系を前記メモリに生成して実行する手順と、
    第1の契機となったときに、第2の処理系を前記メモリに生成する手順と、
    前記メモリの前記第1の処理系の内容を前記第2の処理系にコピーする手順と、
    前記コピーされた第2の処理系のメモリ領域中の不要領域の判定を行う手順と、
    第2の契機となったときに、前記不要領域の判定結果を前記第1の処理系の前記プログラムに送信する手順と、
    前記第1の処理系で前記判定結果を受信する手順と、
    前記第1の処理系で前記受信した前記不要領域の判定結果に基づいて、第1の処理系の前記メモリ領域中の前記不要領域を開放する手順と、
    を実行させることを特徴とするプログラム。
JP2009125274A 2009-05-25 2009-05-25 メモリ管理方法計算機システム及びプログラム Expired - Fee Related JP5218985B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2009125274A JP5218985B2 (ja) 2009-05-25 2009-05-25 メモリ管理方法計算機システム及びプログラム
US13/322,067 US20120166744A1 (en) 2009-05-25 2010-05-19 Memory management method, computer system, and storage medium having program stored thereon
PCT/JP2010/058853 WO2010137600A1 (ja) 2009-05-25 2010-05-19 メモリ管理方法、計算機システム及びプログラムを格納した記憶媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009125274A JP5218985B2 (ja) 2009-05-25 2009-05-25 メモリ管理方法計算機システム及びプログラム

Publications (2)

Publication Number Publication Date
JP2010272059A JP2010272059A (ja) 2010-12-02
JP5218985B2 true JP5218985B2 (ja) 2013-06-26

Family

ID=43222708

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009125274A Expired - Fee Related JP5218985B2 (ja) 2009-05-25 2009-05-25 メモリ管理方法計算機システム及びプログラム

Country Status (3)

Country Link
US (1) US20120166744A1 (ja)
JP (1) JP5218985B2 (ja)
WO (1) WO2010137600A1 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5543835B2 (ja) * 2010-04-23 2014-07-09 パナソニック株式会社 機器制御システム
JP5692186B2 (ja) * 2012-08-10 2015-04-01 コニカミノルタ株式会社 画像形成装置、ウェブページ取得方法およびウェブページ取得プログラム
US20140181817A1 (en) * 2012-12-12 2014-06-26 Vmware, Inc. Methods and apparatus to manage execution of virtual machine workflows
JP2015022504A (ja) * 2013-07-18 2015-02-02 富士通株式会社 情報処理装置、方法、及びプログラム
US9740436B2 (en) * 2014-11-14 2017-08-22 International Business Machines Corporation Elastic file system management in storage cloud environments
US10534706B1 (en) * 2015-12-15 2020-01-14 Workday, Inc. Automated garbage collection architecture
CN107832143B (zh) * 2017-10-17 2020-11-03 北京京东尚科信息技术有限公司 一种物理机资源的处理方法和装置
US20220156311A1 (en) * 2019-03-08 2022-05-19 Semiconductor Energy Laboratory Co., Ltd. Image retrieval method and image retrieval system

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6874074B1 (en) * 2000-11-13 2005-03-29 Wind River Systems, Inc. System and method for memory reclamation
JP4438457B2 (ja) * 2003-05-28 2010-03-24 株式会社日立製作所 記憶領域割当方法、システム及び仮想化装置
US7415704B2 (en) * 2004-05-20 2008-08-19 Sap Ag Sharing objects in runtime systems
US7512745B2 (en) * 2006-04-28 2009-03-31 International Business Machines Corporation Method for garbage collection in heterogeneous multiprocessor systems
JP2010500667A (ja) * 2006-08-07 2010-01-07 ベア・システムズ・インコーポレイテッド 仮想マシン環境におけるハードウェア仮想化を提供するためのシステムおよび方法
US8661211B2 (en) * 2007-08-27 2014-02-25 International Business Machines Corporation Method for migrating contents of a memory on a virtual machine
JP2009199391A (ja) * 2008-02-22 2009-09-03 Hitachi Ltd ガーベージコレクション方法及びその実施装置と処理プログラム
US8312201B2 (en) * 2008-06-09 2012-11-13 International Business Machines Corporation Managing memory allocations loans
US8301672B2 (en) * 2008-09-22 2012-10-30 Advanced Micro Devices, Inc. GPU assisted garbage collection

Also Published As

Publication number Publication date
JP2010272059A (ja) 2010-12-02
WO2010137600A1 (ja) 2010-12-02
US20120166744A1 (en) 2012-06-28

Similar Documents

Publication Publication Date Title
JP5218985B2 (ja) メモリ管理方法計算機システム及びプログラム
US10846137B2 (en) Dynamic adjustment of application resources in a distributed computing system
US8352942B2 (en) Virtual-machine control apparatus and virtual-machine moving method
US9672075B2 (en) Method, apparatus, and system for implementing hot migration of virtual machine
US8843717B2 (en) Maintaining consistency of storage in a mirrored virtual environment
US20100306382A1 (en) Server consolidation using virtual machine resource tradeoffs
WO2012066640A1 (ja) 計算機システム、マイグレーション方法及び管理サーバ
WO2012056596A1 (ja) 計算機システム及び処理制御方法
CN110609743A (zh) 用于配置资源的方法、电子设备和计算机程序产品
JP2005309644A (ja) リソース制御方法及びそのシステム
US10628235B2 (en) Accessing log files of a distributed computing system using a simulated file system
US20150040129A1 (en) System and method for virtual machine placement and management in cluster system
WO2015045046A1 (ja) 計算機システムおよび計算機システムのメモリ割当調整方法
US10642697B2 (en) Implementing containers for a stateful application in a distributed computing system
JP2014191368A (ja) 管理プログラム、装置及び方法
US10845997B2 (en) Job manager for deploying a bundled application
US20230376357A1 (en) Scaling virtualization resource units of applications
CA2848683C (en) Working set adjustment in a managed environment
KR20160043706A (ko) 가상 머신 스케일링 장치 및 그 방법
US9218275B2 (en) Memory management control system, memory management control method, and storage medium storing memory management control program
US20190212923A1 (en) Implementing An Interface To A High-Availability Storage System In A Distributed Computing System
US11520650B2 (en) Performing root cause analysis in a multi-role application
CN111143037B (zh) 一种虚拟机资源分配方法、设备、系统及存储介质
CN115794367A (zh) 计算引擎及其运行方法、介质和系统
WO2012014511A1 (ja) メモリ管理方法、メモリ管理プログラム、計算機

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110801

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120309

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130205

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130225

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160315

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees