JPH10301836A - 分岐データ構造を使用した厳密なガーベッジ収集を最適化する方法および装置 - Google Patents

分岐データ構造を使用した厳密なガーベッジ収集を最適化する方法および装置

Info

Publication number
JPH10301836A
JPH10301836A JP10111782A JP11178298A JPH10301836A JP H10301836 A JPH10301836 A JP H10301836A JP 10111782 A JP10111782 A JP 10111782A JP 11178298 A JP11178298 A JP 11178298A JP H10301836 A JPH10301836 A JP H10301836A
Authority
JP
Japan
Prior art keywords
pointer
data structure
value
header
node
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP10111782A
Other languages
English (en)
Other versions
JPH10301836A5 (ja
Inventor
Mario I Wolczko
マリオ・アイ・ウォルツェコ
David M Ungar
デイヴィッド・エム・アンガー
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JPH10301836A publication Critical patent/JPH10301836A/ja
Publication of JPH10301836A5 publication Critical patent/JPH10301836A5/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • G06F12/0276Generational garbage collection
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/289Object oriented databases
    • YGENERAL 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
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99956File allocation
    • Y10S707/99957Garbage collection

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Memory System (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

(57)【要約】 【課題】 本発明は、ガーベジ収集プログラム用の向上
した機能を与える経済的な装置、方法、システム、コン
ピュータ・プログラムを記録した記憶媒体を提供するこ
とを目的とする。 【解決手段】 データ構造は、オブジェクト指向プログ
ラミング環境内でインスタンス化オブジェクトとして使
用できる。データ構造は、データ構造ヘッダを使用し
て、データ構造のポインタ値を含む部分をデータ構造の
非ポインタ値を含む部分から分離する。データ構造ヘッ
ダの第1のワードの内容は、任意のポインタ値と区別で
きる。したがって、ガーベッジ収集手順は、データ構造
内のポインタ値をより迅速に位置指定することができ
る。このデータ構造編成をインスタンス化オブジェクト
に適用した場合の他の利点は、(オブジェクト・ヘッダ
構造に対する)インスタンス変数の位置が元のクラスの
サブクラスに基づくものを含むすべてのインスタンス化
オブジェクトについて一定に保たれることである。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンピュータ・メ
モリ割振りおよび割振り解除の分野に関する。詳細に
は、本発明は、メモリ記憶域が実行中のコンピュータ・
プログラムによってもはや使用されなくなったときに記
憶域を自動的に再利用する新規かつ有用な方法、装置、
システム、コンピュータ・プログラムを記録した記憶媒
体である。
【0002】
【従来の技術】構造化プログラミング方法およびオブジ
ェクト指向プログラミング方法ではメモリ割振り技法お
よびメモリ割振り解除技法が非常に重要になっている。
ヒープから割り振られたメモリは情報を記憶するために
使用される。多くの場合、この情報はオブジェクト指向
パラダイム内のインスタンス化オブジェクトである。後
述の技法は、データを含むヒープ内のノードと、インス
タンス化オブジェクトであるヒープ内のノードとの両方
に適用される。
【0003】ガーベジ収集(garbage collection)の序
論 コンピュータ・メモリは資源である。プログラムは、メ
モリに記憶されている命令に基づいて(実行すべき)動
作をコンピュータに実行させる。実行プログラムもメモ
リを使用して情報を記憶する。この情報はしばしば、メ
モリ常駐データ構造に編成される。通常、これらのデー
タ構造は、ポインタによってある構造から別の構造に互
いにリンクされ、静的記憶域およびスタック変数記憶域
内のポインタを介して参照される。メモリ資源は、情報
およびプログラム・コードに関する記憶域要件を満たす
ように管理される。
【0004】実行プログラムはしばしば、ある限られた
時間にわたって継続するためにメモリを必要とする。た
とえば、プログラムは、情報を保持すべきメモリを割り
振り、割り振られたメモリ内に情報を記憶し、記憶され
た情報を処理して結果を生成し、その後は記憶された情
報を必要としなくなる。プログラムが記憶された情報を
もはや必要としなくなった後、割り振られたメモリは後
で再使用するために解放される。
【0005】現代のプログラミング言語は、メモリの静
的割振り、スタック割振り、ヒープ割振りを実行でき
る。静的割振りでは、コンパイル時またはリンク時、あ
るいはその両方の時に変数を記憶位置に結合する。スタ
ック割振りでは、プログラム・ブロックが実行の準備を
するときにアクティブ・フレームをコンピュータ・スタ
ック上にプッシュする。このアクティブ・フレームは、
プログラム・ブロックの実行範囲内の変数用の記憶域を
含む。プログラム・ブロックが完了した後、アクティブ
・フレームはスタックからポップされる。したがって、
スタックは情報を後入れ先出し(LIFO)法に従って
記憶する。アクティブ・フレームに記憶されている変数
は、ブロックのあるアクティブ状態から次のアクティブ
状態まで保存されない。ヒープ割振りでは、変数用のメ
モリの任意の順序での割振りおよび割振り解除が可能で
あり、これらの変数は、それらを作成した手続き(また
はブロック)よりも長い間存在する。メモリは、割振り
解除された後、他の用途のために再割振りに使用され
る。
【0006】「ノード」とはヒープから割り振られたメ
モリのことである。ノードはポインタを介してアクセス
される。直接(または単純)ポインタはヒープ内のノー
ドのアドレスである。間接ポインタ(「ハンドル」とも
呼ばれる)は、ノードのアドレスを含むメモリ内のアド
レスを指し示す。より複雑なポインタが存在する。間接
ポインタによれば、ハンドルの実現値を更新する必要な
しにノードをヒープ内で移動することができる。間接ポ
インタに関する1つの問題は、ノードに到達するのに余
分なメモリ・アクセスを必要とすることである。この余
分なメモリ・アクセスはプログラムの実行速度を低下さ
せる。
【0007】「ルート・セット」とは、参照されるノー
ドがヒープの状態にかかわらずに必ず保持される1組の
ノード・リファレンスのことである。ノードは、ルート
・セット内にある場合アクセス可能であり、あるいはア
クセス可能なノードによって参照される。「リファレン
ス・セット」とは、ノードに含まれる1組のノード・リ
ファレンスの組である。あるノードがルート・セットか
らアクセス不能になり、再利用されなくなると、メモリ
・リークが生じる。メモリ・リークはプログラムが使用
できるヒープ・メモリの量を少なくする。ルート・セッ
トからアクセス不能になり、かつ再利用できるノードは
ガーベジ・ノードである。
【0008】ヒープ・メモリは、ノードの割振りおよび
割振り解除を手動でプログラムすることによって使用で
きるようになる。しかし、プログラマは、新しいノード
がいつ必要になるかは分かるが、あるノードにいつアク
セスできなくなるかを知ることが困難であることが多
い。したがって、プログラマがノードを明示的に割振り
解除するときにいくつかの問題が生じる。これらの問題
の1つは、メモリ・リークをデバッグすることが非常に
困難であることである。多くの場合、プログラマがメモ
リを明示的に割振り解除するとき、プログラム中のアプ
リケーションの設計は不明瞭になる。さらに、プログラ
ムのある部分がメモリ割振り解除の準備ができたとき、
プログラムの他のどの部分もそのメモリを使用してはな
らない。したがって、オブジェクト指向プログラミング
(OOP)言語では、複数のモジュールがメモリ管理プ
ロセスにおいて密に協働しなければならない。このた
め、OOPプログラミング法と異なり、独立であると考
えられるモジュールどうしが密に結合される。
【0009】これらの難点は、プログラマがメモリを明
示的に割振り解除する必要がない場合には最小限に抑え
られる。自動ガーベジ収集法では、参照されたノードに
対してメモりを走査し、ガーベジ・ノードを回復する。
ただし、コストがかかる。ガーベッジ・ノードを見つ
け、割振り解除するプロセスはプロセッサ時間を要す
る。プログラムの主要な機能は、タイムリーな操作また
は連続的なユーザとの対話を必要とするので、実行プロ
グラムに対するガーベジ収集プロセスの影響のバランス
をとることが重要である。リアルタイム・システム(指
定されたクロック時間内に応答を与えなければならない
システム)は、長いプロセッサ時間をガーベジ収集のた
めに使用することができないことが多い。リアルタイム
・システムでは、ガーベジ収集アルゴリズムに割り込み
が可能でなければならない。
【0010】ガーベジ収集を使用したシステムでは、メ
モリが必要なときにヒープからノードが割り振られる。
このようなノードは、もはや必要とされなくなったとき
でも最初のうちは再利用されない。その代わり、メモリ
割振りの試みが失敗すると、あるいはある条件(たとえ
ば、クロックの満了)に応答して、ガーベジ収集プロセ
スが自動的に呼び出され、未使用のメモリが後で再使用
できるように回復される。
【0011】ある種のガーベジ収集法ではノードがコピ
ーされる(すなわち、このような方法では、有効である
と思われるノードがヒープ内のある位置から他の位置に
再配置される)。これを行うときは、ノードの最初の位
置を指し示す既存のポインタを使用して再配置されたノ
ードにアクセスできるようにする機構が必要である。こ
のような機構には、(特に)ノードの最初の位置を指し
示す既存のポインタを更新することと、ノードの新しい
位置を指し示す間接ポインタを与えることとが含まれ
る。
【0012】ガーベジ収集における従来技術は、従来技
術を示すものとして引用によって本明細書に組み込まれ
た「Garbage Collection, Alg
orithms for Automatic Dyn
amic Memory Management」(R
ichard Jones and RafaelLi
ns、John Wiley & Sons、ISBN
0−471−94148−4、copyright19
96)で十分に論じられている。
【0013】ガーベジ収集アルゴリズムのタイプ ガーベジ収集アルゴリズムは「厳密」または「控えめ
(conservative)」として分類することができる。この
ような厳密アルゴリズムは、ポインタを含むことが分か
っている変数を追跡することによって動作する。このよ
うなアルゴリズムはしばしば、ポインタとデータ値とを
区別するのを助けるコンパイラ修正によって助けられ
る。多くの場合、データ値とポインタ値はそれらを区別
するためにタグ付けされる。控えめアルゴリズムはコン
パイラから助けを受けず、またデータ値もタグ付けされ
ない。したがって、ガーベジ収集アルゴリズムはデータ
値とポインタ値を区別することができず、そのためポイ
ンタとみなされるもはすべて、ポインタとして扱われ
る。さらに、控えめアルゴリズムでは、ヒープやスタッ
クの構造が分からず、ポインタがタグ付けされているこ
とも予期されない。そのため、控えめアルゴリズムは、
誤って識別されたポインタを処理するステップを含まな
ければならない。多くのガーベジ収集アルゴリズムは、
厳密技法と控えめ技法を混合したものである。
【0014】世代別ガーベジ収集 世代別ガーベジ収集技法では、ヒープから割り振られた
多数のノードが短期間しか使用されないという考え方が
使用される。このようなノードは特定の短期目的に割り
振られ、その目的に使用され、次いで後で再使用できる
ように割振り解除することができる。したがって、より
新しいノードに集中するガーベジ収集アルゴリズムは、
ガーベジ収集プロセス中に調べる必要があるノードの数
が少ないので、すべてのノードを同様に処理するガーベ
ジ収集アルゴリズムよりも効率的である。
【0015】世代別ガーベジ収集アルゴリズムは、ノー
ドを、その存在期間に応じてヒープ内の2つ以上の領域
に分離する。各領域は世代である。ノードはまず、十分
に長い時間にわたって存在している場合(「十分に長
い」とは多くの場合、次のスカビンジ動作までであ
る)、まず、最も新しい世代内の作成領域から割り振ら
れ、より古い世代にコピーされる。このようなガーベジ
収集アルゴリズムは、大部分のガーベジが見つかる最も
新しい世代領域の記憶域の再利用に集中する。一般に、
最も新しい世代内の有効ノードの数は他の世代領域内の
有効ノードの数よりもずっと少なく、したがって、最も
新しい世代内のノードをスカビンジするために必要な時
間は、他の世代領域をスカビンジするために必要な時間
よりも短い。作成領域のスカビンジ動作をマイナー収集
と呼ぶ。古い世代領域に対するガーベジ収集動作をメジ
ャー収集と呼ぶ。マイナー収集プロセスは、オーバヘッ
ドが低く、効率が高いので、メジャー収集動作よりも頻
繁に行われる。
【0016】しかし、世代別ガーベジ収集アルゴリズム
は世代間ポインタを記録する必要がある。このような世
代間ポインタは、(1)ノード内にポインタを記憶する
ことにより、あるいは(2)ポインタを含むノードが古
い世代領域にコピーされたときに作成される。コピー・
アルゴリズムによって作成されたポインタはそのコピー
・アルゴリズムによって認識することができる。ノード
内でポインタを割り当てることによって作成されたポイ
ンタを記録するためにライト・バリアが使用される。あ
る古い世代が収集されるときにすべてのより新しい世代
が収集される場合、ライト・バリアは古い世代領域のポ
インタを新しい世代領域に記録するだけでよい。
【0017】マイナー収集動作は、メジャー収集動作よ
りも高速であっても、時間がかかり過ぎてリアルタイム
では不十分であることが多い。したがって、リアルタイ
ム要件を満たすにはマイナー収集プロセスに割り込まな
ければならない。マイナー収集に割り込む場合の1つの
難点は、ノード間ポインタが中間状態のままになり、い
くつかのノード間ポインタが、プロモートされたノード
を指し示し、他のノード間ポインタが最初のノードを指
し示すことである。すなわち、あるノードがコピーされ
た後にマイナー収集動作に割り込むと、そのノードの前
の位置に対するすべての参照が、ノードの新しい位置に
更新されることが多い。
【0018】ノードがコピーされた後、コピーされたノ
ードに対する将来の参照が最終的に成功するように、コ
ピーされたノードを指し示すポインタを更新または追跡
しなければならない。さらに、コピーされたノードに含
まれる新しい世代内のノードを指し示すポインタにアク
セスし、参照セットを判定しなければならない。
【0019】図1は、一般参照符号100で示されたヒ
ープ領域を示す。ヒープ領域100は、世代別ガーベジ
収集領域101を含む。世代別ガーベジ収集領域101
は、新しい世代103と古い世代領域105とを含む。
新しい世代103はしばしば、作成領域107と、「t
o」領域109と、「from」領域111とに細分さ
れる。まず、作成領域107内に(新しいノード113
などの)ノードが作成される。作成領域107が満杯に
なると、「to」領域109の意味と「from」領域
111の意味が相互交換される。次いで、新しいノード
113などのアクティブ・ノードが、「from」領域
111内のアクティブ・ノードと共に「to」領域10
9にコピーされる。「to」領域109内のアクティブ
・ノードは、「to」領域109が満杯になると古い世
代領域105にコピーされる。この結果、古い世代領域
105内にプロモートされたノード115が得られる。
当業者には、他の世代別処理系が存在することが理解さ
れよう。さらに、当業者には、作成領域107に最も新
しいノードが含まれることが理解されよう。
【0020】カード・マーク付け ルート・セットを判定するプロセスは多くの場合、ヒー
プ内のポインタを探索するのにかなり時間がかかる。従
来技術で使用される1つの最適化は、ヒープを(カード
と呼ばれる)等しいサイズの領域としてセグメント化
し、カード内で書込み動作が行われたときに各カードに
マーク付けすることである。これは一種のライト・バリ
アである。したがって、ルート・セットを更新する際に
は(ヒープ・メモリ内のすべてのカードではなく)「ダ
ーティ」とマーク付けされたカードのみのポインタが探
索される。図2は、カード・マーク付けの使用法を示
す。一般参照符号120はメモリ121のカード・マー
ク付けされた領域を示す。メモリ121のカード・マー
ク付けされた領域は第1のカード123と第2のカード
125とを含む。この図で、第1のカード123はメモ
リ内の第2のカード125に隣接している。したがっ
て、第1のカード123および第2のカード125に複
数のノード(AないしF)127が分散される。第1の
カード123は第1のカード・マーカ129に関連付け
られ、第2のカード125は第2のカード・マーカ13
1に関連付けられる。メモリの一方のカード123、1
25が修正されると、対応するカード・マーカがフラグ
付けされる。したがって、図2の図では、第1のカード
123内で書込み動作が実行され、それによって第1の
カード・マーカ129が、マーカ129自体内の「X」
で示される「ダーティ」としてマーク付けされる。第2
のカード・マーカ131がマーク付けされないことは、
第2のカード125内のメモリが最後のスカビンジ以来
修正されていないことを示す。ノード「D」133が第
1のカード123と第2のカード125との間の境界を
横切って延びているため、このノードの始めを検出する
ことは困難である。一般に、コンピュータのメモリ・ク
リア動作は値記憶動作よりも高速であることが多いの
で、カード・マーカはすべて1に初期設定される。
【0021】カード・マーク付けを使用する際は、ノー
ドの内部のアドレスを指し示すポインタまたはカードの
インデックスが与えられた場合に、ノードの始めを見つ
けることが必要になることが多い。これは通常、従来技
術では、最初のポインタ(またはカードの始め)からメ
モリを逆方向に走査してノードのヘッダを探すことによ
って行われている。しかし、整数、オブジェクト・ヘッ
ダ、ポインタを区別せず、あるいはタグ付けしないプロ
グラミング言語処理系を用いた場合、ノードの始めを検
出することができないので、逆方向への走査は無効であ
る。
【0022】カード・マーク付けの他の目標は、カード
・マーク付けを世代別ガーベジ収集アルゴリズムと共に
使用したときに、ヒープの作成領域内のオブジェクトを
参照しないヒープのコピー済み生成領域内のオブジェク
トをスキップすることである。しかし、この目標は、古
い世代内のそのようなノードの密度が、大部分のカード
がマーク付けされるほど高い場合には失われる。図3
は、一般参照符号140で示された「カード・マーク付
け構造」を有する従来技術のこの問題を示す。「ヒープ
の新しい領域」141は少なくとも1つのノード14
3、145、147を含む。「ヒープの古い世代領域」
149は複数のカード151、153としてセグメント
化される。カード151は「カード・マーカ」155に
関連付けられ、カード153は「カード・マーカ」15
7に関連付けられる。「カード境界」159はカード1
51の終わりとカード153の始まりとを示す。「ヒー
プの古い世代領域」149は、「ノードE」163と
「ノードC」165とを含め「いくつかのノード(Aな
いしF)」161を含む。「ノードE」163はノード
145を指し示すポインタを含み、「ノードC」165
は、「ヒープの新しい領域」141内のノード143を
指し示すポインタを含む。カード151内のノードは
「ヒープの新しい領域」141を参照するので、「カー
ド・マーカ」155がマーク付けされる。カード153
内のノードは「ヒープの新しい領域」141を参照する
ので、「カード・マーカ」157がマーク付けされる。
したがって、カード・マーク付けを使用する場合でも、
「ヒープの古い世代領域」149内の各ノードの、「ヒ
ープの新しい領域」141を指し示すポインタを検査し
なければならない。このため、カード・マーク付けを使
用することによって得られる利点が失われていた。
【0023】カード・マーク付けに関する他の問題は、
カード・インジケータを走査し、マーク付けされたカー
ドを見つける動作が、多数のメモリ位置(マーク付けベ
クトルを含むメモリ位置)を調べ、マーク付けされたカ
ードを見つけなければならないため、オーバヘッド動作
であることである。
【0024】「A Fast Write Barri
er for Generational Garba
ge Collectors」(Urs Hoelzl
e、OOPSLA’93 Garbage Colle
ction Workshop、ワシントンD.C.、
1993年10月)にカード・マーク付け処理系が記載
されている。この論文は、従来技術を示すものとして引
用によって含まれており、インターネット上の下記のア
ドレスで読むことができる。 「http://self.sunlabs.com/
papers/write−barrier.htm
l」
【0025】オブジェクト指向プログラミング オブジェクト指向プログラミング(OOP)とはコンピ
ュータ・ソフトウェアを構築する方法のことである。主
要なOOP概念には、データのカプセル化と、継承と、
ポリモルフィズムとが含まれる。この3つの主要な概念
はOOP言語に共通するものであるが、大部分のOOP
言語はこの3つの主要な概念を異なるように実施する。
オブジェクトはデータとメソッドとを含む。メソッドと
は、一般にオブジェクトのデータにアクセスする手続き
である。オブジェクトを使用するプログラマは、オブジ
ェクト内のデータのタイプに配慮する必要がなく、正し
いメソッド呼出しシーケンスを作成し正しいメソッドを
使用することを考慮するだけでよい。
【0026】Smalltalk、Java、C++は
OOP言語の例である。Smalltalkは1970
年代初期にXerox社のPalo Alto Res
erach Center(PARC)でLearni
ng Reserach Group内で開発された。
C++は1983年にAT&T社のBell Labo
ratoriesでBjarne Stroustru
pによってCの拡張機能として開発された。Java
は、CおよびC++の要素を含むOOP言語であり、イ
ンターネット環境用の高度に調整されたライブラリを含
む。JavaはSUN Microsystems社で
開発され、1995年に発表された。
【0027】OOPシステムでは、オブジェクトは、そ
のデータの内部構造とそのメソッドが使用するデータア
ルゴリズムとを隠す(カプセル化)。適切に設計された
OOPオブジェクトは、このような処理系の詳細を露出
するのではなく、外部情報を含まないオブジェクトの抽
象化を表すインタフェースを備える。ポリモルフィズム
はカプセル化を一歩先に進めたものである。ソフトウェ
ア構成要素は、OOPオブジェクト内のメソッドがどの
ように動作するかに関する厳密な詳細を知らずにそのメ
ソッドを呼び出すことができる。したがって、ソフトウ
ェア構成要素は正方形オブジェクトおよび円形オブジェ
クトに関する「描画」メソッドを呼び出すことができ、
これらのオブジェクトはそれぞれ、正方形および円形を
描画する。継承によって、開発者は既存の設計およびコ
ードを再使用することができ、開発者がソフトウェアを
最初から作成する必要が低減される。継承によって、開
発者は、既存のOOPオブジェクトからふるまいを継承
するサブクラスを導き、次いで特定のニーズを満たすよ
うにカスタマイズする。
【0028】オブジェクト オブジェクトは、オブジェクトに関するプログラム済み
メソッドを含むクラスに基づいたヒープ内でインスタン
ス化される。インスタンス化オブジェクトはその特定の
インスタンス化オブジェクトに特有のデータを(インス
タンス変数で)含む。一般に、クラスに基づくオブジェ
クトは、そのオブジェクト用のメモリを含むノードがヒ
ープから割り振られ、オブジェクトをクラスに結合する
ための必要な情報がオブジェクト内に記憶され、オブジ
ェクトが、必要に応じて他のオブジェクトとも関連付け
られ、オブジェクトのインスタンス変数が初期設定され
たときにインスタンス化される(あるいは構築され
る)。図4は、一般参照符号170で示されたインスタ
ンス化オブジェクトの概念的態様を示す。インスタンス
化オブジェクト170は、オブジェクト・ヘッダ171
と、ベース−クラス変数記憶域173と、第1のサブク
ラス変数記憶域175と、第2のサブクラス変数記憶域
177と、n番目のサブクラス用の最後のサブクラス変
数記憶域179とを含む。オブジェクト・ヘッダ171
は、インスタンス化オブジェクト170をサポートする
(ブロック181で示したように)情報を含み、あるい
は参照する。オブジェクト・ヘッダ171内の情報は、
クラス定義を指し示し、かつ直接的または間接的にイン
スタンス−変数カウントを指し示すポインタを含むこと
が多い。ベース−クラス変数記憶域173および第1の
サブクラス変数記憶域175はそれぞれ、第2のサブク
ラス変数記憶域177と関連付けられたブロック183
で示したインスタンス変数を含む。ブロック183内の
インスタンス変数は、混合されたポインタ変数とデータ
変数とを含む。インスタンス化オブジェクト170内の
情報の構成に関する1つの難点は、単にインスタンス変
数に記憶されている情報を調べただけではデータ値変数
とポインタ・インスタンス変数を区別することができな
いことである。したがって、ガーベジ収集を行うべきヒ
ープへのポインタを判定することは非効率的である。こ
の非効率のために、多数のオブジェクト指向言語処理系
でデータ値の精度が犠牲になっており、かつポインタ値
をデータ値と区別するために各値がタグ付けされてい
る。他の一般的な手法では、クラス内で定義された各変
数ごとにタグを関連付けるタグ・テーブルが設けられ
る。このタグは、クラスのインスタンス化オブジェクト
のインスタンス変数がデータ値を含むか、それともポイ
ンタ値を含むかを示す。タグ・テーブルを使用すると、
ヒープ内の有効ノードを判定する際に各インスタンス変
数ごとにタグ・テーブルを検査しなければならないの
で、計算上のオーバヘッドが増大する。当業者には、ポ
インタは直接的なものでも、あるいは間接的なものでも
よいことが理解されよう。
【0029】前述のように、オブジェクトはヒープから
割り振られる。したがって、オブジェクトはノードの特
殊ケースである。さらに、多くのOOP処理系は、オブ
ジェクトに「ハッシュ値」を割り当て、このハッシュ値
にアクセスするためのメソッドを備えている。このハッ
シュ値は、ヒープ内のノードに関連付けられた有用な準
一意整数(quasi-unique integer)である。オブジェク
トの存在期間が短い(したがって、ヒープ内に限られた
期間しか存在しない)ときにこのハッシュ値を求めその
オブジェクト内に記憶することは不要なオーバヘッドで
ある。この負担を低減するために使用される従来技術の
1つの方法は、ハッシュ値を要求されたときにのみ生成
することである。したがって、次のハッシュ値を含むカ
ウンタがアクセスされてハッシュ値が得られ、そのハッ
シュ値がノード内に記憶され、カウンタが増分され、1
回のメモリ読取り動作と2回のメモリ書込み動作が必要
になる。
【0030】OOP概念に関する他の情報は、「Obj
ect Oriented Design with
Applications」(Grady Booc
h、Benjamin/Cummings Publi
shing Co.,Inc.、Redwood Ci
ty,Calif.、(1991年)、ISBN0−8
053−0091−0)に記載されている。
【0031】コンパイラ、仮想マシン(インタプリ
タ)、マシン プログラミング言語によって、プログラマは、アプリケ
ーション・バイナリ・インタフェース(ABI)(コン
ピュータや、コンピュータ上で実行されるインタプリタ
など)が実行する動作を表す記号テキスト表現(ソース
・コード)を使用することができる。この記号表現は、
ABIが理解する命令コードに変換される。通常、この
ような命令コードはバイナリ値である。コンパイラは、
ソース・コードを処理することによって、ソース・コー
ドに対応する命令コードを含むオブジェクト・ファイル
(またはオブジェクト・モジュール)を作成する。当業
者には、「オブジェクト・ファイル」および「オブジェ
クト・モジュール」の語が前述の「OOPオブジェク
ト」とは関係のないものであることが理解されよう。こ
のオブジェクト・モジュールが他のオブジェクト・モジ
ュールとリンクされると、コンピュータのメモリにロー
ドしABIによって実行することのできる実行可能な命
令が得られる。
【0032】インタプリタとは、命令コードにアクセス
するコンピュータに作用し、命令コードによって指定さ
れた動作を実行する1つまたは複数の動作をコンピュー
タに実行させるプログラムのことである。したがって、
インタプリタは、仮想コンピュータ環境または仮想マシ
ンを形成するプログラム、すなわちABIとみなすこと
ができる。インタプリタを実行することのできるコンピ
ュータはいずれも、ABI向けにコンパイルされたプロ
グラムを実行することができる。したがって、同じプロ
グラムの命令コードをネットワークを介してダウンロー
ドし、ABIを実装する様々な異なるコンピュータ・ア
ーキテクチャ上で実行することができる。
【0033】プログラムのソースは、実行環境が実行す
るのに適した命令コードとデータの両方に変換される順
序付きでグループ化されたストリング(文)からなる。
ソース・プログラムは、ソースをコンパイルしリンクす
ることによって得られた命令コードを実行する際にAB
Iが実行する動作の記号記述を与える。ソースから命令
コードへの変換は、ソースを書くために使用されるプロ
グラミング言語の文法規則に応じて実行される。
【0034】各コンパイル済み文は、ABIに応じて、
記号文で記述された動作を実施する、多数の命令コード
を生成することができる。コンパイラは、コンパイル済
み命令コードを生成する際に、ソースで表された構造構
成を著しく変更することができる。しかし、コンパイラ
は、この構成をどれほど変更しても、命令コードが、A
BIによって実行されるときに、(プログラムの結果が
どのように得られるかにかかわらずに)ソース言語を使
用して記述されたプログラムと同じ結果を与えなければ
ならないという点で制限される。同様に、データが構造
内に記憶される順序は、プログラマが供給する変数宣言
シーケンスが示すのと同じ順序である必要はない。たと
えば、インスタンス変数のインスタンス化オブジェクト
内での実際の配置は、クラス宣言で定義された変数と同
じ順序である必要はない。
【0035】多くの現代のコンパイラは、コンパイル・
プロセスから得られるバイナリ命令コードを最適化する
ことができる。プログラミング言語の設計のために、コ
ンパイラは、コンパイル中のプログラムに関する構造上
の情報を判定することができる。この情報は、同じ動作
を実行するそれぞれの異なるバージョンの命令コード・
シーケンスを生成するためにコンパイラによって使用す
ることができる。たとえば、デバッグ機能をイネーブル
し、あるいはソース・コードがコンパイルされるターゲ
ット・プロセッサのバージョンに応じて命令を最適化す
る。いくつかの最適化では、命令を保持するために必要
なメモリの量が最小限に抑えられ、他の最適化では、命
令を実行するために必要な時間が短縮される。
【0036】最適化の利点は、コンパイラを最適化する
と、プログラマが、ソース・コードを手動で調整する時
間のかかるタスクから解放されることである。これによ
ってプログラマの生産性が向上する。また、手動調整で
はソース・コードが他のプログラマには分かりにくいも
のとなるので、コンパイラを最適化すると、プログラマ
は維持可能なコードを書くことができる。最後に、ある
コンピュータ・アーキテクチャに調整されたソース・コ
ードは他のコンピュータ・アーキテクチャに対して非効
率的であることがあるので、コンパイラを最適化する
と、コードの移植性が向上する。コンパイラの最適化お
よび関係する技法の全般的な議論は、「Compile
rs: Principles, Technique
s andTools」(Alfred V.Aho、
Ravi Sethi、Jeffrey D.Ullm
an、Addison−Wesley Publish
ing Co.1988年、ISBN0−201−10
088−6、第9章および第10章、513ページない
し723ページ)。
【0037】著しく最適化することのできる1つのプロ
グラミング構造はループである。ループはしばしば、ル
ープ制御変数を使用して反復する。ループ制御変数は、
ループの1回目の反復では開始値に初期設定される。ル
ープ制御変数は、最後の値に達するまでループの各反復
時にストライド値によって初期設定される。ループは、
ループ制御変数が最後の値に達したときに完了する。そ
のようなループは多くの場合、ポインタ(たとえば、O
OPオブジェクトを指し示すポインタのアレイ)のアレ
イの要素に値を割り当てるために使用される。カード・
マーク付けまたはその他のライト・バリア法を使用した
アプリケーションの場合、このことは、ライト・バリア
命令もループ内で実行されることを意味する。したがっ
て、ループは、ライト・バリアを使用するヒープ内のポ
インタ・アレイ内の要素に値を割り当てる場合には非効
率的である。
【0038】
【発明が解決しようとする課題】本発明は、ガーベジ収
集プログラム用の向上した機能を与える経済的な装置、
方法、システム、コンピュータ・プログラムを記録した
記憶媒体を提供することを目的とする。
【0039】
【課題を解決するための手段】本発明の一態様は、ヘッ
ダ構造を含むデータ構造内のポインタ値を位置指定する
コンピュータ制御式方法である。この方法は、ヘッダ構
造がポインタ・メモリ領域をデータ値メモリ領域から分
離するようにデータ構造を構成するステップを含む。ヘ
ッダ構造は、ポインタ値と区別できるヘッダ値を含む。
ヘッダ値はポインタ・メモリ領域に隣接する。この方法
はさらに、ポインタ値を位置指定するためにポインタ・
メモリ領域を走査するステップを含む。この方法はま
た、ヘッダ値が検出されたときにヘッダ構造およびデー
タ値メモリ領域越えて前進するステップを含む。
【0040】本発明の他の態様は、メモリに結合された
中央演算処理装置を含み、メモリ内のデータ構造内のポ
インタ値を位置指定する装置である。インスタンス化オ
ブジェクト・データ構造はヘッダ構造を含む。この装置
は、メモリ内のデータ構造を構成するように構成された
構成機構を含む。構成されたデータ構造内のヘッダ構造
は、ポインタ・メモリ領域とデータ値メモリ領域とを分
離する。ヘッダ構造は、ポインタ値と区別できるヘッダ
値を含む。ヘッダ値はポインタ・メモリ領域に隣接す
る。この装置はまた、ポインタ値を位置指定するために
ポインタ・メモリを走査するように構成された走査機構
を含む。この装置は、走査機構の動作中にヘッダ値を検
出するように構成されたヘッダ検出機構を含む。この装
置はまた、ヘッダ検出機構に従ってヘッダ構造およびデ
ータ値メモリ領域を越えて前進するように構成された前
進機構を含む。
【0041】本発明の他の態様では、メモリに結合され
た中央演算処理装置を含み、メモリ内のデータ構造内の
ポインタ値を位置指定するコンピュータ・システムが開
示される。データ構造はヘッダ値を含む。このシステム
は、メモリ内のデータ構造を構成するように構成された
構成機構を含む。構成されたデータ構造内のヘッダ構造
は、ポインタ・メモリ領域とデータ値メモリ領域とを分
離する。ヘッダ構造は、ポインタ値と区別できるヘッダ
値を含む。ヘッダ値はポインタ・メモリ領域に隣接す
る。このシステムはまた、ポインタ値を位置指定するた
めにポインタ・メモリを走査するように構成された走査
機構を含む。このシステムは、走査機構の動作中にヘッ
ダ値を検出するように構成されたヘッダ検出機構を含
む。さらに、このシステムは、ヘッダ検出機構に従って
ヘッダ構造およびデータ値メモリ領域の先に前進するよ
うに構成された前進機構を含む。
【0042】本発明のさらに他の態様は、コンピュータ
使用可能媒体上に組み込まれ、コンピュータのメモリ内
のインスタンス化オブジェクト・データ構造内のポイン
タ値をコンピュータに位置指定させるコンピュータ・プ
ログラムである。それは記憶媒体に記録される。コンピ
ュータ上で実行されたとき、コンピュータ読取り可能プ
ログラムはは、コンピュータに構成機構、走査機構、ヘ
ッダ検出機構および前進機構を実施させる。これらの各
機構は、上述の装置用の対応する機構と同じ機能を有す
る。
【0043】本発明の他の態様は、インスタンス化オブ
ジェクト・データ構造を含むメモリである。インスタン
ス化オブジェクト・データ構造は、ポインタ・インスタ
ンス変数を含むポインタ・メモリ領域を含む。ポインタ
・インスタンス変数は、ポインタ値を記憶するために使
用される。メモリ・データ構造はまた、非ポインタ値を
記憶するデータ値メモリ領域を含む。さらに、メモリ・
データ構造は、ポインタ値と区別できるヘッダ値を含む
オブジェクト・ヘッダ構造を含む。ヘッダ値はポインタ
・メモリ領域に隣接する。オブジェクト・ヘッダ領域
は、ポインタ・メモリ領域とデータ値メモリ領域とを分
離する。
【0044】
【発明の実施の形態】
表記および用語 下記の「表記および用語」は、本発明およびその好まし
い実施形態の理解を助けるために与えられている。 ノード:ヒープから割り振られるメモリの領域 オブジェクト:ノード内に存在するインスタンス化オブ
ジェクト。オブジェクトは一般に、インスタンス変数
と、オブジェクトのメソッドを参照するクラスを指し示
すポインタとを含む。 ポインタ:ノードのアドレスとして使用される値。ガー
ベジ収集アルゴリズムは、ノードを指し示すポインタを
見つけることによって、ノードが有効であるかどうかを
判定する。 リンク:作成領域へのオフセットと、リンクをポインタ
に関連付ける確認値とで構成されるポインタ等価物。 手続き:所望の結果に至る自己完結型ステップ・シーケ
ンス。これらのステップは、物理的数量の物理的処理を
必要とするステップである。通常、このような数量は、
記憶し、転送し、組み合わせ、比較し、その他の方法で
処理することのできる電気信号または磁気信号の形をと
る。このような信号はビット、値、要素、記号、文字、
項、数などと呼ばれる。当業者には、これらの語および
同様な語がすべて、物理的数量に関連するものであり、
このような数量に適用される単に好都合なレベルである
ことが理解されよう。
【0045】概要 コンピュータによって既存の命令コードで実行される処
理は、一般に、人間のオペレータが行う知的動作に関連
付けられた、加算や比較などの語で呼ばれることが多
い。本発明において、本明細書で説明する動作では人間
のオペレータのそのような能力は必要とされない。これ
らの動作は計算器動作である。本発明の動作を実行する
有用な計算器には、プログラム済み汎用ディジタル・コ
ンピュータまたは同様な装置が含まれる。すべてのケー
スで、計算方法は、コンピュータを操作する際の操作方
法とは区別される。本発明は、コンピュータを操作し
て、電気信号またはその他の(たとえば、機械的、化学
的)物理信号を処理し他の所望の物理信号を生成する方
法ステップに関する。
【0046】本発明は、このような動作を実行する装置
にも関する。この装置は、必要な目的向けに特別に構成
することも、あるいはコンピュータのメモリに記憶され
たコンピュータ・プログラムによって選択的に作動また
は再構成される汎用コンピュータを備えることもでき
る。本明細書に示す手続きは、特定のコンピュータやそ
の他の装置に固有に関係するものではない。特に、様々
な汎用計算器を、本明細書の教示に従って書かれたプロ
グラムと共に使用することができ、あるいは必要な方法
ステップを実行するより専用化された装置を構成する方
が好都合であることもである。このような様々な計算器
に必要な構造は下記の説明から明らかになろう。本発明
は、コンピュータにプログラム済みロジックを実行させ
るプログラムと共にコード化されたコンピュータ読取り
可能な記憶媒体に埋め込むこともできる。
【0047】当業者には、図においてコンピュータ・メ
モリ・ワード内で特定のビット順序付けが使用されてい
るが、実際のビット順序付けが本発明には無関係である
ことが理解されよう。さらに、当業者には、メモリ内の
データ構造の図が構造の頂部にある下位アドレス・メモ
リから始まり、より上位のアドレス・メモリへ延びてい
ることが理解されよう。
【0048】動作環境 一般参照符号200で示され、本発明をサポートするよ
うに構成されたコンピュータのいくつかの要素が、図5
に示されている。図5には、中央演算処理装置(CP
U)203と、メモリ部205と、入出力(I/O)部
207とを有するプロセッサ201が示されている。入
出力部207は、キーボード209と、表示装置211
と、ディスク記憶装置213と、CD−ROM駆動装置
215に接続される。CD−ROM駆動装置215は、
通常、プログラムおよびデータ219を含む、CD−R
OM媒体217を読み取ることができる。CD−ROM
駆動装置215ならびにCD−ROM媒体217と、デ
ィスク記憶装置213はファイル記憶機構を備える。そ
のようなコンピュータ・システムは、本発明を具体化す
るアプリケーションを実行することができる。
【0049】厳密なガーベジ収集アルゴリズムは、ポイ
ンタである値と非ポインタである値とを区別しなければ
ならない。ポインタ値が見つかった後、ヒープ内で、割
振り済みノードを見つけることができる。このようなポ
インタから参照されないヒープの領域は、ガーベジであ
り、スキャビンジ動作によって再利用することができ
る。ポインタ値を見つけるにはコンピュータ資源が必要
であり、したがって、より効率的な機構があれば有利で
ある。
【0050】本発明の一形態は、ポインタ値をデータ値
から分離する分岐データ構造である。この種のデータ構
造をインスタンス化オブジェクトとして使用すると、デ
ータ構造内でポインタ値を効率的に見つけることができ
る。
【0051】図6は、インスタンス化オブジェクト・デ
ータ構造300自体内のポインタ値とデータ値を分離す
るメモリ内の、一般参照符号300で示されたインスタ
ンス化オブジェクト・データ構造を示す。図6と、デー
タ構造を含む他のすべての図で、メモリ・アドレスは、
構造に沿って下降しながら増加する。インスタンス化オ
ブジェクト・データ構造300はクラス(図示せず)か
ら導かれる。インスタンス化オブジェクト・データ構造
300の本体内にオブジェクト・ヘッダ構造301が配
置される。オブジェクト・ヘッダ構造301は、その第
1のワードをポインタと区別することができるように構
成される(たとえば、このヘッダ値では、ワードの最下
位ビットが1に設定される)。オブジェクト・ヘッダ構
造301の前にポインタ・メモリ領域303が配置され
る。ポインタ・メモリ領域303は、インスタンス化オ
ブジェクト・データ構造300が使用するポインタ値を
含む。オブジェクト・ヘッダ構造301の後にデータ値
メモリ領域305が配置され、このデータ値メモリ領域
は、オブジェクトが使用する非ポインタ・データ値を含
む。オブジェクト・ヘッダ構造301は、データ値メモ
リ領域305のサイズを含み、あるいはこのサイズを導
くために使用することのできるサイズ・フィールド(図
示せず)も含み、あるいは参照する。図6で、インスタ
ンス化オブジェクト・データ構造300は、サブクラス
のサブクラスから継承されたものである。ベースクラス
のインスタンス変数は、オブジェクト・ヘッダ構造30
1の最も近くに配置される。ベースクラス非ポインタ・
インスタンス変数領域307は、インスタンス化オブジ
ェクト・データ構造300のベースクラスの非ポインタ
・データ値を記憶するために使用される。ベースクラス
・ポインタ・インスタンス変数領域309は、メソッド
手続きアドレスのテーブルを指し示すポインタやヒープ
内の他のノードを指し示すポインタなどインスタンス化
オブジェクト・データ構造300のベースクラスのポイ
ンタ値を記憶するために使用される。同様に、第1のサ
ブクラス非ポインタ・インスタンス変数領域311およ
び第1のサブクラス・ポインタ・インスタンス変数領域
313はそれぞれ、ベースクラスの第1のサブクラスの
非ポインタ変数値およびポインタ変数値を記憶する。n
番目のサブクラス非ポインタ・インスタンス変数領域3
15およびn番目のサブクラス・ポインタ・インスタン
ス変数領域317についても同様である。ポインタ・デ
ータと非ポインタ・データをこのように分離することは
さらに、第2のサブクラス定義の結果として得られる第
2のサブクラス非ポインタ・インスタンス変数領域31
9および第2のサブクラス・ポインタ・インスタンス変
数領域321によって示される。詳細データ値割振り3
23は非ポインタ・データ値記憶域を示し、詳細データ
値割振り325はポインタ・データ値記憶域を示す。し
たがって、ポインタ変数を見つけることによってヒープ
へのポインタを判定するプロセスは、インスタンス化オ
ブジェクト・データ構造300内のポインタ値とデータ
値を分離することによって簡略化される。
【0052】当業者には、ある種のコンパイラは、上記
で開示したオブジェクト構造を生成するように修正する
必要があることが理解されよう。さらに、当業者には、
オブジェクトがデータ構造の特殊な使用法に過ぎず、前
述のデータ構造の基本概念が、区別可能なデータ構造ヘ
ッダの前にポインタを記憶しポインタ・インスタンス変
数の判定を容易にすることであることが理解されよう。
また、当業者には、インスタンス化オブジェクト・デー
タ構造300内のポインタ・メモリ領域303とデータ
値メモリ領域305を分離することが、オブジェクト・
ヘッダ構造301に対するデータ値メモリ領域305内
のインスタンス変数の位置が、最初のクラスのサブクラ
スに基づくすべてのインスタンス化オブジェクトに対し
て一定であることを意味することが理解されよう。この
不変性のためにオブジェクトの解釈が簡略化される。コ
ンパイル済みコードを用いる処理系の場合、この不変性
によって、あるスーパークラス向けにコンパイルされた
コードをそのスーパークラスのサブクラスのインスタン
スに再使用することができるので空間が節約される。
【0053】図7は、メモリの連続領域内に存在するポ
インタ値を収集するために使用される、一般参照符号3
50で示されたプロセスを示す。これらの値は後でガー
ベジ収集処理のために使用される。プロセス350は、
「開始」ターミナル351から始まり、次に「領域のア
ドレスの取出し」手続き353に進む。「領域のアドレ
スの取出し」手続き353は、ポインタが走査されてい
る領域のアドレスを得て、このアドレスをPtrに記憶
する。このメモリ領域は、領域内の第1のオブジェクト
のポインタ・メモリ領域303から始まる。次に、「領
域外」決定手続き355によって、Ptrが領域の終わ
りを越えているかどうかが判定される。Ptrが領域の
終わりを越えている場合、プロセス350は「終了」タ
ーミナル357を通じて完了する。そうでない場合、プ
ロセス350は、「「T」をPtrの指し示す値へ設
定」手続き359に進み、Ptrの指し示す位置の値が
「T」に記憶される。次に、「「T」のタグの検査」決
定手続き361で、プロセス350は、「T」の値がポ
インタであるか、それともオブジェクト・ヘッダ構造3
01の第1のワードであるかを判定する。好ましい一実
施形態では、この判定は、値の下位ビットを検査し、ポ
インタ・メモリ領域303内のポインタ値とオブジェク
ト・ヘッダ構造301の第1のワードを区別することに
よって下される。「「T」のタグの検査」決定手続き3
61で、「T」の値がポインタ値であると判定された場
合、プロセス350は「「T」の処理」手続き363に
進み、実施形態に応じて、「T」に記憶されている値
が、後でガーベジ収集プロセスによって処理されるポイ
ンタとして記録され、あるいはただちにガーベジ収集プ
ロセスがそのポインタに適用される。プロセス350
は、「Ptrの前」手続き365で、Ptrをオブジェ
クト内の次の位置を指し示すように前進させる。プロセ
ス350は次いで、「「T」をPtrの指し示す値へ設
定」手続き359にループバックし、ポインタ・メモリ
領域303へのポインタの記録を継続する。しかし、
「「T」のタグの検査」決定手続き361によって、
「T」の値がポインタではない(すなわち、「T」の値
はオブジェクト・ヘッダ構造301の第1のワードであ
る)と判定された場合、プロセス350は「ポインタを
オブジェクトを越えさせる」手続き367に進む。「ポ
インタをオブジェクトを越えさせる」手続き367で
は、当技術分野で良く理解されている方法を使用して、
Ptrがデータ値メモリ領域305およびオブジェクト
・ヘッダ構造301の残りの部分を越える。
【0054】当業者には、前述のデータ構造およびプロ
セスが、メモリ領域内のポインタの走査に関して説明し
たものであり、一実施形態では、ポインタによって互い
に関係付けられたノードが追跡され、関係付けられた各
ノードのポインタ・メモリ領域303が走査されること
が理解されよう。
【0055】当業者には、次のオブジェクトに進み参照
セットにポインタを加える多数の技法が存在することも
理解されよう。さらに、当業者には、オブジェクトがデ
ータ構造の特殊な使用法であり、前述の技法がメモリ内
の一般的なデータ構造にも適用されることが理解されよ
う。
【0056】本発明の他の実施形態は、インスタンス化
オブジェクト内でデータ値と混合されたポインタ値、す
なわち分岐されないデータ構造の収集を最適化すること
によって、オブジェクトの参照セットを判定する際に計
算上の効率を向上させる。図8は、図4のインスタンス
化オブジェクト170と同様な、一般参照符号400で
示されたインスタンス化オブジェクト・データ構造を示
す。インスタンス化オブジェクト・データ構造400
は、オブジェクト・ヘッダ構造401とインスタンス変
数記憶域403とを含む。オブジェクト・ヘッダ構造4
01は、一般参照符号430で示されたタグ付けビット
マップを含むクラスを指し示すクラス・ポインタ405
を含む。
【0057】図9は、クラス内に含まれるタグ付けビッ
トマップ430を示す。タグ付けビットマップ430は
順次バイト・アレイである。各バイトは、インスタンス
化オブジェクト・データ構造400のインスタンス変数
記憶域403内の8つの順次位置のポインタ値と非ポイ
ンタ値を区別する。1バイト内に256個の可能な値を
含むことができる。タグ付けビットマップ430内の値
は、後述のように256個のルーチン・アドレスからな
るテーブルへのインデックスとして働く。これらの値
は、インスタンス変数記憶域403内の8つの連続イン
スタンス変数のポインタ・インスタンス変数および非ポ
インタ・インスタンス変数のパターンも表す。たとえ
ば、インスタンス変数記憶域403に20個の値が含ま
れると仮定すると、タグ付けビットマップ430には、
第1のエントリ431と、第2のエントリ433と、第
3のエントリ435の3つのエントリが含まれる。さら
に、インスタンス変数記憶域403内の第9、第15、
第20の値がポインタ値であると仮定すると、第1のエ
ントリ431の値は零であり、第2のエントリ433の
値は41(16進数)であり、第3のエントリ435の
値は08(16進数)である。
【0058】図10は、一般参照符号450で示された
ルーチン・ディスパッチ・テーブルを示す。ルーチン・
ディスパッチ・テーブル450は、ポインタ、ハンド
ル、または被呼ルーチン(called routine)を呼び出す同
様な手段を含む。各被呼ルーチンは、呼び出されると、
インスタンス変数記憶域403内の現変数を指し示すポ
インタを引数として受け取る。ルーチン・ディスパッチ
・テーブル450内の第1のエントリ451は、インス
タンス変数記憶域403内のインスタンス変数を処理し
ない手続きを指し示すポインタを含む。第1のエントリ
451は、インスタンス変数記憶域403の次の8つの
変数内のポインタを示さないタグ付けビットマップ43
0内のエントリに対応する。ルーチン・ディスパッチ・
テーブル450内の第2のエントリ453は、プロセス
INDEX(0)455に対する被呼ルーチンを指し示
すポインタを含む。この被呼ルーチン455は、渡され
た引数の指し示すインスタンス変数記憶域403内の変
数のみを処理する。ルーチン・ディスパッチ・テーブル
450内の第3のエントリ457は、渡された引数の指
し示すインスタンス変数よりも先の第3のインスタンス
変数を処理するに過ぎないプロセスINDEX(3)4
59に対する被呼ルーチンを指し示すポインタを含む。
ルーチン・ディスパッチ・テーブル450内の第4のエ
ントリ461は、プロセスINDEX(0)およびIN
DEX(6)463に対する被呼ルーチンを指し示すポ
インタを含む。このルーチン463は、渡された引数の
指し示す変数と、渡された引数の指し示す変数よりも先
の第6の変数の両方を処理する。最後に、ルーチン・デ
ィスパッチ・テーブル450内の第5のエントリ465
は、プロセスINDEX(0)およびINDEX(7)
467に対する被呼ルーチンを指し示すポインタを含
む。このルーチン467は、渡された引数の指し示すイ
ンスタンス変数から始まるすべての8つのインスタンス
変数を処理する。したがって、各被呼ルーチンは、渡さ
れた引数から始まるポインタ・インスタンス変数および
非ポインタ・インスタンス変数のパターンを処理する。
【0059】被呼ルーチン455、459、463、4
67は、インスタンス化オブジェクト・データ構造40
0内の次の最大で8つの変数のポインタを処理するプロ
グラム済みロジックを含む。したがって、ガーベジ収集
手続きは、インスタンス化オブジェクト・データ構造4
00のインスタンス変数記憶域403内のポインタを効
率的に処理する。ガーベジ収集手続きは、各変数ごとに
タグを試験するのではなく、ポインタ変数の既知のパタ
ーンを処理する手続きに直接アクセスすることによって
これを行う。したがって、各変数を検査し変数がポイン
タを含むかどうかを判定する従来技術の変数別プロセス
は、各変数を検査せずに8つの既知の変数を一度に処理
する手続きで置き換えられる。
【0060】被呼ルーチン455、459、463、4
67を呼び出す呼出し手続きについては後述する。当業
者には、実施形態に応じて、被呼ルーチンと呼出し手続
きのどちらかがポインタをインスタンス変数記憶域40
3内へ進めることが理解されよう。被呼ルーチン45
5、459、463、467は、指定されたポインタを
参照セットに加えるか、あるいは指定されたポインタに
対して他のガーベジ収集タスクを実行する。
【0061】図11は、インスタンス変数記憶域403
内のポインタを処理するために使用される被呼ルーチン
455、459、463、467をディスパッチするた
めに使用される呼出し手続きを実施する、一般参照符号
470で示されたプロセスを示す。プロセス470は、
「開始」ターミナル471から始まり、手続き473に
進む。手続き473は、クラス内に存在するタグ付けビ
ットマップ430を指し示すポインタを取り出す。次
に、プロセスは手続き475に進み、インスタンス変数
記憶域403のサイズを使用することによってタグ付け
ビットマップ430内のエントリの数が判定される。次
いで、手続き477はインスタンス変数記憶域403を
指し示すポインタを初期設定する。次に、プロセス47
0は、タグ付けビットマップ430内のエントリに対し
て反復される反復手続き479に進む。プロセス470
は、反復手続き479が終了した後に「終了」ターミナ
ル481を通じて完了する。反復手続き479によって
制御される各反復ごとに、「ビットマップ検索」手続き
483が、現反復に関してタグ付けビットマップ430
からビットマップ・エントリを検索する。次に、ディス
パッチ手続き485が、ビットマップ・エントリによっ
てルーチン・ディスパッチ・テーブル450へのインデ
ックスを判定し、ポインタをインスタンス変数記憶域4
03に渡す被呼ルーチンを呼び出す。被呼ルーチンが戻
ると、プロセス470は反復手続き479を通じて次の
反復に進む。当業者には、被呼手続きでも、あるいは呼
出し手順でも変数ポインタを前進させられることが理解
されよう。
【0062】本発明の実施形態に応じて、被呼ルーチン
455、459、463、467は、指定されたポイン
タに対して、必要に応じてガーベジ収集タスクを実行す
る。当業者には、タグ付けビットマップ430の長さを
指定する多数の技法が存在することも理解されよう。こ
れらの技法には、タグ付けビットマップ430の長さを
オブジェクトまたはオブジェクトのクラスに入れること
や、タグ付けビットマップ430内に長さを含めること
が含まれるが、これらに限らない。さらに、当業者に
は、オブジェクトおよびクラスを実施するときに使用さ
れないデータ構造を含め、前述のデータ構造以外のデー
タ構造に本発明を適用できることが理解されよう。
【0063】本発明の他の形態は、世代別ガーベジ収集
技法に適用される。前述のように、ハッシュ値は、ノー
ドに関連付けられた有用な準一意整数である。ハッシュ
値はノードに関して一度だけ生成され、ノードの存在期
間にわたって変化しない。多くの場合、そのようなノー
ドはインスタンス化OOPオブジェクトである。したが
って、オブジェクトは一般に、ハッシュ値用の記憶域
と、オブジェクトのハッシュ値を返すためのOOP方法
とを備える。当業者には、ノード内のデータ構造を使用
し、データ構造の内容への手続きアクセスを行うことに
よって、同じ機能を実施できることが理解されよう。オ
ブジェクトの存在期間が非常に制限される(すなわち、
大部分のオブジェクトは作成領域で作成され、かつなく
なる)多くのOOPアプリケーションでは、作成領域内
にオブジェクトのハッシュ値を作成するオーバヘッドが
厄介であることを想起されたい。
【0064】図12は、一般参照符号500で示された
作成領域を示す。作成領域500は、ノード503を含
む作成領域501を含む。ノード503は、割り振られ
た後、ノード・アドレスを有する。このノード・アドレ
スはノード・ポインタ505内に含まれる(そうでない
場合、ノード503はガーベジになる)。ノード503
のハッシュ値は、ノード・アドレスおよび「グローバル
・ハッシュ・オフセット」変数507の内容を使用して
求められる。最初、「グローバル・ハッシュ・オフセッ
ト」変数507の内容は零に設定される。作成領域50
1に対するあらゆるスキャビンジ動作の後に、「グロー
バル・ハッシュ・オフセット」変数507の内容は、作
成領域501のサイズだけ増加される。作成領域501
にスキャビンジ動作を適用すると、すべての有効ノード
がヒープ・メモリ(図示せず)の異なる世代領域にコピ
ーされる。したがって、作成領域501はスキャビンジ
動作の後に空白になる。ノード503のハッシュ値は、
ノード・ポインタ505内に含まれるノード・アドレス
を「グローバル・ハッシュ・オフセット」変数507の
内容に加えることによって求められる。スキャビンジ動
作時には、コピーされるノードのハッシュ値が算出され
るときでも「グローバル・ハッシュ・オフセット」変数
507の値は変化しない。各ハッシュ生成時ではなくス
キャビンジ動作の終わりに「グローバル・ハッシュ・オ
フセット」変数507に対するメモリ書込み動作のみが
行われ、多くのメモリ・アクセスが節約される。
【0065】図13は、ハッシュ値を生成する、一般参
照符号510で示された「get_hash」手続きを
示す。「get_hash」手続き510は「開始」タ
ーミナル511から始まり、決定手続き513に進み、
ハッシュ値がオブジェクトに記憶されているかどうかが
判定される。好ましい実施形態では、ハッシュ値を零に
することはできず、したがってオブジェクトを割り振る
と、ハッシュ値インスタンス変数は零に初期設定され
る。ハッシュ値インスタンス変数の内容が零でない場
合、「get_hash」手続き510は「記憶されて
いるハッシュ値を返す」手続き515に進み、オブジェ
クトのインスタンス変数からハッシュ値が返され、「g
et_hash」手続き510は「終了」ターミナル5
17を通じて完了する。しかし、決定手続き513で、
オブジェクトのハッシュ値インスタンス変数の内容が零
である場合、「get_hash」手続き510は「ハ
ッシュ値の算出およびリターン」手続き519に進む。
「ハッシュ値の算出およびリターン」手続き519で
は、ノード・ポインタ505内に含まれるオブジェクト
のアドレスが、「グローバル・ハッシュ・オフセット」
変数507の内容に加えられる。「ハッシュ値の算出お
よびリターン」手続き519はこの結果を返す。次に、
「get_hash」手続き510が「終了」ターミナ
ル517を通じて完了する。したがって、ハッシュ値を
求める手続きは、ハッシュ値が実際に必要になるまで遅
延される。大部分のノードは、ハッシュ値を得るための
アクセスを受けずに作成領域501からなくなるので、
オブジェクト割振りは従来技術の技法よりも効率的であ
る。当業者には、(ノード503がOOPオブジェクト
である)OOPでは、「get_hash」手続き51
0がオブジェクトに関するOOPメソッドであることが
理解されよう。
【0066】図14は、一般参照符号520で示された
「作成領域の有効ノードのコピー」手続きを示す。「作
成領域の有効ノードのコピー」手続き520では、作成
領域501の有効ノードが古い世代ヒープ領域(図示せ
ず)にコピーされる。「作成領域の有効ノードのコピ
ー」手続き520は「開始」ターミナル521から始ま
り、反復手続き523に進み、作成領域501内のすべ
ての有効ノードが反復される。すべての有効ノードが反
復された後、プロセスは「ハッシュ・オフセットの更
新」手続き525に進み、作成領域501のサイズが
「グローバル・ハッシュ・オフセット」変数507の内
容に加えられる。次いで、「作成領域の有効ノードのコ
ピー」手続き520は「終了」ターミナル527を通じ
て完了する。反復手続き523の各反復ごとに、「算出
されたハッシュ値を記憶しているオブジェクトのコピ
ー」手続き531によって、作成領域のノードが古い世
代にコピーされる。「算出されたハッシュ値を記憶して
いるオブジェクトのコピー」手続き531では、ハッシ
ュ値も算出され、かつノードがコピーされている間に、
算出されたハッシュ値が、コピーされるノードに記憶さ
れる。したがって、ノードをコピーするメモリ書込み動
作以外の追加メモリ書込み動作は必要とされない。次い
で、「ポインタ・ブックキーピング」手続き533によ
って、ノードの以前の位置を指し示す既存のポインタ
が、現在古い世代に存在しているノードの新しい位置を
指し示すように調整される。次に、「作成領域の有効ノ
ードのコピー」手続き520から反復手続き523に進
み、次の有効オブジェクトが処理される。したがって、
オブジェクトのハッシュ値を生成するオーバヘッドは、
オブジェクトが古い世代にコピーされ、あるいはオブジ
ェクトが、作成領域501に存在している間にハッシュ
値を返すように要求されるまで遅延される。「作成領域
の有効ノードのコピー」手続き520と「get_ha
sh」手続き510のどちらかが、ハッシュ値を生成す
るハッシュ生成条件をトリガする。
【0067】本発明は、特にハッシュ値を必要とする存
在期間の短い多数のノードがあるときに従来技術よりも
効率的である。本発明は、「グローバル・ハッシュ・オ
フセット」変数507の内容が、従来技術の必要に応じ
て毎ハッシュ値計算時にメモリからロードされメモリに
記憶されるのではなく各スキャビンジ時にしか更新され
ないので効率的である。さらに、オブジェクトにハッシ
ュ値を記憶するのに必要なメモリ書込み動作が、ノード
のそのフィールドをコピーするのに必要なメモリ書込み
動作に置き換わる。したがって、追加オーバヘッド・メ
モリ・アクセスを使用しなくてもハッシュ値がノードに
記憶される。
【0068】本発明の他の形態は、作成領域のサイズが
ヒープの残りの部分と比べて小さいので有効である。こ
れは、作成領域への限られたフィールド長オフセットに
よって作成領域全体にアクセスできることを意味する。
したがって、18ビットのワードしか使用せずに1メガ
バイト作成領域内のノードへのリンクを指定することが
できる(4バイト・アドレス可能コンピュータ・アーキ
テクチャ上でのワード整列を仮定する)。ポインタは3
2ビット・コンピュータで32ビットを使用するが、リ
ンクは作成領域へのワード・インデックスとして18ビ
ットを使用し、確認値として14ビットを使用すること
ができる。確認値は、作成領域がスキャビンジされてか
らすべてのポインタ更新およびリンク更新が完了するま
での間の作成領域への非更新アクセスを示すために使用
される。十分に大きなポインタ・サイズのリンクおよび
ポインタが値の最上位ビット(MSB)によって区別さ
れると仮定する。ポインタのMSBは零であり、リンク
のMSBは1である。
【0069】図15は、ノード603を含む作成領域6
01を有する一般参照符号600で示されたリンク参照
作成領域を示す。作成領域601は、その現スキャビン
ジ動作に関する確認値を含む領域確認値605に関連付
けられる。好ましい実施形態はまず、領域確認値605
を零に初期設定し、次いで各スキャビンジ動作時に領域
確認値605を増分する。リンク607は、「リンク・
オフセット」フィールド609と「リンク確認」フィー
ルド611とを含む。「リンク・オフセット」フィール
ド609は、ノード603を指定するために使用され
る、作成領域601へのオフセットを含む。「リンク確
認」フィールド611は、リンク607が作成されたと
き(すなわち、ノードが割り振られたとき)の作成領域
601に関する確認変数の内容のコピーを含む。ある種
のベース・アドレス613は、作成領域601の始めの
アドレスを含む。相等性比較(equality comparison )
615は、領域確認値605の内容と「リンク確認」フ
ィールド611の内容との相等性比較を行う。したがっ
て、ノード603を参照するためにリンク607が供給
されると、「リンク確認」フィールド611の内容と領
域確認値605の内容が等しいかどうかが比較される。
領域確認値605の内容と「リンク確認」フィールド6
11の内容が等しい場合、加算演算617によって「リ
ンク・オフセット」フィールド609と作成ベース・ア
ドレス613が加算され、ノード603のアドレスが得
られる。しかし、「リンク確認」フィールド611と領
域確認値605が異なる場合、リンク607が構築され
た後に作成領域601がスキャビンジされており、した
がって、ノード603は作成領域601からポインタ参
照ヒープ領域(図示せず)にコピーされている。この場
合、後述のように、ポインタ参照ヒープ領域内のノード
603の新しい位置が見つけられリンクがポインタに変
換される。
【0070】図16は、一般参照符号620で示された
リンク・ポインタ変換テーブルを示す。リンク・ポイン
タ変換テーブル620は列の行として構成される。各行
は、作成領域601からコピーされたノードに関係する
データを含む。列は、「リンク確認」フィールド621
と、「リンク・オフセット」フィールド623と、「ノ
ード・ポインタ」フィールド625とを含む。「リンク
確認」フィールド621は、作成領域601内にノード
603が作成されたときのノード603の確認値を含
む。「リンク・オフセット」フィールド623は、作成
領域601内にノード603が作成されたときのノード
603のリンク・オフセット確認値を含む。「ノード・
ポインタ」フィールド625は、コピーされたノードを
指し示すポインタ(現アドレス)を含む。したがって、
第1のエントリ627は、作成領域601の始めからワ
ード・オフセット「15」の位置に配置され、現在は第
1のエントリ627の「ノード・ポインタ」フィールド
625で指定された位置に存在する、スキャビンジ
「1」よりも前に作成されたノード「A」にリンクを関
連付けるエントリを含む。同じことが第2のエントリ6
29にも当てはまるが、ノード「Z」には当てはまらな
い。第3のエントリ631は、作成領域601の始めか
らワード・オフセット「15」の位置に配置され、現在
は第3のエントリ631の「ノード・ポインタ」フィー
ルド625で指定された位置に存在する、スキャビンジ
「1」からスキャビンジ「2」までの間に作成されたノ
ード「W」にリンクを関連付ける。第1のエントリ62
7の「リンク・オフセット」フィールド623と第3の
エントリ631の「リンク・オフセット」フィールド6
23が同じであることに留意されたい。したがって、ノ
ード「A」とノード「W」は共に、作成領域601の同
じ位置に割り振られているが、それぞれの異なる時間に
割り振られている(「リンク確認」フィールド621内
のそれぞれの異なる値で示されている)。当業者には、
このテーブルを具体化する多数の可能な構造が存在する
ことが理解されよう。これらの構造には、制限なしに、
すべてのエントリ用の連続テーブルと、「リンク確認」
フィールド621の各値ごとのリンク・テーブルと、当
業者に知られている他の多数の構成が含まれる。
【0071】図17は、ノードにリンクが与えられた場
合にそのノードにアクセスするために使用される、一般
参照符号640で示されたリンク・アクセス・プロセス
を示す。リンク・アクセス・プロセス640は、「開
始」ターミナル641から始まり決定手続き643に進
み、リンクの「リンク確認」フィールド611の内容が
作成領域601の領域確認値605の内容に一致するか
どうかが判定される。「リンク確認」フィールド611
の内容と領域確認値605の内容が一致する場合、プロ
セスは「作成領域ノード・アクセス」手続き645に進
み、作成領域601に記憶されているノードがアクセス
される。このアクセスは、作成ベース・アドレス613
に「リンク・オフセット」フィールド609を加えてノ
ードを指し示すポインタを構築することによりノードを
指し示すポインタを生成することによって行われる。次
に、リンク・アクセス・プロセス640は「終了」ター
ミナル647を通じて完了する。しかし、決定手続き6
43で、「リンク確認」フィールド611の内容と領域
確認値605の内容が一致しない場合、作成領域からノ
ードがコピーされている。この場合、プロセスは「一致
確認」手続き649に進み、リンク・ポインタ変換テー
ブル620において、リンク・ポインタ変換テーブル6
20内の「リンク確認」フィールド621と与えられた
リンクの「リンク確認」フィールド611との一致が探
索される。一致が見つかった後、リンク・アクセス・プ
ロセス640は「一致オフセット」手続き651に進
み、リンク・ポインタ変換テーブル620の「リンク・
オフセット」フィールド623において、「リンク・オ
フセット」フィールド609の内容に一致するエントリ
が探索される。リンク・ポインタ変換テーブル620内
で一致するエントリが見つかると、リンク・アクセス・
プロセス640は「ノード・ポインタ取出し」手続き6
53に進み、リンク・ポインタ変換テーブル620内の
一致するエントリの「ノード・ポインタ」フィールド6
25から、コピーされたノードを指し示すポインタが検
索される。この検索されたポインタを使用して、ポイン
タ参照ヒープ領域内のコピー済みノードがアクセスされ
る。次に、リンク・アクセス・プロセス640は「参照
更新」手続き655に進み、参照手続きに、ノードとの
記憶されているリンクを、ノードを指し示すポインタで
置き換えさせることによって、ノード参照がリンク形式
からポインタ形式に更新される。リンク・アクセス・プ
ロセス640は「終了」ターミナル647を通じて完了
する。
【0072】当業者には、リンクを使用して作成領域6
01に存在するノードを参照することによって、スキャ
ビンジ動作のポインタ更新部に割り込めることが理解さ
れよう。したがって、作成領域601からコピーされた
ノードに対するすべての参照を完全に更新するために必
要な時間を吸収できないリアルタイム・システムは、ア
プリケーションのリアルタイム性に影響を与えずに、利
用可能な時間内にコピー済みノードに対する参照を部分
的に更新することができる。前述のように、コピー済み
ノードに対するリンク参照が検出され、更新プロセスが
割り込まれる周期中にコピー済みノードに対する直接ポ
インタ参照に変更される。
【0073】世代別ガーベジ収集技法の主要な利点の1
つは、まだスキャビンジ時に存在しているノードしか調
べないことである。しかし、この利点は、弱いポインタ
を使用する際には失われる。弱いポインタとは、参照さ
れるノードの存在期間に影響を与えずにノードを参照す
るポインタのことである。従来技術のガーベジ収集技法
は弱いポートを直接ポインタとして実施する。したがっ
て、スキャビンジ時には、すべての自由なノードを探索
し、自由なノードに対する弱いポインタ参照がスキャビ
ンジ以後に存在することがなくなるようにしなければな
らない。この探索は、生成ガーベジ収集技法の上述の利
点に影響を及ぼす。
【0074】しかし、リンクを使用して、参照されるノ
ードの存在期間に影響を与えずにノードを参照する弱い
ポインタを実施することができる。この実施形態では、
スキャビンジ以後に存在するノードしか走査しないとい
う本来の利点が得られる。スキャビンジ以後になくなる
ノードは、リンク・ポインタ変換テーブル内に対応する
エントリを有さない。リンク・ポインタ変換テーブル内
にエントリを有さないリンクはガーベジ収集されたノー
ドに過ぎない。ガーベジを指し示す弱い参照によって、
都合の良いときにガーベジ・ノードを割り振り直すこと
ができる。
【0075】図18は、一般参照符号660で示された
部分ノード・リストを示す。部分ノード・リスト660
は複数のノード記述子661、663、665、667
を含む。各ノード記述子は、「次の記述子」ポインタ6
69、すなわち部分ノード・リスト660の次のノード
記述子を指し示すポインタを含む。また、各ノード記述
子は、ヒープ内の有効ノードまたはガーベジ・ノードと
のリンクを含むアクティブ・ノード・リンク671を含
む。各ノード記述子は、リンクされたノードに関する追
加情報を含む「ノード情報」フィールド673も含む。
この情報は通常、リンクされたノードの状況とサイズか
らなる。ノード記述子661は第1のアクティブ・ノー
ド675を参照する。同じことが、第2のアクティブ・
ノード677、ガーベジ・ノード679、第3のアクテ
ィブ・ノード681を参照する残りの複数のノード記述
子663、665、667に当てはまる。ガーベジ・ノ
ード679はノード記述子665によって参照され、直
接ポインタではなくリンクがアクティブ・ノード・リン
ク683に記憶されるため、ガーベジ収集プロセスは、
ガーベジ・ノード679の存在期間に影響を与えずにガ
ーベジ・ノード679を参照することができる。
【0076】本発明は、カード・マーク付けに関係する
技法も包含する。カード・マーク付けは、ヒープの増大
する領域を示す場合に有用である。ライト・バリア技法
は、どのカードが修正されているかを示し、したがっ
て、検査する必要のあるヒープの量を制限することによ
って修正済みポインタを見つける動作を最適化する助け
となる。カード・マーク付けを使用して、古い世代内の
どのノードが新しい世代を指し示すポインタを含むかを
示すこともできる。したがって、ヒープの特定のカード
付き領域は、それぞれ、特定の目的向けにカスタマイズ
された、複数のマーク付けベクトルを有することができ
る。
【0077】図19は、カード付きヒープ・メモリ領域
701内のノード参照の位置を判定するために使用され
る、一般参照符号700で示されたカード・マーク付け
構造を示す。好ましい一実施形態では、ノード参照はノ
ードの始めである。他の好ましい実施形態では、ノード
参照はノードのヘッダである。ガーベジ収集プロセスで
は、ノードに記憶されている情報を使用してカード内の
ポインタを見つけなければならないので、マーク付きカ
ードが与えられた場合、ノードの始めまたはヘッダを判
定することは有用である。このようなポインタはルート
・セットに加えられることが多い。ノード前進値を使用
することによって、カード内の以後のノードが見つけら
れる。このノード前進値がノード参照位置に加えられ、
プロセスは次のノード内のノード参照に進む。下記の議
論では、ノード参照としてノードの始めを使用し、ノー
ド前進値としてノード・サイズを使用する。図19で
は、カード付きヒープ・メモリ領域701内で複数のノ
ード703、705、707、709が分散されるよう
に示されている。「ノード開始」ベクトル711は、カ
ード付きヒープ・メモリ領域701内のどのカードがノ
ードの開始境界を含むかを示す。第1の好ましい実施形
態では、この表示は、「ノード開始」ベクトル711内
にカード当たり1ビットで記憶される。したがって、図
19では、第4のノード709の開始境界がカード71
3内にあるので、「ノード開始」ベクトル711内の対
応するエントリ715が設定される。カード717は開
始境界を含まないので、「ノード開始」ベクトル711
内の対応するエントリ719はクリアされている。当業
者には、「ノード開始」ベクトル711値が、ノード境
界ではなくノード・ヘッダの位置を示すこともできるこ
とが理解されよう。この手法は、図6、7に関連して説
明した分岐データ構造を含むノードと共に使用すること
ができる。
【0078】関連するカードの始めからカード内の第1
のノード境界までのオフセットを含む、「ノード・オフ
セット」構造721に含まれるフィールドが、「ノード
開始」ベクトル711内の各ヘッダ・カードに対応す
る。この好ましい実施形態では、このフィールドはバイ
ト・フィールドであり、したがって、カードの長さは最
大で256個のアドレス可能なメモリ単位(通常はワー
ド)であってよい。たとえば、カード713に関連付け
られた「ノード・オフセット」フィールド723は値
「112」を含む。したがって、カード713の始めか
ら112個のワードが第1のノード境界であり、これは
第4のノード709の境界である。
【0079】カード内の第1のノードの始めが見つかっ
た後、その後に続くノードを調べ、ノードがノード・サ
イズと、ノード内のどの変数がポインタを含むかに関す
る表示とを含む場合にポインタを収集することができ
る。したがって、カード内の変更済みポインタまたは新
旧ポインタを示すマーク付きカードが与えられた場合、
プロセスは「ノード開始」ベクトル711および「ノー
ド・オフセット」構造721を使用して、マーク付きカ
ードと重なり合うノードを迅速に見つけ処理する。
【0080】図20は、図19の「ノード・オフセッ
ト」構造721および「ノード開始」ベクトル711が
「圧縮ノード・オフセット」構造731として組み合わ
される実施形態における、一般参照符号730で示され
たカード・マーク付け構造を示す。図20のカード付き
ヒープ・メモリ領域701、第1のノード703、第2
のノード705、第3のノード707、第4のノード7
09は図19のものと同じである(カードのサイズを除
く)。この実施形態では、「圧縮ノード・オフセット」
構造731は、図19に示した「ノード開始」ベクトル
711の機能と「ノード・オフセット」構造721の機
能を組み合わせるバイト・フィールドを含む。この実施
形態の1つの効果は、カードが、図19のカード・マー
ク付け構造700とは異なり256個以上のアドレス可
能なメモリ単位が許容されるのではなく最大で128個
のアドレス可能なメモリ単位(この場合も通常はワー
ド)に制限されることである。この実施形態では、値が
最大で127である場合は、あるカードがノード境界を
含むことを示し、そのカード内の第1のノード境界が指
定される。ノード境界を含まないカードは値128によ
って示される。ノード・オフセット及びノード境界組合
せインジケータ・フィールド733の値が112である
場合は、カード713がノード境界を含むことを示し、
そのカード内の第1のノード境界が指定される。ノード
・オフセット及びノード境界組合せインジケータ・フィ
ールド733の値が128である場合は、カード717
がノード境界を含まないことを示す。
【0081】図21は、一般参照符号750で示された
ノード検索プロセスを示す。ノード検索プロセス750
は「開始」ターミナル751から始まり、「マーク付き
カードのインデックスの取出し」手続き753に進む。
「マーク付きカードのインデックスの取出し」手続き7
53は、ノード内のアドレスを含むポインタを受け取っ
てそのアドレスからカード・インデックスを生成し、あ
るいは単にマーク付きカードのインデックスまたは他の
何らかのカード識別子を受け取る。次いで、「前のカー
ド内のノード境界の検索」手続き755で、「ノード開
始」ベクトル711がアクセスされ、前のインデックス
開始から、ノード境界を含むカードが見つかるまで、
「ノード開始」ベクトル711が走査される。当業者に
は、カードを修正するのではなくノード境界を含むカー
ドにマーク付けするライト・バリア処理系に対して「前
のカード内のノード境界の検索」手続き755をどのよ
うに修正すればよいかが理解されよう。次いで、ノード
検索プロセス750は、「カード内の第1のノード境界
へのオフセットの取出し」手続き757に進み、カード
内の第1のノードの境界の関連するオフセットが検索さ
れる。次いで、「順方向走査による関連ノードの検索」
手続き759によって、マーク付きカードと交差するノ
ードが見つかるまでノードが順方向に追跡される。次
に、「ノード処理」手続き761で、ノード内のポイン
タが処理される。その後に続くカード内のポインタも処
理される。最後に、ノード検索プロセス750は「終
了」ターミナル763を通じて完了する。
【0082】したがって、カード付きメモリ領域内のア
ドレスまたはカード・インデックスが与えられた場合、
本発明は、マーク付きカードに関係するポインタを含む
ノードを迅速に見つける。
【0083】上記で図3に関して説明したように、カー
ド・マーク付けを世代別ガーベジ収集アルゴリズムと共
に使用するときの1つの目標は、ヒープの作成領域内の
オブジェクトを参照しないヒープのコピーされた世代領
域内のオブジェクトをスキップすることである。しか
し、この目標は、古い世代内のそのようなノードの密度
が、大部分のカードがマーク付けられるほど高い場合に
は失われる。
【0084】本発明の好ましい実施形態の効果を図22
に示す。本発明の好ましい実施形態は、スキャビンジ時
に、新しい世代を指し示すポインタを含むノードがロー
カライズされるように古い世代を再順序付けする。
【0085】図22は、図3に示した「カード・マーク
付け構造」140に対する本発明の動作の結果として得
られる一般参照符号800で示したカード・マーク付け
構造を示す。ヒープ801の新しい領域は少なくとも1
つのノード803、805、807を含む。ヒープ80
9の古い世代領域は複数のカード811、813として
セグメント化される。カード811はカード・マーカ8
15に関連付けられ、カード813はカード・マーカ8
17に関連付けられる。カード境界819はカード81
1の終わりおよびカード813の始めを示す。ヒープ8
09の古い世代領域は、「ノードE」823と「ノード
C」825とを含め「いくつかのノード(Aないし
F)」821を含む。カード・マーク付け構造800
で、「ノードE」823はノード805を指し示すポイ
ンタを含み、「ノードC」825はヒープ801の新し
い領域内のノード803を指し示すポインタを含む。カ
ード811内のノードがヒープ801の新しい領域を参
照するので、カード・マーカ815がマーク付けされて
いる。この例では、「ノードE」823と「ノードC」
825が共にヒープ801の新しい領域を参照する。カ
ード813内のノードはヒープ801の新しい領域を参
照しないので、カード・マーカ817はマーク付けされ
ていない。したがって、カード・マーク付けの目標は、
ヒープ801の新しい領域を指し示すポインタを含むヒ
ープ809の古い世代領域内のノードをローカライズす
ることによって達成される。
【0086】図23は、一般参照符号850で示された
ノード収集プロセスを示す。ノード収集プロセス850
は「開始」ターミナル851から始まり、反復手続き8
53に進む。反復手続き853は、収集中の世代のすべ
てのマーク付きカードに対して反復される。「ポインタ
・ノード収集」手続き855で、新しい世代を指し示す
ポインタを含む各ノードまたは部分ノードが収集され
る。当業者は、カード境界を横切るノードを処理するこ
とができる。「非ポインタ・ノード記憶」手続き857
で、新しい世代を指し示すポインタを有さないカード内
の各ノードが記憶される。プロセスは、すべてのマーク
付きカードが処理されるまで反復手続き853を繰り返
す。したがって、図22に示したように、新しい世代を
指し示すポインタを有する世代内のすべてのノードがメ
モリ内でローカライズされる。当業者には、この収集手
続きによって、コピーされた世代の適切なカードがマー
ク付けされることが理解されよう。次に、プロセスは
「記憶されたノードの収集」手続き859に進み、「非
ポインタ・ノード記憶」手続き857中に記憶されたノ
ードが収集される。このようなノードは、新しい世代を
指し示すポインタを含まず、したがってコピーされた世
代領域へ転送するだけでよい。次に、反復手続き861
で、あらゆる未マーク・カードが調べられる。未マーク
・カード内の各ノードは、「カード内のノードの収集」
手続き863によって収集される。プロセスは、すべて
の未マーク・カードが処理されるまで反復手続き861
を繰り返す。最後に、プロセスは「終了」ターミナル8
65を通じて完了し、図22のカード・マーク付け構造
800が残る。
【0087】カード・マーク付きヒープ内のポインタを
見つける際の効率を高める他の方法は、ポインタを含む
データ構造に関する追加情報を与えることである。特
に、この追加情報は、データ構造のアレイへのインデッ
クスとしてループ制御変数を使用するプログラム・ルー
プによってデータ構造内のどの変数が変更されているか
を指定する。さらに、本発明は、ポインタ値のポインタ
・アレイへの割当動作に関連付けられたライト・バリア
命令を、ループの反復部分内から移動させることによっ
て、ループの効率を高める。したがって、本発明のこの
形態は、カード・マーク付きヒープ内のポインタ・アレ
イに値を割り当てる際にプログラムの実行速度を向上さ
せる。本発明の他の形態は、カード・マーク付きヒープ
内の修正済みポインタを見つけるガーベジ収集動作の効
率を高める。
【0088】図24は、カード・マーク付きヒープ90
1を有する、一般参照符号900で示されたメモリのカ
ード・マーク付き領域を示す。カード・マーク付きヒー
プ901は、カード905内に始めを有するポインタ・
アレイ構造903を含む。ポインタ・アレイ構造903
内のあるポインタ値がループの実行時に修正されている
ので、カード・マーカ907は後述のようにマーク付け
される。
【0089】図25は、一般参照符号910で示された
ポインタ・アレイ構造を示す。ポインタ・アレイ構造9
10はアレイ・ヘッダ911とアレイ・データ領域91
2とを含む。アレイ・ヘッダ911は、アレイ・データ
領域912内に含まれるポインタ・データをパラメータ
化するために使用され、「最初」フィールド913と
「最後」フィールド915と、「ストライド」フィール
ド917と、「ポインタ・アレイ初期設定」フィールド
919とを含む。アレイ・データ領域912は、ポイン
タ・アレイ構造910内の他のポインタ要素を囲む「最
初アレイ・ポインタ」要素921と「最後アレイ・ポイ
ンタ」要素923とを含む。「最初」フィールド913
は、アレイ・データ領域912内で最初に変更された要
素のインデックスを含む。「最後」フィールド915
は、アレイ・データ領域912内で最後に変更された要
素のインデックスを含む。「ストライド」フィールド9
17は、アレイ・データ領域912内の変更された各要
素間のストライドを含む。「ポインタ・アレイ初期設
定」フィールド919は「最初」フィールド913の初
期値を含む。「ポインタ・アレイ初期設定」フィールド
919内の情報は、カード・マーク付きヒープ901に
対するスキャビンジ動作が完了した後に「最初」フィー
ルド913をリセットするために使用される。「最初」
フィールド913の初期値は最大アレイ・インデックス
である。「最後」フィールド915の初期値は零であ
る。「ストライド」フィールド917の初期値も零であ
る。これらのフィールドは、スキャビンジ動作後にそれ
ぞれの初期値にリセットされる。
【0090】「C」の「for」文(および他のプログ
ラミング言語の同様なループ文)は、開始インデックス
と、終了インデックスと、ストライドとを含む。「fo
r」文は開始インデックスを制御変数に割り当てる。ス
トライドは、制御変数が終了インデックスに達するまで
「for」文の各反復時にこの制御変数に追加され、制
御変数が終了インデックスに達した時点で「for」文
が完了する。したがって、そのような反復文内の制御変
数でインデックス付けされたポインタ・アレイ構造91
0の要素にポインタを割り当てると、ポインタ・アレイ
構造910内でポインタ割当パターンが形成される。こ
のパターンは、ヒープにおいてポインタを走査する際に
ガーベジ収集アルゴリズムによって使用される。当業者
には、本発明が、「for」文だけでなく一般的なルー
プ構造にも有用であることが理解されよう。
【0091】図26は、ポインタ・アレイ構造910に
アクセスするループに対してアレイ・ヘッダ911を動
的に修正するために実行プログラムによって使用され
る、一般参照符号930で示された「ポインタ・アレイ
・マーク付け」プロセスを示す。このプロセスの初期開
始条件は、ポインタ・アレイ構造910が存在し、アレ
イ・ヘッダ911が初期設定されており、場合によって
はポインタ・アレイ構造910に対する前のループ動作
によって修正されていることである。「ポインタ・アレ
イ・マーク付け」プロセス930では、アレイ・ヘッダ
911の初期値から得られる「A.最初、A.最後、
A.ストライド」の値を含む「A」変数と、ポインタ割
当の現在のループのパターンから得られる「C.最初、
C.最後、C.ストライド」の値を含む「C」変数と、
「A」変数と「C」変数をマージした結果として得られ
る「M.最初、M.最後、M.ストライド」の値を含む
「M」変数の3つの変数を使用する。「A」変数はアレ
イ・ヘッダ911に過ぎない。「M」変数は最終的に、
「ポインタ・アレイ・マーク付け」プロセス930中に
アレイ・ヘッダ911に記憶される。
【0092】「ポインタ・アレイ・マーク付け」プロセ
ス930は「開始」ターミナル931から始まり、「C
初期設定」手続き932に進む。「C初期設定」手続き
932では、現ループが使用する開始インデックス、終
了インデックス、ストライドが変数「C」に記憶され
る。次に、「ヒープ非整合マーク付け」手続き933
で、ポインタ・アレイ構造910を含むヒープ領域に非
整合のマークが付けられる。ヒープ領域に非整合のマー
クを付けると、ガーベジ収集プロセスが、ループの実行
中に領域のスキャビンジを試みることはなくなる。「ヒ
ープ非整合マーク付け」手続き933ではまた、ヒープ
に非整合のマークが付けられた後、カード・マーカ90
7が、カード905から始まるポインタ・アレイ構造9
03内のあるポインタ位置が修正されたことを示すよう
に設定される。次に、「M.最初」手続き935によっ
て、M.最初がA.最初およびC.最初の最小値に設定
される。次いで、「M.最後」手続き937によって、
M.最後がA.最後およびC.最後の最大値に設定され
る。「ポインタ・アレイ・マーク付け」プロセス930
は決定手続き939に進み、A.ストライドの値がC.
ストライドの値に等しくないかどうかが検出される。こ
れらの値が等しくない場合、「ポインタ・アレイ・マー
ク付け」プロセス930は「M.ストライドを1に設
定」手続き941に進み、M.ストライドが値「1」に
初期設定される。そうでない場合、「ポインタ・アレイ
・マーク付け」プロセス930は「M.ストライドを
A.ストライドに設定」手続き943に進み、M.スト
ライドがA.ストライドの値に初期設定される。「M.
ストライドを1に設定」手続き941が実行されるか、
それとも「M.ストライドをA.ストライドに設定」手
続き943が実行されるかにかかわらず、「ポインタ・
アレイ・マーク付け」プロセス930はループ手続き9
45に進む。ループ手続き945では、ポインタ・アレ
イ構造910に対するループ動作が行われる。次に、
「Aの更新」手続き947によって、「M」変数内の修
正済み値が再びアレイ・ヘッダ911に記憶される。当
業者には、ループ手続き945を実行する前に「Aの更
新」手続き947を実行しておくことができることが理
解されよう。次いで、「ヒープ整合マーク付け」手続き
949によって、ガーベジ収集プロセスが領域をスキャ
ビンジできるようにヒープに整合のマークが付けられ
る。最後に、「ポインタ・アレイ・マーク付け」プロセ
ス930は「終了」ターミナル951を通じて完了す
る。当業者には、ポインタ・アレイ構造910にポイン
タを割り当てる複数のループによってアレイ・ヘッダ9
11が動的に更新され、それによって、スキャビンジ動
作間にアレイ・データ領域912内のどの要素が修正さ
れたかがパラメータ化されることが理解されよう。
【0093】図27は、一般参照符号960で示された
コンパイラ最適化プロセスを示す。コンパイラ最適化プ
ロセス960は、コンパイラの最適化フェーズ中に実行
される。このプロセスでは、図26で説明した「ポイン
タ・アレイ・マーク付け」プロセス930が、下限と上
限とを有するアレイにアクセスするために使用される一
般に使用されているいくつかのループに対して修正され
る。このループは、C.最初、C.最後、C.ストライ
ドの各記述子を有する。コンパイラ最適化プロセス96
0は「開始」ターミナル961から始まり決定手続き9
63に進み、C.最初が、アクセス中のアレイの下限
(A.下限)と比較される。ループがアクセスしている
アレイの第1の要素がアレイの第1の要素と同じである
場合、コンパイラ最適化プロセス960は「ステップ7
35の最適化」手続き965に進み、M.最初をアレイ
の下限(A.下限)に設定し、したがって未最適化最小
値演算を簡単な割当に低減するターゲット・アプリケー
ション用のコードが生成される。決定手続き963の結
果にかかわらずに、コンパイラ最適化プロセス960は
決定手続き967に進み、C.最後が、アクセス中のア
レイの上限(A.上限)と比較される。ループがアクセ
スしているアレイの最後の要素がアレイの最後の要素と
同じである場合、コンパイラ最適化プロセス960は
「ステップ737の最適化」手続き969に進み、M.
最後をアレイの上限(A.上限)に設定し、したがって
未最適化最大値演算を簡単な割当に低減するターゲット
・アプリケーション用のコードが生成される。決定手続
き967の結果にかかわらずに、コンパイラ最適化プロ
セス960は決定手続き971に進み、C.ストライド
が値1と比較される。C.ストライドが値1に等しい場
合、コンパイラ最適化プロセス960は「ステップ73
9ないし743の最適化」手続き973に進み、ステッ
プ739、741、743を使用するのではなくM.ス
トライドの値を値1に設定し、したがって「ポインタ・
アレイ・マーク付け」プロセス930を最適化するター
ゲット・アプリケーション用のコードが生成される。決
定手続き971の結果にかかわらずに、コンパイラ最適
化プロセス960は「終了」ターミナル975を通じて
完了する。
【0094】図28は、一般参照符号980で示された
アレイ・スキャビンジ・プロセスを示す。アレイ・スキ
ャビンジ・プロセス980は、ガーベジ収集プロセスに
よって修正済みポインタ・アレイを含むカードが検出さ
れているときに「開始」ターミナル981から始まる。
アレイ・スキャビンジ・プロセス980は、ポインタ・
アレイ構造910を指し示すポインタを受け取り、「ル
ープ初期設定」手続き983に進む。「ループ初期設
定」手続き983では、ポインタ・アレイ構造910内
の修正済みポインタに関する情報がアレイ・ヘッダ91
1から検索される。次に、アレイ・ヘッダ911によっ
て指定されたポインタに対して「アレイに対するルー
プ」手続き985が繰り返される。「アレイに対するル
ープ」手続き987が完了すると、アレイ・スキャビン
ジ・プロセス980は「アレイ・ヘッダ・リセット」手
続き987に進み、アレイ・ヘッダ911内のフィール
ドが初期状態にリセットされる。この時点で、カード・
マーカ907もクリアされ、ポインタ・アレイ構造91
0内に未処理のポインタ修正がないことが示される。ア
レイ・スキャビンジ・プロセス980は次いで、「終
了」ターミナル989を通じて完了する。「アレイに対
するループ」手続き985の各反復では「ポインタ処
理」手続き991が実行され、ガーベジ収集アルゴリズ
ムの要件に応じて、反復されたポインタが処理される。
【0095】カード付きヒープ・メモリのカード・マー
ク付けメモリは、カード付きヒープ・メモリ領域自体よ
りもずっと小さい。しかし、大形のカード付きヒープ・
メモリのカード・マーク付けメモリを走査するオーバヘ
ッドは非常に高くなる恐れがある。このオーバヘッド
は、カード・マーク付けメモリの一部しか走査しなくて
よい場合には低減される。本発明の一形態は、カード・
マーク付けメモリをいくつかのセクションに関連付け
る。これらのセクションは、そのセクションによって制
御されるカード・マーカがマーク付けされていることを
示すようにフラグ付けされる。フラグ付けされたセクシ
ョン内のカード・マーカのみが走査される。
【0096】図29は、複数のカード1003、100
5、1007、1009を含むカード付きヒープ・メモ
リ領域1001を含む、一般参照符号1000で示され
たカード・マーク付け構造を示す。第1の修正済みカー
ド1003および第2の修正済みカード1005は、最
後のスキャビンジ動作の後に続く書込み動作のターゲッ
トである。第1の未修正カード1007および第2の未
修正カード1009は、最後のスキャビンジの後に続く
書込み動作を受けていない。カード付きヒープ・メモリ
領域1001は、カード・ベクトル1011、すなわち
カード・マーク付けメモリに関連付けられる。カード・
ベクトル1011はセクション・ベクトル1013に関
連付けられる。セクション・ベクトル1013はセクシ
ョン「Z」エントリ1015とセクション「Z+1」エ
ントリ1017とを含む。
【0097】カード・ベクトル1011は、第1のマー
ク付きカード・マーカ1019と、第2のマーク付きカ
ード・マーカ1021と、第1の未マーク・カード・マ
ーカ1023とを含む。第1のマーク付きカード・マー
カ1019は第1の修正済みカード1003に関連付け
られる。第2のマーク付きカード・マーカ1021は第
2の修正済みカード1005に関連付けられる。第1の
未マーク・カード・マーカ1023は第1の未修正カー
ド1007に関連付けられる。
【0098】「セクション「Z」」エントリ1015は
カード・ベクトル1011の「セクションZ」部102
5に関連付けられる。「セクション「Z+1」」エント
リ1017は、第2の未修正カード1009に関連付け
られた第2の未マーク・カード・マーカ1029を含む
カード・ベクトル1011の「セクション「Z+1」」
部1027に関連付けられる。
【0099】したがって、カード付きヒープ・メモリ領
域1001のサイズが226ワードであり、各カードのサ
イズが28ワードであると仮定すると、カード・ベクト
ル1011のサイズは218バイトである。セクション・
ベクトル1013内の各セクションが212バイトをカバ
ーすると仮定すると、カード付きヒープ・メモリ領域1
001をカバーするのに必要なセクションは26個に過
ぎない。したがって、修正される可能性の高いメモリが
ローカライズされるようにカード付きヒープ・メモリ領
域1001を構成する場合、そのセクションに関連付け
られたカードがマーク付けされていることを示すように
フラグ付けされたセクションのセクション・ベクトル1
013を最初に走査することによって、かなりの処理時
間を節約することができる。
【0100】図30は、一般参照符号1030で示され
たセクション構造を示す。セクション構造1030はセ
クション・ベクトル1013内の各セクション(「セク
ション「Z」」エントリ1015など)に関連付けられ
る。「セクションR/W状況」フィールド1031は、
セクションの読取り−書込み状況を含む。「セクション
R/W状況」フィールド1031の内容は読取り−書込
みと読取り専用のどちらかである。「セクションR/W
状況」フィールド1031は、このセクションに関する
カード・ベクトル1011の部分に関連付けられたカー
ド付きヒープ・メモリ領域1001の内容がめったに作
成領域を参照しないと考えられる場合には読取り専用状
況を含む。この読取り専用属性は、セクション構造10
30によって制御されるカード・ベクトル1011の部
分に対するハードウェアによってサポートされる読取り
専用保護に関連付けられる。したがって、カード付きメ
モリへの書込み動作時にライト・バリアがカードにマー
ク付けしようとすると、カード・マーカへの書込み動作
はハードウェアによってトラップされる。その場合、ハ
ードウェアはメモリ・アクセス障害を示す。後述のよう
に、本発明は、書込みが試みられたという通知を受け、
セクション構造1030に対する動作を実行し、「セク
ションR/W状況」フィールド1031を読取り−書込
みとマーク付けし、セクション構造1030によって制
御されるカード・ベクトル1011の部分への書込みア
クセスをイネーブルする。ガーベジ収集プロセスでは、
読取り−書込み状況を含む「セクションR/W状況」フ
ィールド1031を有するセクションのセクション・ベ
クトル1013が走査される。「セクションR/W状
況」フィールド1031は読取り専用状況を含む場合、
ガーベジ収集プロセスでは、セクション構造1030に
よって制御されるカード・ベクトル1011の部分は調
べられず、したがってガーベジ収集プロセス中の時間が
節約される。セクション構造1030は、セクション構
造1030に関連付けられたメモリが最後に修正された
のはいつかを示す「最終修正時間」フィールド1033
も含む。本発明の好ましい実施形態では、「最終修正時
間」フィールド1033はスキャビンジ・サイクルに対
するものである。「セクション内の最初のカードを指し
示すポインタ」フィールド1035とは、セクション構
造1030に関連付けられたカード・ベクトル1011
内の第1のカード・マーカを指し示すポインタである。
「セクション内のカード数」フィールド1037は、セ
クション構造1030によって制御されるカードの数を
含む。「カウント・ダウン・タイマ」フィールド103
9は、毎スキャビンジ動作後に減分されるカウントダウ
ン・タイマを含む。
【0101】図31は、一般参照符号1050で示され
た「セクション・マーク付け」プロセスを示す。「セク
ション・マーク付け」プロセス1050は「開始」ター
ミナル1051から始まり「メモリ修正」手続き105
3に進み、カード内のメモリ位置が修正される。ライト
・バリアの一部として、「セクション・マーク付け」プ
ロセス1050は「カード修正」手続き1055でカー
ド・ベクトル1011を更新しようとする。カード・ベ
クトル1011内のカード・マーカが読取り−書込みで
ある場合、「メモリ保護」プロセス1057によって書
込み動作が完了し、したがってカード・マーカがマーク
付けされる。次に、「セクション・マーク付け」プロセ
ス1050は「終了」ターミナル1059を通じて完了
する。しかし、カード・ベクトル1011内のカード・
マーカが読取り専用である場合、「メモリ保護」プロセ
ス1057は、書込み動作が禁止されていることを検出
し、障害を示す。障害処理は「障害」ターミナル106
1から始まり「メモリ障害オーバヘッド」手続き106
3に進み、障害オーバヘッド関連手続きが実行される。
次いで、「書込み動作イネーブル」手続き1065によ
って、ターゲット・カード・マーカを含むカード・ベク
トル1011の部分の保護が読取り専用から読取り−書
込みに変更される。次に、「書込み動作完了」手続き1
067によって、カード・マーカに対するすでに障害が
発生している書込み動作が完了する。次いで、「セクシ
ョン構造更新」手続き1069によって、セクション構
造1030がダーティであるため次のスキャビンジ動作
時に走査しなければならないことを示すように「セクシ
ョンR/W状況」フィールド1031を更新する。最後
に、障害処理が「リターン」ターミナル1071を通じ
て完了し、「セクション・マーク付け」プロセス105
0が「終了」ターミナル1059を通じて完了する。
【0102】図32は、一般参照符号1080で示され
た「セクション収集」プロセスを示す。「セクション収
集」プロセス1080は「開始」ターミナル1081か
ら始まり反復手続き1083に進む。反復手続き108
3はセクション・ベクトル1013内のすべてのセクシ
ョンにわたって反復される。セクション・ベクトル10
13内の最後のセクションが処理された後、「セクショ
ン収集」プロセス1080は「終了」ターミナル108
5を通じて完了する。反復手続き1083の各反復時
に、決定手続き1087によって、「セクションR/W
状況」フィールド1031が読取り専用ではなく読取り
−書込みであるかどうかが判定される。「セクションR
/W状況」フィールド1031が読取り−書込みではな
い場合、「セクション収集」プロセス1080は反復手
続き1083の次の反復に進み、カード・ベクトル10
11の部分の各カード・マーカを無視する。しかし、
「セクションR/W状況」フィールド1031が読取り
−書込みである場合、プロセスは、反復されるセクショ
ンによって制御されるカード・ベクトル1011の部分
内の各カード・マーカに対して反復される反復手続き1
089に進む。各カードが「カード処理」手続き109
1によって処理され、その反復されるカードに対してス
キャビンジ関連動作が実行される。この処理時には、セ
クション内のカード・マーカがマーク付けされている場
合にフラグがセットされる。反復されるセクション内の
すべてのカードが処理された後、プロセスは決定手続き
1093に進み、反復されるセクション内にマーク付け
されているカード・マーカがあったかどうかが判定され
る。マーク付けされているカード・マーカがあった場
合、「セクション収集」プロセス1080は「タイマ・
リセット」手続き1095に進み、「カウントダウン・
タイマ」フィールド1039がリセットされ、セクショ
ン構造1030の「最終修正時間」フィールド1033
に現スキャビンジ動作時間が格納される。次に、「セク
ション収集」プロセス1080は反復手続き1083に
進み、次のセクションを処理する。しかし、決定手続き
1093で、反復されるセクション内にマーク付けされ
ているカード・マーカがなかった場合、「セクション収
集」プロセス1080は「タイマ減分」手続き1097
に進み、「カウント・ダウン・タイマ」フィールド10
39に記憶されている値が減分される。次に「タイマ検
査決定」手続き1098で、「カウント・ダウン・タイ
マ」フィールド1039の値が零であるかどうかが試験
される。「カウント・ダウン・タイマ」フィールド10
39が零ではない場合、「セクション収集」プロセス1
080は反復手続き1083に進み、次のセクションを
処理する。「カウント・ダウン・タイマ」フィールド1
039が零である場合、「セクションを読取り専用に設
定する」手続き1099では、カード・ベクトル101
1のそのセクションに書込み動作を試みると障害が発生
するようにメモリ保護ハードウェアが読取り専用に設定
される。「セクションを読取り専用に設定する」手続き
1099では、現セクション構造の「セクションR/W
状況」フィールド1031も読取り専用に設定される。
次に、「セクション収集」プロセス1080は反復手続
き1083に進み、次のセクション構造を処理する。
【0103】当業者には、前述の本発明が、単にポイン
タ値に関して走査することのできるデータ構造と、OO
P環境でのインスタンス化オブジェクトの形態を簡略化
するデータ構造の両方を与える方法、システム、装置、
プログラミング製品を教示するものであることが理解さ
れよう。
【0104】本発明を現在好ましい実施形態に関して説
明したが、当業者には、本発明の範囲から逸脱せずに様
々な修正および変形を加えられることが理解されよう。
したがって、本発明の範囲は、本明細書で論じる本発明
の特定の実施形態に限らず、添付の特許請求の範囲およ
びその等価物によってのみ定義すべきである。
【図面の簡単な説明】
【図1】オブジェクト指向インスタンス化オブジェクト
に関するヒープ収集、カード・マーク付け、サンプル・
メモリ構造の従来技術の形態を示す図である。
【図2】オブジェクト指向インスタンス化オブジェクト
に関するヒープ収集、カード・マーク付け、サンプル・
メモリ構造の他の従来技術の形態を示す図である。
【図3】オブジェクト指向インスタンス化オブジェクト
に関するヒープ収集、カード・マーク付け、サンプル・
メモリ構造の他の従来技術の形態を示す図である。
【図4】オブジェクト指向インスタンス化オブジェクト
に関するヒープ収集、カード・マーク付け、サンプル・
メモリ構造の他の従来技術の形態を示す図である。
【図5】好ましい実施形態によって本発明を使用するこ
とのできるコンピュータ・システムを示す図である。
【図6】第1の好ましい実施形態による、メモリ内のデ
ータ構造と、このデータ構造を使用してポインタを見つ
けるプロセスを示す図である。
【図7】第1の好ましい実施形態による、メモリ内のデ
ータ構造と、このデータ構造を使用してポインタを見つ
けるプロセスを示す図である。
【図8】好ましい実施形態による、メモリ内のデータ構
造とこのデータ構造を使用してインスタンス化オブジェ
クト内のポインタを処理するプロセスを示す図である。
【図9】好ましい実施形態による、メモリ内のデータ構
造とこのデータ構造を使用してインスタンス化オブジェ
クト内のポインタを処理するプロセスを示す図である。
【図10】好ましい実施形態による、メモリ内のデータ
構造とこのデータ構造を使用してインスタンス化オブジ
ェクト内のポインタを処理するプロセスを示す図であ
る。
【図11】好ましい実施形態による、メモリ内のデータ
構造とこのデータ構造を使用してインスタンス化オブジ
ェクト内のポインタを処理するプロセスを示す図であ
る。
【図12】好ましい実施形態による、メモリ内のデータ
構造と、このデータ構造を使用してハッシュ値を初期設
定するプロセスを示す図である。
【図13】好ましい実施形態による、メモリ内のデータ
構造と、このデータ構造を使用してハッシュ値を初期設
定するプロセスを示す図である。
【図14】好ましい実施形態による、メモリ内のデータ
構造と、このデータ構造を使用してハッシュ値を初期設
定するプロセスを示す図である。
【図15】好ましい実施形態による、メモリ内のデータ
構造と、このデータ構造を使用してノードとのリンクを
作成し使用するプロセスを示す図である。
【図16】好ましい実施形態による、メモリ内のデータ
構造と、このデータ構造を使用してノードとのリンクを
作成し使用するプロセスを示す図である。
【図17】好ましい実施形態による、メモリ内のデータ
構造と、このデータ構造を使用してノードとのリンクを
作成し使用するプロセスを示す図である。
【図18】好ましい実施形態による、メモリ内のデータ
構造と、このデータ構造を使用してノードとのリンクを
作成し使用するプロセスを示す図である。
【図19】好ましい実施形態による、メモリ内のデータ
構造と、このデータ構造を使用してカード付きメモリ領
域内のノードを見つけるプロセスを示す図である。
【図20】好ましい実施形態による、メモリ内のデータ
構造と、このデータ構造を使用してカード付きメモリ領
域内のノードを見つけるプロセスを示す図である。
【図21】好ましい実施形態による、メモリ内のデータ
構造と、このデータ構造を使用してカード付きメモリ領
域内のノードを見つけるプロセスを示す図である。
【図22】好ましい実施形態による、コピーされたヒー
プ領域のカード・マーク付けを示す図である。
【図23】好ましい実施形態による、コピーされたヒー
プ領域のカード・マーク付けを示す図である。
【図24】好ましい実施形態による、データ構造とポイ
ンタ・アレイにカード・マーク付けするプロセスを示す
図である。
【図25】好ましい実施形態による、データ構造とポイ
ンタ・アレイにカード・マーク付けするプロセスを示す
図である。
【図26】好ましい実施形態による、データ構造とポイ
ンタ・アレイにカード・マーク付けするプロセスを示す
図である。
【図27】好ましい実施形態による、データ構造とポイ
ンタ・アレイにカード・マーク付けするプロセスを示す
図である。
【図28】好ましい実施形態による、データ構造とポイ
ンタ・アレイにカード・マーク付けするプロセスを示す
図である。
【図29】好ましい実施形態による、ヒープ領域の部分
カード・マーク付けとカード・マーク付けプロセスを示
す図である。
【図30】好ましい実施形態による、ヒープ領域の部分
カード・マーク付けとカード・マーク付けプロセスを示
す図である。
【図31】好ましい実施形態による、ヒープ領域の部分
カード・マーク付けとカード・マーク付けプロセスを示
す図である。
【図32】好ましい実施形態による、ヒープ領域の部分
カード・マーク付けとカード・マーク付けプロセスを示
す図である。
【符号の説明】
200 一般参照符号 201 プロセッサ 203 中央演算処理装置(CPU) 205 メモリ部 207 入出力部 209 キーボード 211 表示装置 213 ディスク記憶装置 215 CD−ROM駆動装置 217 CD−ROM媒体 219 プログラムおよびデータ
───────────────────────────────────────────────────── フロントページの続き (71)出願人 591064003 901 SAN ANTONIO ROAD PALO ALTO,CA 94303,U. S.A. (72)発明者 デイヴィッド・エム・アンガー アメリカ合衆国・94303・カリフォルニア 州・パロ アルト・ドリフトウッド ドラ イブ・844

Claims (21)

    【特許請求の範囲】
  1. 【請求項1】 ヘッダ構造を含むデータ構造内のポイン
    タ値を位置指定するコンピュータ制御式方法であって、 (a)前記ポインタ値を含むポインタ変数を含むポイン
    タ・メモリ領域が前記ヘッダ構造によってデータ値メモ
    リ領域から分離され、前記ヘッダ構造が、前記ポインタ
    値と区別できかつ前記ポインタ・メモリ領域に隣接する
    ヘッダ値を含むようにデータ構造を構成するステップ
    と、 (b)前記ポインタ値を位置指定するために前記ポイン
    タ・メモリ領域を走査するステップと、 (c)前記ヘッダ値が検出されたときに前記ヘッダ構造
    および前記データ値メモリ領域を越えて先に前進するス
    テップとを含むことを特徴とするコンピュータ制御式方
    法。
  2. 【請求項2】 前記データ構造が第1のインスタンス化
    オブジェクト・データ構造であり、前記ポインタ変数が
    ポインタ・インスタンス変数であり、前記ヘッダ構造が
    オブジェクト・ヘッダ構造であることを特徴とする請求
    項1に記載のコンピュータ制御式方法。
  3. 【請求項3】 前記オブジェクト・ヘッダ構造がサイズ
    ・フィールドに関連し、前記第1のインスタンス化オブ
    ジェクト・データ構造がメモリの連続的にアドレス指定
    可能な領域内の第2のインスタンス化オブジェクト・デ
    ータ構造によって追跡され、かつステップ(c)が、 (c1)前記サイズ・フィールドから前進値を決定する
    ステップと、 (c2)前記前進値を使用して、前記第2のインスタン
    ス化オブジェクト・データ構造に前進するステップとを
    含むことを特徴とする請求項2に記載のコンピュータ制
    御式方法。
  4. 【請求項4】 前記ポインタ値が第2のインスタンス化
    オブジェクト・データ構造を指示し、かつステップ
    (c)が前記ポインタ値を前記第2のインスタンス化オ
    ブジェクト・データ構造まで追跡するステップを含むこ
    とを特徴とする請求項2に記載のコンピュータ制御式方
    法。
  5. 【請求項5】 前記第1のインスタンス化オブジェクト
    ・データ構造が、前記オブジェクト・ヘッダ構造からあ
    るオフセットのところにあるべき第1のインスタンス化
    オブジェクト・データ構造内のインスタンス変数を定義
    するベースクラスから導出され、かつ前記ベースクラス
    のサブクラスに基づく第2のインスタンス化オブジェク
    ト・データ構造が、これも前記オフセットのところにあ
    るべき前記第2のインスタンス化オブジェクト・データ
    構造内の前記インスタンス変数を定義することを特徴と
    する請求項2に記載のコンピュータ制御式方法。
  6. 【請求項6】 中央演算処理装置(CPU)および前記
    CPUに結合されたメモリを有し、そのメモリ内にある
    ヘッダ構造を含むデータ構造内のポインタ値を位置指定
    する装置において、 前記メモリ内で前記データ構造を構成するように構成さ
    れた構成機構であって、前記データ構造が前記ヘッダ構
    造によってデータ値メモリ領域から分離されたポインタ
    ・メモリ領域を含み、前記ポインタ・メモリ領域が前記
    ポインタ値を含むポインタ・インスタンス変数を含み、
    前記ヘッダ構造が前記ポインタ値と区別できかつ前記ポ
    インタ・メモリ領域に隣接するヘッダ値を含む構成機構
    と、 前記ポインタ値を位置指定するために前記ポインタ・メ
    モリ領域を走査するように構成された走査機構と、 走査機構の動作中に前記ヘッダ値を検出するように構成
    されたヘッダ検出機構と、 ヘッダ検出機構に従って前記ヘッダ構造および前記デー
    タ値メモリ領域を越えて前進するように構成された前進
    機構とを含む装置。
  7. 【請求項7】 前記データ構造が第1のインスタンス化
    オブジェクト・データ構造であり、前記ポインタ変数が
    ポインタ・インスタンス変数であり、前記ヘッダ構造が
    オブジェクト・ヘッダ構造であることを特徴とする請求
    項6に記載の装置。
  8. 【請求項8】 前記オブジェクト・ヘッダ構造がサイズ
    ・フィールドに関連し、前記第1のインスタンス化オブ
    ジェクト・データ構造がメモリの連続的にアドレス指定
    可能な領域内の第2のインスタンス化オブジェクト・デ
    ータ構造によって追跡され、かつ前進機構が、 前記サイズ・フィールドから前進値を決定するように構
    成された決定機構と、前記前進値を使用して、前記第2
    のインスタンス化オブジェクト・データ構造に前進する
    ように構成された前進オブジェクト機構とを含むことを
    特徴とする請求項7に記載の装置。
  9. 【請求項9】 前記ポインタ値が第2のインスタンス化
    オブジェクト・データ構造を指示し、かつ前進機構が前
    記ポインタ値を前記第2のインスタンス化オブジェクト
    ・データ構造まで追跡するように構成されたポインタ追
    跡機構を含むことを特徴とする請求項7に記載の装置。
  10. 【請求項10】 前記第1のインスタンス化オブジェク
    ト・データ構造が、前記オブジェクト・ヘッダ構造から
    あるオフセットのところにあるべき前記第1のインスタ
    ンス化オブジェクト・データ構造内のインスタンス変数
    を定義するベースクラスから導出され、かつ前記ベース
    クラスのサブクラスに基づく第2のインスタンス化オブ
    ジェクト・データ構造が、これも前記オフセットのとこ
    ろにあるべき前記第2のインスタンス化オブジェクト・
    データ構造内の前記インスタンス変数を定義することを
    特徴とする請求項7に記載の装置。
  11. 【請求項11】 中央演算処理装置(CPU)および前
    記CPUに結合されたメモリを有し、そのメモリ内にあ
    るヘッダ構造を含むデータ構造内のポインタ値を位置指
    定するコンピュータ・システムにおいて、 前記メモリ内で前記データ構造を構成するように構成さ
    れた構成機構であって、前記データ構造が前記ヘッダ構
    造によってデータ値メモリ領域から分離されたポインタ
    ・メモリ領域を含み、前記ポインタ・メモリ領域が前記
    ポインタ値を含むポインタ変数を含み、前記ヘッダ構造
    が前記ポインタ値と区別できかつ前記ポインタ・メモリ
    領域に隣接するヘッダ値を含む構成機構と、 前記ポインタ値を位置指定するために前記ポインタ・メ
    モリ領域を走査するように構成された走査機構と、 走査機構の動作中に前記ヘッダ値を検出するように構成
    されたヘッダ検出機構と、 ヘッダ検出機構に従って前記ヘッダ構造および前記デー
    タ値メモリ領域を越えて前進するように構成された前進
    機構とを含むコンピュータ・システム。
  12. 【請求項12】 前記データ構造が第1のインスタンス
    化オブジェクト・データ構造であり、前記ポインタ変数
    がポインタ・インスタンス変数であり、前記ヘッダ構造
    がオブジェクト・ヘッダ構造であることを特徴とする請
    求項11に記載のコンピュータ制御式システム。
  13. 【請求項13】 前記オブジェクト・ヘッダ構造がサイ
    ズ・フィールドに関連し、前記第1のインスタンス化オ
    ブジェクト・データ構造がメモリの連続的にアドレス指
    定可能な領域内の第2のインスタンス化オブジェクト・
    データ構造によって追跡され、かつ前進機構が、 前記サイズ・フィールドから前進値を決定するように構
    成された決定機構と、 前記前進値を使用して、前記第2のインスタンス化オブ
    ジェクト・データ構造に前進するように構成された前進
    オブジェクト機構とを含むことを特徴とする請求項12
    に記載のシステム。
  14. 【請求項14】 前記ポインタ値が第2のインスタンス
    化オブジェクト・データ構造を指示し、かつ前進機構が
    前記ポインタ値を前記第2のインスタンス化オブジェク
    ト・データ構造まで追跡するように構成されたポインタ
    追跡機構を含むことを特徴とする請求項12に記載のシ
    ステム。
  15. 【請求項15】 前記第1のインスタンス化オブジェク
    ト・データ構造が、前記オブジェクト・ヘッダ構造から
    あるオフセットのところにあるべき前記第1のインスタ
    ンス化オブジェクト・データ構造内のインスタンス変数
    を定義するベースクラスから導出され、かつ前記ベース
    クラスのサブクラスに基づく第2のインスタンス化オブ
    ジェクト・データ構造が、これも前記オフセットのとこ
    ろにあるべき前記第2のインスタンス化オブジェクト・
    データ構造内の前記インスタンス変数を定義することを
    特徴とする請求項12に記載のシステム。
  16. 【請求項16】 メモリ内でヘッダ構造を含むデータ構
    造内のポインタ値をコンピュータに位置指定させるプロ
    グラムを記録した記憶媒体において、 前記メモリ内で前記データ構造を構成するように構成さ
    れた構成機構を前記コンピュータに実施させるように構
    成されたコンピュータ読取り可能プログラムであって、
    前記データ構造が前記ヘッダ構造によってデータ値メモ
    リ領域から分離されたポインタ・メモリ領域を含み、前
    記ポインタ・メモリ領域が前記ポインタ値を含むポイン
    タ変数を含み、前記ヘッダ構造が前記ポインタ値と区別
    できかつ前記ポインタ・メモリ領域に隣接するヘッダ値
    を含むコンピュータ読取り可能プログラムと、 前記ポインタ値を位置指定するために前記ポインタ・メ
    モリ領域を走査するように構成された走査機構を前記コ
    ンピュータに実施させるように構成されたコンピュータ
    読取り可能プログラムと、 走査機構の動作中に前記ヘッダ値を検出するように構成
    されたヘッダ検出機構を前記コンピュータに実施させる
    ように構成されたコンピュータ読取り可能プログラム
    と、 ヘッダ検出機構に従って前記ヘッダ構造および前記デー
    タ値メモリ領域を越えて前進するように構成された前進
    機構を前記コンピュータに実施させるように構成された
    コンピュータ読取り可能プログラムとを含むコンピュー
    タ・プログラムを記録した記憶媒体。
  17. 【請求項17】 前記データ構造が第1のインスタンス
    化オブジェクト・データ構造であり、前記ポインタ変数
    がポインタ・インスタンス変数であり、前記ヘッダ構造
    がオブジェクト・ヘッダ構造であることを特徴とする請
    求項16に記載のコンピュータ・プログラムを記録した
    記憶媒体。
  18. 【請求項18】 前記オブジェクト・ヘッダ構造がサイ
    ズ・フィールドに関連し、前記第1のインスタンス化オ
    ブジェクト・データ構造がメモリの連続的にアドレス指
    定可能な領域内の第2のインスタンス化オブジェクト・
    データ構造によって追跡され、かつ前進機構が、 前記サイズ・フィールドから前進値を決定するように構
    成された決定機構を前記コンピュータに実施させるよう
    に構成されたコンピュータ読取り可能プログラム・コー
    ド・デバイスと、 前記前進値を使用して、前記第2のインスタンス化オブ
    ジェクト・データ構造に前進するように構成された前進
    オブジェクト機構を前記コンピュータに実施させるよう
    に構成されたコンピュータ読取り可能プログラムとを含
    むことを特徴とする請求項17に記載のコンピュータ・
    プログラムを記録した記憶媒体。
  19. 【請求項19】 前記ポインタ値が第2のインスタンス
    化オブジェクト・データ構造を指示し、かつ前進機構が
    前記ポインタ値を前記第2のインスタンス化オブジェク
    ト・データ構造まで追跡するように構成されたポインタ
    追跡機構を含むことを特徴とする請求項17に記載のコ
    ンピュータ・プログラムを記録した記憶媒体。
  20. 【請求項20】 前記第1のインスタンス化オブジェク
    ト・データ構造が、前記オブジェクト・ヘッダ構造から
    あるオフセットのところにあるべき前記第1のインスタ
    ンス化オブジェクト・データ構造内のインスタンス変数
    を定義するベースクラスから導出され、かつ前記ベース
    クラスのサブクラスに基づく第2のインスタンス化オブ
    ジェクト・データ構造が、これも前記オフセットのとこ
    ろにあるべき前記第2のインスタンス化オブジェクト・
    データ構造内の前記インスタンス変数を定義することを
    特徴とする請求項17に記載のコンピュータ・プログラ
    ムを記録した記憶媒体。
  21. 【請求項21】 インスタンス化オブジェクト・データ
    構造を含み、 ポインタ値を記憶するポインタ・インスタンス変数を含
    むポインタ・メモリ領域と、 非ポインタ値を記憶するデータ値メモリ領域と、 前記ポインタ値と区別できかつ前記ポインタ・メモリ領
    域に隣接するヘッダ値を含み、ポインタ・メモリ領域と
    データ値メモリ領域とを分離するオブジェクト・ヘッダ
    構造とを含むメモリ。
JP10111782A 1997-04-23 1998-04-22 分岐データ構造を使用した厳密なガーベッジ収集を最適化する方法および装置 Pending JPH10301836A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/842,195 1997-04-23
US08/842,195 US5900001A (en) 1997-04-23 1997-04-23 Method and apparatus for optimizing exact garbage collection using a bifurcated data structure

Publications (2)

Publication Number Publication Date
JPH10301836A true JPH10301836A (ja) 1998-11-13
JPH10301836A5 JPH10301836A5 (ja) 2005-09-02

Family

ID=25286747

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10111782A Pending JPH10301836A (ja) 1997-04-23 1998-04-22 分岐データ構造を使用した厳密なガーベッジ収集を最適化する方法および装置

Country Status (4)

Country Link
US (1) US5900001A (ja)
EP (1) EP0874318B1 (ja)
JP (1) JPH10301836A (ja)
DE (1) DE69801186T2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009514043A (ja) * 2003-07-01 2009-04-02 ユニベルシテート・シユトウツトガルト 正確なポインタ識別のためのプロセッサアーキテクチャ

Families Citing this family (94)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6105040A (en) * 1997-06-30 2000-08-15 Sun Microsystems, Inc. Method and apparatus for managing stored objects
US6560773B1 (en) * 1997-12-12 2003-05-06 International Business Machines Corporation Method and system for memory leak detection in an object-oriented environment during real-time trace processing
US6295640B1 (en) * 1998-05-08 2001-09-25 Apple Computer, Inc. Method and apparatus for distinguishing reference values from non-reference values in a runtime environment
US6141738A (en) * 1998-07-08 2000-10-31 Nortel Networks Corporation Address translation method and system having a forwarding table data structure
US6327701B2 (en) * 1998-09-15 2001-12-04 Sun Microsystems, Inc. Method and apparatus for finding bugs related to garbage collection in a virtual machine
US6317756B1 (en) * 1998-10-07 2001-11-13 International Business Machines Corporation On-the-fly garbage collector
US6279148B1 (en) * 1998-10-13 2001-08-21 Sun Microsystems, Inc. Method and apparatus for supporting efficient programming in dynamic pointer-safe languages
US6842853B1 (en) * 1999-01-13 2005-01-11 Sun Microsystems, Inc. Thread suspension system and method
US6249793B1 (en) 1999-06-10 2001-06-19 Sun Microsystems, Inc. Mostly concurrent compaction in a garbage collection system
US6363403B1 (en) 1999-06-30 2002-03-26 Lucent Technologies Inc. Garbage collection in object oriented databases using transactional cyclic reference counting
US6968549B1 (en) * 1999-07-02 2005-11-22 Beryl Technical Assays Llc Method and system for dynamically loading data structures into memory with global constant pool
US7150005B2 (en) * 1999-07-02 2006-12-12 Beryl Technical Assays, Llc Method and system for global constant management for memory
US6381738B1 (en) * 1999-07-16 2002-04-30 International Business Machines Corporation Method for optimizing creation and destruction of objects in computer programs
US6424977B1 (en) 1999-08-19 2002-07-23 Sun Microsystems, Inc. Train-algorithm-based garbage collector employing reduced oversized-object threshold
US6415302B1 (en) 1999-08-19 2002-07-02 Sun Microsystems, Inc. Train-algorithm-based garbage collector employing farthest-forward-car indicator
US6185581B1 (en) * 1999-08-19 2001-02-06 Sun Microsystems, Inc. Train-algorithm-based garbage collector employing fixed-size remembered sets
US6434576B1 (en) 1999-08-19 2002-08-13 Sun Microsystems, Inc. Popular-object handling in a train-algorithm-based garbage collector
US7096238B2 (en) 1999-08-19 2006-08-22 Sun Microsystems, Inc. Dynamic feedback for determining collection-set size
US6449626B1 (en) 1999-08-19 2002-09-10 Sun Microsystems, Inc. Reduced-cost remembered-set processing in a train-algorithm-based garbage collector
US6434577B1 (en) 1999-08-19 2002-08-13 Sun Microsystems, Inc. Scalable-remembered-set garbage collection
WO2001057656A2 (en) * 2000-02-07 2001-08-09 Insignia Solutions Plc Reduced size object headers
US20010031468A1 (en) * 2000-02-08 2001-10-18 Alex Chenchik Analyte assays employing universal arrays
US6529919B1 (en) 2000-02-15 2003-03-04 Sun Microsystems, Inc. Incremental class unloading in a train-algorithm-based garbage collector
US6658652B1 (en) * 2000-06-08 2003-12-02 International Business Machines Corporation Method and system for shadow heap memory leak detection and other heap analysis in an object-oriented environment during real-time trace processing
US6738875B1 (en) 2000-07-31 2004-05-18 Microsoft Corporation Efficient write-watch mechanism useful for garbage collection in a computer system
CA2421591C (en) 2000-09-13 2011-08-23 Geodesic Systems, Incorporated Conservative garbage collectors that can be used with general memory allocators
GB0027045D0 (en) * 2000-11-06 2000-12-20 Ibm Computer system with heap reset
US6879991B2 (en) * 2000-12-11 2005-04-12 International Business Machines Corporation Synchronous collection of cyclic garbage in reference counting systems
US6457023B1 (en) * 2000-12-28 2002-09-24 International Business Machines Corporation Estimation of object lifetime using static analysis
US6820183B2 (en) 2001-01-05 2004-11-16 International Business Machines Corporation Methods, systems, and computer program products for memory pool management using variable size sub-pools
US6654773B2 (en) 2001-02-27 2003-11-25 Tajea Corporation Method of deterministic garbage collection
US6598141B1 (en) 2001-03-08 2003-07-22 Microsoft Corporation Manipulating interior pointers on a stack during garbage collection
US7203756B2 (en) * 2001-04-27 2007-04-10 International Business Machines Corporation Mechanism to cache references to Java RMI remote objects implementing the unreferenced interface
US7065747B2 (en) * 2001-05-08 2006-06-20 Sun Microsystems, Inc. Identifying references to objects during bytecode verification
US6804681B2 (en) * 2001-05-08 2004-10-12 Sun Microsystems, Inc. Identifying and tracking object references in a java programming environment
US7107430B2 (en) * 2001-06-19 2006-09-12 Massachusetts Institute Of Technology Mechanism to reduce the cost of forwarding pointer aliasing
GB0115965D0 (en) * 2001-06-29 2001-08-22 Ibm Computer system for detecting object updates
US20030089764A1 (en) * 2001-11-13 2003-05-15 Payformance Corporation Creating counterfeit-resistant self-authenticating documents using cryptographic and biometric techniques
US6807551B2 (en) * 2002-04-22 2004-10-19 Sun Microsystems Inc. Measuring maximum memory requirement of an application at any point through continuous use of garbage collector
US6928460B2 (en) * 2002-07-01 2005-08-09 Sun Microsystems, Inc. Method and apparatus for performing generational garbage collection in a segmented heap
US6999979B2 (en) * 2002-11-05 2006-02-14 Sun Microsystems, Inc. Efficient encoding of references into a collection set
US7539713B2 (en) 2002-11-05 2009-05-26 Sun Microsystems, Inc. Allocation of likely popular objects in the train algorithm
US7035884B2 (en) * 2002-11-05 2006-04-25 Sun Microsystems, Inc. Placement of allocation trains in the train algorithm
US7188129B2 (en) 2002-11-15 2007-03-06 Sun Microsystems, Inc. Merging trains in a collector based on the train algorithm
US7209935B2 (en) * 2002-11-27 2007-04-24 Sun Microsystems, Inc. Avoiding remembered-set maintenance overhead for memory segments known to be in a collection set
US7085790B2 (en) * 2002-12-06 2006-08-01 Sun Microsystems, Inc. Advancing cars in trains managed by a collector based on the train algorithm
US7143124B2 (en) 2002-12-06 2006-11-28 Sun Microsystems, Inc. Detection of dead regions during incremental collection
US7031990B2 (en) 2002-12-06 2006-04-18 Sun Microsystems, Inc. Combining external and intragenerational reference-processing in a garbage collector based on the train algorithm
US7024437B2 (en) * 2002-12-06 2006-04-04 Sun Microsystems, Inc. Better placement of objects reachable from special objects during collection based on the train algorithm
US7069280B2 (en) 2002-12-06 2006-06-27 Sun Microsystems, Inc. Collection-tick mechanism for a collector based on the train algorithm
US7246141B2 (en) * 2003-01-02 2007-07-17 Sun Microsystems, Inc. Method and apparatus for skewing a bi-directional object layout to improve cache performance
US7069281B2 (en) 2003-02-24 2006-06-27 Sun Microsystems, Inc. Efficient collocation of evacuated objects in a copying garbage collector using variably filled local allocation buffers
US7146390B2 (en) 2003-02-24 2006-12-05 Sun Microsystems, Inc. Staging the processing of remembered-set entries as part of collection based on the train algorithm
US7096329B2 (en) * 2003-02-27 2006-08-22 Sun Microsystems, Inc. Better placement of objects promoted into a generation managed by the train algorithm
US7062519B2 (en) * 2003-02-27 2006-06-13 Sun Microsystems, Inc. Incremental scanning of enormous objects to improve scheduling and pause-time behavior of garbage collection
US7730449B2 (en) * 2003-03-19 2010-06-01 Toshiba Corporation Auto reference counting pointer for C++ objects with ability to re-cast and lookup from a free pointer
US20040186863A1 (en) * 2003-03-21 2004-09-23 Garthwaite Alexander T. Elision of write barriers for stores whose values are in close proximity
US7089272B1 (en) 2003-06-18 2006-08-08 Sun Microsystems, Inc. Specializing write-barriers for objects in a garbage collected heap
US7149762B1 (en) 2003-08-20 2006-12-12 Sun Microsystems, Inc. Handling futile collections in the train algorithm through selective extension of the collection set
KR100626368B1 (ko) * 2003-08-25 2006-09-20 삼성전자주식회사 가비지 콜렉션 벤치마킹 방법
US7404182B1 (en) 2003-10-03 2008-07-22 Sun Microsystems, Inc. Deferring and combining write barriers for a garbage-collected heap
US7702663B2 (en) * 2004-01-05 2010-04-20 International Business Machines Corporation Breaking read barrier to apply optimizations
US8131955B2 (en) * 2004-04-15 2012-03-06 Microsoft Corporation Ephemeral garbage collection using a tracking mechanism on a card table to determine marked bundles
US7620943B1 (en) 2004-06-30 2009-11-17 Sun Microsystems, Inc. Using class properties to segregate objects in a generation managed by the train algorithm
US7676801B1 (en) 2004-08-31 2010-03-09 Sun Microsystems, Inc. Scanning of evacuated objects in a generation managed by the train algorithm
US7321909B1 (en) 2004-12-23 2008-01-22 Sun Microsystems, Inc. Method and apparatus for forwarding references to objects concurrently with space-incremental garbage collection
US7870170B2 (en) * 2005-05-03 2011-01-11 International Business Machines Corporation Method and apparatus for determining leaks in a Java heap
US7548940B2 (en) * 2005-06-10 2009-06-16 International Business Machines Corporation Generational real-time garbage collection
GB0512809D0 (en) * 2005-06-23 2005-08-03 Ibm Arrangement and method for garbage collection in a computer system
US7558804B1 (en) * 2005-08-26 2009-07-07 American Megatrends, Inc. Method, apparatus, and computer-readable medium for space-efficient storage of variables in a non-volatile computer memory
US7870171B2 (en) * 2007-02-12 2011-01-11 Oracle America, Inc. Method and system for garbage collection in a multitasking environment
US7627621B2 (en) * 2007-02-12 2009-12-01 Sun Microsystems, Inc. Method and system for minor garbage collection
US7890711B2 (en) * 2007-04-18 2011-02-15 Oracle America, Inc. Methods, apparatus, and program products for improved finalization
US8732442B2 (en) * 2008-06-25 2014-05-20 Oracle America, Inc. Method and system for hardware-based security of object references
US8577936B2 (en) * 2010-11-29 2013-11-05 International Business Machines Corporation Fixup cache tool for object memory compaction in an information handling system
US9378138B2 (en) * 2011-06-29 2016-06-28 International Business Machines Corporation Conservative garbage collection and access protection
US8595743B2 (en) 2012-05-01 2013-11-26 Concurix Corporation Network aware process scheduling
US9417935B2 (en) 2012-05-01 2016-08-16 Microsoft Technology Licensing, Llc Many-core process scheduling to maximize cache usage
US8726255B2 (en) 2012-05-01 2014-05-13 Concurix Corporation Recompiling with generic to specific replacement
US8650538B2 (en) 2012-05-01 2014-02-11 Concurix Corporation Meta garbage collection for functional code
US9230548B2 (en) * 2012-06-06 2016-01-05 Cypress Semiconductor Corporation Hybrid hashing scheme for active HMMS
US9047196B2 (en) 2012-06-19 2015-06-02 Concurix Corporation Usage aware NUMA process scheduling
US8700838B2 (en) 2012-06-19 2014-04-15 Concurix Corporation Allocating heaps in NUMA systems
US8707326B2 (en) 2012-07-17 2014-04-22 Concurix Corporation Pattern matching process scheduler in message passing environment
US8793669B2 (en) 2012-07-17 2014-07-29 Concurix Corporation Pattern extraction from executable code in message passing environments
US9575813B2 (en) 2012-07-17 2017-02-21 Microsoft Technology Licensing, Llc Pattern matching process scheduler with upstream optimization
US9043788B2 (en) 2012-08-10 2015-05-26 Concurix Corporation Experiment manager for manycore systems
US8688754B1 (en) 2012-09-19 2014-04-01 International Business Machines Corporation Remembered set overhead reduction by deferred garbage collections of stable regions
US8607018B2 (en) 2012-11-08 2013-12-10 Concurix Corporation Memory usage configuration based on observations
US8656134B2 (en) 2012-11-08 2014-02-18 Concurix Corporation Optimized memory configuration deployed on executing code
US8656135B2 (en) 2012-11-08 2014-02-18 Concurix Corporation Optimized memory configuration deployed prior to execution
US20130227529A1 (en) 2013-03-15 2013-08-29 Concurix Corporation Runtime Memory Settings Derived from Trace Data
US11429492B2 (en) * 2018-04-27 2022-08-30 EMC IP Holding Company LLC Protecting and identifying virtual machines that have the same name in a multi-tenant distributed environment
CN110543357B (zh) * 2018-05-28 2023-01-13 华为云计算技术有限公司 管理应用程序对象的方法,相关装置及系统

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4922414A (en) * 1982-12-17 1990-05-01 Symbolics Inc. Symbolic language data processing system
US4757438A (en) * 1984-07-12 1988-07-12 Texas Instruments Incorporated Computer system enabling automatic memory management operations
US4775932A (en) * 1984-07-31 1988-10-04 Texas Instruments Incorporated Computer memory system with parallel garbage collection independent from an associated user processor
US4920483A (en) * 1985-11-15 1990-04-24 Data General Corporation A computer memory for accessing any word-sized group of contiguous bits
US5222221A (en) * 1986-06-17 1993-06-22 Yeda Research And Development Co., Ltd. Method and apparatus for implementing a concurrent logic program
US4989134A (en) * 1987-03-20 1991-01-29 Hewlett-Packard Company Method and apparatus for enhancing data storage efficiency
US5136706A (en) * 1987-04-30 1992-08-04 Texas Instruments Incorporated Adaptive memory management system for collection of garbage in a digital computer
US4907151A (en) * 1988-09-30 1990-03-06 Digital Equipment Corporation System and method for garbage collection with ambiguous roots
US5088036A (en) * 1989-01-17 1992-02-11 Digital Equipment Corporation Real time, concurrent garbage collection system and method
US5321834A (en) * 1989-11-28 1994-06-14 Xerox Corporation Method and system for reclaiming unreferenced computer memory space
US5414826A (en) * 1990-01-31 1995-05-09 Hewlett-Packard Company System and method for memory management in microcomputer
EP0473767A1 (en) * 1990-03-23 1992-03-11 Eastman Kodak Company Virtual memory management and allocation arrangement for digital data processing system
US5193180A (en) * 1991-06-21 1993-03-09 Pure Software Inc. System for modifying relocatable object code files to monitor accesses to dynamically allocated memory
US5355483A (en) * 1991-07-18 1994-10-11 Next Computers Asynchronous garbage collection
US5392432A (en) * 1991-08-27 1995-02-21 At&T Corp. Method for automatic system resource reclamation for object-oriented systems with real-time constraints
US5218698A (en) * 1991-11-22 1993-06-08 Aerojet-General Corporation Garbage collection system for a symbolic digital processor
DE69327089T2 (de) * 1992-07-24 2000-04-13 Microsoft Corp., Redmond Rechnerverfahren und system zur zuordnung und zur freigabe von speichern.
US5560003A (en) * 1992-12-21 1996-09-24 Iowa State University Research Foundation, Inc. System and hardware module for incremental real time garbage collection and memory management
US5367685A (en) * 1992-12-22 1994-11-22 Firstperson, Inc. Method and apparatus for resolving data references in generated code
US5870764A (en) * 1993-05-12 1999-02-09 Apple Computer, Inc. Method of managing a data structure for concurrent serial and parallel revision of a work
US5408650A (en) * 1993-06-29 1995-04-18 Digital Equipment Corporation Memory analysis system for dynamically displaying memory allocation and de-allocation events associated with an application program
US5566321A (en) * 1993-12-13 1996-10-15 Cray Research, Inc. Method of managing distributed memory within a massively parallel processing system
US5687368A (en) * 1994-07-22 1997-11-11 Iowa State University Research Foundation, Inc. CPU-controlled garbage-collecting memory module

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009514043A (ja) * 2003-07-01 2009-04-02 ユニベルシテート・シユトウツトガルト 正確なポインタ識別のためのプロセッサアーキテクチャ

Also Published As

Publication number Publication date
DE69801186D1 (de) 2001-08-30
DE69801186T2 (de) 2002-05-02
US5900001A (en) 1999-05-04
EP0874318A2 (en) 1998-10-28
EP0874318A3 (en) 1999-04-21
EP0874318B1 (en) 2001-07-25

Similar Documents

Publication Publication Date Title
US6049810A (en) Method and apparatus for implementing a write barrier of a garbage collected heap
JPH10301836A (ja) 分岐データ構造を使用した厳密なガーベッジ収集を最適化する方法および装置
US5903900A (en) Method and apparatus for optimizing exact garbage collection of array nodes in a carded heap
US6115782A (en) Method and apparatus for locating nodes in a carded heap using a card marking structure and a node advance value
US6038572A (en) Method and apparatus for localizing nodes in a garbage collected carded heap
JPH10301835A (ja) 混合されたポインタ変数と非ポインタ変数とを有するオブジェクトの厳密なガーベジ収集を最適化する方法および装置
US5915255A (en) Method and apparatus for referencing nodes using links
US5911144A (en) Method and apparatus for optimizing the assignment of hash values to nodes residing in a garbage collected heap
US6253215B1 (en) Method, apparatus, and article of manufacture for facilitating resource management for applications having two types of program code
US6381738B1 (en) Method for optimizing creation and destruction of objects in computer programs
US6820101B2 (en) Methods and apparatus for optimizing garbage collection using separate heaps of memory for storing local objects and non-local objects
US11507503B1 (en) Write barrier for remembered set maintenance in generational Z garbage collector
US9921959B2 (en) Efficient reference classification and quick memory reuse in a system that supports concurrent garbage collection
US7036118B1 (en) System for executing computer programs on a limited-memory computing machine
JP2001506037A (ja) 追跡型ゴミ集め用のスペースの限られた標識付け構造
US6094664A (en) Method and apparatus for optimizing the null pointer exception in an object-oriented programming environment with statically typed variables
US6810519B1 (en) Achieving tight binding for dynamically loaded software modules via intermodule copying
US20050235120A1 (en) System and method for performing garbage collection on a large heap
JP2004295889A (ja) データ処理システム内での処理タスクの実行を制御する方法および装置
US6275985B1 (en) Method and apparatus for developing an application that implements garbage collection efficiently by combining proxy objects with compiler support
EP4291988B1 (en) Tracking frame states of call stack frames including colorless roots
US11573794B2 (en) Implementing state-based frame barriers to process colorless roots during concurrent execution
US11513954B2 (en) Consolidated and concurrent remapping and identification for colorless roots
WO2022245659A1 (en) Colorless roots implementation in z garbage collector
WO2022245954A1 (en) Write barrier for remembered set maintenance in generational z garbage collector

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050225

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050225

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20070912

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070918

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20080304