JP4050855B2 - ガベージコレクション装置および方法 - Google Patents
ガベージコレクション装置および方法 Download PDFInfo
- Publication number
- JP4050855B2 JP4050855B2 JP2000020844A JP2000020844A JP4050855B2 JP 4050855 B2 JP4050855 B2 JP 4050855B2 JP 2000020844 A JP2000020844 A JP 2000020844A JP 2000020844 A JP2000020844 A JP 2000020844A JP 4050855 B2 JP4050855 B2 JP 4050855B2
- Authority
- JP
- Japan
- Prior art keywords
- cell
- tray
- handle
- cell block
- processing
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/70—Details relating to dynamic memory management
- G06F2212/702—Conservative garbage collection
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99952—Coherency, e.g. same view to multiple users
- Y10S707/99953—Recoverability
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99956—File allocation
- Y10S707/99957—Garbage collection
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Description
【発明の属する技術分野】
本発明は、メモリ上の複数のセルを管理するメモリ管理装置に関するものであり、特に、トレイを用いつつセルに対するスカビンジ処理およびコンパクション処理を行うガベージコレクション装置に関する。
【0002】
【従来の技術】
従来より、アプリケーションにて用いられるデータに対する、メモリ上の領域の確保および開放を動的に管理する動的記憶管理の技術が知られている。実際、このような動的記憶管理は、アプリケーション中の命令により使用する(データに対応する)領域の確保および不要となった領域の開放を明示的に行う方法と、アプリケーション中の命令により領域の確保を明示的に行うものの、(不要となった領域の開放を明示的に行うことなく)所定の管理部により領域が不要になったことを自動的に判断させこれらの領域を開放の上回収する方法とのいずれかが用いられることによって行われている。
【0003】
自動的にメモリ上の領域を回収する後者の方法は、ガベージコレクションと呼ばれており、動的な記憶領域を多く必要とするアプリケーションのうち、明示的な開放によることが不利または事実上不可能なものに適用されている。
ところが、これらのようなガベージコレクションを実装するためには、アプリケーションと(ガベージコレクションを行う処理部である)ガベージコレクタとの間での、後述するようなリファレンスフラグを用いての綿密な情報交換を行うための機構を要し、不要になった領域を明示的に開放する動的記憶管理を利用している既存のアプリケーションを変更してガベージコレクションのための機構を組み込むことは非常な困難を伴うものといえる。
【0004】
既存のアプリケーションに、より少ない労力で組み込むことのできるガベージコレクタとして、Boehmらは、アプリケーションとの情報交換を要しないコンサバティーブ・ガベージ・コレクタ(保守的ガベージコレクタ)を提案している。(次の2つの文献には、この保守的ガベージコレクタに関するより詳細な記述がある。文献1 Hans-Juergen Boehm and Mark Weiser, Garbage collection in an uncooperative environment Software Practice and Experience Vol.18(9), Sep. 1988, P. 807〜820 文献2 小野 寺民 他 保守的ごみ集め(コンサバティーブ・ガベージ・コレクタ法) 情報処理 Vol.3)
また、これらとは別に、ガベージコレクションをより高速に行うため、ガベージコレクションとして行われる2つの処理のうちの1つであるコンパクション処理(他の1つの処理はスカビンジ処理)にてハンドルと呼ばれる間接アドレッシングを用いる手法が存在する。
【0005】
以下では、まず、図27〜図30を用いてガベージコレクタにより行われる処理の概要について説明する。続いて、このようなガベージコレクタを実装する例として、リファレンスフラグを用いてアプリケーションとの情報交換を行う第1の従来例のガベージコレクタを図31〜図37を用いて説明し、リファレンスフラグおよびハンドルを用いる第2の従来例のガベージコレクタを図38〜図42を用いて説明する。この後、保守的ガベージコレクションを実装する第3の従来例のガベージコレクタを図43〜図46を用いて説明する。
【0006】
まず、ガベージコレクタにより行われる処理の概要について説明する。図27はガベージコレクタが用いるヒープ領域の構成を説明するための図であり、図28はヒープ領域を構成するセルに格納される内容(値、データ)の例を示す図である。図28(a)は図27に示すヒープ領域内のセルの内容の例を示しており、図28(b)は特に図28(a)に示すセルに保持されたリファレンスによる参照を示している。
【0007】
図27に示すように、ガベージコレクタにより管理されるヒープ領域にはセルの配列が構成され、セルは数値またはリファレンスを保持する。リファレンスには、図28(a)に示すように、セルのアドレスを示す有効リファレンスと、セルを指し示さないNULLリファレンスとの2種類がある。
たとえば、有効リファレンス0のセルは、有効リファレンス7を保持し、有効リファレンス7のセルを指すこととなっており、図28(b)での有効リファレンス0のセルから有効リファレンス7のセルへの矢印はこれを示している。(NULLリファレンスからは矢印が出ておらず、このことはNULLリファレンスがセルを指し示さないことに対応する。)
これらのようなセルからは次のような部分配列がセルブロックとして構成される。図29は、複数のセルから構成されるセルブロックの例を示す図である。図29(a)は図27に示すセルに値が代入されることにより構成されるセルブロックの例を示しており、図29(b)は図29(a)に示すセルブロック間の参照関係の例を示している。
【0008】
図29(a)に示すように、セルブロックはヒープ領域内に複数存在し得るが、同一のセルが複数のセルブロックに同時に属することはない。ヒープ領域のセルのうちセルブロックのいずれにも属しないセルを未使用セルと呼び、複数の連続する未使用セルからなる領域全体を未使用セルエリアと呼ぶ。また、ヒープ領域に確保される特定の1つのセルブロックをルートセルブロックと呼ぶ。ここでは、有効リファレンス14以降のセルの領域が未使用セルエリアであり、有効リファレンス0のセルがルートセルブロックである。
【0009】
ヒープ領域内のセルブロックAとセルブロックBについて、セルブロックAに属するいずれかのセルに、セルブロックBの先頭のセルを指す有効リファレンスが設定されているとき、”セルブロックAはセルブロックBを参照している”という。ヒープ領域上にn個のセルブロックX1〜Xnがあり、セルブロックXi(i=1,2,3,・・・,n―1)がセルブロックXi+1をそれぞれ参照しているとき、”セルブロックX1からセルブロックXnをたどることができる”という。
【0010】
図29(b)では、ルートセルブロックはセルブロック4を参照しており、セルブロック3はセルブロック2を参照しており、セルブロック4はセルブロック2およびセルブロック5を参照している。ルートセルブロックからは、セルブロック4、セルブロック2およびセルブロック5をたどることができ、セルブロック4からは、セルブロック2およびセルブロック5をたどることができる。また、セルブロック3からセルブロック2をたどることができる。
【0011】
新たな記憶領域を必要とするとき、アプリケーションは、未使用セルエリアのうちの必要なサイズ分のセルに対してセルブロックを割り付け(後述のようにガベージコレクタがこの割り付けを行うものとすることができる)ルートブロックからたどることができる状態にし、これにより、”セルブロックを確保する”。アプリケーションは、セルブロックを確保して、セルブロック内で数値を記憶したり他のセルブロックを参照したりすることにより、複雑なデータ構造のデータを記憶し管理することができることとなる。ルートセルブロックからたどることのできないセルブロックに対しては、アプリケーションはアクセスすることができない。
【0012】
アプリケーションが管理するデータのデータ構造が変化すると、セルブロック間の参照関係が変化し、その結果ルートセルブロックからたどることができないセルブロックが増加する。これらのようなセルブロックにより未使用セルエリアが小さくなってくると、アプリケーションが要求するサイズ分のセルブロックが確保できなくなってくる。
【0013】
ガベージコレクタは、このような状態のヒープ領域に対しスカビンジ処理とコンパクション処理とからなるガベージコレクションを行い、これにより、ヒープ領域を、必要なサイズ分のセルブロックをアプリケーションが確保できる状態にする。ガベージコレクタは、スカビンジ処理では、ルートセルブロックからたどることのできないセルブロックのいくつかを開放し、開放されたセルブロックを未使用セルエリアとし、また、コンパクション処理では、セルが複数のセルブロックに属することなく、セルブロック間の参照関係が保たれつつ、かつ、セルブロック内の数値が変更されないように、セルブロックをヒープ領域内で移動させ、(ルートセルブロックからたどることのできないセルブロックにより)分断されていた未使用セルエリアを連続させる。
【0014】
図30は、図29(b)に示す状態のヒープ領域に対するガベージコレクションを説明するための図である。図30(a)は図29(b)に示す状態のヒープ領域に対するスカビンジ処理の結果を示しており、図30(b)は図30(a)に示す状態のヒープ領域に対するコンパクション処理の結果を示している。
図29(b)に示す状態のヒープ領域に対してスカビンジ処理が行われると、図30(a)のように、ルートセルブロックからたどることのできないセルブロック1およびセルブロック3は開放されて未使用セルエリアとなる。さらに、この図30(a)に示す状態のヒープ領域に対してコンパクション処理が行われると、図30(b)のように、ルートセルブロックからセルブロック4への参照ならびにセルブロック4からセルブロック2およびセルブロック5への参照が保たれたまま、開放されたセルブロック1のサイズ分、セルブロック2が前方に(有効リファレンスの値が小さいほうに)移動され、また、開放されたセルブロック1およびセルブロック3のサイズ分、セルブロック4およびセルブロック5が前方に移動されて、セルブロック1およびセルブロック3に対応する未使用セルエリアが、(有効リファレンス14以降の)後方の未使用セルエリアと統合されることとなる。
【0015】
これらのように、ガベージコレクタは、アプリケーションの使用に伴って変化するヒープ領域の状態を管理し、必要に応じてセルブロックのいくつかを開放し未使用セルエリアを統合して1つの連続する領域とすることにより、ヒープ領域を、アプリケーションから要求されるサイズ分の、連続する領域を確保できる状態にするものであるが、先述のようにその実装には様々なものが知られており、以下では実装に際しての特徴を中心に第1の従来例のガベージコレクタ〜第3の従来例のガベージコレクタについて順に説明する。
【0016】
図31は第1の従来例のガベージコレクタが用いるヒープ領域の構成を説明するための図であり、図32はヒープ領域を構成するセルに格納される内容の例およびこれらのセル間の参照関係を示す図である。
図31に示すように、第1の従来例のガベージコレクタは、リファレンスフラグを用いるものであり、各セルにはリファレンスフラグが対応付けられている。このリファレンスフラグには、対応付けられたセルに数値が保持されているとき0が設定され、対応付けられたセルにリファレンスが保持されているとき1が設定される。(リファレンスフラグを配列であるセルの要素数と等しい要素数の配列としてヒープ領域内にて確保するものとし、配列のオフセットを有効リファレンスに対応させるものとすることができる。)
図32に示すヒープ領域は、図28(b)と同一のセル内容を保持するものであるが、たとえば、リファレンスが保持されている、有効リファレンス4、有効リファレンス5のセルに対応するリファレンスフラグには1が設定されており、数値が保持されている、有効リファレンス9、有効リファレンス10のセルに対応するリファレンスフラグには0が設定されている。
【0017】
図33は、第1の従来例のガベージコレクタが用いるヒープ領域にて割り当てられるセルブロックの例およびこれらのセルブロック間の参照関係を示す図である。また、図34は、図33に示す状態のヒープ領域に対するガベージコレクションを説明するための図である。図34(a)は図33に示す状態のヒープ領域に対するスカビンジ処理の結果を示しており、図34(b)は図34(a)に示す状態のヒープ領域に対するコンパクション処理の結果を示している。
【0018】
図33に示すセルブロックの構成は、図29(b)に示すセルブロックの構成と同様であり、図34(a)に示すスカビンジ処理の結果、図34(b)に示すコンパクション処理の結果は、それぞれ、図30(a)に示すスカビンジ処理の結果、図30(b)コンパクション処理の結果と同様である。
特に、第1の従来例のガベージコレクタは、リファレンスフラグを用いつつ、ヒープ領域に対するスカビンジ処理およびコンパクション処理を行うものであるが、次にこれらの処理の手順を説明する。
【0019】
図35は第1の従来例のガベージコレクタが行うスカビンジ処理Aの手順を示すフローチャートであり、図36および図37は第1の従来例のガベージコレクタが行うコンパクション処理Aの手順を示すフローチャートである。ここでは、使用中フラグが、ルートセルブロックからたどることができるか否かを示すために各セルブロックに対して設定され、スカビンジ処理を終了したときに使用中フラグが1であるセルブロックは、ルートセルブロックからたどることができることを示すものとする。
【0020】
スカビンジ処理Aでは、まず、セルブロックx(x=1〜M(Mはセルブロックの個数))の使用中フラグFxに対して0が代入され(S101)、すべてのセルブロックに対する使用中フラグが0に初期化され、ルートセルブロックの内容(リファレンス)がスタックにプッシュされる(S102)。
スタックに積まれたリファレンスはポップされ(S103)、ポップされたリファレンスが指すセルブロックxの先頭セルが対象セルに設定され(S104)、セルブロックxに対する使用中フラグFxに1が代入される(S105)。
【0021】
続いて、対象セルのリファレンスフラグは1であるか否かが判定され(S106)、対象セルのリファレンスフラグが1であれば(S106にてYes)、対象セルの内容であるリファレンスがスタックにプッシュされ(S107)S108へと処理が進められ、対象セルのリファレンスフラグが1でなければ(S106にてNo)、S107での処理は行われることなくS108へと処理が進められる。
【0022】
S108では同一のセルブロック内で対象セルに後続するセルがあるか否かが判定され、後続するセルがあれば(S108にてYes)後続するセルが対象セルとされて(S109)S106からの処理が繰り返され、後続するセルがなければ(S108にてNo)続いてスタックが空であるか否かが判定される(S110)。
スタックが空でなければ(S110にてNo)、S103からの処理が繰り返され、スタックが空であれば(S110にてYes)、本処理は終了する。
【0023】
これらのような第1の従来例のガベージコレクタでのスカビンジ処理Aによると、リファレンスフラグが用いられセルの内容がリファレンスであるか否かが判定されつつ、ルートセルブロックからたどることのできるセルブロックが特定され、これらの特定されたセルブロックの使用中フラグが1とされ、これら以外のセルブロックが未使用セルエリアとして開放されることとなる。
【0024】
このようなスカビンジ処理Aに続くコンパクション処理Aでは、まず、セルブロックを特定するためのxに1が代入され、セルブロックxに対してコンパクション後のリファレンス値を示すRxを算出するための、リファレンス値Wに0が代入される(S201)。
セルブロックxの使用中フラグは1であるか否かが判定され(S202)、この使用中フラグが1であれば(S202にてYes)、セルブロックxに対するリファレンス値Rxにリファレンス値Wが代入されて(S203)、コンパクション後のセルブロックxの先頭セルのリファレンス値Rxが確定され、リファレンス値Wにセルブロックxのセル数Sxが加えられ(S204)、S205へと処理が進められる。使用中フラグが1でなければ(S202にてNo)、S203、S204での処理は行われることなくS205へと処理が進められる。
【0025】
S205ではxがMに等しいか否かが判定され、xがMに等しくなければ(S205にてNo)xに1が加えられて(S206)S202からの処理が繰り返され、xがMに等しければ(S205にてYes)S207へと処理が進められる。
(これらS201〜S206での処理により、スカビンジ処理Aで設定された使用中フラグが用いられつつ、ヒープ領域内のすべてのセルブロックに対して、コンパクション後のリファレンス値が確定されることとなる。)
S207ではxに1が代入され、セルブロックxの使用中フラグFxが1であるか否かが判定される(S208)。使用中フラグFxが1であれば(S208にてYes)、yに1が代入されて(S209)、セルブロックyの使用中フラグFyが1であるか否かが判定される(S210)。
【0026】
セルブロックyの使用中フラグFyが1であれば(S210にてYes)セルブロックyの先頭セルは対象セルに設定され(S211)、対象セルのリファレンスフラグが1でありかつ対象セルの内容がセルブロックxへのリファレンスである場合(S212にてYesかつS213にてYes)、対象セルにリファレンス値Rxが代入され(S214)S215へと処理が進められ、これら以外の場合には(S212にてNoまたはS213にてNo)S214での処理は行われることなくS215へと処理が進められる。また、セルブックyの使用中フラグFyが1でなければ(S210にてNo)S211〜S214での処理は行われることなくS215へと処理が進められる。
【0027】
S215では同一のセルブロック内で対象セルに後続するセルがあるか否かが判定され、後続するセルがあれば(S215にてYes)後続するセルが対象セルとされて(S216)S211からの処理が繰り返され、後続するセルがなければ(S215にてNo)yがMに等しいか否かが判定される(S217)。yがMに等しくなければ(S217にてNo)yに1が加えられて(S218)S210からの処理が繰り返され、yがMに等しければ(S217にてYes)S219へと処理が進められる。
【0028】
使用中フラグFxが1でなければ(S208にてNo)、S209〜S218での処理は行われることなくS219へと処理が進められる。
S219ではxがMに等しいか否かが判定され、xがMに等しくなければ(S219にてNo)xに1が加えられて(S220)S208からの処理が繰り返され、xがMに等しければ(S219にてYes)S221へと処理が進められる。
(これらS207〜S220での処理により、リファレンスフラグが用いられつつ、使用中フラグが1であるセルブロックに含まれるセルのリファレンス値が、コンパクション前後で参照関係が保たれるよう、先に確定されたコンパクション後のリファレンス値に更新されることとなる。ここでは、特に、ヒープ領域内の使用中のセルブロックxが検索され、セルブロックxを指しているセルブロックy中のセルにコンパクション後のリファレンス値が代入されることにより、上記のリファレンス値の更新が行われている。)
S221ではxに1が代入され、セルブロックxの使用中フラグFxが1であるか否かが判定される(S222)。この使用中フラグFxが1であれば(S222にてYes)セルブロックxの内容が先のようにして算出されたリファレンス値Rxが示すセルからコピーされ(S223)S224へと処理が進められ、使用中フラグFxが1でなければ(S222にてNo)S223での処理は行われることなくS224へと処理が進められる。
【0029】
S224ではxがMに等しいか否かが判定され、xがMに等しくなければ(S224にてNo)xに1が加えられて(S225)S222からの処理が繰り返され、xがMに等しければ(S224にてYes)リファレンス値Wから以降が未使用セルブロックとされ(S226)、本処理は終了する。
(これらS221〜S226での処理により、先に確定されたセルブロックごとのコンパクション後のリファレンス値に基づいて、実際にセルブロックが移動されることとなる。)
これらのように、コンパクション処理Aでは、まず、スカビンジ処理Aで設定された使用中フラグが用いられつつ、ヒープ領域内のすべてのセルブロックに対して、コンパクション後のリファレンス値が確定され(S201〜S206での処理)、リファレンスフラグが用いられつつ、使用中フラグが1であるセルブロックに含まれるセルのリファレンス値が、コンパクション前後でセルブロック間の参照関係が保たれるよう、先に確定されたコンパクション後のリファレンス値に更新され(S207〜S220での処理)、その後、コンパクション後のリファレンス値に基づいて実際にセルブロックが移動される(S221〜S226での処理)。
【0030】
以上のように、第1の従来例のガベージコレクタは、リファレンスフラグを用いての、ヒープ領域に対するスカビンジ処理A(図35)およびコンパクション処理A(図36、37)を行う。
図38は第2の従来例のガベージコレクタが用いるヒープ領域の構成を説明するための図であり、図39はヒープ領域を構成するセルに格納される内容およびトレイに格納される内容の例ならびにこれらのセル間の参照関係を示す図である。
【0031】
図38に示すように、第2の従来例のガベージコレクタは、リファレンスフラグおよびハンドルを用いるものである。各セルは数値またはハンドルを保持し有効リファレンスによって特定されるものであり、各トレイはリファレンスを保持し有効ハンドルによって特定されるものである。
また、図39に示すように、リファレンスには、セルのアドレスを示す有効リファレンスとセルを指し示さないNULLリファレンスとの2種類があり、ハンドルには、有効リファレンスを保持しているトレイのアドレスを示す有効ハンドルとトレイを指し示さないNULLハンドルとの2種類がある。
【0032】
たとえば、有効リファレンス12のセルは、有効ハンドル1を保持し有効ハンドル1のトレイを指すこととなっており、さらに、有効ハンドル1のトレイは、有効リファレンス4を保持し有効リファレンス4のセルを指すこととなっている。図39での有効リファレンス12のセルから有効ハンドル1のトレイへの矢印および有効ハンドル1のトレイから有効リファレンス4のセルへの矢印はこれらを示している。
【0033】
図40は、第2の従来例のガベージコレクタが用いるヒープ領域にて割り当てられるセルブロックの例およびこれらのセルブロック間の参照関係を示す図である。
図40にて、トレイのうちNULLリファレンスを保持するトレイを未使用トレイと呼び、複数の連続する未使用トレイからなる領域全体を未使用トレイエリアと呼ぶ。
【0034】
ヒープ領域内のセルブロックAとセルブロックBについて、セルブロックBの先頭のセルを指す有効リファレンスを保持しているトレイを指す有効ハンドルが、セルブロックAに含まれるセルに保持されているとき、”セルブロックAはセルブロックBを参照している”という。また、先述のように、ヒープ領域上にn個のセルブロックX1〜Xnがあり、セルブロックXi(i=1,2,3,・・・,n―1)がセルブロックXi+1をそれぞれ参照しているとき、”セルブロックX1からセルブロックXnをたどることができる”という。
【0035】
ここでは、ルートセルブロックは有効ハンドル3のトレイを介してセルブロック4を参照しており、セルブロック3は有効ハンドル1のトレイを介してセルブロック2を参照しており、セルブロック4は有効ハンドル1のトレイを介してセルブロック2を参照し有効ハンドル4のトレイを介してセルブロック5を参照している。ルートセルブロックからは、セルブロック4、セルブロック2およびセルブロック5をたどることができ、セルブロック4からは、セルブロック2およびセルブロック5をたどることができる。
【0036】
新たな記憶領域を必要とするとき、アプリケーションは、未使用セルエリアのうちの必要なサイズ分のセルに対してセルブロックを割り付け、未使用トレイエリアのうちの1つのトレイに対して、割り付けられたセルブロックの先頭セルに対応する有効リファレンスを設定し、ルートブロックからたどることができる状態にし、これにより、”セルブロックを確保する”。
【0037】
アプリケーションの使用に伴い、アプリケーションが、必要とするサイズ分のセルブロックをヒープ領域にて確保できなくなってくると、ガベージコレクタは、スカビンジ処理およびコンパクション処理を行うことにより、ヒープ領域を、必要なサイズ分のセルブロックをアプリケーションが確保できる状態にする。
図41は、図40に示す状態のヒープ領域に対するガベージコレクションを説明するための図である。図41(a)は図40に示す状態のヒープ領域に対するスカビンジ処理の結果を示しており、図41(b)は図41(a)に示す状態のヒープ領域に対するコンパクション処理の結果を示している。
【0038】
図40に示す状態のヒープ領域に対してスカビンジ処理が行われると、図41(a)のように、セルブロックのいずれからも参照されていない有効ハンドル0のトレイおよび有効ハンドル2のトレイの内容がNULLリファレンスに更新され、これらのトレイは未使用トレイとされる。また、これに従って、有効ハンドル0のトレイおよび有効ハンドル2のトレイの更新前の内容である有効リファレンス1および有効リファレンス6がそれぞれ指し示していたセルブロック1およびセルブロック3は開放され、これらのセルは未使用セルエリアとされる。
【0039】
さらに、この図41(a)に示す状態のヒープ領域に対してコンパクション処理が行われると、図41(b)のように、ルートセルブロックからセルブロック4への参照ならびにセルブロック4からセルブロック2およびセルブロック5への参照が保たれたまま、開放されたセルブロック1のサイズ分、セルブロック2が前方に移動され、開放されたセルブロック1およびセルブロック3のサイズ分、セルブロック4およびセルブロック5が前方に移動されて、セルブロック1およびセルブロック3に対応する未使用セルエリアが後方の未使用セルエリアと統合されることとなる。
【0040】
これらのようなセルブロックの前方への移動に際しては、有効リファレンス0のセルの内容である有効ハンドル3、有効リファレンス9のセルの内容である有効ハンドル1、および、有効リファレンス11のセルの内容である有効ハンドル4は更新されることなく、対応するハンドルの内容である有効リファレンス8、有効リファレンス3および有効リファレンス12が、それぞれ、有効リファレンス4、有効リファレンス1および有効リファレンス8に更新されている。
【0041】
特に、第2の従来例のガベージコレクタでのコンパクション処理Bは、ハンドル(間接アドレッシング)を用いて、第1の従来例のガベージコレクタにて行われるコンパクション処理Aを高速化するものであるが、続いてこれらの処理の手順について説明する。
図42は、第2の従来例のガベージコレクタが行うコンパクション処理Bの手順を示すフローチャートである。ここでは、このコンパクション処理Bの実行に先立って、第1の従来例のガベージコレクタが行うスカビンジ処理Aと同様のスカビンジ処理により、リファレンスフラグが用いられセルの内容がリファレンスであるか否かが判定されつつ、ルートセルブロックからたどることのできるセルブロックが特定され、これらの特定されたセルブロックの使用中フラグが1に設定され、さらに、セルブロックのいずれからも参照されていないトレイの内容がNULLリファレンスに更新されているものとする。
【0042】
コンパクション処理Bでは、まず、上述の第1の従来例のガベージコレクタのコンパクション処理AでのS201〜S206の処理と同様の処理により、スカビンジ処理で設定された使用中フラグが用いられつつ、ヒープ領域内のすべてのセルブロックに対して、コンパクション後のリファレンス値が確定される(S30 1〜S306)。
【0043】
この後、トレイを特定するyに1が代入され(S307)、トレイyの内容が有効リファレンスであるか否かが判定される(S308)。トレイyの内容Tyが有効リファレンスであれば(S308にてYes)トレイyにコンパクション後のリファレンス値Rxが設定された後(S309)、また、トレイyの内容Tyが有効リファレンスでなければ(S308にてNo)S309での処理は行われないまま、yがトレイの個数Nに等しいか否かが判定される(S310)。yがNに等しくなければ(S310にてNo)yに1が加えられて(S311)S308からの処理が繰り返され、yがMに等しければ(S310にてYes)S312へと処理が進められる。
(これらS307〜S311での処理により、コンパクション前後でトレイからセルへの参照関係が保たれるようトレイの内容が更新されることとなる。)
S312〜S317での処理は第1の従来例のガベージコレクタのコンパクション処理AでのS221〜S226の処理と同様であり、これらの処理により先に確定されたセルブロックごとのコンパクション後のリファレンス値に基づいて実際にセルブロックが移動され、本処理は終了する。
【0044】
これらのように、コンパクション処理Bでは、まず、スカビンジ処理で設定された使用中フラグが用いられつつ、ヒープ領域内のすべてのセルブロックに対して、コンパクション後のリファレンス値が確定され(コンパクション処理AでのS201〜S206の処理と同様のS301〜S306の処理)、コンパクション前後でトレイからセルへの参照関係が保たれるよう有効リファレンスを保持するトレイの内容が更新され(S307〜S311の処理)、その後、コンパクション後のリファレンス値に基づいて実際にセルブロックが移動される(コンパクション処理AでのS221〜S226の処理と同様のS312からS317の処理)。
【0045】
以上のように、第2の従来例のガベージコレクタは、ハンドルを用いつつ、ヒープ領域の管理およびコンパクション処理Bを行うものであり、第1の従来例のガベージコレクタが行うコンパクション処理Aはより高速化されることとなる。
上述のような第1の従来例のガベージコレクタおよび第2の従来例のガベージコレクタは、いずれもリファレンスフラグを用いてセルの内容が数値であるかリファレンスであるかを判定しつつ、ガベージコレクションを行うものである。これに対し、第3の従来例のガベージコレクタは、アプリケーションとの綿密な情報交換を伴うことなく、保守的ガベージコレクションを行うものである。
【0046】
図43は、第3の従来例のガベージコレクタが用いるヒープ領域のセルに格納される内容の例を示す図である。(第3の従来例のガベージコレクタが用いるヒープ領域は、リファレンスフラグおよびハンドルを用いるものではなく、その構成は図27に示すものに準ずる。)
第3の従来例のガベージコレクタは、セルの内容が数値であるかリファレンスであるかを推測し、あるセルブロックがルートセルブロックからたどることができるセルブロックであるか否かを判定し、これらに基づいてガベージコレクションを行う。また、この推測は、実際にはリファレンスであるセルの内容を数値であると誤ることがないよう行われるものである。(本ガベージコレクタは、実際には数値であるセルの内容がリファレンスであると誤って推測される可能性があることを許容するものである。)
図43にて、たとえば、有効リファレンス12のセルは、有効リファレンス4を保持し、有効リファレンス4のセルを指すこととなっており、有効リファレンス12のセルから有効リファレンス4のセルへの折れ線の矢印はこれを示している。また、本ガベージコレクタでは、実際には数値であるセルの内容がリファレンスであると誤って推測される可能性がある。図43中の曲線の矢印はこの誤推測を示すものであり、有効リファレンス3のセルに保持されている数値14、有効リファレンス9のセルに保持されている数値0および有効リファレンス10のセルに保持されている数値4はいずれもリファレンスであると誤って推測されている。
【0047】
図44は、第3の従来例のガベージコレクタが用いるヒープ領域にて割り当てられるセルブロックの例およびこれらのセルブロック間の参照関係を示す図である。
実際、(ここでは図示していないが)セルブロックの先頭に次のセルブロックへのポインタを格納するものとし、これらを順次たどっていくことによりヒープ領域上セルブロックの先頭の位置を特定し、あるセル内のデータがセルブロックの先頭を指すものであるか否かを判定することにより、上記のような、実際にはリファレンスであるセルの内容を数値であると誤ることがない推測を行うことができる。
【0048】
図44に示すセルブロック間の参照関係は、先に図29(b)を用いて示したものと同様であるが、有効リファレンス4のセルに保持されている数値6は、セルブロック3の先頭セルの有効リファレンス6と同じ値であるため、誤ってリファレンスと推測されている。
図45は、図44に示す状態のヒープ領域に対するガベージコレクションを説明するための図である。図45(a)は図44に示す状態のヒープ領域に対するスカビンジ処理の結果を示しており、図45(b)は図45(a)に示す状態のヒープ領域に対して第1の従来例のガベージコレクタによるものと同様のコンパクション処理を行った結果を示している。(次に示すように、第3の従来例のガベージコレクタは、スカビンジ処理のみを行うものであり、コンパクション処理を行うことができない。)
図44に示す状態のヒープ領域に対してスカビンジ処理が行われると、図45(a)のように、ルートセルブロックからたどることのできないセルブロック1は開放されて未使用セルエリアとされる。ルートセルブロックからたどることのできるセルブロック2、セルブロック4およびセルブロック5は、開放されることなく残されたままとなっており、さらに、セルブロック2内有効リファレンス4のセルに保持されている数値6がリファレンスであるものと誤って推測され、セルブロック2がセルブロック3を参照するものと誤って判定されているため、セルブロック3は開放されることなく残されたままとなっている。
【0049】
この図45(a)に示す状態のヒープ領域に、先述の第1の従来例のガベージコレクタによるコンパクション処理A(図36、図37参照)と同様のコンパクション処理を行うものとすると、図45(b)に示すように、セルブロック間の参照関係が保たれたまま、開放されたセルブロック1のサイズ分、セルブロック2、セルブロック3、セルブロック4およびセルブロック5が前方に移動され、セルブロック1に対応する未使用セルエリアが後方の未使用セルエリアと統合されることとなる。
【0050】
これに加えて、このコンパクション処理により、参照関係が保たれるようセル内に保持されているリファレンスの値が更新されるため、リファレンスであると誤って推測されたコンパクション前の有効リファレンス4の数値6は、セルブロック2の移動分の値を引いた値4に更新されることとなる。すなわち、従来例3のガベージコレクタでは、実際には数値であるセルの内容がリファレンスであるものと誤って推測され、セル内の数値が誤って変更される可能性があるため、コンパクション処理を行うことができない。
【0051】
これらのように、保守的ガベージコレクタを実装する第3の従来例のガベージコレクタは、スカビンジ処理のみを行うものであるが、次にこれらの処理の手順を説明する。
図46は、第3の従来例のガベージコレクタが行うスカビンジ処理Bの手順を示すフローチャートである。
【0052】
スカビンジ処理Bはスカビンジ処理Aと同様の処理を行うものであるが、スカビンジ処理Bでは、スカビンジ処理AでのS106、S107の処理(図35参照)が、S406〜S408の処理に置き換えられている。すなわち、S406〜S408(これら以外のスカビンジ処理Bでの処理については、スカビンジ処理Aに準ずるものとする)では、まず、対象セルの内容が(先述のような推測方法にて)推測され(S406)、この内容がリファレンスと推測されたか否かが判定される(S407)。対象セルの内容がリファレンスと推測されていれば(S407にてYes)、リファレンスであると推測された対象セルの内容がスタックにプッシュされ(S408)、S409(スカビンジ処理AのS108に対応)へと処理が進められ、対象セルの内容がリファレンスと推測されていなければ(S407にてNo)、S408での処理は行われることなくS409へと処理が進められる。(これらの処理の置き換えは、第1の従来例のガベージコレクタがリファレンスフラグを用いているのに対し、第3の従来例のガベージコレクタがセルに対する推測を行うことに対応する。)これらのような第3の従来例のガベージコレクタのスカビンジ処理Aによると、セルの内容がリファレンスであるか否かが推測されつつ、ルートセルブロックからたどることのできるセルブロックが特定され、これらの特定されたセルブロックの使用中フラグが1とされ、これら以外のセルブロックが未使用セルエリアとして開放されることとなる。
【0053】
以上のように、第1の従来例のガベージコレクタおよび第2の従来例のガベージコレクタはヒープ領域に対するスカビンジ処理およびコンパクション処理を行い、また、第3の従来例のガベージコレクタはスカビンジ処理のみを行い、アプリケーションが必要とするサイズ分の領域を確保できるようヒープ領域の状態を保つ。
【0054】
【発明が解決しようとする課題】
しかしながら、第1の従来例のガベージコレクタおよび第2の従来例のガベージコレクタではリファレンスフラグが用いられるため、アプリケーションの実行時にリファレンスフラグに対する操作を要し、(ガベージコレクションを用いることのないアプリケーションに比較して)プロセッサに対する負荷はより大きく、アプリケーションの実行により多くの時間を要することになる。特に、第2の従来例のガベージコレクタでは、コンパクション処理が高速化されてはいるものの、ハンドルが用いられておりこれらに対してリファレンスフラグのみに対するよりもより多くの領域を確保する必要がある。
【0055】
また、第3の従来例のガベージコレクタでは、アプリケーションの実行に際してフラグが操作されるということがなく、第1の従来例のガベージコレクタおよび第2の従来例のガベージコレクタに比較してアプリケーション実行に対する負荷は小さくなるが、実際には数値であるセルの内容がリファレンスであると誤って推測される可能性があり、この誤りの可能性のある推測結果に基づいてスカビンジ処理が行われるため、コンパクションを実装することができない。コンパクションが実装されなければ、アプリケーションの実行に際してヒープ領域内で未使用セルエリアの分断が起こることとなり、アプリケーションにより要求されるサイズ分の領域をスムーズに確保できるよう、分断された複数の未使用セルエリアを管理する機構が別途必要となることになる。
【0056】
本発明は、上記のような問題点を考慮してなされたものであり、ガベージコレクションの実行に必要となる領域を小さく抑えてアプリケーションの実行にかかる負荷をより小さくしつつ、高速なコンパクションを行うことのできるガベージコレクション装置を提供することを目的とする。
【0057】
上記目的を達成するための、本発明に係るガベージコレクション装置は、スカビンジ処理およびコンパクション処理によりメモリ空間上のデータの再配置を行うガベージコレクション装置であり、前記メモリ空間には、セルとトレイとが配置されており、前記セルが保持するデータは、トレイのアドレスを示すハンドルまたはハンドル以外の数値のいずれかであり、前記トレイはセルのアドレスを示すリファレンスを保持し、メモリ空間上の連続したセルからなるセルブロックは、トレイが保持しているリファレンスを介してたどることができるようになっており、前記スカビンジ処理は、セルが保持しているデータがハンドルであるか否かの推定処理を行い、ハンドルを保持していると推定されたセルを含むセルブロックのうち、所定のルートセルブロックからトレイが保持しているリファレンスを介してたどることができない未使用セルブロックを開放する処理であり、前記コンパクション処理は、データを保持しない複数のセルブロックが、メモリ空間上で連続して配置されるようにセルブロックを移動する処理であり、前記スカビンジ処理における推定処理は、セルが保持しているデータをハンドルとみなしたとき、当該ハンドルがトレイのアドレスとして許される範囲にあるか否か、および、当該ハンドルを保持しているセルのアドレスをリファレンスとして保持しているトレイが未使用トレイでないかどうかの判定を含み、ハンドルがトレイのアドレスとして許される範囲であり、かつ、ハンドルを保持しているセルのアドレスをリファレンスとして保持しているトレイが未使用トレイであるときに限って、前記セルが保持しているデータがハンドルであると推測することを特徴とするガベージコレクション装置である。
【0059】
【発明の実施の形態】
以下、図面を参照しつつ、本発明の実施の形態における実施例の1つであるガベージコレクタについて説明する。
図1は本発明の実施例の1つであるガベージコレクタが用いるヒープ領域の構成を説明するための図であり、図2はヒープ領域を構成するセルに格納される内容の例およびこれらのセル間の参照関係を示す図である。
【0060】
図1に示すように、本ガベージコレクタにより管理されるヒープ領域には、セルの配列およびトレイの配列が構成される。有効リファレンスによって特定される各セルは数値またはハンドルを保持し、有効ハンドルによって特定される各トレイはリファレンスを保持し、本ガベージコレクタは、トレイに格納される有効リファレンスを用いつつセルの状態を管理する。
【0061】
リファレンスには、図2に示すように(また従来例のガベージコレクタと同様)、セルのアドレスを示す有効リファレンスとセルを指し示さないNULLリファレンスとがあり、ハンドルには、有効リファレンスを保持しているトレイのアドレスを示す有効ハンドルとトレイを指し示さないNULLハンドルとがある。ここでは、有効リファレンス0のセルおよび有効リファレンス4のセルに保持されている有効ハンドル2は、有効ハンドル2のトレイを指していることを示しており、有効リファレンス7のセルに保持されている有効ハンドル3は、有効ハンドル3のトレイを指していることを示している。同様に、有効リファレンス12のセルに保持されている有効ハンドル1、有効リファレンス15のセルに保持されている有効ハンドル0および有効リファレンス17のセルに保持されている有効ハンドル4は、それぞれ、対応するトレイを指していることを示している。図上、これらの参照関係はセルからトレイへの折れ線の矢印によって表されている。
【0062】
また、図2では、有効ハンドル0のトレイに保持されている有効リファレンス3、有効ハンドル1のトレイに保持されている有効リファレンス4、有効ハンドル2のトレイに保持されている有効リファレンス7、有効リファレンス3のトレイに保持されている有効リファレンス8および有効ハンドル4のトレイに保持されている有効リファレンス14がそれぞれ対応するセルを指していることが、トレイからセルへの折れ線の矢印により表されている。
【0063】
特に本ガベージコレクタは、セルの内容が数値であるかハンドルであるかを推測し、あるセルブロックがルートセルブロックからたどることができるセルブロックであるか否かを推定し、これらに基づいてスカビンジ(トレイの開放)を行い、スカビンジの行われたヒープ領域に対してコンパクションを行うものであり、上記の推測は、実際にはハンドルであるセルの内容を数値であると誤ることがないよう行われる。(本ガベージコレクタは、実際には数値であるセルの内容がハンドルであると誤って推測される可能性があることを許容するものである。)図2中の、有効リファレンス9のセルから有効ハンドル0のトレイへの曲線の矢印、また、有効リファレンス10のセルから有効ハンドル4のトレイへの曲線の矢印は、上記のような推測により、実際には数値であるセルの内容がハンドルであると誤って推測されていることを示している。
【0064】
実際、プロセッサ(CPU)が複数のデータメモリ空間を扱えることを想定して、たとえば32ビットアドレス空間を持つ1つのデータメモリ空間が、データセグメントおよびエキストラセグメントとしてそれぞれ占有されるものとし、データセグメントにセル(データサイズ:32ビット)を割り当て、エキストラセグメントにトレイを割り当てるものとすることができる。この場合には、セルの保持する値により特定されることとなるエキストラセグメント内のトレイを検査し、このトレイが有効リファレンスを保持しているか否かに応じて、セルの保持する値が有効ハンドルであるか数値であるかを推測することができる。
【0065】
また、プロセッサがデータメモリ空間を1つのみ扱えることを想定して、セルに対応するアドレスの範囲(たとえば3000〜12999)とトレイに対応するアドレスの範囲(0〜2999)とを異ならせるものとすることができる。この場合には、セルの保持する値がトレイに対応するアドレスの範囲にあるか否か、および、このトレイが有効リファレンスを保持しているか否かを検査し、セルの保持する値がトレイに対応するアドレスの範囲にあり、かつ、このトレイが有効リファレンスを保持しているときに限って、セルの保持する値が有効ハンドルであるものと推測することができる。
(ここでは、データセグメントにセルを割り当てセルに対応するアドレスの範囲を0〜9999とし、エキストラセグメントにトレイを割り当てトレイに対応するアドレスの範囲を0〜2999としている。)
上記のようなデータを保持しているセルからは、次のようなセルブロックが構成される。図3は、本ガベージコレクタが用いるヒープ領域にて割り当てられるセルブロックの例およびこれらのセルブロック間の参照関係を示す図である。
【0066】
(従来例のガベージコレクタと同様)ヒープ領域に確保される特定の1つのセルブロックをルートセルブロックと呼び、セルのうちセルブロックのいずれにも属しないセルを未使用セル、複数の連続する未使用セルからなる領域全体を未使用セルエリアと呼ぶ。また、トレイのうちNULLリファレンスを保持するトレイを未使用トレイ、複数の連続する未使用トレイからなる領域全体を未使用トレイエリアと呼ぶ。さらに、”セルブロックAがセルブロックBを参照している”、”セルブロックX1からセルブロックXnをたどることができる”、”セルブロックを確保する”等の表現は、第2の従来例のガベージコレクタにおけるものと同様の意味にて用いられるものとする。
【0067】
図3では、ルートセルブロックは有効ハンドル3のトレイ(有効リファレンス8を保持)を介してセルブロック4を参照しており、セルブロック3は有効ハンドル1のトレイ(有効リファレンス3を保持)を介してセルブロック2を参照しており、セルブロック4は有効ハンドル1のトレイを介してセルブロック2を参照し有効ハンドル4のトレイ(有効リファレンス12を保持)を介してセルブロック5を参照しており、これらは折れ線の矢印によって示されている。有効ハンドル0のトレイは有効リファレンス1を保持しセルブロック1を参照するものであるが、いずれのセルブロックからも参照されていない。
【0068】
また、セルブロック2に含まれる有効リファレンス4のセルは数値2を保持するものであるが、この数値2はハンドルであるものと誤って推測されており、これらは曲線の矢印によって示されている。
アプリケーションの使用に伴い、アプリケーションが、必要とするサイズ分のセルブロックをヒープ領域にて確保できなくなってくると、本ガベージコレクタは、スカビンジ処理およびコンパクション処理を行う。
【0069】
図4は、図3に示す状態のヒープ領域に対するガベージコレクションを説明するための図である。図4(a)は図3に示す状態のヒープ領域に対するスカビンジ処理の結果を示しており、図4(b)は図4(a)に示す状態のヒープ領域に対するコンパクション処理の結果を示している。
図3に示す状態のヒープ領域に対してスカビンジ処理が行われると、図4(a)のように、セルブロックのいずれからも参照されていない有効ハンドル0のトレイの内容が有効リファレンス1からNULLリファレンスに更新され、このトレイは未使用トレイとされる。また、この更新により、有効ハンドルにより指し示されていないこととなったセルブロック1は開放され、未使用セルエリアとされる。
【0070】
さらに、ルートセルブロックからたどることのできるセルブロック2、セルブロック3、セルブロック4およびセルブロック5は、開放されることなく残されたままとなっており、これらのセルブロック間の参照に用いられる(と正常に推測された)有効ハンドル1のトレイ、有効ハンドル3のトレイおよび有効ハンドル4のトレイならびにセルブロック2からセルブロック3への参照に用いられると誤って推測された有効ハンドル2のトレイは、開放されることなく残されたままとなっている。
【0071】
この図4(a)に示す状態のヒープ領域に、先述の第2の従来例のガベージコレクタによるコンパクション処理B(図42参照)と同様のコンパクション処理が行われると、図4(b)のように、ルートセルブロックからセルブロック4への参照、セルブロック3およびセルブロック4からセルブロック2への参照、ならびに、セルブロック4からセルブロック5への参照、これに加えて、誤って推測されたセルブロック2からセルブロック3への参照が保たれたまま、開放されたセルブロック1のサイズ分、セルブロック3〜セルブロック5およびセルブロック2が前方に移動されて、セルブロック1に対応する未使用セルエリアが後方の未使用セルエリアと統合されることとなる。
【0072】
これらのようなセルブロックの前方への移動に際しては、有効リファレンス0のセルの内容である有効ハンドル3、有効リファレンス7および有効リファレンス9のセルの内容である有効ハンドル1、ならびに、有効リファレンス11のセルの内容である有効ハンドル4、加えて、有効リファレンス4のセルの内容であり有効ハンドルであると誤って推測された数値2は更新されることなく、対応するハンドルの内容である有効リファレンス8、有効リファレンス3、有効リファレンス12および有効リファレンス6が、それぞれ、有効リファレンス6、有効リファレンス1、有効リファレンス10および有効リファレンス4に更新されている。
【0073】
これらのような本ガベージコレクタは、先述の第2の従来例のガベージコレクタでのコンパクション処理Bと同様のコンパクション処理を行うものであるが、以下に示すようなスカビンジ処理を行う。
図5および図6は、本ガベージコレクタが行うスカビンジ処理の手順を示すフローチャートである。(使用中フラグは、第1の従来例のガベージコレクタ等と同様、セルブロックがルートセルブロックからたどることができるか否かを示すよう各セルブロックに対して設定される。)
本スカビンジ処理では、まず、セルブロックx(x=1〜M(Mはセルブロックの個数))の使用中フラグFxに対して0が代入され(S1)、ルートセルブロックの内容であるハンドルが指すリファレンスがスタックにプッシュされる(S2)。
【0074】
スタックに積まれたリファレンスはポップされ(S3)、ポップされたリファレンスが指すセルブロックxの先頭セルが対象セルに設定され(S4)、セルブロックxに対する使用中フラグFxに1が代入される(S5)。
続いて、対象セルの内容が(先述のような推測方法にて)推測され(S6)、このセルの内容がハンドルと推測されたか否かが判定される(S7)。対象セルの内容がハンドルと推測されていれば(S7にてYes)、ハンドルであると推測された対象セルの内容であるハンドルが指すリファレンスが、スタックにプッシュされ(S8)、S9へと処理が進められ、対象セルの内容がハンドルと推測されていなければ(S7にてNo)、S8での処理は行われることなくS9へと処理が進められる。
【0075】
S9では同一のセルブロック内で後続するセルがあるか否かが判定され、後続するセルがあれば(S9にてYes)後続するセルが対象セルとされて(S10)S6からの処理が繰り返され、後続するセルがなければ(S9にてNo)続いてスタックが空であるか否かが判定される(S11)。スタックが空でなければ(S11にてNo)、S3からの処理が繰り返され、スタックが空であれば(S11にてYes)、S12へと処理が進められる。
【0076】
S12ではyに1が代入され、ハンドルyのトレイの内容が有効リファレンスであるか否かが判定される(S13)。ハンドルyのトレイの内容が有効リファレンスであれば(S13にてYes)、続いて、この有効リファレンスが指すセルブロックxの使用中フラグが0であるか否かが判定される(S13)。セルブロックxの使用中フラグが0であれば(S14にてYes)、ハンドルyのトレイの内容としてNULLリファレンスが代入された後(S15)yがトレイの個数Nに等しいか否かが判定され(S16)、セルブロックxの使用中フラグが0でなければ(S14にてNo)S15での処理は行われることなく、S16へと処理が進められる。
【0077】
yがNに等しくなければ(S16にてNo)、yに1が加えられ(S17)S13からの処理が繰り返され、yがNに等しければ(S16にてYes)、本処理は終了される。
これらのようなスカビンジ処理よると、セルの内容がハンドルであるか否かが推測されつつ、ルートセルブロックからたどることのできるセルブロックが特定され、これらの特定されたセルブロックの使用中フラグが1とされ、これら以外のセルブロックが未使用セルエリアとして開放されることとなる。
【0078】
本ガベージコレクタでは、以上のようなスカビンジ処理にて実際には数値であるセルの内容をハンドルであると誤って推測する可能性があるが、セルの特定には間接アドレッシング(ハンドル)が用いられており、コンパクション処理ではこのハンドルによって特定されるトレイの内容が更新されるため、セル自体の内容が更新されることはなく、(第3の従来例のガベージコレクタとは異なり)有効にコンパクションが行われることとなる。
【0079】
また、スカビンジ処理にてハンドルを保持するものと誤って推測されたセルにより指示されることとなるセルブロックは、未使用セルエリアに統合されないこととなるものの、誤推測された数値が書き換えられれば、その次に行われるスカビンジ処理により正常に開放される可能性がある。
以下に、第1の従来例のガベージコレクタ〜第3の従来例のガベージコレクタおよび本ガベージコレクタの特徴を要約する。
【0080】
【表1】
【0081】
実際、リファレンスフラグは、セル1個(たとえば4バイトで構成されるものとする)につき1ビット必要であるので、ヒープ領域をより有効に活用するために、セル8個分のリファレンスフラグが1つにパックされて利用される。アプリケーション実行中セルに値を代入するとき、このセルがリファレンスであるか数値であるかを示すためリファレンスフラグを設定する必要があり、このようなリファレンスフラグへのアクセスに多くの時間がかかる。また、スカビンジ処理を行う際には、セルの値がリファレンスであるか数値であるかを検知しなくてはならず、上記のようにして構成されるリファレンスフラグへのアクセスに多くの時間がかかる。
【0082】
[表1]に示すように、第1の従来例のガベージコレクタおよび第2の従来例のガベージコレクタは、セル内容の判定にリファレンスフラグを用いるものであり、アプリケーションの実行中リファレンスフラグを用いてアプリケーションと情報交換しまたスカビンジ処理に際してリファレンスフラグを参照するため、アプリケーション実行によるプロセッサへの負荷およびスカビンジ処理に要する負荷はより大きなものとなり、一定の処理能力を有するプロセッサでの処理を想定したとき、(第3の従来例のガベージコレクタおよび本発明のガベージコレクタに比べて)より多くの時間をこれらの処理に要することとなる。(第1の従来例のガベージコレクタと第2の従来例のガベージコレクタとを比較すると、第2の従来例のガベージコレクタが行うコンパクション処理B(図42参照)ではハンドルが用いられるため、S307〜S311の処理は、同様に更新後のリファレンス値を設定することとなる、第1の従来例のガベージコレクタが行うコンパクション処理A(図36および図37参照)のS207〜S220の処理に比較して簡素であり、コンパクション処理に要する負荷が小さなものとなっている。)
第1の従来例のガベージコレクタおよび第2の従来例のガベージコレクタに対して、第3の従来例のガベージコレクタおよび本発明のガベージコレクタは、保守的ガベージコレクタでありセル内容の判定に推測を用いるものであり、上記のようなアプリケーション実行中のリファレンスフラグの操作およびスカビンジ処理に際してのリファレンスフラグの参照は不要であり、アプリケーション実行の負荷およびスカビンジ処理に要する負荷は小さく、より短い時間にてこれらの処理を行うことができる。(上述しなかったが、第2の従来例のガベージコレクタでコンパクション処理を行う際には、対応するリファレンスフラグの移動がセルの移動に伴われ、本発明のガベージコレクタと比較してコンパクション処理に対する負荷が大きいといえる。)
特に、第3の従来例のガベージコレクタは、スカビンジ処理にてセル内容を誤って推測する可能性があることからコンパクション処理を行うことができないものであるが、本ガベージコレクタでのスカビンジ処理は、保守的ガベージコレクタにてコンパクション処理を行うことを可能にするものである。
【0083】
次に、以上説明してきたような本発明に係るガベージコレクタの(プログラム記憶式)コンピュータへのより具体的な実装例として、端末からの入力に応じて座席を予約するための予約システムを説明する。
図7は本発明に係るガベージコレクタを用いる予約システムの構成の概略を示す図であり、図8は本予約システムに含まれる予約データベース管理部4の構成を説明するための図である。
【0084】
図7に示すように、本予約システムは、端末部A1、端末部B2、端末部C3および予約データベース管理部4を含んでいる。本予約システムでは、端末部A1、端末部B2および端末部C3のいずれかでのユーザの(1以上の)座席数の入力に応じて、この座席数分の座席の予約が予約データベース管理部4に要求される。予約データ管理部4は、必要座席数分の座席番号の2組の候補を仮予約し、それらの候補を予約を要求してきた端末部に返す。予約が返された端末部は、ユーザの入力によりそれら候補のうちのいずれかを選択し、選択結果を予約データベース管理部4に報告し、予約データベース管理部4はユーザの選択した候補を本予約し予約を終了する。
【0085】
予約データベース管理部4は、図8に示すように、予約の実行に伴って用いられるセルを初期化する初期化部41、全体の動作を制御してユーザの所望する座席数分の座席を予約するアプリケーション部42、セルブロック内のセルに値を代入するセル代入部43、および、アプリケーション部42の要求に応じて記憶領域上にセルブロックを割り当て必要に応じてガベージコレクションを行うガベージコレクタ44を含んでおり、ガベージコレクタ44は、セルブロックの割り当てを行うセルブロック割り当て部441、ならびに、上述のようなスカビンジ処理を行うスカビンジ処理部442および前述のようなコンパクション処理を行うコンパクション処理部443を含んでいる。
【0086】
実際、アプリケーション部42、初期化部41、セルブロック割り当て部441、スカビンジ処理部442、コンパクション処理部443、端末部A1〜C3、および、セル代入部43では、次に、図9〜図17に示すような処理が行われ、ガベージコレクタ44によりアプリケーション部42の要する記憶領域が確保され必要に応じてスカビンジ処理およびコンパクション処理が行われつつ、座席の予約が実行される。(これらの処理の手順を説明した後、図18〜図24を用いて端末部A1〜端末部C3からのユーザの入力を想定したセルブロックの変化を具体的に説明する。)
図9〜図17に示す処理の実行に際して用いられるセルブロックは、セル配列の部分配列であり、先頭セルのリファレンス(アドレス)をx、セルブロック内容の長さをnとして、次のような構成によるものとする。
・C[x]=次のセルブロックの先頭リファレンス
・C[x+1]=n(=セルブロック内容の長さ)
・C[x+2]=使用中フラグまたはコンパクションに用いられるワーク
・C[x+3]〜C[x+2+n]=アプリケーションにて自由に使用されるセルブロックの内容
特に、ここではルートセルブロックを次に示すようなセルであるものとする。(これらの値は、後に示すような処理によって初期化部41にて代入される。)
・C[1]=5
・C[2]=1
・C[3]=NULL
・C[4]=NULL
本予約システムでの予約の実行に際して、ガベージコレクタ44は、セルブロックの割り当てを要求されること以外にはアプリケーションの動作(アプリケーション部42での処理および端末部A1〜端末部C3での処理)にはかかわらず独立した動作を行うものであり、このアプリケーションからの要求に応じて、必要な際にスカビンジ処理、コンパクション処理を行う。また、ガベージコレクタ44は、上記のようなセルブロックの構成のみを識別して処理を行うものであり、スカビンジ処理部442は、(C[x+3]〜C[x+2+n]に対応する)セルブロックの内容を示すセルが数値であるかハンドルであるかをあらかじめ識別するものではなく、セルの内容を(具体的には後に示すような図12のS41、S42等の処理により)推測するものである。
【0087】
上記のようにガベージコレクタ44はアプリケーションにて用いられるセルブロックの内容を知るものではないが、アプリケーションは予約を実行するため次に示すようなデータ構造を有するシステムセルブロックおよび候補セルブロックを用いる。
システムセルブロック(先頭セルのリファレンスをx0としている)
・C[x0]〜C[x0+2]=各々上述のC[x]〜C[x+2]に対応する値
・C[x0+3]=端末部A1の候補セルブロックへのリファレンスを格納するハンドル
・C[x0+4]=端末部B2の候補セルブロックへのリファレンスを格納するハンドル
・C[x0+5]=端末部C3の候補セルブロックへのリファレンスを格納するハンドル
端末部t(=A、B、C)に対する候補セルブロック(先頭セルのリファレンスをxtとしている)
・C[xt]〜C[xt+2]=各々上述のC[x]〜C[x+2]に対応する値
・C[xt+3]=予約座席数
・C[xt+4]〜C[xt+3+予約座席数]=候補1として仮予約した座席の座席番号
・C[xt+4+予約座席数]〜C[xt+3+2×予約座席数]=候補2として仮予約した座席の座席番号
フローチャート中およびフローチャートの説明に当たっては、次に示すような表記を用いるものとする。
・C: セル配列
・N: セルの個数(セル配列のサイズ)
・C[1]〜C[N]: セル
・T: トレイ配列
・M: トレイの個数(トレイ配列のサイズ)
・T[1]〜T[M]: トレイ
・NULL: 数値0
・U: 未使用セルブロックの先頭リファレンス
・W: コンパクション時のワーク
・S: リファレンススタック
図9はアプリケーション部42での処理の手順を示すフローチャートであり、図10は初期化部41での処理の手順を示すフローチャートである。
【0088】
図9に示すように、アプリケーション部42の処理では、まず、初期化部41が呼び出され、(後に図10を用いて示すような手順によって)記憶領域上のセルブロックが初期化されまたルートセルブロックが設定される(S21)。続いて、必要セル数nに3が代入されてセルブロック割り当て部441が呼び出され、(後に図11に示すような手順による)セルブロック割り当て部441での処理により得られたハンドルhがC[4]に代入され、システムセルブロックが確保される(S22)。
【0089】
この後、sに1が代入されて(S23)、処理に用いられるkにsが代入され端末部s(s=1、2、3であり、端末部1〜端末部3を、端末部A1〜端末部C3にそれぞれ対応させる)が呼び出される(S24)。端末部sでは、より詳細には後に図15および図16に示すような手順によって、ユーザの予約の要求への応答が行われ必要に応じてガベージコレクションが行われつつセルブロックの割り当てとセルブロックへの値の代入等の処理が行われ、座席の仮予約および本予約が順次行われることとなる。端末部sの呼び出しの後にはsに1が加えられて(S25)、sの値が3より大きいか小さいかに応じてS23からの処理(S26にてYes)またはS24からの処理(S26にてNo)が繰り返され、端末部A1、端末部B2、端末部C3の呼び出しが順次繰り返される。
【0090】
上記のアプリケーション部42のS21での処理では初期化部41が呼び出されるが、図10に示すように、初期化部41の処理では、まず、xに1が代入され(S2101)、C[x]にNULLが代入され(S2102)、xがセルの個数Nに等しいか否かが判定される(S2103)。xがNに等しくなければ(S2103にてNo)xに1が加えられて(S2104)S2102からの処理が繰り返され、xがNに等しければ(S2103にてYes)S2105へと処理が進められる。(これらのS2 101〜S2104での処理はすべてのセルC[1]〜C[N]をNULLに初期化するものである。)
続いて、S2105では再びxに1が代入され、T[x]にNULLが代入され(S2106)、xがトレイの個数Mに等しいか否かが判定される(S2107)。xがMに等しくなければ(S2107にてNo)xに1が加えられて(S2108)S2106からの処理が繰り返され、xがMに等しければ(S2107にてYes)S2109へと処理が進められる。(これらのS2105〜S2108での処理はすべてのトレイT[1]〜T[M]をNULLに初期化するものである。)
S2109ではC[1]に5、C[2]に1が代入されることによりルートセルブロックが設定され、また、未使用セルブロックの先頭リファレンスUに5が代入され(S2109)、初期化部41での処理は終了し、この後、上記のアプリケーション部42のS22での処理によりセルブロック割り当て部441が呼び出される。
【0091】
図11はセルブロック割り当て部441での処理の手順を示すフローチャートであり、図12はセルブロック割り当て部441から呼び出されるスカビンジ処理部442での処理の手順を示すフローチャートであり、図13および図14はセルブロック割り当て部441から呼び出されるコンパクション処理部443での処理の手順を示すフローチャートである。
【0092】
図11に示すように、セルブロック割り当て部441の処理では、まず、必要セル数nが(N―U―3)以下であるか否か(すなわち記憶領域上必要なセルの確保が可能か否か)が判定される(S2201)。nが(N―U―3)以下であれば(S2201にてYes)S2205へと処理が進められ、nが(N―U―3)以下でなければ(S2201にてNo)、続いて、(後に図12に示す手順にて処理を行う)スカビンジ処理処理部442および(後の図13および図14に示す手順にて処理を行う)コンパクション処理部443が順に呼び出され(S2202、S2203)、再び、必要セル数nが(N―U―3)以下であるか否かが判定される(S2204)。nが(N―U―3)以下でなければ(S2204にてNo)使用することのできるセルが不足しているものとして異常終了し、nが(N―U―3)以下であれば(S2204にてYes)S2205へと処理が進められる。
【0093】
S2205ではhに1が代入され、(後に更新される)hがトレイの個数M以下であるか否かが判定される(S2206)。hがM以下でなければ(S2206にてNo)使用することのできるトレイが不足しているものとして異常終了し、hがM以下であれば(S2206にてYes)T[h]がNULLであるか否かが判定される(S2207)。T[h]がNULLでなければ(S2207にてNo)hに1が加えられ(S2208)S2206からの処理が繰り返され、T[h]がNULLであれば(S2207にてYes)S2209へと処理が進められる。
【0094】
S2205〜S2208での処理により使用されていないトレイに対応するhが特定され、T[h]に未使用セルブロックの先頭リファレンスU、C[U]に(U+n+3)、C[U+1]にnがそれぞれ代入され、Uに(n+3)が加えられて(S2209)、セルブロック割り当て部441での処理が終了する。
(これらのようなセルブロック割り当て部441は、必要セル数nを3とするアプリケーション部42のS22での呼び出しに応じてシステムセルブロックを確保しこのシステムセルブロックの先頭リファレンスを格納するトレイを特定するハンドルhを出力し、必要セル数nを(2×座席数+1)とする端末部A1〜端末部C3のS2411での呼び出しに応じて候補セルブロックを確保し新たに確保される候補セルブロックの先頭リファレンスを格納するトレイを特定するハンドルhを出力する。)
上記のセルブロック割り当て部441のS2202ではスカビンジ処理部442が呼び出されるが、図12に示すように、スカビンジ処理部442の処理では、まず、xに1が代入され(S31)、C[x]がNULLであるか否かが判定される(S32)。C[x]がNULLでなければ(S32にてNo)C[x+2]に0が代入されxがC[x]の示す値に更新されて(S3 3)S32からの処理が繰り返され、C[x]がNULLであれば(S32にてYes)S34へと処理が進められる。(ここでは、C[x+2]は使用中フラグとして用いられ、これらのS31〜S33での処理は使用されているセルブロックの使用中フラグを0に初期化するものである。)
S34ではリファレンススタックSに1がプッシュされ、(後に更新される)Sが空であるか否かが判定される(S35)。Sが空でなければ(S35にてNo)、Sにスタックされているリファレンス(使用されているセルブロックの先頭リファレンス)がrにポップされ(S36)、rがNULLであるか否かが判定される(S37)。rがNULLであれば(S37にてYes)S35からの処理が繰り返され、rがNULLでなければ(S37にてNo)(セルブロックの構造によりS35以下の処理が無限ループとなることを回避するために)さらにC[r+2]が0であるか否かが判定される(S38)。
【0095】
C[r+2]が0でなければ(S38にてNo)S35からの処理が繰り返され、C[r+2]が0であれば(S38にてYes)、C[r+2]に1が代入され使用されている(と推定された)セルブロックの使用中フラグが1とされ、xに0が代入される(S39)。
続いて、(後に更新される)xが(セルブロック内容のサイズを示す)C[r+1]の値より小さいか否か(セルブロック内容として含まれるすべてのセルについて以下の処理が行われたか否か)が判定される(S40)。xがC[r+1]の値より小さくなければ(S40にてNo)、(対象を次のセルブロックとするため)S35へと処理が移され、xがC[r+1]の値より小さければ(S40にてYes)続いてC[r+3+x]の値が1以上M以下であるか否か(S41)およびT[C[r+3+x]]の値がNULLであるか否か(S42)が判定される。C[r+3+x]の値が1以上M以下であり(S41にてYes)かつT[C[r+3+x]]の値がNULLでない(S42にてNo)場合に限ってT[C[r+3+x]]がリファレンススタックSにプッシュされ(S43)、これらの後、xに1が加えられxの値が更新され(S44)S40からの処理が繰り返される。
【0096】
(セルブロックが順次たどられることにより)リファレンススタックSが空になると(S35にてYes)、再びxに1が代入され(S45)、T[x]がNULLであるか否か(S46)およびC[T[x]+2]が1であるか否か(T[x]の指示するセルブロックの使用中フラグが1であるか否か)(S47)が判定される。
【0097】
T[x]がNULLでないとき(S46にてNo)C[T[x]+2]が1でなければ(S47にてNo)T[x]にNULLガ代入された(S48)後、また、T[x]がNULLであるとき(S46にてYes)もしくはC[T[x]+2]が1であれば(S47にてYes)S48での処理は行われないまま、xに1が加えられて(S49)、xがN以下であるか否かが判定される(S50)。xがN以下であれば(S50にてYes)S46からの処理が繰り返され、xがN以下でなければ(S50にてNo)スカビンジ処理部442での処理は終了し、この後、上記のセルブロック割り当て部441のS2203での処理(図11参照)によりコンパクション処理部443が呼び出される。
【0098】
特に、上記のようなスカビンジ処理部442のS41およびS42での処理は、セルブロック内容に対するセルがハンドルを保持しているか数値を保持しているかを推測するためものであり、セルの保持する値が(有効)ハンドルの取り得る値でありかつこのハンドルによって特定されるトレイの値がNULLでないときに限って、このセルの保持する値がハンドルであるものと推定される。この推定に応じて、S43では、ハンドルであるものと推定されたセルの値の指示するトレイに格納されているリファレンスが、リファレンススタックSにプッシュされ、このリファレンスによって特定されるセルブロックが使用中であるものと推定されることとなる。また、上記のようなスカビンジ処理部442のS45〜S50での処理は、使用されていないセルブロックを指示することとなったトレイにNULLを代入し未使用トレイとするものである。(S45〜S50での処理によりトレイが有効に再利用されることとなる。)
図13(および図14)に示すように、コンパクション処理部443の処理では、まず、ワークW(セルブロックの先頭セルのリファレンスに順次使用中のセルブロックの大きさが加算されていく)およびU(すべてのセルブロックの先頭セルのリファレンスを順に指示していくよう更新されていく)に1が代入され(S51)、C[U+2]が1であるか否か(使用中フラグが1であるか否か)が判定される(S52)。C[U+2]が1であれば(S52にてYes)C[U+2]にWが代入され(C[U+2]にセルブロック移動後の先頭セルのリファレンスが格納され)Wに値(C[U+1]+3)(セルブロックのサイズ)が加えられた後、また、C[U+2]が1でなければ(S52にてNo)C[U+2]の値およびWの値は変更されないまま、UにC[U]の値(次に対象とするセルブロックの先頭リファレンスを示す)が代入されてUが更新され(S54)、UがNULLであるか否かが判定される(S55)。UがNULLでなければ(S55にてNo)S52からの処理が繰り返され、UがNULLであれば(S55にてYes)S56へと処理が進められる。(これらのS51〜S55での処理により、セルブロック移動後の先頭セルのリファレンスが算出され各セルブロックに対する所定のワーク(各セルブロックのC[x+2]に対応するセル)に格納される。)
S56ではxに1が代入され、T[x]がNULLであるか否かが判定される(S57)。T[x]がNULLでなければ(S57にてNo)T[x]にはC[T[x]+2]の値(上記の各セルブロックに対するワークの値)が代入された後、また、T[x]がNULLであれば(S57にてYes)T[x]の値が変更されないまま、xがトレイの個数Mに等しいか否かが判定される(S59)。xがMに等しくなければ(S59にてNo)xに1が加えられ(S60)S57からの処理が繰り返され、xがMに等しければ(S59にてYes)S61へと処理が進められる。(これらのS56〜S60での処理により、すべてのT[1]〜T[M]がセルブロック移動後の先頭セルのリファレンスを指示するよう更新される。)
S61ではU(使用中のセルブロックの先頭セルのリファレンスを順に指示していくよう更新されていく)に1が代入され、C[U+2]の値が0であるか否か(C[x+2]によりセルブロックが使用されていないことが示されているか否か)が判定される(S62)。
【0099】
C[U+2]の値が0でなければ(S62にてNo)、C[C[U+2]]に(C[U+2]+C[U+1]+3)が代入され(移動後のセルブロックの先頭セルC[x]に(移動後の)次のセルブロックの先頭セルのリファレンスが代入され)(S63)、C[U+1]〜C[U+C[U+1]+2]の内容がC[C[U+2]+1]〜C[C[U+2]+C[U+1]+2]にコピーされ(S64)、S65へと処理が進められる。C[U+2]の値が0であれば(S62にてYes)、S63、S64での処理は行われることなく、S65へと処理が進められる。
【0100】
S65ではUにC[U]が代入され更新され、UがNULLであるか否かが判定され(S66)、UがNULLでなければ(S66にてNo)S62からの処理が繰り返され、UがNULLであれば(S66にてYes)S67へと処理が進められる。(これらのS61〜S66での処理により、実際にセルが移動されることとなる。)
S67ではxにWの値(使用されていないセルの先頭リファレンスを示している)が代入され、C[x]にNULLが代入され(S68)、xがセルの個数Nに等しいか否かが判定される(S69)。xがNに等しくなければ(S69にてNo)xに1が加えられて更新され(S70)、xがNに等しければ(S69にてYes)コンパクション処理部443での処理は終了し、セルブロック割り当て部441のS2204からの処理(図11参照)が続けられる。(S67からS69での処理により、リファレンスがW以降のセルにNULLが代入される。)
これらのようなコンパクション処理部443での処理は、スカビンジ処理部442での処理により使用中ではないと推定されたセルブロックを未使用セルエリアに統合するものである。
【0101】
さらに、先述のアプリケーション部42でのS24での処理(図9参照)により、端末部A1〜端末部C3が呼び出される。
図15および図16は端末部A1〜端末部C3の各々での処理の手順を示すフローチャートであり、図17は端末部A1〜端末部C1から呼び出されるセル代入部43での処理の手順を示すフローチャートである。
【0102】
図15(および図16)に示すように、端末部s(端末部A1〜端末部C3の各々)では、まず、ユーザにより新たな予約が要求されたか否かが判定される(S2401)。
新たな予約が要求されれば(S2401にてYes)、C[T[C[4]]+2+k]がNULLであるか否か(端末部sのための候補セルブロックへのリファレンスを格納するハンドルを指示する、システムセルブロックのセルがNULLであるか否か)が判定され(S2407)、C[T[C[4]]+2+k]がNULLであれば(S2407にてYes)そのままS2410へと処理が進められ、C[T[C[4]]+2+k]がNULLでなければ(S2407にてNo)、C[T[C[4]]+2+k]が指すこととなる候補セルブロック中の仮予約がキャンセルされ(S2408)、C[T[C[4]]+2+k]にNULLが代入された(S2409)後、S2410へと処理が進められる。
【0103】
S2410ではユーザによる予約座席数の入力が受け付けられてxに代入され、(セルブロック内容に対応する)必要セル数を(2×x+1)としてセルブロック割り当て部441が呼び出され(S2411)、セルブロック割り当て部441では、図11に示すような処理が行われて候補セルブロックに対応するセルブロックが確保される。続いて、入力を異にしてセル代入部43が2度呼び出され(S2412、S2413)、(次に図17に示す手順によって)システムセルブロックおよび候補セルブロックのセルブロック内容に対応するセルに値が代入される。
【0104】
この後、予約座席数xをもとに予約データベースが検索され、2つの候補が仮予約され、仮予約された2つの候補がハンドルhが指示する候補セルブロックのセルブロック内容として代入され(S2414)、2つの候補が表示され(S2415)、端末部sでの処理は終了する。
新たな予約が要求されなければ(S2401にてNo)、(上記のようにして仮予約されることとなる)2つの候補のうちの1つがユーザにより選択されたか否かが判定される(S2402)。2つの候補のうちの1つが選択されなければ(S2402にてNo)そのまま端末部sでの処理は終了し、2つの候補のうちの1つが選択されれば(S2402にてYes)S2403へと処理が進められる。
【0105】
S2403では2つの候補のいずれかを特定する選択番号がxに代入され、C[T[C[4]]+2+k]が指示することとなる候補セルブロック内の選択番号xに対応する候補が本予約されることとなり(S2404)、C[T[C[4]]+2+k]にNULLが代入され、本予約を終了した候補セルブロックを指示するシステムブロック中のセルが未使用の状態とされる(S2405)。
【0106】
これらの後、本予約を完了したことが表示され(S2406)、端末部sでの処理は終了する。
上記の端末部sの処理中S2412、S2413ではセル代入部43が呼び出されるが、処理に先立ってセルブロックの先頭リファレンスを指示することとなるハンドルhがnに、値を代入するセルに対するオフセットがmに、セルに代入するための値がvに代入される。図17に示すように、セル代入部43での処理では、まず、T[n]がNULLであるか否か(S71)およびmが0以上C[T[n]+1]未満であるか否か(S72)が判定される。T[N]がNULLであれば(S71にてYes)ハンドルが異常であるものとして終了され、mが0以上C[T[n]+1]未満でなければ(S72にてNo)オフセットが異常であるものとして終了される。
【0107】
T[n]がNULLでなく(S71にてNo)かつmが0以上C[T[n]+1]未満であれば(S72にてYes)、C[T[n]+3+m]にvが代入され(S73)、セル代入部43での処理は終了する。(C[4]をnに、(k―1)をmに、hをvに代入してセル代入部43を呼び出す端末部sのS2412の処理によりシステムセルブロック内のセルへの値の代入が行われ、hをnに、0をmに、xをvに代入してセル代入部43を呼び出す端末部sのS2413の処理により端末部sに対応する候補セルブロック内のセルへの値の代入が行われる。)
特に、上記のような端末部sのS2411の処理によりセルブロック割り当て部441が呼び出されて記憶領域上に候補セルブロックが確保される際には、システムセルブロックが確保される際と同様、必要に応じて、本発明のガベージコレクタ44(図8参照)によるスカビンジ処理部442での処理およびコンパクション処理部443での処理が行われる。
【0108】
実際、セルの個数を50(説明の便宜上小さな値をとることとしている)、トレイの個数を4とし次に[表2]に示すような端末部A1〜端末部C3でのユーザの操作を想定すると、図9〜図16に示す本予約システムでの処理は、図18〜図23に示すような記憶領域上のセルの変化を伴うこととなる。
【0109】
【表2】
【0110】
図18は[表2]中の操作Iおよび操作II終了直後のセルの状態を示す図であり、図19は操作III終了後から操作IVに際してのスカビンジ処理中S34の処理(図12参照)直前のセルの状態を示す図であり、図20は操作IVに際してのスカビンジ処理中S45の処理直前のセルの状態を示す図であり、図21は操作IVに際してのスカビンジ処理終了直後のセルの状態を示す図である。また、図22は操作IVに際してのコンパクション処理中S61の処理(図13参照)直前のセルの状態を示す図であり、図23は操作IVに際してのコンパクション処理終了直後のセルの状態を示す図である。
【0111】
図18に示すように、操作Iによって端末部A1から9席の予約が要求され、操作IIによって端末部B2から4席の予約が要求された直後には、ガベージコレクタ44が管理する記憶領域上の50のセルのうち、44までが使用されていることとなる。
この後、操作IIIによって端末部A1から候補の1つが選択されると、図19に示すように、これに応じて、システムセルブロック中のリファレンス8の値がNULL(値0)に変更される(端末部A1での図15のS2405での処理に対応)。続いて、操作IVによって端末部C3から7席の予約が要求される(端末部C3での図15のS2410での処理に対応)と、必要セル数15(=2×x+1=2×7+1)は2(=N―U―3=50―45―3)以下ではないので、スカビンジ処理およびコンパクション処理を実行する必要があるものと判定される(図11のS2201での処理にてNoに対応)。
【0112】
スカビンジ処理中S34直前までの処理(図12参照)によると、まず、ルートセルブロック、システムセルブロック、端末A1に対する候補セルブロックおよび端末B2に対する候補セルブロックの使用中フラグが0に初期化される(ここでは、セルを初期化するNULL値を0としているので使用中フラグの値は変更されない)。
【0113】
ガベージコレクタ44(図8参照)は、セルブロック内容を保持するセルの値(ルートセルブロック中セルC[4]が保持する値、システムセルブロック中セルC[8]〜セル[10]がそれぞれ保持する値、端末部A1に対する候補セルブロック中セルC[14]〜セルC[32]がそれぞれ保持する値、端末部B2に対する候補セルブロック中セルC[36]〜セルC[44]が保持する値)が数値に対応するものであるか、ハンドルに対応するものであるかをあらかじめ確定することができないものであり、S41での処理およびS42での処理によりセルの値が数値に対応するものであるか、ハンドルに対応するものであるかが推測される。(このような推測はセルブロック間の参照関係を特定するために必要である。)
実際、ルートセルブロック中のセルC[4]が保持する値1およびシステムセルブロック中のセルC[9]が保持する値3は、有効ハンドルが取り得る範囲にあり、この有効ハンドルによって指示されるトレイが保持する値それぞれ5、33がNULL(値0)ではないので、これらのセルC[4]およびセルC[9]はいずれもハンドルを保持しているものと推定され、(各セルブロックに対応する使用中フラグに1が代入されることにより)これらのハンドルにより指示されるトレイ内の値によって指示されるシステムセルブロックおよび端末部B2に対する候補セルブロックが使用中であるものと推定されることとなる。
【0114】
これに対して、システムセルブロック中のセルC[8]およびセルC[10]が保持する値0、ならびに、端末部A1に対する候補セルブロック中のセルC[14]が保持する値9は、有効ハンドルが取り得る範囲になく、また、端末部B2に対する候補セルブロック中のセルC[36]が保持する値4は、有効ハンドルが取り得る範囲にあるもののこれにより指示されるトレイには0が保持されており、これらのセルC[8]、セルC[10]、セルC[14]およびセルC[36]はいずれも数値を保持しているものと推測される。
(端末部A1に対する候補セルブロックのセルブロック内容を示すセルC[15]〜セルC[32]および端末部B1に対する候補セルブロックのセルブロック内容であるセルC[37]〜セルC[44]に対しても同様の推測が行われる。)
これらのようなセルブロック内容に対応するセルの値についての推測によると、図20に示すように、使用中であると推定された(トレイにより指示されていると推定された)各セルブロックの使用中フラグ(セルC[3]、セルC[7]およびセルC[35])に1が代入されることとなる。この後、スカビンジ処理中S45以降の処理により、使用されていないと推測されたセルブロックを指示するトレイT[2]の値がNULLとされ、セルは図21に示すような状態となる。
【0115】
これらのようにセルの値が数値であるかハンドルであるかの推測を伴うスカビンジ処理によりセルブロックの参照関係が推定され、この後に行われるコンパクション処理により、セルは、図22に示す状態を経て図23に示す状態となり、操作IVに際して要求された7席分の座席に対する座席番号(および座席数)を記憶するための領域を確保できる状態となる。
【0116】
以上のように、本予約システムは、座席の予約というアプリケーションの動作に直接かかわる部分(アプリケーション部42、初期化部41、セル代入部43および端末部A1〜端末部C3)と、アプリケーションからの要求に応じて記憶領域の確保および開放を行うガベージコレクタ44とを含み、ガベージコレクタ44は、(セルブロックの確保を指示されること以外)他の部分とは独立して動作する。特に、ガベージコレクタ44は、(リファレンスフラグ等を用いることなく)セル内容が数値であるかハンドルであるかを推測しつつスカビンジ処理を行うものであるため、リファレンスフラグ等のための領域の確保を不要とし、アプリケーションの実行に際してプロセッサに過大な負荷をかけることを防止することができ、また、高速なコンパクションを有効に行うことができる。
【0117】
続いて、これらのようなガベージコレクタ44の変形例を説明する。本変形例のガベージコレクタでは、各トレイに対して使用禁止フラグが設定され、これらの使用禁止フラグが用いられつつセルブロックの割り当てが行われる。(本変形例のガベージコレクタの構成、動作等は、以下に示すものを除いてガベージコレクタ44に準ずるものとする。)
図24は本変形例のガベージコレクタの実行に先立って行われる初期化部での処理(図10に示す処理に対応)を示すフローチャートであり、図25は本変形例のガベージコレクタのセルブロック割り当て部での処理(図11に示す処理に対応)を示すフローチャートであり、図26は本変形例のガベージコレクタのセル代入部での処理(図17に示す処理に対応)を示すフローチャートである。
【0118】
本変形例のガベージコレクタに対する予約システムの初期化部では、図24のS3106の処理として示すように、トレイT[x]がNULLに初期化されるに伴いこのトレイに対応する使用禁止フラグD[x]が0に初期化される。
本変形例のガベージコレクタのセル代入部では、図26のS3074およびS3075の処理として示すようにして、使用されるセルに代入される値がハンドルに対応する値の範囲にあり、かつ、そのハンドルに対応するトレイがNULLを保持している場合、このトレイの使用を禁止するため、対応する使用禁止フラグD[x]に1が代入される。
【0119】
また、セルブロック割り当て部では、図25のS3207の処理として示すように、NULLを保持しかつ対応する使用禁止フラグが0であるトレイに対して、新たに割り当てられるセルブロックに対応するハンドルhが特定されることとなる。さらに、セルブロック割り当て部では、S3210〜S3215の処理として示すように、hがトレイの個数M以下でなければ(S3206にてNo)すべての使用禁止フラグが0とされてトレイの使用の禁止が解除され、再びS3205からの処理が行われる。
【0120】
まず、ワークフラグfに0、iに1が代入され(S3210)、トレイT[i]に対応する使用禁止フラグD[i]が1であるか否かが判定される(S3211)。D[i]が1であれば(S3211にてYes)fに1が代入されD[i]に0が代入された(S3212)後、また、D[i]が1でなければ(S3211にてNo)S3212での処理は行われることないまま、iがトレイの個数Mに等しいか否かが判定される(S3213)。iがMに等しくなければ(S3213にてNo)iに1が加えられてS3211からの処理が繰り返され、iがMに等しければ(S3213にてYes)続いてfが1であるか否かが判定される(S3215)。
【0121】
fが1でなければ(S3215にてNo)トレイが不足しているものとして異常終了し、fが1であれば(S3215にてYes)S3205へと処理が進められ、これ以降の処理によって、NULLを保持しかつ対応する使用禁止フラグが0に変更されたトレイに対して、新たに割り当てられるセルブロックに対応するハンドルhが特定されることとなる。
【0122】
すなわち、上記のようなセル代入部での処理により、後のスカビンジ処理にて数値と推測されるであろう、セルの値に対応するトレイを使用禁止とし、また、上記のようなセルブロック割り当て部での処理により、NULLを保持しかつ対応する使用禁止フラグが0であるトレイのみに対して、新たに割り当てられるセルブロックに対応するハンドルhを特定することにより、スカビンジ処理部でのセル内容の推測をより適切に行わせることができる。
【0123】
より詳細には、ガベージコレクタ44のスカビンジ処理部での処理では、セル内の値がハンドルに対応する値の範囲にあって、かつ、このセル内の値をハンドルであるとみなしたときこのハンドルによって特定されるトレイがNULLを保持していないときに限って、セルがハンドルを保持していると推測される。ハンドルに対応する値の範囲にある数値がセルに代入されるとき、この数値をハンドルとみなしたときにこのハンドルによって特定されるトレイがNULLを保持している場合にこのトレイに対応する使用禁止フラグを1とすることにより、トレイの使用が禁止されトレイはNULLを保持したままとなるので、ハンドルに対応する値の範囲にあるセル内の数値がハンドルであると誤推測されることが防止されることとなり、セルの開放が遅延することを防止することができる。
【0124】
さらに、使用することのできるトレイがなくなった際には、使用禁止フラグによるトレイの使用の禁止が解除され、使用されていないセルの開放の遅延を防止しつつ、トレイを有効に利用することができることとなる。
【0125】
【発明の効果】
本発明に係るガベージコレクション装置は、第1種アドレスにより特定され第2種アドレスおよび第2種アドレス以外の数値のいずれかのデータを保持するセルからなる複数のセルブロックのうち、第2種アドレスにより特定され第1種アドレスを保持するトレイを介して他のセルブロックへの参照を繰り返すことにより所定のルートセルブロックからたどることのできるセルブロック以外の、未使用セルブロックを特定するスカビンジ処理と、前記特定された未使用セルブロックおよびスカビンジ処理に先立ちデータを保持しない連続する複数のセルが1つの連続する領域として配置されるよう、第1種アドレスおよびセルからなるメモリ上でセルブロックを移動させ、セルブロックの移動前後にて前記参照の関係が保たれるよう、トレイに保持されている第1種アドレスを更新するコンパクション処理とを行う。
【0126】
本ガベージコレクション装置では、第1セルブロックに含まれるセルが第2種アドレスを保持しているか否かを、第2種アドレスが保持されている際に第2種アドレスが保持されていないと誤ることがないよう推測し、第2種アドレスを保持していると推測されたセルにより指示されるトレイが保持する、第1種アドレスに対応するセルを含む第2セルブロックを、第1セルブロックから参照があるものと推定することによって、前記スカビンジ処理での未使用セルブロックの特定が行われる。
【0127】
これにより、セルの特定にトレイ(間接アドレッシング)が用いられ、コンパクション処理ではトレイに保持されている第1種アドレスが更新されることとなり、セル自体の内容が更新されることはなく、(第3の従来例のガベージコレクタとは異なり)有効に高速にコンパクションを行うことができる。また、これらのスカビンジ処理、コンパクション処理に際しては、(第1の従来例のガベージコレクタおよび第2の従来例のガベージコレクタのように)リファレンスフラグ等を用いてアプリケーションと情報交換することがないので、リファレンスフラグのための領域を確保する必要がなく、セルを利用するアプリケーションの実行に対して過大な負荷となることが防止される。
【0128】
上記のガベージコレクション装置では、前記スカビンジ処理により新たに特定された未使用セルブロックを指示することとなったトレイを、第1種アドレスを保持しない未使用トレイとするものとすることができる。
これにより、上記のような効果に加えて、新たにセルの使用が要求されたとき使用を終えたトレイが有効に再利用されることとなる。
【0129】
また、上記のガベージコレクション装置では、セルが保持しているデータが第2種アドレスに対応する範囲にあり、かつ、前記データを第2種アドレスとみなしたとき指示されることとなるトレイが未使用トレイでないときに限って、前記データが第2種アドレスであると、前記推測を行い、新たにセルに代入される数値を第2種アドレスとみなしたとき、前記第2種アドレスによって指示されることとなるトレイの使用を禁止するものとすることができる。
【0130】
これにより、先述のような効果に加えて、新たにセルに代入される数値に対応するトレイの使用が禁止され、(セルに代入されるデータによって特定されるトレイが未使用トレイであるか否かが推測の際に判定されるため、)第2種アドレスと同一の範囲内にある数値を第2種アドレスと誤って推測することが回避されることとなる。
【0131】
さらに、上記のガベージコレクション装置では、第1種アドレスを保持することまたは使用が禁止されていることにより所定の個数のトレイが使用できない際、新たなトレイの使用が要求されたときに、前記トレイに対する使用の禁止をすべて解除するものとすることができる。
これにより、先述のような効果に加えて、誤推測が回避されつつ、加えて使用を終えたトレイが有効に再利用されることとなる。
【図面の簡単な説明】
【図1】本発明の実施例の1つであるガベージコレクタが用いるヒープ領域の構成を説明するための図である。
【図2】ヒープ領域を構成するセルに格納される内容の例およびこれらのセル間の参照関係を示す図である。
【図3】本ガベージコレクタが用いるヒープ領域にて割り当てられるセルブロックの例およびこれらのセルブロック間の参照関係を示す図である。
【図4】図3に示す状態のヒープ領域に対するガベージコレクションを説明するための図である。
【図5】本ガベージコレクタが行うスカビンジ処理の手順を示す第1のフローチャートである。
【図6】本ガベージコレクタが行うスカビンジ処理の手順を示す第2のフローチャートである。
【図7】本発明に係るガベージコレクタを用いる予約システムの構成の概略を示す図である。
【図8】本予約システムに含まれる予約データベース管理部4の構成を説明するための図である。
【図9】アプリケーション部42での処理の手順を示すフローチャートである。
【図10】初期化部41での処理の手順を示すフローチャートである。
【図11】セルブロック割り当て部441での処理の手順を示すフローチャートである。
【図12】セルブロック割り当て部441から呼び出されるスカビンジ処理部442での処理の手順を示すフローチャートである。
【図13】セルブロック割り当て部441から呼び出されるコンパクション処理部443での処理の手順を示す第1のフローチャートである。
【図14】コンパクション処理部443での処理の手順を示す第2のフローチャートである。
【図15】端末部A1〜端末部C3の各々での処理の手順を示す第1のフローチャートである。
【図16】端末部A1〜端末部C3の各々での処理の手順を示す第2のフローチャートである。
【図17】端末部A1〜端末部C1から呼び出されるセル代入部43での処理の手順を示すフローチャートである。
【図18】[表2]中の操作Iおよび操作II終了直後のセルの状態を示す図である。
【図19】操作III終了後から操作IVに際してのスカビンジ処理中S34の処理(図12参照)直前のセルの状態を示す図である。
【図20】操作IVに際してのスカビンジ処理中S45の処理直前のセルの状態を示す図である。
【図21】操作IVに際してのスカビンジ処理終了直後のセルの状態を示す図である。
【図22】操作IVに際してのコンパクション処理中S61の処理(図13参照)直前のセルの状態を示す図である。
【図23】操作IVに際してのコンパクション処理終了直後のセルの状態を示す図である。
【図24】本変形例のガベージコレクタの実行に先立って行われる初期化部での処理(図10に示す処理に対応)を示すフローチャートである。
【図25】本変形例のガベージコレクタのセルブロック割り当て部での処理(図11に示す処理に対応)を示すフローチャートである。
【図26】本変形例のガベージコレクタのセル代入部での処理(図17に示す処理に対応)を示すフローチャートである。
【図27】ガベージコレクタが用いるヒープ領域の構成を説明するための図である。
【図28】ヒープ領域を構成するセルに格納される内容の例を示す図である。
【図29】複数のセルから構成されるセルブロックの例を示す図である。
【図30】図29(b)に示す状態のヒープ領域に対するガベージコレクションを説明するための図である。
【図31】第1の従来例のガベージコレクタが用いるヒープ領域の構成を説明するための図である。
【図32】ヒープ領域を構成するセルに格納される内容の例およびこれらのセル間の参照関係を示す図である。
【図33】第1の従来例のガベージコレクタが用いるヒープ領域にて割り当てられるセルブロックの例およびこれらのセルブロック間の参照関係を示す図である。
【図34】図33に示す状態のヒープ領域に対するガベージコレクションを説明するための図である。
【図35】第1の従来例のガベージコレクタが行うスカビンジ処理Aの手順を示すフローチャートである。
【図36】第1の従来例のガベージコレクタが行うコンパクション処理Aの手順を示す第1のフローチャートである。
【図37】第1の従来例のガベージコレクタが行うコンパクション処理Aの手順を示す第2のフローチャートである。
【図38】第2の従来例のガベージコレクタが用いるヒープ領域の構成を説明するための図である。
【図39】ヒープ領域を構成するセルに格納される内容およびトレイに格納される内容の例ならびにこれらのセル間の参照関係を示す図である。
【図40】第2の従来例のガベージコレクタが用いるヒープ領域にて割り当てられるセルブロックの例およびこれらのセルブロック間の参照関係を示す図である。
【図41】図40に示す状態のヒープ領域に対するガベージコレクションを説明するための図である。
【図42】第2の従来例のガベージコレクタが行うコンパクション処理Bの手順を示すフローチャートである。
【図43】第3の従来例のガベージコレクタが用いるヒープ領域のセルに格納される内容の例を示す図である。
【図44】第3の従来例のガベージコレクタが用いるヒープ領域にて割り当てられるセルブロックの例およびこれらのセルブロック間の参照関係を示す図である。
【図45】図44に示す状態のヒープ領域に対するガベージコレクションを説明するための図である。
【図46】第3の従来例のガベージコレクタが行うスカビンジ処理Bの手順を示すフローチャートである。
【符号の説明】
1 端末部A
2 端末部B
3 端末部C
4 予約データベース管理部
41 初期化部
42 アプリケーション部
43 セル代入部
44 ガベージコレクタ
441 セルブロック割り当て部
442 スカビンジ処理部
443 コンパクション処理部
Claims (5)
- スカビンジ処理およびコンパクション処理によりメモリ空間上のデータの再配置を行うガベージコレクション装置であり、
前記メモリ空間には、セルとトレイとが配置されており、
前記セルが保持するデータは、トレイのアドレスを示すハンドルまたはハンドル以外の数値のいずれかであり、前記トレイはセルのアドレスを示すリファレンスを保持し、メモリ空間上の連続したセルからなるセルブロックは、トレイが保持しているリファレンスを介してたどることができるようになっており、
前記スカビンジ処理は、セルが保持しているデータがハンドルであるか否かの推定処理を行い、ハンドルを保持していると推定されたセルを含むセルブロックのうち、所定のルートセルブロックからトレイが保持しているリファレンスを介してたどることができない未使用セルブロックを開放する処理であり、
前記コンパクション処理は、データを保持しない複数のセルブロックが、メモリ空間上で連続して配置されるようにセルブロックを移動する処理であり、
前記スカビンジ処理における推定処理は、
セルが保持しているデータをハンドルとみなしたとき、当該ハンドルがトレイのアドレスとして許される範囲にあるか否か、および、当該ハンドルを保持しているセルのアドレスをリファレンスとして保持しているトレイが未使用トレイでないかどうかの判定を含み、ハンドルがトレイのアドレスとして許される範囲であり、かつ、ハンドルを保持しているセルのアドレスをリファレンスとして保持しているトレイが未使用トレイであるときに限って、前記セルが保持しているデータがハンドルであると推測する
ことを特徴とするガベージコレクション装置。 - 前記未使用トレイは、
トレイが保持するリファレンスが NULL であるトレイであり、
前記スカビンジ処理は、セルブロックを開放する際に、当該セルブロックに含まれるセルのリファレンスを保持するトレイを開放し、未使用トレイにする
ことを特徴とする請求項 1 記載のガベージコレクション装置。 - 前記トレイが保持しているリファレンスを介してたどることは、
前記推定処理によりハンドルを保持していると推測されたセルを含むセルブロックから、そのハンドルでアドレスを示されるトレイに保持されているリファレンスでアドレスを示されるセルを含んだセルブロックへなされる
ことを特徴とする請求項 1 記載のガベージコレクション装置。 - スカビンジ処理およびコンパクション処理によりメモリ空間上のデータの再配置を行うガベージコレクション方法であり、
前記メモリ空間には、セルとトレイとが配置されており、
前記セルが保持するデータは、トレイのアドレスを示すハンドルまたはハンドル以外の数値のいずれかであり、前記トレイはセルのアドレスを示すリファレンスを保持し、メモリ空間上の連続したセルからなるセルブロックは、トレイが保持しているリファレンスを介してたどることができるようになっており、
前記スカビンジ処理は、セルが保持しているデータがハンドルであるか否かの推定処理を行い、ハンドルを保持していると推定されたセルを含むセルブロックのうち、所定のルートセルブロックからトレイが保持しているリファレンスを介してたどることができない未使用セルブロックを開放する処理であり、
前記コンパクション処理は、データを保持しない複数のセルブロックが、メモリ空間上で連続して配置されるようにセルブロックを移動する処理であり、
前記スカビンジ処理における推定処理は、
セルが保持しているデータをハンドルとみなしたとき、当該ハンドルがトレイのアドレスとして許される範囲にあるか否か、および、当該ハンドルを保持しているセルのアドレスをリファレンスとして保持しているトレイが未使用トレイでないかどうかの判定を含み、ハンドルがトレイのアドレスとして許される範囲であり、かつ、ハンドルを保持しているセルのアドレスをリファレンスとして保持しているトレイが未使用トレイであるときに限って、前記セルが保持しているデータがハンドルであると推測する
ことを特徴とするガベージコレクション方法。 - インストールされて実行されることにより、
スカビンジ処理およびコンパクション処理によりメモリ空間上のデータの再配置を行うガベージコレクタとして動作するプログラムを記録したコンピュータ読み取り可能な記録媒体であり、
前記メモリ空間には、セルとトレイとが配置されており、
前記セルが保持するデータは、トレイのアドレスを示すハンドルまたはハンドル以外の数値のいずれかであり、前記トレイはセルのアドレスを示すリファレンスを保持し、メモリ空間上の連続したセルからなるセルブロックは、トレイが保持しているリファレンスを介してたどることができるようになっており、
前記スカビンジ処理は、セルが保持しているデータがハンドルであるか否かの推定処理を行い、ハンドルを保持していると推定されたセルを含むセルブロックのうち、所定のルートセルブロックからトレイが保持しているリファレンスを介してたどることができない未使用セルブロックを開放する処理であり、
前記コンパクション処理は、データを保持しない複数のセルブロックが、メモリ空間上で連続して配置されるようにセルブロックを移動する処理であり、
前記スカビンジ処理における推定処理は、
セルが保持しているデータをハンドルとみなしたとき、当該ハンドルがトレイのアドレスとして許される範囲にあるか否か、および、当該ハンドルを保持しているセルのアドレスをリファレンスとして保持しているトレイが未使用トレイでないかどうかの判定を含み、ハンドルがトレイのアドレスとして許される範囲であり、かつ、ハンドルを保持しているセルのアドレスをリファレンスとして保持しているトレイが未使用トレイであるときに限って、前記セルが保持しているデータがハンドルであると推測する
ことを特徴とするプログラムを記録したコンピュータ読み取り可能な記録媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000020844A JP4050855B2 (ja) | 2000-01-28 | 2000-01-28 | ガベージコレクション装置および方法 |
US09/772,257 US6766336B2 (en) | 2000-01-28 | 2001-01-29 | Garbage collection apparatus and a garbage collection method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000020844A JP4050855B2 (ja) | 2000-01-28 | 2000-01-28 | ガベージコレクション装置および方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001209572A JP2001209572A (ja) | 2001-08-03 |
JP4050855B2 true JP4050855B2 (ja) | 2008-02-20 |
Family
ID=18547341
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000020844A Expired - Fee Related JP4050855B2 (ja) | 2000-01-28 | 2000-01-28 | ガベージコレクション装置および方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US6766336B2 (ja) |
JP (1) | JP4050855B2 (ja) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2399897B (en) | 2003-03-26 | 2006-02-01 | Advanced Risc Mach Ltd | Memory recycling in computer systems |
US8245239B2 (en) * | 2005-07-06 | 2012-08-14 | Honeywell International Inc. | Deterministic runtime execution environment and method |
US7962707B2 (en) * | 2005-07-06 | 2011-06-14 | Honeywell International Inc. | Apparatus and method for deterministic garbage collection of a heap memory |
US7827373B2 (en) * | 2005-10-31 | 2010-11-02 | Honeywell International Inc. | System and method for managing a short-term heap memory |
KR100725410B1 (ko) * | 2006-01-20 | 2007-06-07 | 삼성전자주식회사 | 전원 상태에 따라 비휘발성 메모리의 블록 회수를 수행하는장치 및 그 방법 |
US9772936B2 (en) * | 2008-07-10 | 2017-09-26 | Micron Technology, Inc. | Data collection and compression in a solid state storage device |
US10635316B2 (en) * | 2014-03-08 | 2020-04-28 | Diamanti, Inc. | Methods and systems for data storage using solid state drives |
US10289566B1 (en) * | 2017-07-28 | 2019-05-14 | EMC IP Holding Company LLC | Handling data that has become inactive within stream aware data storage equipment |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4775932A (en) * | 1984-07-31 | 1988-10-04 | Texas Instruments Incorporated | Computer memory system with parallel garbage collection independent from an associated user processor |
US5561785A (en) * | 1992-10-29 | 1996-10-01 | International Business Machines Corporation | System for allocating and returning storage and collecting garbage using subpool of available blocks |
JPH08106415A (ja) | 1994-10-04 | 1996-04-23 | Fujitsu Ltd | ガーベジコレクタ装置 |
JPH10111830A (ja) | 1996-10-08 | 1998-04-28 | Fujitsu Ltd | 動的記憶領域管理装置 |
JPH10320263A (ja) | 1997-05-22 | 1998-12-04 | Fujitsu Ltd | Gcアタッチメント装置及びプログラム記憶媒体 |
JPH11120072A (ja) | 1997-10-21 | 1999-04-30 | Fujitsu Ltd | ガーベジコレクタ付加装置 |
US6249793B1 (en) * | 1999-06-10 | 2001-06-19 | Sun Microsystems, Inc. | Mostly concurrent compaction in a garbage collection system |
-
2000
- 2000-01-28 JP JP2000020844A patent/JP4050855B2/ja not_active Expired - Fee Related
-
2001
- 2001-01-29 US US09/772,257 patent/US6766336B2/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JP2001209572A (ja) | 2001-08-03 |
US20010042074A1 (en) | 2001-11-15 |
US6766336B2 (en) | 2004-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11775429B2 (en) | NUMA-aware garbage collection | |
US5644751A (en) | Distributed file system (DFS) cache management based on file access characteristics | |
JP3942941B2 (ja) | 通信装置及びプラグインモジュール制御方法及びコンピュータに実行させるためのプログラム及びコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体 | |
JP2870117B2 (ja) | 最適計画作成方法 | |
US6804691B2 (en) | Method for optimization of memory usage for a computer program | |
US4967353A (en) | System for periodically reallocating page frames in memory based upon non-usage within a time period or after being allocated | |
JP4050855B2 (ja) | ガベージコレクション装置および方法 | |
CN109471676B (zh) | 参数配置处理方法和装置 | |
CN105354315B (zh) | 分布式数据库中子表分裂的方法、子表节点和系统 | |
JP2002251307A (ja) | データベース管理システム、データベース管理システムにおける問合せ方法、およびデータベース管理システムにおける問い合わせ実行プログラム | |
JPH05189281A (ja) | 記憶装置のファイル割当て方式 | |
CN113094183B (zh) | Ai训练平台的训练任务创建方法、装置、系统及介质 | |
JP3777162B2 (ja) | キューを維持するための方法及び装置 | |
JP2005293561A (ja) | 情報処理システム、情報処理装置及び管理用サーバ、情報処理システム制御プログラム、情報処理装置制御プログラム及び管理用サーバ制御プログラム、並びに情報処理方法、情報処理システム制御方法、情報処理装置制御方法及び管理用サーバ制御方法 | |
CN112256440A (zh) | 神经网络推理的内存管理方法及装置 | |
CN110471759A (zh) | 一种多核嵌入式处理器内存实时动态管理方法 | |
US5572730A (en) | Method of garbage collection performed upon completion of function execution | |
CN112162949A (zh) | 一种文件管理方法、系统、电子设备及存储介质 | |
CN113704190A (zh) | 一种数据写入方法以及装置 | |
CN113839795A (zh) | Cdn节点的消峰处理方法、装置、电子设备及存储介质 | |
Kale et al. | Efficient parallel graph coloring with prioritization | |
JP3103129B2 (ja) | 負荷分散方式 | |
JPH10124363A (ja) | 順編成索引管理方法 | |
CN117556088A (zh) | 内存多维数据库的数据管理方法及装置 | |
JPH05189280A (ja) | 記憶領域確保装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060906 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20070809 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070821 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20071015 |
|
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: 20071106 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20071130 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 4050855 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101207 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101207 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111207 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111207 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121207 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121207 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131207 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |