JP4996073B2 - 世代別ガベージコレクションプログラム - Google Patents

世代別ガベージコレクションプログラム Download PDF

Info

Publication number
JP4996073B2
JP4996073B2 JP2005204949A JP2005204949A JP4996073B2 JP 4996073 B2 JP4996073 B2 JP 4996073B2 JP 2005204949 A JP2005204949 A JP 2005204949A JP 2005204949 A JP2005204949 A JP 2005204949A JP 4996073 B2 JP4996073 B2 JP 4996073B2
Authority
JP
Japan
Prior art keywords
generation
space
virtual memory
garbage collection
memory space
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
JP2005204949A
Other languages
English (en)
Other versions
JP2007025914A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2005204949A priority Critical patent/JP4996073B2/ja
Priority to US11/268,228 priority patent/US7783683B2/en
Publication of JP2007025914A publication Critical patent/JP2007025914A/ja
Application granted granted Critical
Publication of JP4996073B2 publication Critical patent/JP4996073B2/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/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • G06F12/0276Generational garbage collection

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、世代別ガベージコレクション(generational garbage collection)を実装するコンピュータシステムにおいて仮想メモリ資源を有効に利用するための技術に関する。
コンピュータシステムに実装されるメモリ管理機能の一つとしてガベージコレクション(以下「GC」という)がある。GCは、プログラムが動的に確保したメモリ領域のうち不要になった領域を自動的に解放する機能である。GCには、アルゴリズムに応じて、マーク・スイープ型、コピー型、トレイン型、並列型、コンカレント型など様々な種類があり、また、これらのアルゴリズムを複合的に用いるものとして世代別GCがある。
世代別GCは、アプリケーションプログラム(以下単に「アプリケーション」という)が利用するメモリ空間を分割し、オブジェクトの寿命(世代)によって分類することで、処理単位当たりの不要オブジェクトの回収効率を向上させるようにしたGCであり、短寿命のオブジェクトは回収される確率が高く、長寿命のオブジェクトは回収される確率が低いという特質を持っている。
この世代別GCでは、仮想メモリ空間が世代毎に独立して割り当てられて処理が行われている。例えば新/旧2世代の世代別GCの場合には、新/旧それぞれの世代に仮想メモリ空間が独立して割り当てられている。尚、世代別GCに仮想メモリ空間の規定はないが、仮想メモリ空間が世代毎に独立して割り当てられているのが現状である。
世代別GCに関し、例えば特許文献1には、動的変数に対する動的変数領域を確保する命令を含むソースプログラムを解析して、動的変数領域を複数の世代領域のいずれかに割り当てる際に、動的変数の生存に関する変数特性を分析して、割り当てる世代領域を決定する方法が記載されている。
特開2001−184219号公報
ところで、メモリアドレスが32ビットで表現されるコンピュータシステムの場合、仮想メモリ空間は最大でも4GB(ギガバイト)までしか獲得することができない。但し、通常は、OS(operating system)やその他のコンピュータシステム、更には当該コンピュータシステム内の命令/データ/スタック域にも仮想メモリ空間が分配されるため、4GBよりも小さくなるのが現実である。
例えば新/旧2世代の世代別GCを実装するコンピュータシステムにおいて、仮に当該コンピュータシステムが仮想メモリ空間の全てを利用できるとすると、当該コンピュータシステムの初期化時に仮想メモリ空間を新世代に1GB,旧世代に3GB割り当てた場合には、運用中に旧世代に3GBものメモリは不要かつ新世代に2GBのメモリをコミット(実際に存在するメモリ資源を仮想メモリ空間に割り当てること)した方が処理効率が良くなると判断されたとしても、仮想メモリ空間が世代毎に独立して割り当てられているために、それを動的に再割り当てすることができなかった。そのため、このような場合には、当該コンピュータシステムの運用自体を再起動して仮想メモリ空間の再割り当てを行うか、又は非効率なまま現状の仮想メモリ空間の分配で処理を続行するしかなかった。これは、3世代以上の世代別GCを実装するコンピュータシステムは勿論のこと、上記の特許文献1に記載のシステムも含め、同様に生じ得る問題である。
本発明は、上記実情に鑑み、コンピュータシステムに実装される世代別GCにおいて各世代の仮想メモリ空間サイズを動的に調整可能にするための世代別GCプログラムを提供することを目的とする。
上記目的を達成するため、本発明の一態様に係る世代別GCプログラムは、世代別ガベージコレクション処理をコンピュータに実行させるための世代別ガベージコレクションプログラムであって、前記世代別ガベージコレクション処理は、世代別ガベージコレクション環境の初期化処理を含み、当該世代別ガベージコレクション環境の初期化処理は、全世代の仮想メモリ空間として単一の仮想メモリ空間を獲得し、前記単一の仮想メモリ空間内に各世代の仮想メモリ空間が世代順に連続して配置されるように前記単一の仮想メモリ空間を各世代で分配する処理を含む、ことを特徴とする。
この世代別GCプログラムによれば、前記単一の仮想メモリ空間内の各世代間の境界を動的に変動(浮動化)させることができ、各世代の仮想メモリ空間のサイズ調整が可能になる。
本発明によれば、コンピュータシステムに実装される世代別GCにおいて各世代の仮想メモリ空間サイズを動的に調整することができるので、長寿命のオブジェクトが少ないときは新世代の仮想メモリ空間を大きくし、長寿命のオブジェクトが多くなったときに動的かつ連続的に旧世代の仮想メモリ空間を大きくすることができる。従って、従来のように各世代のメモリ利用頻度のバランスが崩れることにより未使用となる仮想メモリ空間が増大するということはなく、柔軟に各世代の仮想メモリ空間のサイズを調整することが可能になる。よって、世代別GCを実装するコンピュータシステムにおいて、有限である仮想メモリ空間を効率良く利用することができる。
以下、本発明の実施の形態を図面を参照しながら説明する。
図1は、本発明の一実施の形態に係る、コンピュータシステムに実装される世代別GCによるガベージ・コレクタ処理の概要を示すフローチャートである。
尚、本処理は、当該コンピュータシステム内の、CPUとROM等を有するメモリ管理部において、そのCPUがそのROMに記憶されている本実施形態に係る世代別GCプログラムを読み出し実行することにより、行われる処理である。
同図に示したように、本処理では、まず世代別GC環境の初期化処理を行い(S1)、以降は、アプリケーションからのメモリ不足によるGC要求に応じて、対応するGC処理(S2)として、対象世代(メモリが不足した世代)のGC処理(2a)、或いは、全体(全世代一括)のGC処理(S2b)を行う。
尚、詳しくはこれから説明するが、上記S1では各世代に同一の仮想メモリ空間を割り当てる処理等が行われ、上記S2aではその同一の仮想メモリ空間における世代間のサイズ調整処理やプロモーション失敗の捕捉処理等が行われる。また、上記S2bではその同一の仮想メモリ空間において世代間の隙間を埋める処理や各世代のリサイズ処理等の、世代空間結合による最適化の処理等が行われる。以降の説明では、本発明の理解を容易にするため、これらの処理を従来の処理と比較しながら説明することにする。
まず、上記S1の世代別GC環境の初期化処理について説明する。
世代別GCでは、各世代の仮想メモリ空間をそれぞれ独立して管理できることを前提としている。そのため、従来の世代別GC環境の初期化処理では、各世代に独立して仮想メモリ空間を割り当てていた。
図2は、従来の世代別GC環境の初期化処理を示すフローチャートである。同図に示したように、本フローでは、n=1〜世代数(全世代数)として(S101)、それぞれのnに対し、世代nに対するGCの仕様を決定する処理(S102)、世代nの領域サイズ(仮想メモリ空間サイズ)を決定する処理(S103)、世代nに仮想メモリ空間を割り当てる処理(S104)、及び、世代nに対する初期化処理(S105)を行う。
尚、S102では、マーク・スイープ型、コピー型、トレイン型、並列型、コンカレント型等のGCアルゴリズムや世代内部に閉じた仕様が決定される。また、S103乃至105では、S102で決定したGCの仕様に合わせて処理が行われる。また、S104では、世代nの仮想メモリ空間が静的に確定される。
このように、従来では完全に独立して各世代に対する処理が行われているため、各世代に割り当てられる仮想メモリ空間はそれぞれが独立して存在することになる。
図3は、図2に示した従来の世代別GC環境の初期化処理により仮想メモリ空間が割り当てられたときのイメージ図である。尚、同図では、世代数を2として示しているが、3以上であっても同様である。
同図に示したように、従来の世代別GC環境の初期化処理が行われると、各世代(世代1と世代2)に独立して仮想メモリ空間が割り当てられる。
同図において、Sz1、Sz2は、世代1、世代2に割り当てられた仮想メモリ空間のサイズ(最大メモリサイズ)を表している。また、M1、M2は、世代1、世代2の仮想メモリ空間にコミットされた実メモリ(実際に存在するメモリ資源)の領域、すなわち現在アプリケーションが利用可能なメモリ域を表している。尚、実際にアプリケーションによって利用される実メモリは、システム全体が利用するものであるため、必要とされるまでは仮想メモリ空間にコミットしないのが運用時の定石となっている。
このように、従来では、各世代に別々の仮想メモリ空間を割り当てているため、予め有限である仮想メモリ空間を各世代に分配した場合、アプリケーション実行中に、各世代の仮想メモリ空間において静的に決定される最大メモリサイズまで実メモリを増減させることは可能であっても、各世代の仮想メモリ空間を動的に増減させることは不可能である。従って、最適な仮想メモリ空間の分配ができずに不安定な運用をせざるを得ない場合があった。
これに対し、図1に示した上記S1の世代別GC環境の初期化処理では、各世代の仮想メモリ空間を同一の仮想メモリ空間として実現するために次のような処理を行う。
図4は、上記S1の世代別GC環境の初期化処理を示すフローチャートである。同図に示したように、本フローでは、まず、n=1〜 世代数(全世代数)として(S11)、それぞれのnに対し、世代nに対するGCの仕様を決定する処理(S12)、世代nの領域サイズ(仮想メモリ空間サイズ)を決定する処理(S13)を行う。尚、S12では、マーク・スイープ型、コピー型、トレイン型、並列型、コンカレント型等のGCアルゴリズムや世代内部に閉じた仕様が決定される。また、S13では、S12で決定したGCの仕様に合わせて処理が行われる。
そして、S11乃至13の処理が終了すると、続いて、全世代に同一の仮想メモリ空間を割り当てる(S14)。具体的には、全世代の仮想メモリ空間として単一の仮想メモリ空間を獲得し、この単一の仮想メモリ空間内に各世代の仮想メモリ空間が世代順に連続して配置されるように、この単一の仮想メモリ空間を各世代で配分する。これにより、各世代は同一の仮想メモリ空間を共有することになる。
続いて、n=1〜世代数(全世代数)として(S15)、それぞれのnに対し、世代nに対する初期化処理(S16)を行う。尚、このS16では、S12で決定した世代nのGCの仕様に合わせて処理が行われ、また実メモリをコミットしない仮想メモリ空間については世代1(最新世代)に付加される。すなわち、S14で獲得された単一の仮想メモリ空間において、実メモリがコミットされた空間が連続した空間として設けられ且つ実メモリがコミットされていない空間が存在する場合には当該空間が最新世代に設けられるように、その単一の仮想メモリ空間に実メモリがコミットされる。
このように、本フローによれば、世代毎に独立して仮想メモリ空間が獲得される従来の手法とは異なり、全世代の仮想メモリ空間として単一の仮想メモリ空間が獲得される。
図5は、図4に示した世代別GC環境の初期化処理により仮想メモリ空間が割り当てられたときのイメージ図である。尚、図5では、世代数を3として示しているが、2又は4以上であっても同様である。
同図に示したように、図4に示した世代別GC環境の初期化処理が行われると、全世代(世代1、世代2、及び世代3)に同一の仮想メモリ空間が割り当てられ、その単一の仮想メモリ空間が各世代に配分されることで、各世代の仮想メモリ空間が得られる。これにより、各世代間の仮想メモリ空間の境界を動的に変動させることが可能になる。
同図において、Sz0は、全世代に割り当てられた同一の仮想メモリ空間のサイズを表す。Sz1、Sz2、Sz3は、世代1、世代2、世代3に配分された仮想メモリ空間のサイズを表す。また、M1、M2、M3は、世代1、世代2、世代3に配分された仮想メモリ空間のそれぞれにコミットされた実メモリの領域、すなわち現在アプリケーションが利用可能なメモリ域を表している。尚、以降の説明においては、世代nの仮想メモリ空間において実メモリがコミットされている空間(領域)を世代空間nともいうことにする。よって、例えば同図のM1、M2、M3の空間は、世代空間1、世代空間2、世代空間3ともいう。Szm1、Szm2(=Sz2)、Szm3(=Sz3)は、世代1、世代2、世代3の仮想メモリ空間にコミットされた実メモリのサイズを表す。Szv1(=Sz1−Szm1)は、世代1に配分された仮想メモリ空間において実メモリがコミットされていない空間のサイズを表す。尚、この実メモリがコミットされていない空間は形式的なものであり、単に、全世代に割り当てられた同一の仮想メモリ空間において実メモリをコミットしていない空間を世代1(最新世代)に付加しただけであり、全世代が共通に利用(拡張)可能な空間である。
ここで、各世代の仮想メモリ空間のサイズに関し従来と比較すると、従来では、図3に示したように、各世代の仮想メモリ空間のサイズの合計が仮想メモリ空間の使用サイズとなる。つまり、図2に示した従来の世代別GC環境の初期化処理により決定した各世代の仮想メモリ空間のサイズはそれ以上動的に拡張することができない。例えば、図3において、Sz1+Sz2=100で、Sz1=50、SZ2=50の場合、世代1の最大メモリサイズは50、世代2の最大メモリサイズは50となる。
これに対し、図4に示した世代別GC環境の初期化処理によれば、図5に示したように、各世代間の境界は変動可能であり、任意の世代に仮想メモリ空間の全て(Sz0)を配分することが可能である。例えば、図5において、Sz1+Sz2+Sz3=100(=Sz0)の場合、各世代の配分サイズは可変であるので、世代1の最大メモリサイズが100となることもあるし、又は、世代2或いは世代3の最大メモリサイズが100となることもある。但し、総和(Sz1+Sz2+Sz3)は常に100である。
尚、図5においては、世代1を最新世代、世代3を最旧世代とし、同図左側を低アドレス側、同図右側を高アドレス側とした上で、より最新の世代ほど高アドレス側に配置するようにしているが、その理由は次のとおりである。つまり、より旧世代ほど長寿命のオブジェクトが存在する確率が高くなり回収効率が低下するので、GCの度に長寿命のオブジェクトを移動させるのは性能面で損失となる。逆に、より新世代ほど短寿命のオブジェクトが存在する確率が高くなり回収効率が良くなるので、本来オブジェクトの移動が激しい。更に、低アドレス側のオブジェクトが移動した場合、そのオブジェクトより高アドレス側のオブジェクト全てに影響(移動)を与えることになる。そのため、より低アドレス側でのオブジェクトの移動頻度が少なく済むように、より長寿命のオブジェクトを低アドレス側へプロモーションさせる方が好都合である。このような理由から、より最新の世代ほど高アドレス側に配置するようにしている。
尚、プロモーションとは、生存オブジェクトを旧世代へ昇格させることをいい、物理的な移動を伴う。オブジェクトを移動する手段としては、この他にコンパクションによるスライド、コピーイングGC/トレインGCによるコピー等がある。特にスライドを行う場合にも同様に低アドレス側へオブジェクトを移動させる方が好ましい。但し、世代内部に閉じて行うGCの仕様に依存するため一概には言い切れない場合もある。ここで、スライドとは、同世代空間内で生存オブジェクトを圧縮する方法であり、具体的にはフラグメンテーションを取除いて生存オブジェクトを低アドレス側へ詰めていくことである。
図6は、図4に示した世代別GC環境の初期化処理により設けられた各世代空間における、生存オブジェクトの移動確率と世代間の境界の変動の関係を示す図である。尚、同図では、世代数を4として示しているが、2、3、又は5以上であっても同様である。また、同図においても、左側を低アドレス側、右側を高アドレス側とし、世代1から世代4へ向かうほど、より旧世代となっている。
同図に示したように、より新世代の世代空間ほど生存オブジェクトの移動確立が高くなるので、各世代空間間の境界b1、b2、b3においては、高アドレス側(b1側)の境界ほど変動頻度が高くなる。また、世代空間1と実メモリがコミットされていない空間との境界b0においても、実メモリの追加・開放により、変動頻度が高くなる。
尚、上記説明では、より新世代ほど高アドレス側に配置するようにしているが、アドレスの高低を全く逆に捉えるならば、より新世代ほど低アドレス側に配置するようにしてもよく、つまり、オブジェクトの寿命(世代)に応じて配置すればよい。
次に、図1に示したS2aの対象世代のGC処理、及び、S2bの全体のGC処理について説明する。
一般的に、世代別GCでは、大きく次の2つの手段に分けて不要オブジェクトの回収が行われる。一つは任意の世代空間内のGC(上記S2aの対象世代のGC処理が対応)であり、もう一つは全世代を一括して行うGC(上記S2bの全体のGC処理が対応)である。前者のGCは、アプリケーションが使用していた全ての不要オブジェクトを回収することはできないが、GC対象が狭いので処理コストが小さくすみ、逆に、後者のGCは、その時点の全ての不要オブジェクトを回収することができるが、GC対象が広く処理コストが大きいという特徴を有している。前者のGCでは、処理の結果、世代空間間のサイズのバランスが崩れる(=不安定)場合がある。このようになると、後者のGCをせざるを得ない状態となり性能面で不利である。そこで、前者のGCでは、このような状態にならないよう世代空間のサイズを調整する必要がある。
ある世代空間がGC対象となって、不要オブジェクトが回収され、生存オブジェクトがより旧世代の世代空間にプロモーションされたとき、プロモーション先の世代空間の利用可能なサイズが減少する。
図7は、従来の対象世代のGC処理によりプロモーションが行われたときのイメージ図である。尚、同図では、世代数を2として示しているが、3以上の場合であっても部分的にみると2世代の関係(世代1⇔世代2,世代2⇔世代3,…)として表現可能であるので、ここでは世代数を2として説明する(以降の図8乃至図10においても同じ)。
図7に示したように、GC対象世代を世代nとし、世代nの世代空間に対しGC処理が行われて、不要オブジェクトが回収され、生存オブジェクトがより旧世代の世代n+1の世代空間へプロモーションされると、世代n+1の世代空間の利用可能な領域(空き領域)のサイズが減少する。
ここで、世代空間のサイズ調整を考えると、従来では各世代に割り当てられる仮想メモリ空間が独立して存在しているために、各世代の世代空間のサイズ調整は各世代で独立して行うことができる。よって、世代n+1の世代空間を拡張させたり(但し、割り当てられている仮想メモリ空間の範囲内)、世代nの世代空間を縮退させたりと、各世代において独立して世代空間のサイズ調整が可能である。
これに対し、図8は、図1に示したS2aの対象世代のGC処理によりプロモーションが行われたときのイメージ図である。
同図に示したように、GC対象世代を世代nとし、世代nの世代空間に対しGC処理が行われて、不要オブジェクトが回収され、生存オブジェクトがより旧世代の世代n+1の世代空間へプロモーションされると、世代n+1の世代空間の利用可能な領域(空き領域)のサイズが減少する。
ここで、世代空間のサイズ調整を考えると、世代nと世代n+1の世代空間が連続して存在しているために、各世代の世代空間のサイズ調整を各世代で独立して行うことができない。よって、世代n+1の世代空間の拡張を行う場合には、それと同時に同サイズだけ世代nの世代空間を縮退させるといった世代空間間でのサイズ調整が必要となる。
一般的に、GC対象の世代nの世代空間に対しGC処理を行う場合、次回の世代nの世代空間に対するGC処理以後も同様に、世代nの全オブジェクトが生存してもプロモーションが可能となるように、世代n+1の世代空間の空き領域のサイズが、世代nの世代空間のサイズ以上となるように、世代n+1の世代空間のサイズを拡張する。但し、GC対象の世代nの世代空間に対しGC処理を行ったときの生存オブジェクトの総量は、通常、その世代空間全体のごく一部に相当するので、予めそのサイズ(生存率)を推測することができるならば、世代n+1の世代空間の空き領域のサイズとして、世代nの世代空間分用意しなくともよいことになる。図1に示したS2aの対象世代のGC処理では、これを、後述するプロモーション失敗の捕捉処理により可能にしている。
図9は、図1に示したS2aの対象世代のGC処理を示すフローチャートと、その処理中の仮想メモリ空間のイメージを示す図である。
同図のフローに示したように、アプリケーションからの要求により、世代nに対し世代空間内GCが発動されると、まず、世代空間nに対しGC処理を行う(S21)。このS21では、世代空間nにおいて、不要オブジェクトの回収とプロモーションが行われ、またプロモーションに失敗したときには後述のプロモーション失敗の捕捉処理が行われる。
続いて、世代空間nのGC対象空間に生存オブジェクトが残っているか否かを判定する(S22)。ここで、GC対象空間とは、世代空間nが単一のヒープ空間である場合には世代空間nそれ自身を示し、世代空間nが複数のヒープ空間を有する場合にはGC対象となった任意のヒープ空間を示す。
尚、世代空間のGCの仕様としてGC対象空間の生存オブジェクトを全てプロモーションさせるとしているならばS22の判定は常にNo(偽)となるので、この判定処理は不要である。
S22の判定において、その判定結果がYesの場合にはS23乃至26の処理をスキップし、Noの場合にはそのS23乃至26の処理である世代空間間のサイズ調整処理を行う。
詳しくは、まず、上記S21でのプロモーションによる世代空間nから世代空間n+1への生存オブジェクトの移動率Kを次式(1)により計算する(S23)。
K=M/Sn (1)
ここで、Mは、プロモーションにより世代空間nから移動した生存オブジェクトのサイズである。Snは、世代空間nのサイズである。但し、世代空間nが複数の領域(ヒープ空間)を有する場合には、GC対象となったヒープ空間のサイズを示す。
続いて、世代空間nと世代空間n+1とにおける空きスペース(空き領域サイズ)Fを次式(2)により計算する(S24)。
F=Sn+(Sn+1−A−M) (2)
ここで、Sn+1は、世代空間n+1のサイズである。Aは、以前から蓄積されているオブジェクトのサイズである。
続いて、過去x回分の移動率K1~x(K1は今回の計算値Kを示す)のうち最悪値(最大値)を求め、安全率を乗じて世代空間の配分率Pとする(S25)。この場合、配分率Pは次式(3)により計算される。但し、配分率Pは、上下限を予め設定し、その範囲を超えない値とする。例えば上下限を10〜100%とした場合、配分率Pはその範囲に収まるようにする。
P=(K1~xの最悪値)*安全率 (3)
ここで、xは、過去の移動率を経験値として覚えておくための個数であり、例えば3〜5個程度でよい。また、安全率は、通常、1.5程度でよい。安全率がより小さいほど効率良くヒープ空間を活用でき、より大きいほど次回の世代空間内のGC処理が成功する確率が上がるようになる。尚、失敗した場合は、全体のGCが発動される。
続いて、S24で計算された空きスペースFを、世代n+1:世代n=P:1となるように配分し、世代空間間の境界を移動して仮想メモリ空間の再分配を行う(S26)。この場合、世代空間nのサイズSnは式(4)により計算され、世代空間n+1のサイズSn+1は次式(5)により計算される。
Sn=F*1/(1+P) (4)
Sn+1=F*P/(1+P)+A+M (5)
尚、上記S21において、後述するプロモーション失敗の捕捉処理を行わない場合には、P/1=1(100%)となる。
ところで、プロモーションが行われる際に、プロモーション先の世代空間に必要十分な空き領域が必要であることは既に述べた。もし空き領域が不足している場合には、それは世代空間内のGC処理が失敗することを示す。従って、失敗する以前にプロモーション先の世代空間内のGC若しくは全体のGCを発動し、プロモーション先の世代空間に必要十分な空き領域を用意しておく必要がある。そうしないとアプリケーションがメモリ不足で停止してしまうからである。
図10は、従来の対象世代のGC処理におけるプロモーションによる世代空間の変動を示すイメージ図である。
同図に示したように、GC対象世代を世代nとして、1回目のGC処理(GC#1),2回目のGC処理(GC#2),3回目のGC処理(GC#3),…といった具合にGC処理の毎に、プロモーション先である世代n+1の世代空間の空き領域サイズが常に世代nの世代空間のサイズ分用意されていれば、それは世代nのGC処理が成功することを意味する。
本来、プロモーション先の世代空間の空き領域はGC対象の世代に存在する生存オブジェクトの量だけあればよいが、GC処理を開始する前に生存オブジェクトの量を予め正確に見積ることは不可能である。そのため、図10に示したように、従来においては最悪値(=安全値)である100%のオブジェクトが生存しても問題無いように、世代nの世代空間と同等のサイズだけ空き領域として確保している。
これに対し、図9に示したS21の世代空間のGC処理では、プロモーション先の世代空間の空き領域が不足した場合に、GC対象世代となっているオブジェクトへの参照関係を一貫して修復し、そのまま継続して、より旧世代の世代空間内GCや全体のGCを発動させるプロモーション失敗の捕捉処理を行うことが可能になっている。そのため、プロモーション先に用意する空き領域は過去統計的にプロモーションされた生存オブジェクトの割合を乗じたサイズでよく、つまり、過去にGC対象世代の世代空間の5%がプロモーションされていたなら、せいぜい空き領域はGC対象世代の世代空間の5〜10%程度用意しておけばよいことになる。仮に、プロモーション先の空き領域が不足して世代空間のGC処理が失敗したとしても、GC対象世代となっているオブジェクトへの参照関係を修復できるからである。よって、上記S21の世代空間のGC処理では、GC対象世代の世代空間と同サイズの空き領域をプロモーション先の世代空間に用意する必要が無くなり、世代空間のメモリ領域使用効率が向上するためGC処理の発生頻度を低下させることができる。
図11は、このプロモーション失敗の捕捉処理を含む、図9に示したS21の世代空間のGC処理を示すフローチャートである。
同図に示したように、世代空間内GCが発動され世代空間nに対しGC処理が行われているときに、プロモーション先の世代空間n+1の空き容量が不足してプロモーションに失敗すると、プロモーション失敗の捕捉処理(S31)を行う。
プロモーション失敗の捕捉処理(S31)では、プロモーションの関数(クロージャ)を次のように更新して処理を行う。つまり、プロモーション失敗以後は、検出される生存オブジェクトの移動を中止すると共に、プロモーション失敗以前に検出された(移動済みの)生存オブジェクトへの参照を移動先へ更新する。
そして、プロモーション失敗の捕捉処理(S31)が終了すると、処理が復帰し、続いてプロモーションに失敗が在ったか否かを判定し(S32)、その判定結果がYesの場合には全体のGCを発動して後述の図16に示す全体のGC処理へ移行し、Noの場合には前述の図9に示したS22へ移行する。
このような処理により、プロモーション先の空き領域が不足したとしても、アプリケーションを停止させることなく処理を続行することが可能になる。
尚、世代空間内のGC処理におけるプロモーションの形態は、オブジェクトの移動タイミングにより、逐次移動型(コピーイングGC等)と一括移動型(マークスイープGC等)の2つに分けられる。逐次移動型では、生存オブジェクトが検出された時点で同時にオブジェクトを移動するので、プロモーションが失敗した時点で移動済みのオブジェクトへの参照を修復する必要がある。一方、一括移動型では、生存オブジェクトを全て検出した後に一括してオブジェクトを移動するので、オブジェクトが移動する前にプロモーションに失敗するか否かを判定できるため参照関係の修復は不要である。従って、上記のプロモーション失敗の捕捉処理(S31)では、世代空間内のGC処理におけるプロモーションの形態が逐次移動型の場合には上記のとおり処理を行うが、それが一括移動型の場合にはそのまま何もせずに処理が復帰する。
ここで、上記の逐次移動型プロモーションの基本的な概念を、図12に示すイメージ図を用いて説明する。
同図において、GC対象を世代n、プロモーション先を世代n+1とすると、逐次移動型のプロモーションでは、まず、(a)アプリケーションが利用中のオブジェクトへの参照の集合であるルート群に存在する参照フィールドRから参照されるオブジェクトOを検出する。続いて、(b)そのオブジェクトOが既に世代n+1へ移動済みであるならば、参照フィールドRを移動先O´への参照に書き換える。或いは、(c)そのオブジェクトOが未だ世代n+1へ移動していないならば、世代n+1の世代空間に移動先O´として領域を獲得し、そこへオブジェクトOを移動すると共に、参照フィールドRを移動先O´への参照に書き換える。そして、(d)ルート群に未処理の参照フィールドが無くなるまで、上記(a)〜(c)を繰り返す。このように、逐次移動型では、生存オブジェクトが検出された時点で同時にオブジェクトの移動が行われる。
尚、世代空間n+1の空き領域が不足した時点で、プロモーション失敗の捕捉処理をする前に、世代空間n+2〜最旧世代空間の空き領域へのプロモーションを試みてもよい。
次に、図1に示したS2bの全体のGC処理について説明する。
従来の全体のGC処理においては、各世代が異なる仮想メモリ空間に割り当てられているために、同一のGC仕様に則って世代空間毎に繰り返し処理をせざるを得ない。
図13は、従来の全体のGC処理の実行形態を説明する図である。
同図に示したように、例えば世代数を3とした場合、従来の全体のGC処理では、同一のGC仕様に則って、まず世代1の世代空間に対するGC処理を実行し、続いて世代2の世代空間に対するGC処理を実行し、そして世代3の世代空間に対するGC処理を実行するといった具合に、世代1乃至3のそれぞれの世代空間毎に繰り返しGC処理をせざるを得ない。
これに対し、図1に示したS2bの全体のGC処理では、各世代空間が同一の仮想メモリ空間を共有するため、同一のGC仕様、且つ単一のメモリ空間としてGC処理を行うことができ、GC処理の単純化、効率化を図ることができる。
図14は、上記S2bの全体のGC処理の実行形態を説明する図である。
同図に示したように、例えば世代数を3とした場合、同一のGC仕様に則って、且つ、世代1、世代2、世代3の各世代空間からなる単一のメモリ空間としてGC処理を行うことができる。
尚、同図において、Szm0は、世代1、世代2、世代3の各世代空間からなる単一のメモリ空間のサイズである。Szm1、Szm2、Szm3は、世代1、世代2、世代3の世代空間(実質空間)のサイズ(仮想メモリ域)である。Sz1は、世代1の仮想メモリ空間(仮想メモリ域)のサイズである。Szv1は、世代1の仮想メモリ空間において実メモリがコミットされていない空間、すなわち、全世代に割り当てられた単一の仮想メモリ空間における未使用領域であって、意味的には各世代が共通に獲得できる拡張域である。
但し、上記S2bの全体のGC処理では、各世代空間を単一のメモリ空間として扱うために、各世代空間間に存在する実装依存の調整領域を不要オブジェクトであるかのようにみせかけて、アプリケーションに使用されるオブジェクトを全てアドレス的に連続させる必要がある。そうしないと、上記S2bの全体のGC処理において、生存オブジェクトを検出するためにメモリ空間を横断(トラバース)することができないからである。尚、実装依存の調整領域とは、アプリケーションが使用しなかったメモリ領域、すなわちオブジェクトが存在しない領域であり、本明細書中ではこれを「隙間」ともいう。
図15は、世代空間間の隙間を不要オブジェクトで埋めるときのイメージ図である。
同図に示したように、世代空間間の隙間であるフラグメントを不要オブジェクトで埋めることにより、各世代空間を単一のメモリ空間として扱うことが可能になり、上記S2bの全体のGC処理において生存オブジェクトを検出するために各世代空間を横断することが可能になる。尚、世代空間間の隙間を埋める不要オブジェクトとしては、例えばint型配列等が考えられる。
図16は、図1に示したS2bの全体のGC処理を示すフローチャートと、その処理中の仮想メモリ空間のイメージを示す図である。
同図に示したように、アプリケーションからの要求により、或いは図11のS33にて、全体のGCが発動されると、まず、上述したように各世代空間間の隙間を不要オブジェクトで埋める(S41)。尚、各世代のGCの仕様上、世代空間内に複数の領域を持つ場合は、各領域間の隙間も同様に埋める。
続いて、各世代空間間の境界を解除し(S42)、全体のGC処理を行う(S43)。尚、このS43では、同一のGCの仕様に依存し、例えば一般的に多用されるマーク・スイープ型GCが用いられる。
続いて、利用可能なヒープ空間のサイズを決定し、そのサイズに応じて実メモリをコミット或いは実メモリの一部をアンコミットする(仮想メモリ空間から実メモリの一部を開放する)(S44)。具体的には、利用可能なヒープ空間のサイズを、生存オブジェクトの総サイズLに世代数(全世代数)nを乗じたサイズとして、ヒープ空間を拡張または縮退する。尚、世代数nの代わりに別の値を乗じてもよい。例えば同一世代内に複数のヒープ空間を持つ場合には全ヒープ空間内に存在するヒープ空間の総数としたり、単に√(2n)や固定値4としたりしてもよい。
続いて、世代空間の境界設定、すなわち仮想メモリ空間の再分配を行う(S45)。具体的には、図1に示したS1の世代別GC環境の初期化処理で行われる仮想メモリ空間の割り当てと同様に各世代のGC仕様に合わせて仮想メモリ空間を再分配する。このとき、生存オブジェクトは最旧世代空間へ移動させ、実メモリがコミットされていない領域(アンコミット域)は最新世代空間として扱う。尚、この再分配では、例えば、S44で決定したヒープサイズn×Lを各世代で均等に分配してもよいし、或いは、図9に示した対象世代のGC処理で説明したように過去統計的に世代空間間のサイズ調整を行って再分配してもよい。
尚、本実施例において、図1に示したガベージ・コレクタ処理は、汎用的なコンピュータで実施させることも可能である。そのためには、このガベージ・コレクタ処理をコンピュータに行わせる上記世代別GCプログラムをそのコンピュータで読み取り可能な記録媒体(記憶媒体)に予め記憶させておき、その記録媒体からその世代別GCプログラムを読み出させてそのコンピュータのメインメモリに一旦格納させた後に、そのコンピュータの有する中央処理装置に、その格納されたプログラムを読み出させて実行させるように構成すればよい。
上述した世代別GCプログラムを格納し、且つそれをコンピュータで読み取ることの可能な記録媒体の例を図17に示す。このような記録媒体としては、例えば、コンピュータ1の本体に内蔵若しくは外付けされる半導体メモリやハードディスク装置などのメモリ2、CD−ROM、DVD−ROM、MO(光磁気ディスク)、フレキシブルディスクなどといった可搬型記憶媒体3、あるいはコンピュータ1と回線4で接続されていてコンピュータ1がプログラムをダウンロードすることの可能なプログラムサーバ5の記憶装置6などがあるが、これらのいずれであってもよい。
以上、本発明について詳細に説明したが、本発明は上記実施形態に限定されず、本発明の要旨を逸脱しない範囲において、各種の改良及び変更を行っても良いのはもちろんである。
(付記1)
世代別ガベージコレクション処理をコンピュータに実行させるための世代別ガベージコレクションプログラムであって、
前記世代別ガベージコレクション処理は、世代別ガベージコレクション環境の初期化処理を含み、
当該世代別ガベージコレクション環境の初期化処理は、
全世代の仮想メモリ空間として単一の仮想メモリ空間を獲得し、前記単一の仮想メモリ空間内に各世代の仮想メモリ空間が世代順に連続して配置されるように前記単一の仮想メモリ空間を各世代で分配する処理を含む、
ことを特徴とする世代別ガベージコレクションプログラム。
(付記2)
前記世代別ガベージコレクション環境の初期化処理は、
前記単一の仮想メモリ空間において、実メモリがコミットされた空間が連続した空間として設けられ且つ実メモリがコミットされていない空間が存在する場合には当該空間が最新世代に設けられるように、前記単一の仮想メモリ空間に実メモリをコミットする処理を更に含む、
ことを特徴とする付記1記載の世代別ガベージコレクションプログラム。
(付記3)
前記世代別ガベージコレクション処理は、対象世代のガベージコレクション処理を更に含み、
当該対象世代のガベージコレクション処理は、
対象世代の仮想メモリ空間において不要オブジェクトの回収とプロモーションによる全ての生存オブジェクトの移動が終了した後に、前記対象世代と、前記生存オブジェクトの移動先世代である前記対象世代の次に古い世代との間の仮想メモリ空間の配分を変更する処理を含む、
ことを特徴とする付記1又は2記載の世代別ガベージコレクションプログラム。
(付記4)
前記対象世代のガベージコレクション処理は、
当該対象世代のガベージコレクション処理中において、プロモーションによる生存オブジェクトの移動に失敗した時は、前記失敗以後の生存オブジェクトの移動を中止すると共に、前記失敗以前に移動したオブジェクトへの参照を修復する処理を更に含む、
ことを特徴とする付記3記載の世代別ガベージコレクションプログラム。
(付記5)
前記世代別ガベージコレクション処理は、全世代のガベージコレクション処理を更に含み、
当該全世代のガベージコレクション処理は、
前記単一の仮想メモリ空間内の実メモリがコミットされている空間において各世代間にオブジェクトが存在しない空間が存在する場合には当該空間を不要オブジェクトで埋めるステップと、
前記単一の仮想メモリ空間内の各世代間の境界を解除するステップと、
前記単一の仮想メモリ空間内の実メモリがコミットされている空間に対しガベージコレクション処理を行うステップと、
前記単一の仮想メモリ空間内に各世代の仮想メモリ空間が世代順に連続して配置されるように前記単一の仮想メモリ空間を各世代で再分配するステップと、
からなる処理を含む、
ことを特徴とする付記2記載の世代別ガベージコレクションプログラム。
(付記6)
前記再分配するステップでは、
生存オブジェクトが最旧世代の仮想メモリ空間に存在し、且つ、前記単一の仮想メモリ空間内の実メモリがコミットされていない空間が最新世代の仮想メモリ空間に設けられるように再分配が行われる、
ことを特徴とする付記5記載の世代別ガベージコレクションプログラム。
(付記7)
世代別ガベージコレクション処理をコンピュータに実行させるための世代別ガベージコレクションプログラムを記憶したコンピュータで読み取り可能な記憶媒体であって、
前記世代別ガベージコレクション処理は、世代別ガベージコレクション環境の初期化処理を含み、
当該世代別ガベージコレクション環境の初期化処理は、
全世代の仮想メモリ空間として単一の仮想メモリ空間を獲得し、前記単一の仮想メモリ空間内に各世代の仮想メモリ空間が世代順に連続して配置されるように前記単一の仮想メモリ空間を各世代で分配する処理を含む、
ことを特徴とする世代別ガベージコレクションプログラムを記憶したコンピュータで読み取り可能な記憶媒体。
(付記8)
世代別ガベージコレクション処理を行う世代別ガベージコレクション方法であって、
前記世代別ガベージコレクション処理は、世代別ガベージコレクション環境の初期化処理を含み、
当該世代別ガベージコレクション環境の初期化処理では、
全世代の仮想メモリ空間として単一の仮想メモリ空間を獲得し、前記単一の仮想メモリ空間内に各世代の仮想メモリ空間が世代順に連続して配置されるように前記単一の仮想メモリ空間を各世代で分配する工程、
を行うことを特徴とする世代別ガベージコレクション方法。
(付記9)
世代別ガベージコレクション手段を有する世代別ガベージコレクション装置であって、
前記世代別ガベージコレクション手段は、世代別ガベージコレクション環境の初期化手段を含み、
当該世代別ガベージコレクション環境の初期化手段は、
全世代の仮想メモリ空間として単一の仮想メモリ空間を獲得し、前記単一の仮想メモリ空間内に各世代の仮想メモリ空間が世代順に連続して配置されるように前記単一の仮想メモリ空間を各世代で分配する手段を含む、
ことを特徴とする世代別ガベージコレクション装置。
本発明の一実施の形態に係る、コンピュータシステムに実装される世代別GCによるガベージ・コレクタ処理の概要を示すフローチャートである。 従来の世代別GC環境の初期化処理を示すフローチャートである。 従来の世代別GC環境の初期化処理により仮想メモリ空間が割り当てられたときのイメージ図である。 S1の世代別GC環境の初期化処理を示すフローチャートである。 S1の世代別GC環境の初期化処理により仮想メモリ空間が割り当てられたときのイメージ図である。 S1の世代別GC環境の初期化処理により設けられた各世代空間における、生存オブジェクトの移動確率と世代間の境界の変動の関係を示す図である。 従来の対象世代のGC処理によりプロモーションが行われたときのイメージ図である。 S2aの対象世代のGC処理によりプロモーションが行われたときのイメージ図である。 S2aの対象世代のGC処理を示すフローチャートと、その処理中の仮想メモリ空間のイメージを示す図である。 従来の対象世代のGC処理におけるプロモーションによる世代空間の変動を示すイメージ図である。 プロモーション失敗の捕捉処理を含むS21の世代空間のGC処理を示すフローチャートである。 逐次移動型プロモーションの基本的な概念を示すイメージ図である。 従来の全体のGC処理の実行形態を説明する図である。 S2bの全体のGC処理の実行形態を説明する図である。 世代空間間の隙間を不要オブジェクトで埋めるときのイメージ図である。 S2bの全体のGC処理を示すフローチャートと、その処理中の仮想メモリ空間のイメージを示す図である。 記憶させた世代別GCプログラムをコンピュータで読み取ることの可能な記憶媒体の例を示す図である。
符号の説明
1 コンピュータ
2 メモリ
3 可搬型記憶媒体
4 回線
5 プログラムサーバ
6 記憶装置

Claims (5)

  1. 世代別ガベージコレクション処理をコンピュータに実行させるための世代別ガベージコレクションプログラムであって、
    前記世代別ガベージコレクション処理は、世代別ガベージコレクション環境の初期化処理と対象世代のガベージコレクション処理を含み、
    当該世代別ガベージコレクション環境の初期化処理は、
    複数世代の仮想メモリ空間として単一の仮想メモリ空間を獲得し、前記単一の仮想メモリ空間内に前記複数世代の各世代の仮想メモリ空間が世代順に連続して配置されるように前記単一の仮想メモリ空間を各世代で分配する処理を含み
    前記対象世代のガベージコレクション処理は、
    生存オブジェクトの移動先世代である前記対象世代の次に古い世代に、過去統計的にプロモーションされた生存オブジェクトの割合に応じたサイズの空き領域を確保する処理を含む、
    ことを特徴とする世代別ガベージコレクションプログラム。
  2. 前記世代別ガベージコレクション環境の初期化処理は、
    前記単一の仮想メモリ空間において、実メモリがコミットされた空間が連続した空間として設けられ且つ実メモリがコミットされていない空間が存在する場合には当該空間が前記複数世代のうちの最新世代に設けられるように、前記単一の仮想メモリ空間に実メモリをコミットする処理を更に含む、
    ことを特徴とする請求項1記載の世代別ガベージコレクションプログラム。
  3. 前記対象世代のガベージコレクション処理は、
    対象世代の仮想メモリ空間において不要オブジェクトの回収とプロモーションによる全ての生存オブジェクトの移動が終了した後に、前記対象世代と、前記生存オブジェクトの移動先世代である前記対象世代の次に古い世代との間の仮想メモリ空間の配分を変更する処理を含む、
    ことを特徴とする請求項1又は2記載の世代別ガベージコレクションプログラム。
  4. 前記対象世代のガベージコレクション処理は、
    当該対象世代のガベージコレクション処理中において、プロモーションによる生存オブジェクトの移動に失敗した時は、前記失敗以後の生存オブジェクトの移動を中止すると共に、前記失敗以前に移動したオブジェクトへの参照を移動先へ更新する処理を更に含む、
    ことを特徴とする請求項記載の世代別ガベージコレクションプログラム。
  5. 前記世代別ガベージコレクション処理は、全世代のガベージコレクション処理を更に含み、
    当該全世代のガベージコレクション処理は、
    前記単一の仮想メモリ空間内の実メモリがコミットされている各世代の空間内にオブジェクトが存在しない空間が存在する場合には当該空間を不要オブジェクトで埋めるステップと、
    前記単一の仮想メモリ空間内の実メモリがコミットされている空間に対しガベージコレクション処理を行うステップと、
    前記単一の仮想メモリ空間内に各世代の仮想メモリ空間が世代順に連続して配置されるように前記単一の仮想メモリ空間を各世代で再分配するステップと、
    からなる処理を含む、
    ことを特徴とする請求項記載の世代別ガベージコレクションプログラム。
JP2005204949A 2005-07-13 2005-07-13 世代別ガベージコレクションプログラム Expired - Fee Related JP4996073B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2005204949A JP4996073B2 (ja) 2005-07-13 2005-07-13 世代別ガベージコレクションプログラム
US11/268,228 US7783683B2 (en) 2005-07-13 2005-11-07 Computer-readable storage medium storing generational garbage collection program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005204949A JP4996073B2 (ja) 2005-07-13 2005-07-13 世代別ガベージコレクションプログラム

Publications (2)

Publication Number Publication Date
JP2007025914A JP2007025914A (ja) 2007-02-01
JP4996073B2 true JP4996073B2 (ja) 2012-08-08

Family

ID=37662884

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005204949A Expired - Fee Related JP4996073B2 (ja) 2005-07-13 2005-07-13 世代別ガベージコレクションプログラム

Country Status (2)

Country Link
US (1) US7783683B2 (ja)
JP (1) JP4996073B2 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8825718B2 (en) * 2006-12-28 2014-09-02 Oracle America, Inc. Methods and apparatus for marking objects for garbage collection in an object-based memory system
US7627621B2 (en) * 2007-02-12 2009-12-01 Sun Microsystems, Inc. Method and system for minor garbage collection
US7870171B2 (en) * 2007-02-12 2011-01-11 Oracle America, Inc. Method and system for garbage collection in a multitasking environment
US8316064B2 (en) 2008-08-25 2012-11-20 Emc Corporation Method and apparatus for managing data objects of a data storage system
US8327109B2 (en) * 2010-03-02 2012-12-04 Advanced Micro Devices, Inc. GPU support for garbage collection
US8595462B2 (en) 2011-03-14 2013-11-26 International Business Machines Corporation Dynamic measurement and adaptation of a copying garbage collector
JP5809613B2 (ja) * 2012-09-10 2015-11-11 日本電信電話株式会社 仮想マシンチューニング値計算装置および仮想マシンチューニング値計算方法
US9430164B1 (en) 2013-02-08 2016-08-30 Emc Corporation Memory efficient sanitization of a deduplicated storage system
US9317218B1 (en) 2013-02-08 2016-04-19 Emc Corporation Memory efficient sanitization of a deduplicated storage system using a perfect hash function
EP3094273A1 (en) 2014-01-14 2016-11-23 Volcano Corporation Devices and methods for forming vascular access
US9600204B1 (en) 2015-12-08 2017-03-21 International Business Machines Corporation Efficiently using memory for Java collection objects

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02156365A (ja) 1988-12-08 1990-06-15 Agency Of Ind Science & Technol 並列言語向きメモリ領域再利用処理方式
US6286016B1 (en) * 1998-06-09 2001-09-04 Sun Microsystems, Inc. Incremental heap expansion in a real-time garbage collector
US7096238B2 (en) * 1999-08-19 2006-08-22 Sun Microsystems, Inc. Dynamic feedback for determining collection-set size
US6754855B1 (en) * 1999-12-01 2004-06-22 Microsoft Corporation Automated recovery of computer appliances
JP2001184219A (ja) 1999-12-27 2001-07-06 Matsushita Electric Ind Co Ltd コンパイル装置、コンパイル方法、コンパイルプログラムを記録している記録媒体、プログラム実行装置及びプログラム実行システム。
US6470361B1 (en) * 2000-01-10 2002-10-22 International Business Machines Corporation Method and apparatus for performing generational garbage collection using middle-aged objects
US6826583B1 (en) * 2000-05-15 2004-11-30 Sun Microsystems, Inc. Local allocation buffers for parallel garbage collection
US6934755B1 (en) * 2000-06-02 2005-08-23 Sun Microsystems, Inc. System and method for migrating processes on a network
US6760815B1 (en) * 2000-06-02 2004-07-06 Sun Microsystems, Inc. Caching mechanism for a virtual heap
US6957237B1 (en) * 2000-06-02 2005-10-18 Sun Microsystems, Inc. Database store for a virtual heap
US6865657B1 (en) * 2000-06-02 2005-03-08 Sun Microsystems, Inc. Garbage collector for a virtual heap
US6763440B1 (en) * 2000-06-02 2004-07-13 Sun Microsystems, Inc. Garbage collection using nursery regions for new objects in a virtual heap
US6941410B1 (en) * 2000-06-02 2005-09-06 Sun Microsystems, Inc. Virtual heap for a virtual machine
US6854115B1 (en) * 2000-06-02 2005-02-08 Sun Microsystems, Inc. Process persistence in a virtual machine
GB0027053D0 (en) * 2000-11-06 2000-12-20 Ibm A computer system with two heaps in contiguous storage
GB0027041D0 (en) * 2000-11-06 2000-12-20 Ibm Computer system and multiple heaps
GB0027045D0 (en) * 2000-11-06 2000-12-20 Ibm Computer system with heap reset
GB0107921D0 (en) * 2001-03-30 2001-05-23 Ibm Computer system with multiple heaps and heap reset facility
JP4116877B2 (ja) * 2002-12-26 2008-07-09 富士通株式会社 ヒープサイズ自動最適化処理方法,ヒープサイズ自動最適化装置およびそのプログラム
JP4170988B2 (ja) * 2003-05-09 2008-10-22 富士通株式会社 実行環境の危険予測/回避方法,システム,プログラムおよびその記録媒体
US7114045B1 (en) * 2003-12-23 2006-09-26 Sun Microsystems, Inc. Garbage collection with a dynamic window
KR100608606B1 (ko) * 2004-01-28 2006-08-03 삼성전자주식회사 적응형 가비지 컬렉션 방법 및 상기 방법을 수행하는 장치

Also Published As

Publication number Publication date
US7783683B2 (en) 2010-08-24
JP2007025914A (ja) 2007-02-01
US20070016634A1 (en) 2007-01-18

Similar Documents

Publication Publication Date Title
JP4996073B2 (ja) 世代別ガベージコレクションプログラム
CN102971717B (zh) 存储器访问表保存和复原***及方法
US7774541B2 (en) Storage apparatus using non-volatile memory as cache and method of managing the same
CN102693184B (zh) 处理具有非易失性存储器的***的动态和静态数据
JP4079684B2 (ja) ヒープメモリ管理方法およびそれを用いた計算機システム
US8805902B2 (en) Managing snapshot storage pools
JP2015528174A (ja) ストレージアレイを管理する方法及び装置
JP2012033002A (ja) メモリ管理装置およびメモリ管理方法
US10372370B2 (en) Metadata load distribution management
US10083181B2 (en) Method and system for storing metadata of log-structured file system
KR20110080479A (ko) 멀티 레벨 버퍼 캐시 관리 정책에 따른 메모리 관리 방법
KR20180002259A (ko) 계층적 플래시 변환 레이어 구조 및 그 설계 방법
KR101029704B1 (ko) 플래시 메모리 관리 방법
KR20150094292A (ko) 비휘발성 메모리 기반의 전자 장치의 메타 데이터 복원 방법 및 장치
US20170300381A1 (en) Memory controller and data control method
US8621171B2 (en) Compaction planning
CN110199265B (zh) 存储装置和存储区域管理方法
KR101608623B1 (ko) 전원 손실 이후 효과적인 데이터 복구를 위한 메모리 복구 장치 및 방법
US8140597B2 (en) Computer system memory management
JP2008257607A (ja) ログファイル保存装置及びログファイル管理方法
US11662922B2 (en) Shared storage allocation among data services
KR20170002279A (ko) 전원 손실 이후 효과적인 데이터 복구를 위한 메모리 복구 장치 및 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080317

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110322

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110523

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111025

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111226

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: 20120501

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120511

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

Free format text: PAYMENT UNTIL: 20150518

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4996073

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees