JP4041347B2 - ガベージコレクション装置及びガベージコレクション方法 - Google Patents

ガベージコレクション装置及びガベージコレクション方法 Download PDF

Info

Publication number
JP4041347B2
JP4041347B2 JP2002154671A JP2002154671A JP4041347B2 JP 4041347 B2 JP4041347 B2 JP 4041347B2 JP 2002154671 A JP2002154671 A JP 2002154671A JP 2002154671 A JP2002154671 A JP 2002154671A JP 4041347 B2 JP4041347 B2 JP 4041347B2
Authority
JP
Japan
Prior art keywords
cell
counter
memory cell
pointer
count
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
JP2002154671A
Other languages
English (en)
Other versions
JP2003050740A (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.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co 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 Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP2002154671A priority Critical patent/JP4041347B2/ja
Publication of JP2003050740A publication Critical patent/JP2003050740A/ja
Application granted granted Critical
Publication of JP4041347B2 publication Critical patent/JP4041347B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Description

【0001】
【発明の属する技術分野】
本発明は、アプリケーションプログラムが使用したメモリについてのガベージコレクションに関し、特にリファレンスカウント方式を用いるガベージコレクションの技術に関する。
【0002】
【従来の技術】
従来のプログラミング言語には、アプリケーションプログラムの作成者にメモリ領域の確保や解放を意識させず、アプリケーションプログラムが使用した後に不要となったメモリ領域の解放を実行環境側に任せる方法を採るものがある。例えばJava言語である。なお、Javaは米国Sun Microsystems社の商標である。
【0003】
このような言語を用いて記述されたアプリケーションプログラムは、不要となったメモリ領域を自動的に解放するガベージコレクション機構を備える実行環境上で動かされる。
ガベージコレクション機構は、アプリケーションプログラムの実行に際して動的に確保されたメモリセル(以下、単に「セル」という。)がどこからも参照されていない状態になっていることを検出してそのセルを解放し再利用可能状態にする。この一度確保されたセルを解放して再利用可能状態にすることを、セルを回収するともいう。
【0004】
ここで、セルとは、アプリケーションプログラムが実行時に動的に用いることのできるヒープ領域を細分化した単位をいう。各セルは、例えばオブジェクト指向プログラミング言語におけるいわゆるオブジェクトインスタンスに対応するひとまとまりの可変長領域であり、各セルの内容は、データとデータ型との組の集合である部分と、セルが有効であるか否かを示す有効セルフラグ等を含む管理用の情報である部分とからなる。
【0005】
なお、データ型は、対応するデータが例えば整数、論理値、ポインタ等のいずれであるかの別を示すものであり、以下、ポインタ型のデータを単に「ポインタ」ともいう。また、有効セルフラグはセルが確保された時から有効を示す値をとりセルが解放された時点でガベージコレクション機構により無効を示す値にされるフラグである。
【0006】
セルの参照は、そのセルへのポインタを保持することによりなされ、例えば、セルAからセルBを参照する場合には、セルAはセルBのポインタを内容として含む。
ある時点においてアプリケーションプログラムにより参照されている全てのセルは、1又は複数のルートポインタなるポインタから、直接又は1以上のセル内のポインタを媒介にして、辿ることができる。ここで、ルートポインタは、例えばアプリケーションプログラム全体やその一部を単位としてその単位毎に定められ、アプリケーションプログラムの実行環境によって、その単位毎に最初に確保されたセルのメモリアドレスがルートポインタに格納される。
【0007】
従って、ガベージコレクション機構は、ある時点においてルートポインタから辿れなくなっているセルを不要なものとして回収対象にする。
以下、従来のガベージコレクションの方式について説明する。
<0-1.マークアンドスイープ方式>
マークアンドスイープ方式は、公開特許公報(特開平11−232162号)に開示されており、ルートポインタから辿れる全てのセルにマークを付けていく処理を行った後に、全てのセルを走査して、マークの付いていないセルを回収する方式である。
【0008】
図27は、従来のマークアンドスイープ方式を説明するための図である。
同図では、アプリケーションプログラムによってセルM1〜M7が生成された後に、セルM3及びM5が不要となった状態を示している。なお、同図中、セルを参照するポインタの所在部分を起点とし、参照されるそのセルに向かう矢印線によって、参照関係を表している。
【0009】
ガベージコレクション機構は、カベージコレクションを開始すると、まず、ルートポインタRPから直接又はセル内のポインタを介して、辿ることのできる全てのセルにマークを付ける。例えばセル内の管理用の情報部分にマークの有無を表すビット領域を設けておき、初期値としてはマーク無しを表す値にしておき、マークを付加する場合にそのビット領域をマーク有りを表す値に変更する。
【0010】
これにより、セルM1、M2、M4、M6及びM7にはマーク(Mark)が付されることになる。
その後に、ガベージコレクション機構は、マークの付いていないセルを走査して解放する。なお、このマークの付いていないセルの走査の際に、ガベージコレクション機構は、次回のガベージコレクションのために、マークが付いているセルからマークを削除する処理も行う。
【0011】
これにより、マークの付いていなかったセルM3及びM5が検出され、このセルM3及びM5が解放されることになる。
このマークアンドスイープ方式によるガベージコレクションは全てのセルを走査するものであることから、頻繁に実行されると、アプリケーションプログラムの実行性能を著しく低下させる。このため、ガベージコレクション機構は、通常は、ある程度期間をおいて、或いはアプリケーションプログラムと並行して少しずつ、マークアンドスイープ方式によるガベージコレクションを実行する。従って、必然的に、不要になったセルの回収が遅くなる。
【0012】
<0-2.リファレンスカウント方式>
リファレンスカウント方式は、セル毎にそのセルが何箇所から参照されているかを示すカウント値(以下、「リファレンスカウンタ」という。)をセル内の管理用の情報部分に記憶することとし、セルを指すポインタの変更等により参照関係が変化する度にそれに応じてリファレンスカウンタを増加又は減少させ、リファレンスカウンタが0になった時点でそのセルを回収する方式である。
【0013】
具体的には、あるセル内のポインタが既にいずれかのセルを指している場合において、アプリケーションプログラムの実行過程においてそのポインタの値が他の値に変更されると、ガベージコレクション機構が、元のポインタ値がNULLでない限り元のポインタ値により指していたセル内のリファレンスカウンタを1減少し、新たなポインタ値がNULLでない限り新たにポインタ値によって指すセル内のリファレンスカウンタを1増加する。
【0014】
こうして、ガベージコレクション機構は、リファレンスカウンタが0になったセルについては、ルートポインタから辿ることのできなくなったもの即ち不要なものとみなして解放する。なお、セルの解放の際にそのセル内に含まれていたポインタはNULLに変更されたものとして再帰的に、前述の、元のポインタ値がNULLでない限り元のポインタ値により指していたセル内のリファレンスカウンタを1減少する処理を実行する。
【0015】
図28は、従来のリファレンスカウント方式を説明するための図である。
同図は、状態901、状態902、状態903の順に状態が遷移することを示している。なお、同図中、セルを参照するポインタの所在部分を起点とし、参照されるそのセルに向かう矢印線によって、参照関係を表しており、また、各セル内の数値は、そのセルが参照されている数であるリファレンスカウンタを示している。
【0016】
状態901においては、同図では、アプリケーションプログラムによってセルM1〜M7が使用されている状態を示しており、セルM5はセルM4からのみ参照されているためセルM5のリファレンスカウンタは1である。
この状態901は、アプリケーションプログラムがいわゆる代入文等を実行してセルM4の保持するポインタを、セルM5を指す値から、セルM6を指す値に変更すると、状態902に遷移する。このポインタの変更に際してガベージコレクション機構により、セルM5のリファレンスカウンタが1減じられて0になり、セルM6のリファレンスカウンタが1増やされ2になる。
【0017】
続いて、ガベージコレクション機構はリファレンスカウンタが0になったセルM5を解放し、セルM5が保持していたポインタが指していたセルM3のリファレンスカウンタを1減じて0にし、リファレンスカウンタが0になったセルM3を解放する。状態903はこの結果を表している。
リファレンスカウンタは、セルが参照される可能性のある最大数を表現できるものでなければならないため、一般に1ワード程度の領域がリファレンスカウンタ用として用いられる。
【0018】
このリファレンスカウント方式によるガベージコレクションは、基本的には不要になったセルを即座に回収することができるという利点を有するが、セル毎にリファレンスカウンタ用に1ワード程度の領域を要するため全体ではガベージコレクションのみのために多くのメモリ領域を必要とする欠点をも有する。
なお、リファレンスカウント方式には、セルへのポインタのチェーンがループしている場合に、ルートポインタから辿ることのできなくなっているセルであるにも拘わらずリファレンスカウンタが0にならないため、その不要なセルを解放できないという問題がある。この問題を解決するために、リファレンスカウント方式を用いる場合にはマークアンドスイープ方式を併せて用いることもある。
【0019】
<0-3.カウンタを制限したリファレンスカウント方式>
次に、リファレンスカウンタ用のメモリ領域の縮小を図り上述のリファレンスカウント方式の欠点を補った方式(以下、「カウンタ制限リファレンスカウント方式」という。)について説明する。この方式は、公開特許公報(特開平5−324456号)に開示されている。
【0020】
カウンタ制限リファレンスカウント方式では、セル毎のリファレンスカウンタは0〜7を表すことができる3ビットのみとし、基本的に上述のリファレンスカウント方式と同様の処理手順を実行する。但し、リファレンスカウンタがオーバフローしたセルについては、即ち参照される数が7を超えたセルについては、オーバフローした時にリファレンスカウンタのビットを削除した形に整形してガベージコレクションの対象外のメモリ領域にコピーするとともに、元のセルを解放する。なお、ガベージコレクションの対象外のメモリ領域においたセルについては、ガベージコレクション機構は、リファレンスカウンタの操作やセルの回収を行わない。
【0021】
このカウンタ制限リファレンスカウント方式によるガベージコレクションは、リファレンスカウンタ用のビット数を抑えてはいるが、そのリファレンスカウンタがオーバフローしたセルが増えると回収されないセルが増加するため、アプリケーションプログラムが新たにセルを確保することができない事態が発生し得るという問題を有する。
【0022】
【発明が解決しようとする課題】
上述したように、ガベージコレクションにマークアンドスイープ方式のみを用いる場合には、不要になったセルの回収が遅いという問題が生じる。
この問題を解決するリファレンスカウント方式は、リファレンスカウンタ用に必要となるメモリ量が大きいという欠点を有する。
【0023】
このリファレンスカウント方式の欠点をある程度解消するカウンタ制限リファレンスカウント方式は、使用されるセルのうち小数の例外を除く大部分のセルについて、そのセルが参照される数がある程度小さく、1ワードに対して比較的少ないビット数でその参照される数を表すことができる場合においては有効である。
【0024】
しかしながら、カウンタ制限リファレンスカウント方式は、大部分のセルの参照される数が、たとえ瞬間的にでも、非常に大きくなる場合には、その参照される数を比較的少ないビット数で表そうとするとオーバフローして大部分のセルが回収不可能なものになってしまうためあまり有効ではない。以下、このような場合の例を挙げる。
【0025】
図29は、Javaにおける典型的なセルへの参照数の時間的変化を示すグラフである。
同図に示すように、Java言語により作成された一般的なアプリケーションプログラムにおいては、オブジェクトを定義するクラスが通常は複数階層にわたって他のクラスを継承していることと関連して、オブジェクトの生成後の初期化段階で、生成元のセルへの参照の数は急増し、初期化が終わった後にはその生成元のセルへの参照ポインタを持つセルが消滅してゆき、その後の時間ではその生成元のセルの参照される数は小さい値の範囲で微動する。
【0026】
このようなアプリケーションプログラムを実行する場合においては、カウンタ制限リファレンスカウント方式は、リファレンスカウンタとして小さいビット数を用いることができなくなるため、有効ではない。
そこで、本発明はかかる問題点に鑑みてなされたものであり、アプリケーションプログラムの動作によりセルの参照される数が瞬間的に大きなピーク値をとるような場合にも有効なガベージコレクション方法、及びその方法を用いるガベージコレクション装置を提供することを目的とする。
【0027】
【課題を解決するための手段】
上記目的を達成するために、本発明に係るガベージコレクション装置は、アプリケーションプログラムの実行によってメモリセルへの参照状態が変更された時に、各メモリセル内に設けた被参照カウンタを用いてリファレンスカウント方式によりガベージコレクションを行うリファレンスカウント手段と、アプリケーションプログラムの実行とは独立して1以上のメモリセルについて、当該メモリセルが現実に参照されている数を調査する独立カウント手段と、前記独立カウント手段による調査結果である数を、対応するメモリセルの被参照カウンタに設定する設定手段とを備えることを特徴とする。
【0028】
また、本発明に係るガベージコレクション方法は、アプリケーションプログラムの実行によってメモリセルへの参照状態が変更された時に、各メモリセル内に設けられた被参照カウンタを用いてリファレンスカウント方式によりガベージコレクションを行うリファレンスカウントステップと、アプリケーションプログラムの実行とは独立して1以上のメモリセルについて、当該メモリセルが現実に参照されている数を調査する独立カウントステップと、前記独立カウントステップによる調査結果である数を、対応するメモリセルの被参照カウンタに設定する設定ステップとを含むことを特徴とする。
【0029】
ここで、独立カウント手段及び独立カウントステップの説明中の「アプリケーションプログラムの実行と独立して」とは、例えばアプリケーションプログラム中のポインタ変更を指定するいわゆる代入のコード等を契機として実行するのではないことを意味し、独立カウント手段等による調査が、従来のリファレンスカウント方式に含まれる動作ではないことを意味する。
【0030】
セルの被参照数が、瞬間的に大きなピーク値をとる等、時間経過につれて大きく変動するような場合においては、被参照カウンタをピーク値が表せない程度の小さなビット数で構成することとすると被参照カウンタはオーバフローし無効となってしまうが、上記構成により、現実にセルが参照されている数が調査されて被参照カウンタにあらためて設定されることにより被参照カウンタは正しい値に修正され得るため、その後にはリファレンスカウント方式のガベージコレクションによってポインタの変更に伴いセルがどこからも参照されなくなった時点で即座にそのセルが解放されるようになる。
【0031】
また、本発明に係る制御プログラムは、コンピュータにガベージコレクション処理を行わせるための制御プログラムであって、前記ガベージコレクション処理は、アプリケーションプログラムの実行によってメモリセルへの参照状態が変更された時に、各メモリセル内に設けた被参照カウンタを用いてリファレンスカウント方式によりガベージコレクションを行うリファレンスカウントステップと、アプリケーションプログラムの実行とは独立して1以上のメモリセルについて、当該メモリセルが現実に参照されている数を調査する独立カウントステップと、前記独立カウントステップによる調査結果である数を、対応するメモリセルの被参照カウンタに設定する設定ステップとを含むことを特徴とする。
【0032】
この制御プログラムをコンピュータにインストールして実行することにより、上述のガベージコレクション方法が実現されるようになる。
【0033】
【発明の実施の形態】
以下、本発明の実施の形態に係るガベージコレクション装置について説明する。
<1.実施の形態1>
<1-1.構成>
図1は、本発明の実施の形態1に係るガベージコレクション装置100の構成図である。
【0034】
ガベージコレクション装置100は、CPU、メモリ等を備えたコンピュータにおいてメモリに格納された制御プログラムがCPUによって実行されることにより実現され、オペレーティングシステム上で動作し、Java言語等で作成されたアプリケーションプログラムの実行環境の一部として位置づけられるソフトウェア的な装置である。
【0035】
なお、同図には、アプリケーションプログラムの実行に際して、ガベージコレクション装置100に指示を伝える制御機構200と、セルとして割り当てられる領域を含むメモリ300とをも示している。
制御機構200は、アプリケーションプログラムの実行環境の一部であり、アプリケーションプログラムの解釈、実行等の実行制御を行い、アプリケーションプログラムによるポインタの変更をガベージコレクション装置100に対して伝え、また、メモリ不足等を検出して後述するカウントアンドスイープ処理の実行をガベージコレクション装置100に要求する機構である。
【0036】
この制御機構200は、セル確保部201、ポインタ設定部202及びカウントアンドスイープ指示部210を備える。
ここで、セル確保部201は、アプリケーションプログラムの実行時におけるオブジェクトの生成に対応して、つまりアプリケーションプログラム中のオブジェクト生成用のコードを解釈する際に、メモリ300中の領域をそのオブジェクトのデータを格納するセルとして確保する機能を有する。
【0037】
セルは、そのセルが参照されている数、つまりそのセルを示すポインタの存在する数を示すリファレンスカウンタを保持している。このリファレンスカウンタには、リファレンスカウント方式において通常用いられるものであってアプリケーションプログラムによるポインタの変更に応じて変化させるべきリファレンスカウンタAと、後述するカウントアンドスイープ処理においてセルが参照されている数をカウントするために用いられる独特のリファレンスカウンタBとの2種類がある。なお、セルのデータ構造については後に詳しく説明する。
【0038】
ポインタ設定部202は、アプリケーションプログラムの実行時におけるポインタの変更に対応して、つまりアプリケーションプログラム中のオブジェクトポインタへの代入のコードを解釈した際に、ポインタの変更をガベージコレクション装置100に対して伝える機能を有する。
また、カウントアンドスイープ指示部210は、メモリ不足を検出したとき、即ちメモリ300中において新たにセルを割り当てることのできるメモリ領域が減少していることを検出したときにガベージコレクション装置100に対してカウントアンドスイープ処理の実行を要求する機能を有する。
【0039】
ガベージコレクション装置100は、アプリケーションプログラムが実行中に確保したセルがどこからも参照されなくなっている場合にそのセルを解放する、いわゆるガベージコレクションをリファレンスカウント方式を変形した方式により行う機能を有し、機能構成要素として、カウンタ変更部110、カウンタゼロ判定部120、セル解放部130、再カウント部140、再カウント結果ゼロ判定部141及びカウンタ再設定部142を備える。
【0040】
ここで、カウンタ変更部110は、制御機構200中のポインタ設定部202からのポインタの変更の通知を受けた時にポインタ変更対応処理を実行するものであり、カウンタ最大値判定部111、カウンタ増加部112及びカウンタ減少部113を有する。
カウンタ最大値判定部111は、セルのリファレンスカウンタが最大値になっているか否かを判定するものであり、カウンタ増加部112は、セルのリファレンスカウンタを1増加するものであり、カウンタ減少部113は、セルのリファレンスカウンタを1減少するものである。
【0041】
カウンタゼロ判定部120は、カウンタ減少部113が減少したセルのリファレンスカウンタAが0になっているか否かを判定し、0であればセル解放部130にセルの解放を指示する機能を有する。
セル解放部130は、カウンタゼロ判定部120又は再カウント結果ゼロ判定部141の指示を受けてセルの解放を行うものである。
【0042】
再カウント部140は、カウントアンドスイープ指示部210からカウントアンドスイープ処理の実行要求を受けた時にカウントアンドスイープ処理の実行を開始し、各セルが参照されている数をセルのリファレンスカウンタBを用いてカウントする機能を有する。
再カウント結果ゼロ判定部141は、再カウント部140によるカウントの結果として全てのセルのうちリファレンスカウンタBが0であるセルについては、セル解放部130にそのセルの解放を指示し、リファレンスカウンタBが0でないセルについては、カウンタ再設定部142にセルにおけるリファレンスカウンタの再設定指示を伝える機能を有する。
【0043】
カウンタ再設定部142は、再設定指示が伝えられたセルのリファレンスカウンタBの値をレファレンスカウンタAにコピーする機能を有する。
<1-2.データ>
以下、ガベージコレクション装置100の処理対象となり、アプリケーションプログラムにおけるオブジェクトのデータを格納するために用いられるデータ単位であるセルについて説明する。
【0044】
図2は、セルのデータ構造を示す図である。なお、同図における1行は、計算機の基本語長となるワード単位に相当する。ここでは、1ワードが32ビットであるものとして説明する。
セル1100は、複数ワードで構成され、1ワードのヘッダ部と、可変長のデータ領域1106とからなる。
【0045】
ここで、ヘッダ部は、有効セルフラグ領域1101とセル長領域1102とリファレンスカウンタA領域1103とリファレンスカウンタB領域1104と作業フラグ領域1105とから構成される。
有効セルフラグ領域1101は、セルが有効か無効かを示す有効セルフラグを格納するための1ビットの領域である。有効セルフラグは、セルが有効であれば1、無効であれば0の値をとる。有効セルフラグが0であるセルの領域は、アプリケーションプログラムにおけるオブジェクトの生成に対応してセル確保部201により、新たにセルを割り当てられ得る領域となり、セル確保部201により新たにセルが確保された際には有効セルフラグは1に設定される。
【0046】
なお、セルの解放は有効セルフラグが1から0に変更されることによって実現され、これにより、その有効セルフラグを含むセルが割り当てられていたメモリ領域は、新たにセルを確保するために用いられ得る、再利用可能な領域となる。セル長領域1102は、ヘッダ部とデータ領域とを合わせたセル長を示す値を格納する21ビットの領域である。この領域に格納されるセル長は、例えばワード数で表される。
【0047】
リファレンスカウンタA領域1103及びリファレンスカウンタB領域1104は、リファレンスカウンタA及びリファレンスカウンタBを格納する4ビットずつの領域である。両リファレンスカウンタは0から15までの数を表すことができるが、最大値である15は、セルが参照されている数が15以上に1度なってしまったためにリファレンスカウンタがオーバフローしていることを示すものとして用いられる。リファレンスカウンタに関してこの15という数を、以下、MAX値とも表現する。
【0048】
作業フラグ領域1105は、カウントアンドスイープ処理においてセルに関する状態を3段階で示すために用いられる作業フラグを格納する2ビットの領域である。
セルに関する状態は、ポインタにより参照されていることが検出されていない状態(以下、「白色」とも表現する。)と、そのセルがポインタにより参照されていることが初めて検出された状態(以下、「灰色」とも表現する。)と、そのセルが保持するポインタが示すセルについてのリファレンスカウンタの操作を実行済みである状態(以下、「黒色」とも表現する。)とである。また、作業フラグの値が0であればセルが白色であることを示し、1であればセルが灰色であることを示し、2であればセルが黒色であることを示す。
【0049】
なお、後述のカウントアンドスイープ処理においては、いわゆる三色アルゴリズムを用いており、各セルは白色、灰色、黒色の順に変化することになる。
データ領域1106は、オブジェクトのデータを格納するための領域であり、この領域に、整数型、文字型、ポインタ型等のデータ型の情報が付された1又は複数のデータが格納される。
【0050】
図3は、メモリ300の一部の領域にセルが割り当てられている様子を示す図である。なお、同図においてはポインタ型以外の型のデータを「変数」と表現している。
例えば、有効セル1201においては、有効セルフラグが1であり、セル長が4ワードであり、リファレンスカウンタAが2であり、リファレンスカウンタBが0であり、作業フラグが0であり、ポインタ等を含んでいる。
【0051】
また、有効セルフラグが0であるフリー領域1211は3ワード分の領域であり、新たにセルとして確保され得る領域である。
なお、この複数のセルが格納されている領域において、セルを順次探索する場合には、先頭のセルから、セルのセル長を参照してそのセルのサイズ分だけスキップすれば次のセルに至ることができる。
【0052】
図4は、ある時点におけるセルの内容とセル間の関係を例示した図である。
同図においては、矢印線の起点によりポインタの所在を示し、矢印の先端によりポインタの指すセルを示している。例えば、セル11は、ルートポインタ10から指されており、かつ、セル12を指すポインタとセル15を指すポインタとを含んでいることを示している。また、セル14は、どこからも指されておらず、どこからも参照されていないことを示している。
【0053】
<1-3.動作>
以下、上述した構成を備え、上述したセルを対象としたガベージコレクションを行うガベージコレクション装置100と、これに関連し、アプリケーションプログラムの解釈実行の制御を行う制御機構200との動作について説明する。
<1-3-1.セルの生成>
アプリケーションプログラムのコードを逐次解釈し実行のための制御を行う制御機構200は、オブジェクト生成用のコードを解釈対象としたときに、セル確保部201によりセル生成処理を行う。
【0054】
図5は、セル確保部201が行うセル生成処理を示すフローチャートである。
セル確保部201は、セルに格納すべきオブジェクトのデータの量と、ヘッダ部の1ワード分とを合わせたサイズのセルを確保し、そのセルの有効セルフラグを1にし(ステップS411)、そのサイズに基づいてセル長を設定する(ステップS412)。このセルの確保にあたり、セル確保部201は、メモリ300中の有効セルフラグが0であるフリー領域を探索して、そのフリー領域の全部又は一部を利用して新たにセルとして利用する。
【0055】
セル長を設定した後、セル確保部201は、その確保したセルのリファレンスカウンタA及びBを0とし、作業フラグを0にする(ステップS413)。これによりセルは白色となる。
アプリケーションプログラムにおけるオブジェクト生成用のコードにおいて、通常は生成したオブジェクトを指すようにオブジェクトポインタへの代入が示されており、この場合においては、ステップS413の後に、制御機構200はポインタ設定部202によりポインタの変更をガベージコレクション装置100に伝えて、ポインタ変更対応処理を行わせることになる(ステップS414)。
【0056】
<1-3-2.ポインタの変更>
制御機構200は、アプリケーションプログラムにおけるオブジェクトポインタへの代入のコードを解釈対象としたときにポインタ設定部202を通じてポインタの変更をガベージコレクション装置100に伝える。なお、ポインタ設定部202は、ポインタの変更を伝える際に、変更前後のポインタの値をも伝える。
【0057】
ガベージコレクション装置100は、ポインタの変更が伝えられるとポインタ変更対応処理を行う。
図6は、ガベージコレクション装置100の行うポインタ変更対応処理を示すフローチャートである。
ポインタの変更が伝えられると、ガベージコレクション装置100のカウンタ変更部110は、変更前のポインタがセルを指すか否かを判定し(ステップS421)、セルを指すものである場合には、その着目している変更前のポインタに基づいてセル参照解除処理を行い(ステップS422)、セルを指すものでない場合にはステップS422のセル参照解除処理は行わない。つまり変更前のポインタがNULLであればセル参照解除処理は行わない。なお、セル参照解除処理については後に図7を用いて説明する。
【0058】
続いて、カウンタ変更部110は、変更後のポインタがセルを指すか否かを判定し(ステップS423)、セルを指すものでない場合にはポインタ変更対応処理を終了する。
また、ステップS423において、変更後のポインタがセルを指すものである場合には、カウンタ変更部110はカウンタ最大値判定部111によりそのポインタの指すセルのリファレンスカウンタAがMAX値であるか否かを判定し(ステップS424)、MAX値でない場合にはカウンタ増加部112にうよりそのリファレンスカウンタAを1増やし(ステップS425)、MAX値である場合にはステップS425は行わない。
【0059】
ステップS425の後に、或いはステップS424でMAX値であると判定した場合に、カウンタ変更部110はその変更後のポインタを保持するセルの作業フラグは2であるか否か、即ちそのセルが黒色であるか否かを判定し(ステップS426)、黒色でない場合にはポインタ変更対応処理を終了する。
ステップS426においてセルが黒色であると判定した場合には、カウンタ変更部110は、その変更後のポインタが指すセルの作業フラグは0であるか否か、即ちそのセルが白色であるか否かを判定し(ステップS427)、白色である場合に限りその変更後のポインタが指すセルの作業フラグを0から1に変更する(ステップS428)。
【0060】
ステップS427、S428に続いて、カウンタ変更部110はカウンタ最大値判定部111により、変更後のポインタの指すセルのリファレンスカウンタBがMAX値であるか否かを判定し(ステップS429)、MAX値でない場合にはカウンタ増加部112によりそのリファレンスカウンタBを1増やして(ステップS430)、ポインタ変更対応処理を終了し、MAX値である場合にはステップS430を行わずにポインタ変更対応処理を終了する。
【0061】
図7は、ガベージコレクション装置100の行うセル参照解除処理を示すフローチャートである。なお、同図ではステップS435においてセル参照解除処理を再帰的に実行するように表現している。
まず、カウンタ変更部110は、セル参照解除処理を行う直前に着目していたポインタに基づき、カウンタ最大値判定部111により、その着目していたポインタの指すセルのリファレンスカウンタAはMAX値であるか否かを判定する(ステップS431)。
【0062】
以下、セル参照解除処理のステップS431を行う時点で着目していたポインタを処理対象ポインタということとする。
ステップS431において、処理対象ポインタの指すセルのリファレンスカウンタAがMAX値でないと判定した場合には、カウンタ変更部110は、カウンタ減少部113によりそのリファレンスカウンタAを1減らし(ステップS432)、続いてカウンタゼロ判定部120は、そのリファレンスカウンタAが0になったか否かを判定する(ステップS433)。
【0063】
ステップS433において、リファレンスカウンタAが0になっていると判定された場合には、処理対象ポインタの指すセルの保持する、セルへのポインタに順次着目してセル参照解除処理(図7)を繰り返す(ステップS434、S435)。これにより、処理対象ポインタの指すセルが保持する、セルへのポインタの数だけステップS435が繰り返されることになる。なお、処理対象ポインタの指すセルが、セルへのポインタを保持しない場合にはステップS435の処理は省略される。
【0064】
セル解放部130は、ステップS433においてリファレンスカウンタAが0になっていると判定されたセルについて、ステップS435の繰り返しの後に、有効セルフラグを0にすることによりセルを解放し(ステップS436)、これによりセル参照解除処理は終了する。
また、ステップS431において処理対象ポインタの指すセルのリファレンスカウンタAがMAX値であると判定した場合、及びステップS433においてリファレンスカウンタAが0になっていないと判定した場合には、カウンタ変更部110は、処理対象ポインタを保持するセルが黒色か否かを判定し(ステップS437)、黒色でない場合にはセル参照解除処理を終了し、黒色である場合には、カウンタ最大値判定部111によりその黒色のセルのリファレンスカウンタBがMAX値であるか否かを判定する(ステップS438)。
【0065】
ステップS438において、リファレンスカウンタBがMAX値でないと判定した場合にはカウンタ変更部110は、カウンタ減少部113によりそのリファレンスカウンタBを1減らして(ステップS439)、セル参照解除処理を終了し、MAX値であると判定した場合にはステップS439を行わずにセル参照解除処理を終了する。
【0066】
<1-3-3.カウントアンドスイープ処理>
制御機構200のカウントアンドスイープ指示部210は、単位時間当たりにおいて、CPUがアプリケーションプログラムの実行に割り当てられる時間に対して比較的少ない時間を用いて、メモリ300中において新たにセルを割り当てることのできるメモリ領域が予め定めた基準量より減少しているか否かの検出を行って、減少している場合にはその比較的少ない時間を用いてガベージコレクション装置100にカウントアンドスイープ処理を行わせるよう制御する。なお、時間の割り当てに関しては、例えば、カウントアンドスイープ処理やこれに付随した処理を、アプリケーションプログラムとは別スレッドとして構成し、スレッド毎のいわゆるタイムスライス値を適切に配分すること等によって実現できる。
【0067】
図8は、ガベージコレクション装置100の行うカウントアンドスイープ処理を示すフローチャートである。
カウントアンドスイープ指示部210からカウントアンドスイープ処理の実行が要求されると、ガベージコレクション装置100の再カウント部140は、まず全てのセルについてのリファレンスカウンタBを0にして作業フラグを0にする(ステップS501)。これにより全てのセルが白色になる。
【0068】
ステップS501に続いて、再カウント部140は、ルートポインタから直接指されている全てのセルについて、作業フラグを1にしてセルを灰色にするとともに、リファレンスカウンタBがMAX値でなければリファレンスカウンタBを1増やす(ステップS502)。
ステップS502に続いて、再カウント部140は、ルートポインタに端を発するポインタチェーンを辿って、灰色のセルを探索する(ステップS503)。
【0069】
再カウント部140はステップS503の探索の結果として、灰色のセルを探索できた場合には(ステップS504)、探したその灰色のセル内におけるポインタであってセルを指すもの毎に、そのポインタが指すセルが白色ならば、そのセルの作業フラグを0から1に変更することによってその白色のセルを灰色にするステップS506と、そのポインタが指すセルのリファレンスカウンタBがMAX値でなければリファレンスカウンタBを1増やすステップS507とを繰り返し行う(ステップS505〜S507)。但し、探した灰色のセル内にセルを指すポインタがない場合にはステップS506及びS507の処理は省略する。
【0070】
探したその灰色のセル内のポインタ毎にステップS505により、ステップS506及びS507を繰り返し行った後に、再カウント部140は、その灰色のセルを黒色にし(ステップS508)、ステップS503の処理に戻る。即ち、また別の灰色のセルの探索を開始する。
こうしてステップS503〜S508が繰り返され、灰色のセルが存在しなくなった場合には、再カウント部140は、ステップS504においてnoの分岐に進み、全てのセルについてセル毎にステップS509〜S512を行う(ステップS509)。即ち、再カウント部140は、全てのセルそれぞれについて順次、再カウント結果ゼロ判定部141により、セルのリファレンスカウンタBが0であるか否かを判定し(ステップS510)、0でない場合には、カウンタ再設定部142がセルのリファレンスカウンタAをリファレンスカウンタBと同じ値にするとともにセルを白色にし(ステップS512)、0である場合にはセル解放部130がそのセルの有効セルフラグを0にしてセルを解放する(ステップS511)。こうして全てのセルについてステップS509以後の処理が行われると、カウントアンドスイープ処理は完了する。
【0071】
なお、カウントアンドスイープ処理は、アプリケーションプログラムの実行と並行して行われる。但し、カウンタアンドスイープ処理は、図8に示す単一ステップの実行中においてはアプリケーションプログラムが実行されないようにし、さらにステップS505の実行開始からステップS508の実行終了までの間においてもアプリケーションプログラムが実行されないようにされる必要がある。これは、例えば、マルチタスク制御を行うOSに対して、ガベージコレクション装置100が単一ステップやステップS505〜S508の実行中はCPUを専有することを宣言する等によって実現される。
【0072】
以下、上述したカウントアンドスイープ処理の進行を図9〜図13を用いて段階を追って説明する。
図9は、カウントアンドスイープ処理におけるステップS502の終了直後のセルの内容とセル間の関係を例示した図である。ここでは、説明を簡単にするために6つのセルのみを示している。
【0073】
カウントアンドスイープ処理の実行前においては、セル11〜16はいずれも有効セルフラグは1で有効を示しており、セル11、セル13、セル14及びセル16のリファレンスカウンタAはMAX値になっており、セル12及びセル15のリファレンスカウンタAは1であるものとする。
同図に示す状態は、カウントアンドスイープ処理のステップS501により、まずセル11〜16の全てについて、リファレンスカウンタBが0にされるとともに作業フラグが0にされた後、ステップS502により、ルートポインタ10から直接指されているセル11のリファレンスカウンタBが1に増やされ作業フラグが1にされた時点の状態である。この時にはセル11のみが灰色であって、セル12〜16は白色である。
【0074】
図10は、カウントアンドスイープ処理における1回目のステップS508の実行の終了直後のセルの内容とセル間の関係を例示した図である。
同図に示す状態は、図9に示す状態を前提として、ステップS503により灰色のセル11が探知されてそのセル内のポインタが指すセル12及びセル15について白色から灰色に変えられリるとともにファレンスカウンタBを1増やされ(ステップS504〜S507)、ステップS508によりセル11を黒色にされた時点の状態である。
【0075】
図11は、カウントアンドスイープ処理における2回目のステップS508の実行の終了直後のセルの内容とセル間の関係を例示した図である。
同図に示す状態は、図10に示す状態を前提として、ステップS503により灰色のセル12が探知されてそのセル内のポインタが指すセル13及びセル16について白色から灰色に変えられるとともにリファレンスカウンタBを1増やされ(ステップS504〜S507)、ステップS508によりセル12を黒色にされた時点の状態である。
【0076】
図12は、カウントアンドスイープ処理においてS504のnoの分岐に進んだ直後のセルの内容とセル間の関係を例示した図である。
同図に示す状態は、図11に示す状態を前提として、ステップS503〜S508の処理を繰り返し行うことにより、灰色のセルが存在しなくなった時点の状態である。この時、各セルはそのセルが参照されている数をリファレンスカウンタBにより示すことになる。
【0077】
図13は、カウントアンドスイープ処理の終了時点のセルの内容とセル間の関係を例示した図である。
同図に示す状態は、図12に示す状態を前提として、ステップS509〜S511が実行されることにより、リファレンスカウンタBが0であったセル14は有効セルフラグが1から0にされて解放され、他のセルについてはリファレンスカウンタBがリファレンスカウンタAにコピーされた状態である。このカウントアンドスイープ処理により、どこからも参照されていないセル14の解放が行われ、また、一旦15回以上も参照されたことによってMAX値になっていたリファレンスカウンタAがセルの現在の被参照回数を示す値になおされた。従って、以後はポインタ変更対応処理において、リファレンスカウンタAに基づき、リファレンスカウンタAが0になった時点でセルの解放を行うことができるようになる。
【0078】
<1-4.考察>
セルの生存期間における被参照数の経時的変化について考えると、セルへの参照数は、図29に示したようにセルの生成から短い時間においては、例えば300回等とリファレンスカウンタで表せない大きな値になり得るが、いずれは、例えば10回前後等とリファレンスカウンタで表せる大きさに落ち着く。
【0079】
即ち、Java言語等、可変長のデータ構造を有するオブジェクトを生成可能とするタイプのプログラミング言語で作成されたアプリケーションプログラムにおいて、そのオブジェクトの生成に対応してメモリ中において確保されるセルは、図29に示したように確保から短期間においては一旦リファレンスカウンタAがオーバフローするほど多数の参照がなされるが、その後にはそのセルが参照される数はリファレンスカウンタAがオーバフローしない程度に落ち着く。
【0080】
従って、セルの生成から短い時間においてはリファレンスカウンタAがMAX値に一旦なってしまうが、いずれ落ち着いた段階でカウントアンドスイープ処理が行われることにより、その時点でのセルの被参照数がリファレンスカウンタAに再設定されるため、その後は、通常のリファレンスカウンタ方式による場合と同様に、そのセルがどこからも参照されなくなった時に即座にそのセルの解放を行うような制御を実現することが可能になる。
【0081】
このカウントアンドスイープ処理によれば、どこからも参照されておらず不要となっているセルを解放するマークアンドスイープ方式と同様の効果に加えて、リファレンスカウンタが一旦オーバフローしてリファレンスカウント方式に相当する解放制御が不可能になったセルであっても、その処理時点においてそのセルの被参照数がリファレンスカウンタで表せる範囲内に収まっていれば、以後そのセルについて、リファレンスカウント方式と同様なセルの解放制御を行うことができるようになるという効果が得られる。
【0082】
なお、この実施の形態1で示した方式を、従来の単なるリファレンスカウント方式と対比すると、実施の形態1で示した方式は、セルの被参照数の初期段階でのピーク値と後の安定状態における値との格差が大きいときには、リファレンスカウントのために必要なセル内の領域を、より小さいものにできる可能性をもつ方式であるといえる。
<2.実施の形態2>
以下、本発明の実施の形態2に係るガベージコレクション装置(以下、「変形ガベージコレクション装置」という。)について説明する。
【0083】
<2-1.構成>
変形ガベージコレクション装置は、実施の形態1において説明したガベージコレクション装置100と基本的な構成は同じであるが、セル内に作業用領域を設けてその作業用領域を利用することによりカウントアンドスイープ処理をより高速に行えるようにしたものである。以下、変形ガベージコレクション装置の機能構成要素についてはガベージコレクション装置100の機能構成要素と同じ符号を用いて説明する(図1参照)。また、この変形ガベージコレクション装置に対応し、実施の形態1に示した制御機構200に相当する制御機構を変形制御機構といい、その機能構成要素については制御機構200の機能構成要素と同じ符号を用いて説明する。
【0084】
<2-2.データ>
以下、変形ガベージコレクション装置の処理対象となり、アプリケーションプログラムにおけるオブジェクトのデータを格納するために用いられるデータ単位であるセルについて説明する。
図14は、変形ガベージコレクション装置が取り扱うセルのデータ構造を示す図である。なお、同図における1行は、計算機の基本語長となるワード単位に相当する。
【0085】
セル2100は、複数ワードで構成され、1ワードのヘッダ部と、1ワードの作業用領域2106と、可変長のデータ領域2107とからなる。
ここで、ヘッダ部は、有効セルフラグ領域2101とセル長領域2102とリファレンスカウンタA領域2103とリファレンスカウンタB領域2104と作業フラグ領域2105とから構成される。
【0086】
有効セルフラグ領域2101、リファレンスカウンタA領域2103及びリファレンスカウンタB領域2104はそれぞれ、実施の形態1で図2により示した有効セルフラグ領域1101、リファレンスカウンタA領域1103及びリファレンスカウンタB領域1104と同等であり、そのためここでは説明を省略する。
【0087】
セル長領域2102は、実施の形態1で示したセル長領域1102より1ビット大きく、ヘッダ部と作業用領域とデータ領域とを合わせたセル長を示す値を格納する22ビットの領域である。この領域に格納されるセル長は、例えばワード数で表される。
作業フラグ領域2105は、実施の形態1で示した作業フラグ領域1105より1ビット小さく、カウントアンドスイープ処理においてセルに関する状態を示すために用いられる作業フラグを格納する1ビットの領域である。作業フラグは0又は1の値をとり、カウントアンドスイープ処理において最初は0にされる。
【0088】
作業用領域2106は、作業用先頭セルアドレスを格納するためにメモリ300内に予め設けられた1ワードの領域を始点として、各セルをポインタチェーンで繋ぐために用いられる領域であり、カウントアンドスイープ処理においてルートポインタに端を発するポインタチェーンで繋がれているセルであると判定された場合に、他のセルのアドレスが格納される。
【0089】
なお、セル2100が、作業用先頭セルアドレスからのポインタチェーンで繋がれていない場合には、作業用領域2106にはNULLが格納されており、そのポインタチェーンで繋がれている場合であってチェーンの終端であれば、終端を示すために予め定められている値、例えば、0xFFFFFFFF等(以下、「終端マーク」という。)が格納されており、そのポインタチェーンで繋がれている場合であってチェーンの終端でなければ、次のセルのアドレスが格納されている。
【0090】
また、データ領域2107は、実施の形態1で示したデータ領域1106と同等であり、そのためここでは説明を省略する。
図15は、実施の形態2におけるセルの作業用先頭セルアドレス30からのポインタチェーンを例示する図である。
同図においては、矢印の先端により、アドレスが指すセルを示している。
【0091】
作業用先頭セルアドレス30はセルa31のアドレスであり、セルa31の作業用領域にはセルb32のアドレスが格納されており、セルb32の作業用領域にはセルc33のアドレスが格納されており、セルc33の作業用領域には終端マークが格納されている。また、ポインタチェーンから外れているセルd34の作業用領域にはNULLが格納されている。
【0092】
この実施の形態2では、この作業用先頭セルアドレス30に端を発するポインタチェーンに対して、カウントアンドスイープ処理においてセルを接続したり切り離したりする際に、ラストインファーストアウトのスタックアルゴリズムを用いる。このため、作業用先頭セルアドレス30からのポインタチェーンで示されるセルについては、作業用スタックにそのセルが格納されていると表現する。また、セルを作業用スタックにPUSHするという表現により、ポインタチェーンの先頭にセルを挿入することを表し、セルを作業用スタックからPOPするという表現により、ポインタチェーンの先頭のセルをチェーンから取り除くことを表す。
【0093】
例えば、図15に示す状態において、セルd34を作業用スタックにPUSHすると、作業用先頭セルアドレスはセルd34のアドレスを指すように書きかえられ、セルd34の作業用領域にはセルa31のアドレスが格納されることになる。また、その直後に、作業用スタックからPOPできるセルはセルd34となり、セルd34をPOPするとポインタチェーンからセルd34が除かれ、その状態は図15に示すものに戻る。なお、POP時にはPOPしたセルの作業用領域にはNULLが設定される。
【0094】
<2-3.動作>
以下、上述したセルを対象としたガベージコレクションを行う変形ガベージコレクション装置と、これに関連し、アプリケーションプログラムの解釈実行の制御を行う変形制御機構との動作について説明する。
<2-3-1.セルの生成>
アプリケーションプログラムのコードを逐次解釈し実行のための制御を行う変形制御機構は、オブジェクト生成用のコードを解釈対象としたときに、セル確保部201によりセル生成処理を行う。
【0095】
図16は、変形制御機構におけるセル確保部201が行うセル生成処理を示すフローチャートである。
セル確保部201は、セルに格納すべきオブジェクトのデータの量と、ヘッダ部の1ワード分と作業用領域の1ワード分とを合わせたサイズのセルを確保し、そのセルの有効セルフラグを1にし(ステップS611)、そのサイズに基づいてセル長を設定する(ステップS612)。このセルの確保にあたり、セル確保部201は、メモリ300中の有効セルフラグが0であるフリー領域を探索して、そのフリー領域の全部又は一部を利用して新たにセルとして利用する。
【0096】
セル長を設定した後、セル確保部201は、その確保したセルのリファレンスカウンタA及びBを0とし、作業フラグを0にし、作業用領域にNULLを設定する(ステップS613)。
アプリケーションプログラムにおけるオブジェクト生成用のコードにおいて、通常は生成したオブジェクトを指すようにオブジェクトポインタへの代入が示されており、この場合においては、ステップS613の後に、変形制御機構はポインタ設定部202によりポインタの変更を変形ガベージコレクション装置に伝えて、ポインタ変更対応処理を行わせることになる(ステップS614)。
【0097】
<2-3-2.ポインタの変更>
変形ガベージコレクション装置の行うポインタ変更対応処理は、実施の形態1で示したガベージコレクション装置100の行うポインタ変更対応処理(図6参照)と基本的に同等である。但し、実施の形態1において作業フラグが2であるか否かの判断をしている点(ステップS426)を、実施の形態2では作業フラグが1であるか否かの判断をするように置き換え、実施の形態1においてセル内の作業フラグを1に変化させる点(ステップS428)を、実施の形態2ではセルを作業用スタックにPUSHするように置き換える。なお、セル参照解除処理(図7参照)についても同様に、実施の形態1において作業フラグが2であるか否かの判断をしている点(ステップS437)を、実施の形態2では作業フラグが1であるか否かの判断をするように置き換える。
【0098】
<2-3-3.カウントアンドスイープ処理>
変形制御機構のカウントアンドスイープ指示部210は、単位時間当たりにおいて、CPUがアプリケーションプログラムの実行に割り当てられる時間に対して比較的少ない時間を用いて、メモリ300中において新たにセルを割り当てることのできるメモリ領域が予め定めた基準量より減少しているか否かの検出を行って、減少している場合にはその比較的少ない時間を用いて変形ガベージコレクション装置にカウントアンドスイープ処理を行わせるよう制御する。
【0099】
図17は、変形ガベージコレクション装置の行うカウントアンドスイープ処理を示すフローチャートである。
変形制御機構のカウントアンドスイープ指示部210からカウントアンドスイープ処理の実行が要求されると、変形ガベージコレクション装置の再カウント部140は、まず全てのセルについてのリファレンスカウンタBを0にして作業フラグを0にし、作業用領域にNULLを設定する(ステップS701)。なお、作業用先頭セルアドレス30は、初期値が終端マークであり、このステップS701が実行される時点では終端マークになっている。
【0100】
ステップS701に続いて、再カウント部140は、ルートポインタから直接指されている全てのセルについて、リファレンスカウンタBを1増加して順次、作業用スタックにPUSHする(ステップS702)。
ここで、PUSHは、作業用先頭セルアドレス30のそのPUSH時点での値をそのPUSH対象となったセルの作業用領域に格納するとともに、そのPUSH対象となったセルのアドレスを作業用セルアドレス30に設定することにより実現される。
【0101】
ステップS702に続いて、再カウント部140は、作業用スタックにセルが格納されているかを判定する(ステップS703)。再カウント部140は、作業用先頭セルアドレス30の値が終端マーク以外であれば、作業用スタックにセルが格納されていると判定し、終端マークであれば作業用スタックにセルが格納されていないと判定する。
【0102】
ステップS703において作業用スタックにセルが格納されていると判定した場合には、再カウント部140は作業用スタックから1つのセルをPOPし、そのPOPしたセルの作業用フラグを1にし(ステップS704)、そのセルの有効セルフラグを参照してセルが有効であるか否かを判定する(ステップS705)。
【0103】
ここで、POPは、作業用先頭セルアドレス30が指すセルのそのPOP時点での作業用領域の内容を作業用先頭セルアドレス30に設定するとともに、そのセルの作業用領域にNULLを格納することにより実現される。
ステップS705においてセルが有効であると判定した場合には、再カウント部140は、そのセル内の、セルを指すポインタ毎に、そのポインタが指すセルのリファレンスカウンタBがMAX値でなければ1増やすステップS707と、そのポインタが指すセルの作業フラグが0であり、かつ、作業用領域がNULLであれば、そのポインタが指すセルを作業用スタックにPUSHするステップS708とを行う(ステップS706〜S708)。但し、ステップS704においてPOPしたセル内に、セルを指すポインタがない場合には、ステップS707及びS708の処理は省略する。
【0104】
ステップS706〜S708の後に、或いはステップS705でセルが有効でないと判定した場合に、再カウント部140は再び作業用スタックにセルが格納されているかの判定に戻る(ステップS703)。
ステップS703において、作業用スタックにセルが格納されていないと判定した場合には、再カウント部140は、全てのセルについてセル毎にステップS709〜S712を行う(ステップS709)。
【0105】
即ち、再カウント部140は、全てのセルそれぞれについて順次、再カウント結果ゼロ判定部141により、セルのリファレンスカウンタBが0であるか否かを判定し(ステップS710)、0でない場合には、カウンタ再設定部142がセルのリファレンスカウンタAをリファレンスカウンタBと同じ値にするとともに作業フラグを0にし(ステップS712)、0である場合にはセル解放部130がそのセルの有効セルフラグを0にしてセルを解放する(ステップS711)。こうして全てのセルについてステップS709以後の処理が行われると、カウントアンドスイープ処理は完了する。
【0106】
なお、カウントアンドスイープ処理は、アプリケーションプログラムの実行と並行して行われる。但し、カウントアンドスイープ処理は、図17に示す単一ステップの実行中においてはアプリケーションプログラムが実行されないようにし、さらにステップS704の実行開始からステップS708の実行終了までの間においてもアプリケーションプログラムが実行されないようにされる必要がある。これは、例えば、マルチタスク制御を行うOSに対して、変形ガベージコレクション装置が単一ステップやステップS704〜S708の実行中はCPUを専有することを宣言する等によって実現される。
【0107】
以下、上述したカウントアンドスイープ処理の進行を図18〜図22を用いて段階を追って説明する。
図18は、カウントアンドスイープ処理におけるステップS701の終了直後のセルの内容とセル間の関係を例示した図である。ここでは、説明を簡単にするために6つのセルのみを示している。
【0108】
カウントアンドスイープ処理の実行前においては、セル41〜46はいずれも有効セルフラグは1で有効を示しており、セル41、セル43、セル44及びセル46のリファレンスカウンタAはMAX値になっており、セル42及びセル45のリファレンスカウンタAは1であるものとする。
同図に示す状態は、カウントアンドスイープ処理のステップS701により、まずセル41〜46の全てについて、リファレンスカウンタBが0にされるとともに作業フラグが0にされた時点の状態である。この時点での作業用先頭セルアドレスの値は終端マークである。
【0109】
図19は、カウントアンドスイープ処理におけるステップS702の実行の終了直後のセルの内容とセル間の関係を例示した図である。
同図に示す状態は、図18に示す状態を前提として、ステップS702によりルートポインタから指されているセル41について、リファレンスカウンタBが1に増やされ、作業用スタックにPUSHされた時点の状態である。
【0110】
図20は、カウントアンドスイープ処理におけるステップS706の繰り返し処理が終わった直後のセルの内容とセル間の関係を例示した図である。
同図に示す状態は、図19に示す状態を前提として、ステップS704によりセル41がPOPされかつその作業フラグを1にされ、セル41が保持するポインタが指すセル42及びセル45が順次作業用スタックにPUSHされかつリファレンスカウンタBを1増やされた状態である。
【0111】
図21は、カウントアンドスイープ処理において再びステップS706が終わった直後のセルの内容とセル間の関係を例示した図である。
同図に示す状態は、図20に示す状態を前提として、ステップS704によりセル45がPOPされかつその作業フラグを1にされ、セル45が保持するポインタが指すセル46が作業用スタックにPUSHされかつリファレンスカウンタBを1増やされた状態である。
【0112】
図22は、カウントアンドスイープ処理においてステップS703のnoの分岐に進んだ直後のセルの内容とセル間の関係を例示した図である。
同図に示す状態は、図21に示す状態を前提として、ステップS703〜S708の処理を繰り返し行うことにより、作業用スタックに格納されているセルがなくなった時点の状態である。この時、各セルはそのセルが参照されている数をリファレンスカウンタBにより示すことになる。
【0113】
この図22に示した状態の後、ステップS709〜S712が行われることにより、セル44は有効セルフラグが0にされることにより解放され、他のセルではリファレンスカウンタAがリファレンスカウンタBと同じ値に再設定されることになる。
<2-4.考察>
このように各セルに作業用領域を設けて作業用スタックを利用する方式によれば、実施の形態1で示したような灰色のセルを探索する処理にかかる時間を短縮でき、高速にカウントアンドスイープ処理を行うことができるようになる。
【0114】
なお、従来のリファレンスカウント方式を用いる場合においても、セルへのポインタのチェーンがループしている場合に不要なセルを解放できないという問題を解決するためにマークアンドスイープ方式を併せて用いることもあり、アプリケーションプログラムの動作に並行してこのマークアンドスイープ方式による処理を行うためには作業用スタックを用いる実施形態が有効となる。この作業用スタックの実現のために各セルに1ワードの作業用領域を設けた形態をとって従来のリファレンスカウント方式とマークアンドスイープ方式とを併用した場合と対比すると、実施の形態2で示した方式は、セルの被参照数の初期段階でのピーク値と後の安定状態における値との格差が大きいときには、リファレンスカウントのために必要なセル内の領域をより小さいものにできる可能性をもつ方式であるといえる。
<3.実施の形態3>
以下、本発明の実施の形態3に係るガベージコレクション装置(以下、「第2変形ガベージコレクション装置」という。)について説明する。
【0115】
<3-1.構成>
第2変形ガベージコレクション装置は、実施の形態1において説明したガベージコレクション装置100と基本的な構成は同じであるが、リファレンスカウンタAとBとの2つではなく、セル毎に1つしかリファレンスカウンタを用いなくても、リファレンスカウント方式を基礎としてカウントアンドスイープ処理を行うことができるようにしたものである。以下、第2変形ガベージコレクション装置の機能構成要素についてはガベージコレクション装置100の機能構成要素と同じ符号を用いて説明する(図1参照)。また、この第2変形ガベージコレクション装置に対応し、実施の形態1に示した制御機構200に相当する制御機構を第2変形制御機構といい、その機能構成要素については制御機構200の機能構成要素と同じ符号を用いて説明する。
【0116】
<3-2.データ>
以下、第2変形ガベージコレクション装置の処理対象となり、アプリケーションプログラムにおけるオブジェクトのデータを格納するために用いられるデータ単位であるセルについて説明する。
図23は、第2変形ガベージコレクション装置が取り扱うセルのデータ構造を示す図である。なお、同図における1行は、計算機の基本語長となるワード単位に相当する。
【0117】
セル3100は、複数ワードで構成され、1ワードのヘッダ部と、可変長のデータ領域3105とからなる。
ここで、ヘッダ部は、有効セルフラグ領域3101とセル長領域3102とリファレンスカウンタ領域3103と作業フラグ領域3104とから構成される。
有効セルフラグ領域3101及び作業フラグ領域3104はそれぞれ、実施の形態1で図2により示した有効セルフラグ領域1101及び作業フラグ領域1105と同等であり、そのためここでは説明を省略する。なお、この実施の形態3においては、実施の形態1と同様にセルの作業フラグが0であることをセルが白色であると、作業フラグが1であることをセルが灰色であると、作業フラグが2であることをセルが黒色であるとも表現する。
【0118】
セル長領域3102は、実施の形態1で示したセル長領域1102より4ビット大きく、ヘッダ部と作業用領域とデータ領域とを合わせたセル長を示す値を格納する25ビットの領域である。この領域に格納されるセル長は、例えばワード数で表される。
リファレンスカウンタ領域3103は、リファレンスカウンタを格納する4ビットの領域である。リファレンスカウンタは0から15までの数を表すことができるが、最大値である15は、セルが参照されている数が15以上に1度なってしまったためにリファレンスカウンタがオーバフローしていることを示すものとして用いられる。
【0119】
データ領域3105は、実施の形態1で示したデータ領域1106と同等であり、そのためここでは説明を省略する。
また、第2変形ガベージコレクション装置では、カウントアンドスイープ処理の実行中か否かを示すために、メモリ中の1ビットをカウントアンドスイープ実行中フラグと定めて、実行中であればカウントアンドスイープ実行中フラグをオン(ON)にし、実行中でなければオフ(OFF)にする。
【0120】
<3-3.動作>
以下、上述したセルを対象としたガベージコレクションを行う第2変形ガベージコレクション装置と、これに関連し、アプリケーションプログラムの解釈実行の制御を行う第2変形制御機構との動作について説明する。
<3-3-1.セルの生成>
アプリケーションプログラムのコードを逐次解釈し実行のための制御を行う第2変形制御機構は、オブジェクト生成用のコードを解釈対象としたときに、セル確保部201によりセル生成処理を行う。
【0121】
このセル生成処理は、実施の形態1で示したセル生成処理(図5参照)と基本的に同等である。但し、ステップS413の「リファレンスカウンタA及びBを0」とするところを「リファレンスカウンタを0」とするように読み替える必要がある。
<3-3-2.ポインタの変更>
第2変形制御機構は、アプリケーションプログラムにおけるオブジェクトポインタへの代入のコードを解釈対象としたときにポインタ設定部202を通じてポインタの変更を第2変形ガベージコレクション装置に伝える。なお、ポインタ設定部202は、ポインタの変更を伝える際に、変更前後のポインタの値をも伝える。
【0122】
第2変形ガベージコレクション装置は、ポインタの変更が伝えられるとポインタ変更対応処理を行う。
図24は、第2変形ガベージコレクション装置の行うポインタ変更対応処理を示すフローチャートである。
ポインタの変更が伝えられると、第2変形ガベージコレクション装置のカウンタ変更部110は、変更前のポインタがセルを指すか否かを判定し(ステップS821)、セルを指すものである場合には、その着目している変更前のポインタに基づいてセル参照解除処理を行い(ステップS822)、セルを指すものでない場合にはステップS822のセル参照解除処理は行わない。つまり変更前のポインタがNULLであればセル参照解除処理は行わない。なお、セル参照解除処理については後に図25を用いて説明する。
【0123】
続いて、カウンタ変更部110は、変更後のポインタがセルを指すか否かを判定し(ステップS823)、セルを指すものでない場合にはポインタ変更対応処理を終了する。
また、ステップS823において、変更後のポインタがセルを指すものである場合には、カウンタ変更部110は、カウントアンドスイープ実行中フラグを参照してカウントアンドスイープ処理が実行中であるか否かを判定し(ステップS824)、実行中であれば変更後のポインタを保持するセルは黒色であるか否か、つまりそのセルの作業フラグは2であるか否かを判定する(ステップS827)。
【0124】
ステップS827において、変更後のポインタを保持するセルが黒色でないと判定した場合には、カウンタ変更部110はポインタ変更対応処理を終了する。
ステップS827において、変更後のポインタを保持するセルが黒色であると判定した場合には、カウンタ変更部110は、その変更後のポインタが指すセルの作業フラグは0であるか否か、即ちそのセルが白色であるか否かを判定し(ステップS828)、白色である場合に限りその変更後のポインタが指すセルの作業フラグを0から1に変更する(ステップS829)。
【0125】
ステップS828、S829の後には、或いはステップS824においてカウントアンドスイープ処理が実行中でないと判定した場合には、カウンタ変更部110は、カウンタ最大値判定部111により、変更後のポインタの指すセルのリファレンスカウンタがMAX値であるか否かを判定し(ステップS825)、MAX値でない場合にはカウンタ増加部112によりそのリファレンスカウンタを1増やして(ステップS826)、ポインタ変更対応処理を終了し、MAX値である場合にはステップS826を行わずにポインタ変更対応処理を終了する。
【0126】
図25は、第2変形ガベージコレクション装置の行うセル参照解除処理を示すフローチャートである。なお、同図ではステップS836においてセル参照解除処理を再帰的に実行するように表現している。
まず、カウンタ変更部110は、カウントアンドスイープ実行中フラグを参照してカウントアンドスイープ処理が実行中であるか否かを判定し(ステップS831)、実行中でなければ、セル参照解除処理を行う直前に着目していたポインタに基づき、カウンタ最大値判定部111により、その着目していたポインタの指すセルのリファレンスカウンタはMAX値であるか否かを判定する(ステップS832)。
【0127】
以下、セル参照解除処理のステップS831を行う時点で着目していたポインタを処理対象ポインタということとする。
ステップS832において、処理対象ポインタの指すセルのリファレンスカウンタがMAX値でないと判定した場合には、カウンタ変更部110は、カウンタ減少部113によりそのリファレンスカウンタを1減らし(ステップS833)、続いてカウンタゼロ判定部120は、そのリファレンスカウンタが0になったか否かを判定する(ステップS834)。
【0128】
ステップS834において、リファレンスカウンタが0になっていると判定された場合には、処理対象ポインタの指すセルの保持する、セルへのポインタに順次着目してセル参照解除処理(図25)を繰り返す(ステップS835、S836)。これにより、処理対象ポインタの指すセルが保持する、セルへのポインタの数だけステップS836が繰り返されることになる。なお、処理対象ポインタの指すセルが、セルへのポインタを保持しない場合にはステップS836の処理は省略される。
【0129】
セル解放部130は、ステップS834においてリファレンスカウンタが0になっていると判定されたセルについて、ステップS836の繰り返しの後に、有効セルフラグを0にすることによりセルを解放し(ステップS837)、これによりセル参照解除処理は終了する。
また、ステップS831においてカウントアンドスイープ処理が実行中であると判定した場合には、カウンタ変更部110は、処理対象ポインタを保持するセルが黒色であるか否かを判定し(ステップS838)、黒色であった場合には、カウンタ最大値判定部111により処理対象ポインタの指すセルのリファレンスカウンタはMAX値であるか否かを判定する(ステップS839)。
【0130】
ステップS839において、カウンタ最大値判定部111が処理対象ポインタの指すセルのリファレンスカウンタがMAX値でないと判定した場合には、カウンタ減少部113はそのリファレンスカウンタを1減らし(ステップS840)、これによりセル参照解除処理は終了する。
また、ステップS832において処理対象ポインタの指すセルのリファレンスカウンタがMAX値であると判定された場合と、ステップS834においてリファレンスカウンタが0になっていないと判定された場合と、ステップS838において処理対象ポインタを保持するセルが黒色でないと判定された場合と、ステップS839において処理対象ポインタの指すセルのリファレンスカウンタはMAX値であると判定された場合とには、セル参照解除処理は終了する。
【0131】
<3-3-3.カウントアンドスイープ処理>
第2変形制御機構のカウントアンドスイープ指示部210は、単位時間当たりにおいて、CPUがアプリケーションプログラムの実行に割り当てられる時間に対して比較的少ない時間を用いて、メモリ300中において新たにセルを割り当てることのできるメモリ領域が予め定めた基準量より減少しているか否かの検出を行って、減少している場合にはその比較的少ない時間を用いて第2変形ガベージコレクション装置にカウントアンドスイープ処理を行わせるよう制御する。
【0132】
図26は、第2変形ガベージコレクション装置の行うカウントアンドスイープ処理を示すフローチャートである。
カウントアンドスイープ指示部210からカウントアンドスイープ処理の実行が要求されると、第2変形ガベージコレクション装置の再カウント部140は、まず、カウントアンドスイープ実行中フラグをONにし(ステップS851)、全てのセルについてのリファレンスカウンタを0にして作業フラグを0にする(ステップS852)。これにより全てのセルが白色になる。
【0133】
ステップS852に続いて、再カウント部140は、ルートポインタから直接指されている全てのセルについて、作業フラグを1にしてセルを灰色にするとともに、リファレンスカウンタがMAX値でなければリファレンスカウンタを1増やす(ステップS853)。
ステップS853に続いて、再カウント部140は、ルートポインタに端を発するポインタチェーンを辿って、灰色のセルを探索する(ステップS854)。
【0134】
再カウント部140はステップS854の探索の結果として、灰色のセルを探索できた場合には(ステップS855)、探したその灰色のセル内におけるポインタであってセルを指すもの毎に、そのポインタが指すセルが白色ならば、そのセルの作業フラグを0から1に変更することによってその白色のセルを灰色にするステップS857と、そのポインタが指すセルのリファレンスカウンタがMAX値でなければリファレンスカウンタを1増やすステップS858とを繰り返し行う(ステップS856〜S858)。但し、探した灰色のセル内にセルを指すポインタがない場合にはステップS857及びS858の処理は省略する。
【0135】
探したその灰色のセル内のポインタ毎にステップS856により、ステップS857及びS858を繰り返し行った後に、再カウント部140は、その灰色のセルを黒色にし(ステップS859)、ステップS854の処理に戻る。即ち、また別の灰色のセルの探索を開始する。
こうしてステップS854〜S859が繰り返され、灰色のセルが存在しなくなった場合には、再カウント部140は、ステップS855においてnoの分岐に進み、全てのセルについてセル毎にステップS860〜S862を行う(ステップS860)。即ち、再カウント部140は、全てのセルそれぞれについて順次、再カウント結果ゼロ判定部141により、セルのリファレンスカウンタが0であるか否かを判定し(ステップS861)、0である場合に限りセル解放部130がそのセルの有効セルフラグを0にしてセルを解放する(ステップS862)。こうして全てのセルについてステップS860による処理の繰り返しを行った後に、第2変形ガベージコレクション装置はカウントアンドスイープ実行中フラグをOFFにし(ステップS863)、カウントアンドスイープ処理を終了する。
【0136】
なお、カウントアンドスイープ処理は、アプリケーションプログラムの実行と並行して行われる。但し、カウントアンドスイープ処理は、図26に示す単一ステップの実行中においてはアプリケーションプログラムが実行されないようにし、さらにステップS856の実行開始からステップS859の実行終了までの間においてもアプリケーションプログラムが実行されないようにされる必要がある。これは、例えば、マルチタスク制御を行うOSに対して、第2変形ガベージコレクション装置が単一ステップやステップS856〜S859の実行中はCPUを専有することを宣言する等によって実現される。
【0137】
<3-4.考察>
このようにセル毎にリファレンスカウンタを1つだけ用いることとする方式によれば、カウントアンドスイープ処理の実行中においては、ポインタの変更によってどこからも参照されなくなったセルを即座に解放することはできなくなるが、リファレンスカウンタを2つ用いる方式よりもリファレンスカウントのために必要な領域が少ないので、セル長領域に多くのビットを割り当てることや、1ワードのヘッダ部に他の情報を盛り込むこと等が可能になる。
<4.補足>
以上、本発明に係るガベージコレクション装置について、実施の形態1〜3を用いて説明したが、本発明はこのような実施の形態に限られないことは勿論である。即ち、
(1)実施の形態1〜3では、ガベージコレクションをガベージコレクション装置と制御機構との連携により行うこととしたが、これらはソフトウェアで実現されるものであるため、両者を明確に分離する必要性はなく、また、相互の機能分担を変更しても差し支えなく、ガベージコレクション装置に制御機構の一部機能を含めてもよい。
(2)実施の形態1〜3では、リファレンスカウンタが0〜15の数を表せる4ビットで構成され、0から14までの被参照数をカウントでき、15という値でカウンタのオーバフローを表すこととしたが、リファレンスカウンタのサイズはこれに限定されることはない。基本的に、セルの生成からある程度時間が経過したときにおけるセルの被参照数、言い換えればピーク時ではなく定常状態における安定値(図29参照)を、オーバフローすることなくカウント可能な程度であってピーク値はカウント不可能な程度の小さ目なサイズにするのが適切である。なお、安定値はアプリケーションプログラムの構造に依存する面をもつため、実行対象のアプリケーションプログラムを想定して、リファレンスカウンタを適切に定めるとよい。例えば、安定値が20程度であれば、リファレンスカウンタとしては0〜31の数を表せる5ビット程度が適切なものとなる。
(3)実施の形態1〜3で示した各セル中のセル長領域のサイズは、単なる一例にすぎず、例えばセル長領域のサイズを小さくしてその分だけ他の管理用の情報等をセル内に盛り込んでもよい。
(4)実施の形態1〜3では、メモリ不足を検出したときにカウントアンドスイープ処理を実行することとしたが、これに限定されることはなく、単に周期的にカウントアンドスイープ処理を実行することとしてもよい。また、例えばリファレンスカウンタがMAX値になっているセルの数を把握しておき、その数が所定の基準値より多くなった場合にカウントアンドスイープ処理を実行することとしてもよい。
【0138】
また、カウントアンドスイープ処理はアプリケーションプログラムとは別のスレッドとして、アプリケーションプログラムに対して少ない時間配分で動作するように制御する方法の他に、アプリケーションプログラムが実行されないようにして、即ちアプリケーションプログラムの実行を一時的に中断して、カウントアンドスイープ処理を最初から最後まで行うという方法を用いてもよい。
(5)実施の形態1〜3では、セルのデータ領域にデータ型の情報とデータを格納することとしたが、これに限定されることはなく、データ領域の内容は、そのデータ領域に格納されているデータがセルへのポインタであるか否かの判断ができるようなものであれば足りる。例えば、データ領域にはデータ型を含ませず単にデータのみを格納することとして、そのデータの値を、予め定めたセルの所在するアドレス範囲に関するルール等に基づいて解析することにより、そのデータがセルへのポインタか否かを判断するようにしてもよい。
(6)実施の形態1における図8のステップS512、及び実施の形態2における図17のステップS712では、リファレンスカウンタBをリファレンスカウンタAにコピーすることとしたが、必ずしも全てコピー必要はなく、リファレンスカウンタAがMAX値になっている場合にのみそのリファレンスカウンタAを、リファレンスカウンタBの値と同じ値にすることとしてもよい。
(7)実施の形態2では、作業用スタックを、セル内に作業用領域を設けてポインタチェーンを張ることにより実現したが、セルに使用するのとは別のメモリ領域に連続したスタック領域を設けて、セルへのポインタを積んだり取り出したり、つまりPUSHしたりPOPしたりするようにしてもよい。
(8)実施の形態1及び2で示したガベージコレクション装置におけるカウントアンドスイープ処理は、セルが確保されて初めて参照されてから、どこからも参照されなくなるまでの平均的な期間として設計上予測される期間より短い周期で、繰り返し実行を開始されるようにガベージコレクション装置を構築してもよい。このようにすることで、平均的な生存期間を有するセルについては、セルが確保された後に一旦リファレンスカウンタがオーバフローしても、セルが不要になるまでの間に、カウントアンドスイープ処理により再度リファレンスカウンタが有効値に戻ることとなり、カウントアンドスイープ処理が特に効果的に機能するようになる。なお、セルが確保された初めて参照されてから、どこからも参照されなくなるまでの期間については、アプリケーションプログラムの実行中にガベージコレクション装置の内部又は外部の機構により、測定し算定して、この算定した期間に応じてガベージコレクション装置は、カウントアンドスイープ処理の実行開始タイミングを決定することとしてもよい。
(9)実施の形態1〜3で示したルートポインタは、変更されないことを想定しているが、変更可能とするためには、例えば、ルートポインタを保持する領域を1つのセルとして構成し、カウントアンドスイープ開始の際には、このセルの作業フラグを黒色に設定する方式か、又は、実施の形態1等で示したポインタ変更処理中で、変更後のルートポインタが指し示すセルが白色であった場合にはそのセルを灰色に変更するような処理を行う方式を採用するとよい。
(10)実施の形態1〜3で示したガベージコレクション装置及び制御機構の処理手順、(図5〜8、図16、図17、図24〜26に示した手順等)を、コンピュータ又は情報家電機器に実行させるためのコンピュータプログラムを、記録媒体に記録し又は各種通信路等を介して、流通させ頒布することもできる。このような記録媒体には、ICカード、光ディスク、フレキシブルディスク、ROM等がある。流通、頒布されたコンピュータプログラムは、コンピュータ又は情報家電機器にインストール等されることにより利用に供され、そのコンピュータ又は情報家電機器は当該コンピュータプログラムを実行して、実施の形態1〜3で示したようなガベージコレクションを行うことができるようになる。
【0139】
【発明の効果】
<5.実施の形態1に係るガベージコレクション装置の効果の検証>
以下、実施の形態1で示したカウントアンドスイープ処理によるガベージコレクション(以下、「新ガベージコレクション」という。)の効果を検証すべく行ったシミュレーション実験の内容及び結果について簡単に説明する。
【0140】
このシミュレーション実験は、新ガベージコレクションと、上述した従来のカウンタ制限リファレンスカウント方式を一部変形した方式によるガベージコレクション(以下、「旧ガベージコレクション」という。)とを対比して行った。
ここで、旧ガベージコレクションは、カウンタ制限リファレンスカウント方式から、リファレンスカウンタがオーバフローした場合における処理、つまりそのセルを特定領域にコピーする等の処理を省き、オーバフローしたリファレンスカウンタについてはカウントアップ及びカウントダウンの対象から外すこととし、更にマークアンドスイープ方式によるガベージコレクション処理を追加したものである。
【0141】
<5-1.実験内容>
アプリケーションプログラムが一定時間毎に単一サイズのオブジェクト(セル)を生成する状況下で、オブジェクトにより占有されたメモリ量が一定量になる毎にマークアンドスイープ処理或いはカウントアンドスイープ処理によるガベージコレクションを実行し、そのガベージコレクションの実行頻度等を調べたものである。
【0142】
ここで、時間の単位としてステップを用い、アプリケーションプログラムは100ステップ間において10オブジェクトを生成するものとする。また、1つのオブジェクトの生存期間における被参照数は、図30に示すように時間経過とともに変化するものとする。
また、全メモリ量は、オブジェクト300個分のサイズとし、ガベージコレクションの実行タイミングは、オブジェクトにより占有されたメモリ量が全メモリ量の9割に達した時であることとする。
【0143】
また、旧ガベージコレクションにおけるセルのヘッダ部は有効セルフラグ領域(1ビット)、セル長領域(25ビット)、リファレンスカウンタ領域(4ビット)及び作業フラグ(2ビット)の計32ビットで構成され、新ガベージコレクションにおけるセルのヘッダ部は有効セルフラグ領域(1ビット)、セル長領域(21ビット)、リファレンスカウンタA領域(4ビット)、リファレンスカウンタB領域(4ビット)及び作業フラグ(2ビット)の計32ビットで構成されるものとする。
【0144】
<5-2.実験結果>
図31は、シミュレーション実験による未解放のメモリ量(メモリを占有しているオブジェクト数)の時間的変化を示す図である。
同図から明らかなように、新ガベージコレクションの実行頻度は旧ガベージコレクションの実行頻度より小さい。
【0145】
この実験によれば、3万ステップ経過迄におけるガベージコレクション実行回数は、旧ガベージコレクションでは46回であるのに対し、新ガベージコレクションでは11回と少ないものとなった。なお、このときにおけるマークアンドスイープ処理とカウントアンドスイープ処理とのそれぞれの作業量を、各アルゴリズムに由来するメモリアクセス回数に基づき推定して検証すると、新ガベージコレクションは旧ガベージコレクションの約4割の作業量であると算定された。
【0146】
従って、旧ガベージコレクションと比較すれば、新ガベージコレクションは、アプリケーションプログラムの実行性能にあまり悪影響を与えることなく、効率的に不要なセルの回収を行うことを可能にする方式であると言える。
<6.発明の効果>
以上説明したことから明らかなように、本発明に係るガベージコレクション装置は、アプリケーションプログラムの実行によってメモリセルへの参照状態が変更された時に、各メモリセル内に設けた被参照カウンタを用いてリファレンスカウント方式によりガベージコレクションを行うリファレンスカウント手段と、アプリケーションプログラムの実行とは独立して1以上のメモリセルについて、当該メモリセルが現実に参照されている数を調査する独立カウント手段と、前記独立カウント手段による調査結果である数を、対応するメモリセルの被参照カウンタに設定する設定手段とを備えることを特徴とする。
【0147】
これにより、たとえ被参照カウンタがオーバフローするようなことがあったとしても、セルが参照されている数が実際上カウントされ被参照カウンタにあらためて設定されることにより被参照カウンタは正しい値に修正され得るため、その後にはリファレンスカウント方式のガベージコレクションによってポインタの変更に伴いセルがどこからも参照されなくなった時点で即座にそのセルが解放されるようになる。図29で示したようにセルの被参照数がピーク値になった後、時間経過とともに安定値に落ち着く場合等、セルの被参照数が時間経過につれて大きく変動するような場合においては、被参照カウンタを安定値は表せるがピーク値は表せない程度の小さなビット数で構成することとしても、本発明によればリファレンスカウント方式によるガベージコレクションが可能になる。
【0148】
ここで、前記各メモリセル内に設けられた被参照カウンタは、当該メモリセルの被参照数を表すための、1ワード未満の所定ビット数で構成され、前記リファレンスカウント手段は、アプリケーションプログラムの実行によってメモリセルへの参照状態が変更された時に、当該メモリセルの被参照カウンタが前記所定ビット数で表せる最大値より小さい値であれば、当該被参照カウンタを当該変更に応じて被参照数を表すように増加又は減少させて、被参照カウンタの値が0になれば当該メモリセルを解放し、前記独立カウント手段は、少なくとも被参照カウンタが前記最大値である各メモリセルについて前記調査を行うこととしてもよい。
【0149】
これにより、リファレンスカウント方式において、セルの被参照カウンタがオーバフローした場合つまり被参照カウンタが既に最大値になっている場合にはカウンタの増減を行わないようにしておくためポインタ変更時にどこからも参照されなくなったセルの解放は行われないが、独立カウント手段及び設定手段により被参照カウンタが現実にセルの被参照数を示すようにあらためて設定され得るため、設定された後にはセルはポインタ変更時にどこからも参照されなくなっていれば即座に解放されるようになる。なお、セルの解放により、セルに割り当てていたメモリ領域を新たにセルの生成のために用いることが可能になる。
【0150】
また、前記メモリセル内には、独立カウント手段による調査に用いるための前記所定ビット数の調査用カウンタを設けてあり、前記独立カウント手段は、調査対象のメモリセルの調査用カウンタを0にする初期設定処理の後に、所定のルートポインタから直接又はポインタチェーンを介して指されている各メモリセルについての調査用カウンタを、前記所定ビット数で表せる最大値を超えない範囲で、現実に指されている数を示すように増加するカウント処理を行うことにより前記調査を行い、前記設定手段は、メモリセル毎に、当該メモリセルの調査用カウンタの値を被参照カウンタに設定することとしてもよい。
【0151】
これにより、現実にセルが参照されている数をカウントする処理を簡単に実現できる。ここで、被参照カウンタは実施の形態において示したリファレンスカウンタAに相当し、調査用カウンタはリファレンスカウンタBに相当する。
また、前記メモリセル内には、独立カウント手段による調査状態が第1段階、第2段階及び第3段階のいずれであるかを示すための作業フラグを設けてあり、前記独立カウント手段は、全てのメモリセルの作業フラグに第1段階を示す値を設定し、続いて前記ルートポインタに指されているメモリセルの作業フラグに第2段階を示す値を設定し、第2段階を示す作業フラグを含むメモリセルがある限り当該メモリセルに順次着目して以下に示すカウントアップ処理を実行することにより前記カウント処理を行い、前記カウントアップ処理は、着目したメモリセルの作業フラグに第3段階を示す値を設定し、当該メモリセルが他の1以上のメモリセルへのポインタを含むときに当該他の全てのメモリセルについての前記調査用カウンタを前記最大値を超えない限りにおいて1増加するとともに、当該他のメモリセルのうち作業フラグが第1段階を示すものについては作業フラグに第2段階を示す値を設定する処理であり、前記リファレンスカウント手段は、アプリケーションプログラムの実行により、第3段階を示す作業フラグを含むメモリセルに含まれるポインタが変更された時に、変更前のポインタが指していたメモリセルの調査用カウンタを1減少するとともに、変更後のポインタが指すメモリセルの調査用カウンタを前記最大値を超えない限りにおいて1増加し、前記独立カウント手段は、前記調査をアプリケーションプログラムの実行と並行して行い、前記カウントアップ処理の実行中はアプリケーションプログラムの実行を抑止することとしてもよい。
【0152】
これにより、セルが現実に参照されている数の調査を開始してから終了するまでの間に、アプリケーションプログラムを動作させることができるようになる。また、前記メモリセル内には、独立カウント手段による調査状態が第1段階及び第2段階のいずれであるかを示すための作業フラグを設けてあり、前記独立カウント手段は、メモリセルのアドレスをスタックに格納するアルゴリズムを用いて、全てのメモリセルの作業フラグに第1段階を示す値を設定し、続いて前記ルートポインタに指されているメモリセルのアドレスをスタックに積み、スタックにメモリセルのアドレスが積まれている限り以下に示すカウントアップ処理を実行することにより前記カウント処理を行い、前記カウントアップ処理は、スタックから取り出したアドレスの示すメモリセルの作業フラグに第2段階を示す値を設定し、当該メモリセルが他の1以上のメモリセルへのポインタを含むときに当該他の全てのメモリセルについての前記調査用カウンタを、前記最大値を超えない限り1増加するとともに、当該他のメモリセルのうち作業フラグが第1段階を示すものについてはそのアドレスをスタックに積む処理であり、前記リファレンスカウント手段は、アプリケーションプログラムの実行により、第2段階を示す作業フラグを含むメモリセルに含まれるポインタが変更された時に、変更前のポインタが指していたメモリセルの調査用カウンタを1減少するとともに、変更後のポインタが指すメモリセルの調査用カウンタを、前記最大値を超えない限りにおいて1増加し、前記独立カウント手段は、前記調査をアプリケーションプログラムの実行と並行して行い、前記カウントアップ処理の実行中はアプリケーションプログラムの実行を抑止することとしてもよい。
【0153】
これにより、セルが現実に参照されている数の調査を高速に行うことが可能になり、この調査とアプリケーションプログラムの実行を並行して行うことができるようになる。
また、前記ガベージコレクション装置はさらに、前記独立カウント手段による調査結果である数が0となっているメモリセルを解放する解放手段を備え、前記設定手段は、前記調査結果である数が1以上である場合に限り、前記設定を行うこととしてもよい。
【0154】
これにより、セルが現実に参照されている数の調査を行った結果として、被参照数が0であったセルを解放することが可能になる。セルへのポインタのチェーンがループしている場合にはセルをリファレンスカウント方式のみでは解放できないが、このガベージコレクション装置によれば、ルートポインタから辿ることのできない不要なセルを解放することが可能になる。
【0155】
また、前記独立カウント手段は、アプリケーションプログラムの実行により確保されて参照される各メモリセルが、参照されてから全く参照されなくなるまでの平均的な時間と予測される時間より短い時間毎に、前記調査を行い、前記設定手段は、前記独立カウント手段により調査が行われる度に前記設定を行うこととしてもよい。
【0156】
これにより、半数以上のセルについて、確保された後に一旦は被参照カウンタのオーバフローによりリファレンスカウント方式の活用が不可能になってもそのセルが不要になる迄の期間内に、リファレンスカウント方式によるガベージコレクションが活用できるようになり、そのセルが不要になると即座にセルの解放が行えるようになるので、ガベージコレクション装置の実用性が高まる。
【0157】
また、本発明に係るガベージコレクション装置は、各メモリセル内に当該メモリセルの被参照数を表すための、1ワード未満の所定ビット数の被参照カウンタを設けておき、アプリケーションプログラムの実行によってメモリセルへの参照状態が変更された時に、当該メモリセルの被参照カウンタが前記所定ビット数で表せる最大値より小さい値であれば、当該被参照カウンタを当該変更に応じて被参照数を表すように増加又は減少させて、被参照カウンタの値が0になれば当該メモリセルを解放するリファレンスカウント方式により、ガベージコレクションを行うリファレンスカウント手段と、アプリケーションプログラムの実行とは独立して各メモリセルについて、当該メモリセルが現実に参照されている数を調査する独立カウント手段であって、調査対象のメモリセルの被参照カウンタを0にする初期設定処理の後に、所定のルートポインタから直接又はポインタチェーンを介して指されている各メモリセルについての被参照カウンタを、前記所定ビット数で表せる最大値を超えない範囲で、現実に指されている数を示すように増加するカウント処理を行う独立カウント手段とを備え、前記リファレンスカウント手段は、前記独立カウント手段により前記調査が行われている最中においては前記メモリセルの解放を行わないようにすることを特徴とする。
【0158】
これにより、リファレンスカウント方式において、セルの被参照カウンタがオーバフローした場合つまり被参照カウンタが既に最大値になっている場合にはカウンタの増減を行わないようにしておくためポインタ変更時にどこからも参照されなくなったセルの解放は行われないが、独立カウント手段により被参照カウンタが現実にセルの被参照数を示すようにあらためて設定され得るため、設定された後にはセルはポインタ変更時にどこからも参照されなくなっていれば即座に解放されるようになる。また、独立カウント手段による現実のセルの被参照数のカウントに被参照カウンタを用いるため、このカウント専用のカウンタを設ける必要がなくなる。
【0159】
また、前記所定ビット数は、当該所定ビットで表せる最大値がメモリセルの被参照数のピーク値と予測される値より小さくなるように定めたビット数であることとしてもよい。
これにより、リファレンスカウント用のカウンタの領域を小さなものにすることができるため、セル内にワード単位でセルの管理用の情報を設けることとした場合において、そのカウンタの領域を小さくした分だけ、例えばセル長等のセルの管理用の情報を従来より大きなサイズでセル内に持たせることが可能になり、これにより例えば、アプリケーションプログラムに対して確保を許容するセルサイズの拡大等を図ることが可能になる。
【図面の簡単な説明】
【図1】本発明の実施の形態1に係るガベージコレクション装置100の構成図である。
【図2】セルのデータ構造を示す図である。
【図3】メモリ300の一部の領域にセルが割り当てられている様子を示す図である。
【図4】ある時点におけるセルの内容とセル間の関係を例示した図である。
【図5】セル確保部201が行うセル生成処理を示すフローチャートである。
【図6】ガベージコレクション装置100の行うポインタ変更対応処理を示すフローチャートである。
【図7】ガベージコレクション装置100の行うセル参照解除処理を示すフローチャートである。
【図8】ガベージコレクション装置100の行うカウントアンドスイープ処理を示すフローチャートである。
【図9】カウントアンドスイープ処理におけるステップS502の終了直後のセルの内容とセル間の関係を例示した図である。
【図10】カウントアンドスイープ処理における1回目のステップS508の実行の終了直後のセルの内容とセル間の関係を例示した図である。
【図11】カウントアンドスイープ処理における2回目のステップS508の実行の終了直後のセルの内容とセル間の関係を例示した図である。
【図12】カウントアンドスイープ処理においてS504のnoの分岐に進んだ直後のセルの内容とセル間の関係を例示した図である。
【図13】カウントアンドスイープ処理の終了時点のセルの内容とセル間の関係を例示した図である。
【図14】変形ガベージコレクション装置が取り扱うセルのデータ構造を示す図である。
【図15】実施の形態2におけるセルの作業用先頭セルアドレス30からのポインタチェーンを例示する図である。
【図16】変形制御機構におけるセル確保部201が行うセル生成処理を示すフローチャートである。
【図17】変形ガベージコレクション装置の行うカウントアンドスイープ処理を示すフローチャートである。
【図18】カウントアンドスイープ処理におけるステップS701の終了直後のセルの内容とセル間の関係を例示した図である。
【図19】カウントアンドスイープ処理におけるステップS702の実行の終了直後のセルの内容とセル間の関係を例示した図である。
【図20】カウントアンドスイープ処理におけるステップS706の繰り返し処理が終わった直後のセルの内容とセル間の関係を例示した図である。
【図21】カウントアンドスイープ処理において再びステップS706が終わった直後のセルの内容とセル間の関係を例示した図である。
【図22】カウントアンドスイープ処理においてステップS703のnoの分岐に進んだ直後のセルの内容とセル間の関係を例示した図である。
【図23】第2変形ガベージコレクション装置が取り扱うセルのデータ構造を示す図である。
【図24】第2変形ガベージコレクション装置の行うポインタ変更対応処理を示すフローチャートである。
【図25】第2変形ガベージコレクション装置の行うセル参照解除処理を示すフローチャートである。
【図26】第2変形ガベージコレクション装置の行うカウントアンドスイープ処理を示すフローチャートである。
【図27】従来のマークアンドスイープ方式を説明するための図である。
【図28】従来のリファレンスカウント方式を説明するための図である。
【図29】Javaにおける典型的なセルへの参照数の時間的変化を示すグラフである。
【図30】シミュレーション実験における前提となるセルへの参照数の時間的変化を示すグラフである。
【図31】シミュレーション実験による未解放のメモリ量(メモリを占有しているオブジェクト数)の時間的変化を示す図である。
【符号の説明】
100 ガベージコレクション装置
110 カウンタ変更部
111 カウンタ最大値判定部
112 カウンタ増加部
113 カウンタ減少部
120 カウンタゼロ判定部
130 セル解放部
140 再カウント部
141 再カウント結果ゼロ判定部
142 カウンタ再設定部
200 制御機構
201 セル確保部
202 ポインタ設定部
210 カウントアンドスイープ指示部
300 メモリ
1100、2100、3100 セル
1101、2101、3101 有効セルフラグ領域
1102、2102、3102 セル長領域
1103、2103 リファレンスカウンタA領域
1104、2104 リファレンスカウンタB領域
1105、2105、3104 作業フラグ領域
1106、2107、3105 データ領域
2106 作業用領域
3103 リファレンスカウンタ領域

Claims (2)

  1. アプリケーションプログラムの実行によってメモリセルへの参照状態が変更された時に、各メモリセル内に設けた被参照カウンタを用いてリファレンスカウント方式によりガベージコレクションを行うリファレンスカウント手段と、
    アプリケーションプログラムの実行とは独立して1以上のメモリセルについて、当該メモリセルが現実に参照されている数を調査する独立カウント手段と、
    前記独立カウント手段による調査結果である数を、対応するメモリセルの被参照カウンタに設定する設定手段とを備え
    前記各メモリセル内に設けられた被参照カウンタは、当該メモリセルの被参照数を表すための、1ワード未満の所定ビット数で構成され、
    前記リファレンスカウント手段は、アプリケーションプログラムの実行によってメモリセルへの参照状態が変更された時に、当該メモリセルの被参照カウンタが前記所定ビット数で表せる最大値より小さい値であれば、当該被参照カウンタを当該変更に応じて被参照数を表すように増加又は減少させて、被参照カウンタの値が0になれば当該メモリセルを解放し、
    前記独立カウント手段は、少なくとも被参照カウンタが前記最大値である各メモリセルについて前記調査を行い、
    前記メモリセル内には、独立カウント手段による調査に用いるための前記所定ビット数の調査用カウンタを設けてあり、
    前記独立カウント手段は、
    調査対象のメモリセルの調査用カウンタを0にする初期設定処理の後に、
    所定のルートポインタから直接又はポインタチェーンを介して指されている各メモリセルについての調査用カウンタを、前記所定ビット数で表せる最大値を超えない範囲で、現実に指されている数を示すように増加するカウント処理を行うことにより前記調査を行い、
    前記設定手段は、メモリセル毎に、当該メモリセルの調査用カウンタの値を被参照カウンタに設定し、
    前記メモリセル内には、独立カウント手段による調査状態が第1段階、第2段階及び第3段階のいずれであるかを示すための作業フラグを設けてあり、
    前記独立カウント手段は、
    全てのメモリセルの作業フラグに第1段階を示す値を設定し、続いて前記ルートポインタに指されているメモリセルの作業フラグに第2段階を示す値を設定し、
    第2段階を示す作業フラグを含むメモリセルがある限り当該メモリセルに順次着目して以下に示すカウントアップ処理を実行する
    ことにより前記カウント処理を行い、
    前記カウントアップ処理は、着目したメモリセルの作業フラグに第3段階を示す値を設定し、当該メモリセルが他の1以上のメモリセルへのポインタを含むときに当該他の全てのメモリセルについての前記調査用カウンタを前記最大値を超えない限りにおいて1増加するとともに、当該他のメモリセルのうち作業フラグが第1段階を示すものについては作業フラグに第2段階を示す値を設定する処理であり、
    前記リファレンスカウント手段は、アプリケーションプログラムの実行により、第3段階を示す作業フラグを含むメモリセルに含まれるポインタが変更された時に、変更前のポインタが指していたメモリセルの調査用カウンタを1減少するとともに、変更後のポインタが指すメモリセルの調査用カウンタを前記最大値を超えない限りにおいて1増加し、
    前記独立カウント手段は、前記調査をアプリケーションプログラムの実行と並行して行い、前記カウントアップ処理の実行中はアプリケーションプログラムの実行を抑止する
    ことを特徴とするガベージコレクション装置。
  2. アプリケーションプログラムの実行によってメモリセルへの参照状態が変更された時に、各メモリセル内に設けた被参照カウンタを用いてリファレンスカウント方式によりガベージコレクションを行うリファレンスカウント手段と、
    アプリケーションプログラムの実行とは独立して1以上のメモリセルについて、当該メモリセルが現実に参照されている数を調査する独立カウント手段と、
    前記独立カウント手段による調査結果である数を、対応するメモリセルの被参照カウンタに設定する設定手段とを備え
    前記各メモリセル内に設けられた被参照カウンタは、当該メモリセルの被参照数を表すための、1ワード未満の所定ビット数で構成され、
    前記リファレンスカウント手段は、アプリケーションプログラムの実行によってメモリセルへの参照状態が変更された時に、当該メモリセルの被参照カウンタが前記所定ビット数で表せる最大値より小さい値であれば、当該被参照カウンタを当該変更に応じて被参照数を表すように増加又は減少させて、被参照カウンタの値が0になれば当該メモリセルを解放し、
    前記独立カウント手段は、少なくとも被参照カウンタが前記最大値である各メモリセルについて前記調査を行い、
    前記メモリセル内には、独立カウント手段による調査に用いるための前記所定ビット数の調査用カウンタを設けてあり、
    前記独立カウント手段は、
    調査対象のメモリセルの調査用カウンタを0にする初期設定処理の後に、
    所定のルートポインタから直接又はポインタチェーンを介して指されている各メモリセルについての調査用カウンタを、前記所定ビット数で表せる最大値を超えない範囲で、現実に指されている数を示すように増加するカウント処理を行うことにより前記調査を行い、
    前記設定手段は、メモリセル毎に、当該メモリセルの調査用カウンタの値を被参照カウンタに設定し、
    前記メモリセル内には、独立カウント手段による調査状態が第1段階及び第2段階のいずれであるかを示すための作業フラグを設けてあり、
    前記独立カウント手段は、
    メモリセルのアドレスをスタックに格納するアルゴリズムを用いて、
    全てのメモリセルの作業フラグに第1段階を示す値を設定し、続いて前記ルートポインタに指されているメモリセルのアドレスをスタックに積み、
    スタックにメモリセルのアドレスが積まれている限り以下に示すカウントアップ処理を実行する
    ことにより前記カウント処理を行い、
    前記カウントアップ処理は、スタックから取り出したアドレスの示すメモリセルの作業フラグに第2段階を示す値を設定し、当該メモリセルが他の1以上のメモリセルへのポインタを含むときに当該他の全てのメモリセルについての前記調査用カウンタを、前記最大値を超えない限り1増加するとともに、当該他のメモリセルのうち作業フラグが第1段階を示すものについてはそのアドレスをスタックに積む処理であり、
    前記リファレンスカウント手段は、アプリケーションプログラムの実行により、第2段階を示す作業フラグを含むメモリセルに含まれるポインタが変更された時に、変更前のポインタが指していたメモリセルの調査用カウンタを1減少するとともに、変更後のポインタが指すメモリセルの調査用カウンタを、前記最大値を超えない限りにおいて1増加し、
    前記独立カウント手段は、前記調査をアプリケーションプログラムの実行と並行して行い、前記カウントアップ処理の実行中はアプリケーションプログラムの実行を抑止する
    ことを特徴とするガベージコレクション装置。
JP2002154671A 2001-05-29 2002-05-28 ガベージコレクション装置及びガベージコレクション方法 Expired - Fee Related JP4041347B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002154671A JP4041347B2 (ja) 2001-05-29 2002-05-28 ガベージコレクション装置及びガベージコレクション方法

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2001160519 2001-05-29
JP2001-160519 2001-05-29
JP2002154671A JP4041347B2 (ja) 2001-05-29 2002-05-28 ガベージコレクション装置及びガベージコレクション方法

Publications (2)

Publication Number Publication Date
JP2003050740A JP2003050740A (ja) 2003-02-21
JP4041347B2 true JP4041347B2 (ja) 2008-01-30

Family

ID=26615859

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002154671A Expired - Fee Related JP4041347B2 (ja) 2001-05-29 2002-05-28 ガベージコレクション装置及びガベージコレクション方法

Country Status (1)

Country Link
JP (1) JP4041347B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200092745A (ko) * 2019-01-25 2020-08-04 서울대학교산학협력단 메모리 관리 방법 및 그 장치

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7263532B2 (en) * 2003-09-23 2007-08-28 Microsoft Corporation Region-based memory management for object-oriented programs
US9053017B2 (en) 2011-09-09 2015-06-09 Microsoft Technology Licensing, Llc Managing object lifetime in a cyclic graph
GB2502076A (en) 2012-05-15 2013-11-20 Ibm Managing memory in a computer system
JP2014063285A (ja) 2012-09-20 2014-04-10 International Business Maschines Corporation ガベージ・コレクションのためのコード変換方法、プログラム及びシステム
WO2020037686A1 (zh) * 2018-08-24 2020-02-27 袁振南 基于数据结构的垃圾回收方法、计算机及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200092745A (ko) * 2019-01-25 2020-08-04 서울대학교산학협력단 메모리 관리 방법 및 그 장치
KR102233476B1 (ko) * 2019-01-25 2021-03-29 서울대학교산학협력단 메모리 관리 방법 및 그 장치

Also Published As

Publication number Publication date
JP2003050740A (ja) 2003-02-21

Similar Documents

Publication Publication Date Title
US8255658B2 (en) Memory management method and computer using the same
JP3027845B2 (ja) プログラム制御装置および方法
US6571260B1 (en) Memory reclamation method
US6314436B1 (en) Space-limited marking structure for tracing garbage collectors
EP2175370B1 (en) System and method of using pooled thread-local character arrays
JP5064134B2 (ja) メモリ管理方法およびその方法を用いるコンピュータ
JP4812997B2 (ja) メモリ管理によって参照の局所性を改善するための方法および装置
US9740716B2 (en) System and method for dynamically selecting a garbage collection algorithm based on the contents of heap regions
JP3908909B2 (ja) 実行時環境でのメモリ管理
US8397045B2 (en) Memory management device, memory management method, and memory management program
US20070180002A1 (en) Method and apparatus for reducing object pre-tenuring overhead in a generational garbage collector
US20050235120A1 (en) System and method for performing garbage collection on a large heap
JP4041347B2 (ja) ガベージコレクション装置及びガベージコレクション方法
US9734620B2 (en) Apparatus and method for graphics state management
US8898404B2 (en) Memory management method and computer
JP4398619B2 (ja) Icカードとこのicカードにおける揮発性メモリの管理方法
US6735761B1 (en) Compile method frame detection method and device code discarding method and computer
JP2006172495A (ja) プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
US7155467B1 (en) Adaptive type-partitioned garbage collection
JP3826626B2 (ja) プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
CN106354624B (zh) 一种自动化测试方法和装置
JP4345748B2 (ja) メモリ割当装置、メモリ割当方法、およびプログラム記録媒体
US6636866B1 (en) System and method for object representation in an object-oriented programming language
US11789863B2 (en) On-the-fly remembered set data structure adaptation
US8024378B2 (en) System and method to reduce the promotion rate in a generational garbage collector in a virtual machine environment

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050311

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 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070912

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20071109

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

Free format text: PAYMENT UNTIL: 20101116

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