JPH10301837A - カード・ヒープ中のアレイ・ノードの正確なガーベッジ収集を最適化する方法および装置 - Google Patents

カード・ヒープ中のアレイ・ノードの正確なガーベッジ収集を最適化する方法および装置

Info

Publication number
JPH10301837A
JPH10301837A JP10111848A JP11184898A JPH10301837A JP H10301837 A JPH10301837 A JP H10301837A JP 10111848 A JP10111848 A JP 10111848A JP 11184898 A JP11184898 A JP 11184898A JP H10301837 A JPH10301837 A JP H10301837A
Authority
JP
Japan
Prior art keywords
pointer
array
card
parameterization
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
JP10111848A
Other languages
English (en)
Inventor
Ross C Knippel
ロス・シイ・ニップル
Boris Beylin
ボリス・ベイリン
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 JPH10301837A publication Critical patent/JPH10301837A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • G06F12/0276Generational garbage collection
    • 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)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 カード・マーク・ヒープ中のアレイ中にポイ
ンタ変数を記憶するプログラム・ループを最適化する装
置、方法、システムおよびコンピュータ・プログラム製
品を提供すること。 【解決手段】 これらの方法はまた、これらのポインタ
変数に対するガーベッジ収集動作を最適化する。プログ
ラム・ループの本体中で書込みバリヤを実施する代わり
に、ループをパラメータ化する。このパラメータ化は、
ヒープ中に記憶されたポインタ・アレイに関連する。こ
のパラメータ化は、アレイ中の最初と最後の修正された
要素を指定する。このパラメータ化はさらに、(アレイ
の次の修正された要素に達するためにどのくらい多くの
要素がスキップされたかを示す)ストライドを指定す
る。パラメータ化は、アレイにアクセスする連続的なル
ープによって修正される。ガーベッジ収集動作中、アレ
イのパラメータ化を使用して、アレイ中の修正された要
素を位置指定するプロセスを最適化する。

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】本発明は、このような動作を実行する装置
にも関する。この装置は、必要な目的向けに特別に構成
することも、あるいはコンピュータのメモリに記憶され
たコンピュータ・プログラムによって選択的に作動また
は再構成される汎用コンピュータを備えることもでき
る。本明細書に示す手続きは、特定のコンピュータやそ
の他の装置に固有に関係するものではない。特に、様々
な汎用計算器を、本明細書の教示に従って書かれたプロ
グラムと共に使用することができ、あるいは必要な方法
ステップを実行するより専用化された装置を構成する方
が好都合であることもである。このような様々な計算器
に必要な構造は下記の説明から明らかになろう。本発明
は、コンピュータにプログラム済みロジックを実行させ
るプログラムと共にコード化されたコンピュータ読取り
可能な記憶媒体に埋め込むこともできる。
【0049】当業者には、図においてコンピュータ・メ
モリ・ワード内で特定のビット順序付けが使用されてい
るが、実際のビット順序付けが本発明には無関係である
ことが理解されよう。さらに、当業者には、メモリ内の
データ構造の図が構造の頂部にある下位アドレス・メモ
リから始まり、より上位のアドレス・メモリへ延びてい
ることが理解されよう。
【0050】動作環境 一般参照符号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はファイル記憶機構を備える。そ
のようなコンピュータ・システムは、本発明を具体化す
るアプリケーションを実行することができる。
【0051】厳密なガーベジ収集アルゴリズムは、ポイ
ンタである値と非ポインタである値とを区別しなければ
ならない。ポインタ値が見つかった後、ヒープ内で、割
振り済みノードを見つけることができる。このようなポ
インタから参照されないヒープの領域は、ガーベジであ
り、スキャビンジ動作によって再利用することができ
る。ポインタ値を見つけるにはコンピュータ資源が必要
であり、したがって、より効率的な機構があれば有利で
ある。
【0052】本発明の一形態は、ポインタ値をデータ値
から分離する分岐データ構造である。この種のデータ構
造をインスタンス化オブジェクトとして使用すると、デ
ータ構造内でポインタ値を効率的に見つけることができ
る。
【0053】図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内のポインタ値とデータ
値を分離することによって簡略化される。
【0054】当業者には、ある種のコンパイラは、上記
で開示したオブジェクト構造を生成するように修正する
必要があることが理解されよう。さらに、当業者には、
オブジェクトがデータ構造の特殊な使用法に過ぎず、前
述のデータ構造の基本概念が、区別可能なデータ構造ヘ
ッダの前にポインタを記憶しポインタ・インスタンス変
数の判定を容易にすることであることが理解されよう。
また、当業者には、インスタンス化オブジェクト・デー
タ構造300内のポインタ・メモリ領域303とデータ
値メモリ領域305を分離することが、オブジェクト・
ヘッダ構造301に対するデータ値メモリ領域305内
のインスタンス変数の位置が、最初のクラスのサブクラ
スに基づくすべてのインスタンス化オブジェクトに対し
て一定であることを意味することが理解されよう。この
不変性のためにオブジェクトの解釈が簡略化される。コ
ンパイル済みコードを用いる処理系の場合、この不変性
によって、あるスーパークラス向けにコンパイルされた
コードをそのスーパークラスのサブクラスのインスタン
スに再使用することができるので空間が節約される。
【0055】図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の残りの部分を越える。
【0056】当業者には、前述のデータ構造およびプロ
セスが、メモリ領域内のポインタの走査に関して説明し
たものであり、一実施形態では、ポインタによって互い
に関係付けられたノードが追跡され、関係付けられた各
ノードのポインタ・メモリ領域303が走査されること
が理解されよう。
【0057】当業者には、次のオブジェクトに進み参照
セットにポインタを加える多数の技法が存在することも
理解されよう。さらに、当業者には、オブジェクトがデ
ータ構造の特殊な使用法であり、前述の技法がメモリ内
の一般的なデータ構造にも適用されることが理解されよ
う。
【0058】本発明の他の実施形態は、インスタンス化
オブジェクト内でデータ値と混合されたポインタ値、す
なわち分岐されないデータ構造の収集を最適化すること
によって、オブジェクトの参照セットを判定する際に計
算上の効率を向上させる。図8は、図4のインスタンス
化オブジェクト170と同様な、一般参照符号400で
示されたインスタンス化オブジェクト・データ構造を示
す。インスタンス化オブジェクト・データ構造400
は、オブジェクト・ヘッダ構造401とインスタンス変
数記憶域403とを含む。オブジェクト・ヘッダ構造4
01は、一般参照符号430で示されたタグ付けビット
マップを含むクラスを指し示すクラス・ポインタ405
を含む。
【0059】図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進数)である。
【0060】図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つのインスタンス
変数を処理する。したがって、各被呼ルーチンは、渡さ
れた引数から始まるポインタ・インスタンス変数および
非ポインタ・インスタンス変数のパターンを処理する。
【0061】被呼ルーチン455、459、463、4
67は、インスタンス化オブジェクト・データ構造40
0内の次の最大で8つの変数のポインタを処理するプロ
グラム済みロジックを含む。したがって、ガーベジ収集
手続きは、インスタンス化オブジェクト・データ構造4
00のインスタンス変数記憶域403内のポインタを効
率的に処理する。ガーベジ収集手続きは、各変数ごとに
タグを試験するのではなく、ポインタ変数の既知のパタ
ーンを処理する手続きに直接アクセスすることによって
これを行う。したがって、各変数を検査し変数がポイン
タを含むかどうかを判定する従来技術の変数別プロセス
は、各変数を検査せずに8つの既知の変数を一度に処理
する手続きで置き換えられる。
【0062】被呼ルーチン455、459、463、4
67を呼び出す呼出し手続きについては後述する。当業
者には、実施形態に応じて、被呼ルーチンと呼出し手続
きのどちらかがポインタをインスタンス変数記憶域40
3内へ進めることが理解されよう。被呼ルーチン45
5、459、463、467は、指定されたポインタを
参照セットに加えるか、あるいは指定されたポインタに
対して他のガーベジ収集タスクを実行する。
【0063】図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を通じて次の
反復に進む。当業者には、被呼手続きでも、あるいは呼
出し手順でも変数ポインタを前進させられることが理解
されよう。
【0064】本発明の実施形態に応じて、被呼ルーチン
455、459、463、467は、指定されたポイン
タに対して、必要に応じてガーベジ収集タスクを実行す
る。当業者には、タグ付けビットマップ430の長さを
指定する多数の技法が存在することも理解されよう。こ
れらの技法には、タグ付けビットマップ430の長さを
オブジェクトまたはオブジェクトのクラスに入れること
や、タグ付けビットマップ430内に長さを含めること
が含まれるが、これらに限らない。さらに、当業者に
は、オブジェクトおよびクラスを実施するときに使用さ
れないデータ構造を含め、前述のデータ構造以外のデー
タ構造に本発明を適用できることが理解されよう。
【0065】本発明の他の形態は、世代別ガーベジ収集
技法に適用される。前述のように、ハッシュ値は、ノー
ドに関連付けられた有用な準一意整数である。ハッシュ
値はノードに関して一度だけ生成され、ノードの存在期
間にわたって変化しない。多くの場合、そのようなノー
ドはインスタンス化OOPオブジェクトである。したが
って、オブジェクトは一般に、ハッシュ値用の記憶域
と、オブジェクトのハッシュ値を返すためのOOP方法
とを備える。当業者には、ノード内のデータ構造を使用
し、データ構造の内容への手続きアクセスを行うことに
よって、同じ機能を実施できることが理解されよう。オ
ブジェクトの存在期間が非常に制限される(すなわち、
大部分のオブジェクトは作成領域で作成され、かつなく
なる)多くのOOPアプリケーションでは、作成領域内
にオブジェクトのハッシュ値を作成するオーバヘッドが
厄介であることを想起されたい。
【0066】図12は、一般参照符号500で示された
作成領域を示す。作成領域500は、ノード503を含
む作成領域501を含む。ノード503は、割り振られ
た後、ノード・アドレスを有する。このノード・アドレ
スはノード・ポインタ505内に含まれる(そうでない
場合、ノード503はガーベジになる)。ノード503
のハッシュ値は、ノード・アドレスおよび「グローバル
・ハッシュ・オフセット」変数507の内容を使用して
求められる。最初、「グローバル・ハッシュ・オフセッ
ト」変数507の内容は零に設定される。作成領域50
1に対するあらゆるスキャビンジ動作の後に、「グロー
バル・ハッシュ・オフセット」変数507の内容は、作
成領域501のサイズだけ増加される。作成領域501
にスキャビンジ動作を適用すると、すべての有効ノード
がヒープ・メモリ(図示せず)の異なる世代領域にコピ
ーされる。したがって、作成領域501はスキャビンジ
動作の後に空白になる。ノード503のハッシュ値は、
ノード・ポインタ505内に含まれるノード・アドレス
を「グローバル・ハッシュ・オフセット」変数507の
内容に加えることによって求められる。スキャビンジ動
作時には、コピーされるノードのハッシュ値が算出され
るときでも「グローバル・ハッシュ・オフセット」変数
507の値は変化しない。各ハッシュ生成時ではなくス
キャビンジ動作の終わりに「グローバル・ハッシュ・オ
フセット」変数507に対するメモリ書込み動作のみが
行われ、多くのメモリ・アクセスが節約される。
【0067】図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メソッドであることが
理解されよう。
【0068】図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のどちらかが、ハッシュ値を生成す
るハッシュ生成条件をトリガする。
【0069】本発明は、特にハッシュ値を必要とする存
在期間の短い多数のノードがあるときに従来技術よりも
効率的である。本発明は、「グローバル・ハッシュ・オ
フセット」変数507の内容が、従来技術の必要に応じ
て毎ハッシュ値計算時にメモリからロードされメモリに
記憶されるのではなく各スキャビンジ時にしか更新され
ないので効率的である。さらに、オブジェクトにハッシ
ュ値を記憶するのに必要なメモリ書込み動作が、ノード
のそのフィールドをコピーするのに必要なメモリ書込み
動作に置き換わる。したがって、追加オーバヘッド・メ
モリ・アクセスを使用しなくてもハッシュ値がノードに
記憶される。
【0070】本発明の他の形態は、作成領域のサイズが
ヒープの残りの部分と比べて小さいので有効である。こ
れは、作成領域への限られたフィールド長オフセットに
よって作成領域全体にアクセスできることを意味する。
したがって、18ビットのワードしか使用せずに1メガ
バイト作成領域内のノードへのリンクを指定することが
できる(4バイト・アドレス可能コンピュータ・アーキ
テクチャ上でのワード整列を仮定する)。ポインタは3
2ビット・コンピュータで32ビットを使用するが、リ
ンクは作成領域へのワード・インデックスとして18ビ
ットを使用し、確認値として14ビットを使用すること
ができる。確認値は、作成領域がスキャビンジされてか
らすべてのポインタ更新およびリンク更新が完了するま
での間の作成領域への非更新アクセスを示すために使用
される。十分に大きなポインタ・サイズのリンクおよび
ポインタが値の最上位ビット(MSB)によって区別さ
れると仮定する。ポインタのMSBは零であり、リンク
のMSBは1である。
【0071】図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の新しい位置が見つけられリンクがポインタに変
換される。
【0072】図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の各値ごとのリンク・テーブルと、当
業者に知られている他の多数の構成が含まれる。
【0073】図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を通じて完了
する。
【0074】当業者には、リンクを使用して作成領域6
01に存在するノードを参照することによって、スキャ
ビンジ動作のポインタ更新部に割り込めることが理解さ
れよう。したがって、作成領域601からコピーされた
ノードに対するすべての参照を完全に更新するために必
要な時間を吸収できないリアルタイム・システムは、ア
プリケーションのリアルタイム性に影響を与えずに、利
用可能な時間内にコピー済みノードに対する参照を部分
的に更新することができる。前述のように、コピー済み
ノードに対するリンク参照が検出され、更新プロセスが
割り込まれる周期中にコピー済みノードに対する直接ポ
インタ参照に変更される。
【0075】世代別ガーベジ収集技法の主要な利点の1
つは、まだスキャビンジ時に存在しているノードしか調
べないことである。しかし、この利点は、弱いポインタ
を使用する際には失われる。弱いポインタとは、参照さ
れるノードの存在期間に影響を与えずにノードを参照す
るポインタのことである。従来技術のガーベジ収集技法
は弱いポートを直接ポインタとして実施する。したがっ
て、スキャビンジ時には、すべての自由なノードを探索
し、自由なノードに対する弱いポインタ参照がスキャビ
ンジ以後に存在することがなくなるようにしなければな
らない。この探索は、生成ガーベジ収集技法の上述の利
点に影響を及ぼす。
【0076】しかし、リンクを使用して、参照されるノ
ードの存在期間に影響を与えずにノードを参照する弱い
ポインタを実施することができる。この実施形態では、
スキャビンジ以後に存在するノードしか走査しないとい
う本来の利点が得られる。スキャビンジ以後になくなる
ノードは、リンク・ポインタ変換テーブル内に対応する
エントリを有さない。リンク・ポインタ変換テーブル内
にエントリを有さないリンクはガーベジ収集されたノー
ドに過ぎない。ガーベジを指し示す弱い参照によって、
都合の良いときにガーベジ・ノードを割り振り直すこと
ができる。
【0077】図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を参照することができる。
【0078】本発明は、カード・マーク付けに関係する
技法も包含する。カード・マーク付けは、ヒープの増大
する領域を示す場合に有用である。ライト・バリア技法
は、どのカードが修正されているかを示し、したがっ
て、検査する必要のあるヒープの量を制限することによ
って修正済みポインタを見つける動作を最適化する助け
となる。カード・マーク付けを使用して、古い世代内の
どのノードが新しい世代を指し示すポインタを含むかを
示すこともできる。したがって、ヒープの特定のカード
付き領域は、それぞれ、特定の目的向けにカスタマイズ
された、複数のマーク付けベクトルを有することができ
る。
【0079】図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に関連して説
明した分岐データ構造を含むノードと共に使用すること
ができる。
【0080】関連するカードの始めからカード内の第1
のノード境界までのオフセットを含む、「ノード・オフ
セット」構造721に含まれるフィールドが、「ノード
開始」ベクトル711内の各ヘッダ・カードに対応す
る。この好ましい実施形態では、このフィールドはバイ
ト・フィールドであり、したがって、カードの長さは最
大で256個のアドレス可能なメモリ単位(通常はワー
ド)であってよい。たとえば、カード713に関連付け
られた「ノード・オフセット」フィールド723は値
「112」を含む。したがって、カード713の始めか
ら112個のワードが第1のノード境界であり、これは
第4のノード709の境界である。
【0081】カード内の第1のノードの始めが見つかっ
た後、その後に続くノードを調べ、ノードがノード・サ
イズと、ノード内のどの変数がポインタを含むかに関す
る表示とを含む場合にポインタを収集することができ
る。したがって、カード内の変更済みポインタまたは新
旧ポインタを示すマーク付きカードが与えられた場合、
プロセスは「ノード開始」ベクトル711および「ノー
ド・オフセット」構造721を使用して、マーク付きカ
ードと重なり合うノードを迅速に見つけ処理する。
【0082】図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
がノード境界を含まないことを示す。
【0083】図21は、一般参照符号750で示された
ノード検索プロセスを示す。ノード検索プロセス750
は「開始」ターミナル751から始まり、「マーク付き
カードのインデックスの取出し」手続き753に進む。
「マーク付きカードのインデックスの取出し」手続き7
53は、ノード内のアドレスを含むポインタを受け取っ
てそのアドレスからカード・インデックスを生成し、あ
るいは単にマーク付きカードのインデックスまたは他の
何らかのカード識別子を受け取る。次いで、「前のカー
ド内のノード境界の検索」手続き755で、「ノード開
始」ベクトル711がアクセスされ、前のインデックス
開始から、ノード境界を含むカードが見つかるまで、
「ノード開始」ベクトル711が走査される。当業者に
は、カードを修正するのではなくノード境界を含むカー
ドにマーク付けするライト・バリア処理系に対して「前
のカード内のノード境界の検索」手続き755をどのよ
うに修正すればよいかが理解されよう。次いで、ノード
検索プロセス750は、「カード内の第1のノード境界
へのオフセットの取出し」手続き757に進み、カード
内の第1のノードの境界の関連するオフセットが検索さ
れる。次いで、「順方向走査による関連ノードの検索」
手続き759によって、マーク付きカードと交差するノ
ードが見つかるまでノードが順方向に追跡される。次
に、「ノード処理」手続き761で、ノード内のポイン
タが処理される。その後に続くカード内のポインタも処
理される。最後に、ノード検索プロセス750は「終
了」ターミナル763を通じて完了する。
【0084】したがって、カード付きメモリ領域内のア
ドレスまたはカード・インデックスが与えられた場合、
本発明は、マーク付きカードに関係するポインタを含む
ノードを迅速に見つける。
【0085】上記で図3に関して説明したように、カー
ド・マーク付けを世代別ガーベジ収集アルゴリズムと共
に使用するときの1つの目標は、ヒープの作成領域内の
オブジェクトを参照しないヒープのコピーされた世代領
域内のオブジェクトをスキップすることである。しか
し、この目標は、古い世代内のそのようなノードの密度
が、大部分のカードがマーク付けられるほど高い場合に
は失われる。
【0086】本発明の好ましい実施形態の効果を図22
に示す。本発明の好ましい実施形態は、スキャビンジ時
に、新しい世代を指し示すポインタを含むノードがロー
カライズされるように古い世代を再順序付けする。
【0087】図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の古い世代領域内のノードをローカライズす
ることによって達成される。
【0088】図23は、一般参照符号850で示された
ノード収集プロセスを示す。ノード収集プロセス850
は「開始」ターミナル851から始まり、反復手続き8
53に進む。反復手続き853は、収集中の世代のすべ
てのマーク付きカードに対して反復される。「ポインタ
・ノード収集」手続き855で、新しい世代を指し示す
ポインタを含む各ノードまたは部分ノードが収集され
る。当業者は、カード境界を横切るノードを処理するこ
とができる。「非ポインタ・ノード記憶」手続き857
で、新しい世代を指し示すポインタを有さないカード内
の各ノードが記憶される。プロセスは、すべてのマーク
付きカードが処理されるまで反復手続き853を繰り返
す。したがって、図22に示したように、新しい世代を
指し示すポインタを有する世代内のすべてのノードがメ
モリ内でローカライズされる。当業者には、この収集手
続きによって、コピーされた世代の適切なカードがマー
ク付けされることが理解されよう。次に、プロセスは
「記憶されたノードの収集」手続き859に進み、「非
ポインタ・ノード記憶」手続き857中に記憶されたノ
ードが収集される。このようなノードは、新しい世代を
指し示すポインタを含まず、したがってコピーされた世
代領域へ転送するだけでよい。次に、反復手続き861
で、あらゆる未マーク・カードが調べられる。未マーク
・カード内の各ノードは、「カード内のノードの収集」
手続き863によって収集される。プロセスは、すべて
の未マーク・カードが処理されるまで反復手続き861
を繰り返す。最後に、プロセスは「終了」ターミナル8
65を通じて完了し、図22のカード・マーク付け構造
800が残る。
【0089】カード・マーク付きヒープ内のポインタを
見つける際の効率を高める他の方法は、ポインタを含む
データ構造に関する追加情報を与えることである。特
に、この追加情報は、データ構造のアレイへのインデッ
クスとしてループ制御変数を使用するプログラム・ルー
プによってデータ構造内のどの変数が変更されているか
を指定する。さらに、本発明は、ポインタ値のポインタ
・アレイへの割当動作に関連付けられたライト・バリア
命令を、ループの反復部分内から移動させることによっ
て、ループの効率を高める。したがって、本発明のこの
形態は、カード・マーク付きヒープ内のポインタ・アレ
イに値を割り当てる際にプログラムの実行速度を向上さ
せる。本発明の他の形態は、カード・マーク付きヒープ
内の修正済みポインタを見つけるガーベジ収集動作の効
率を高める。
【0090】図24は、カード・マーク付きヒープ90
1を有する、一般参照符号900で示されたメモリのカ
ード・マーク付き領域を示す。カード・マーク付きヒー
プ901は、カード905内に始めを有するポインタ・
アレイ構造903を含む。ポインタ・アレイ構造903
内のあるポインタ値がループの実行時に修正されている
ので、カード・マーカ907は後述のようにマーク付け
される。
【0091】図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の初期値も零であ
る。これらのフィールドは、スキャビンジ動作後にそれ
ぞれの初期値にリセットされる。
【0092】「C」の「for」文(および他のプログ
ラミング言語の同様なループ文)は、開始インデックス
と、終了インデックスと、ストライドとを含む。「fo
r」文は開始インデックスを制御変数に割り当てる。ス
トライドは、制御変数が終了インデックスに達するまで
「for」文の各反復時にこの制御変数に追加され、制
御変数が終了インデックスに達した時点で「for」文
が完了する。したがって、そのような反復文内の制御変
数でインデックス付けされたポインタ・アレイ構造91
0の要素にポインタを割り当てると、ポインタ・アレイ
構造910内でポインタ割当パターンが形成される。こ
のパターンは、ヒープにおいてポインタを走査する際に
ガーベジ収集アルゴリズムによって使用される。当業者
には、本発明が、「for」文だけでなく一般的なルー
プ構造にも有用であることが理解されよう。
【0093】図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に記憶される。
【0094】「ポインタ・アレイ・マーク付け」プロセ
ス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内のどの要素が修正さ
れたかがパラメータ化されることが理解されよう。
【0095】図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を通じて
完了する。
【0096】図28は、一般参照符号980で示された
アレイ・スキャビンジ・プロセスを示す。アレイ・スキ
ャビンジ・プロセス980は、ガーベジ収集プロセスに
よって修正済みポインタ・アレイを含むカードが検出さ
れているときに「開始」ターミナル981から始まる。
アレイ・スキャビンジ・プロセス980は、ポインタ・
アレイ構造910を指し示すポインタを受け取り、「ル
ープ初期設定」手続き983に進む。「ループ初期設
定」手続き983では、ポインタ・アレイ構造910内
の修正済みポインタに関する情報がアレイ・ヘッダ91
1から検索される。次に、アレイ・ヘッダ911によっ
て指定されたポインタに対して「アレイに対するルー
プ」手続き985が繰り返される。「アレイに対するル
ープ」手続き987が完了すると、アレイ・スキャビン
ジ・プロセス980は「アレイ・ヘッダ・リセット」手
続き987に進み、アレイ・ヘッダ911内のフィール
ドが初期状態にリセットされる。この時点で、カード・
マーカ907もクリアされ、ポインタ・アレイ構造91
0内に未処理のポインタ修正がないことが示される。ア
レイ・スキャビンジ・プロセス980は次いで、「終
了」ターミナル989を通じて完了する。「アレイに対
するループ」手続き985の各反復では「ポインタ処
理」手続き991が実行され、ガーベジ収集アルゴリズ
ムの要件に応じて、反復されたポインタが処理される。
【0097】カード付きヒープ・メモリのカード・マー
ク付けメモリは、カード付きヒープ・メモリ領域自体よ
りもずっと小さい。しかし、大形のカード付きヒープ・
メモリのカード・マーク付けメモリを走査するオーバヘ
ッドは非常に高くなる恐れがある。このオーバヘッド
は、カード・マーク付けメモリの一部しか走査しなくて
よい場合には低減される。本発明の一形態は、カード・
マーク付けメモリをいくつかのセクションに関連付け
る。これらのセクションは、そのセクションによって制
御されるカード・マーカがマーク付けされていることを
示すようにフラグ付けされる。フラグ付けされたセクシ
ョン内のカード・マーカのみが走査される。
【0098】図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とを含む。
【0099】カード・ベクトル1011は、第1のマー
ク付きカード・マーカ1019と、第2のマーク付きカ
ード・マーカ1021と、第1の未マーク・カード・マ
ーカ1023とを含む。第1のマーク付きカード・マー
カ1019は第1の修正済みカード1003に関連付け
られる。第2のマーク付きカード・マーカ1021は第
2の修正済みカード1005に関連付けられる。第1の
未マーク・カード・マーカ1023は第1の未修正カー
ド1007に関連付けられる。
【0100】「セクション「Z」」エントリ1015は
カード・ベクトル1011の「セクションZ」部102
5に関連付けられる。「セクション「Z+1」」エント
リ1017は、第2の未修正カード1009に関連付け
られた第2の未マーク・カード・マーカ1029を含む
カード・ベクトル1011の「セクション「Z+1」」
部1027に関連付けられる。
【0101】したがって、カード付きヒープ・メモリ領
域1001のサイズが226ワードであり、各カードのサ
イズが28ワードであると仮定すると、カード・ベクト
ル1011のサイズは218バイトである。セクション・
ベクトル1013内の各セクションが212バイトをカバ
ーすると仮定すると、カード付きヒープ・メモリ領域1
001をカバーするのに必要なセクションは26個に過
ぎない。したがって、修正される可能性の高いメモリが
ローカライズされるようにカード付きヒープ・メモリ領
域1001を構成する場合、そのセクションに関連付け
られたカードがマーク付けされていることを示すように
フラグ付けされたセクションのセクション・ベクトル1
013を最初に走査することによって、かなりの処理時
間を節約することができる。
【0102】図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は、毎スキャビンジ動作後に減分されるカウントダウ
ン・タイマを含む。
【0103】図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を通じて完了する。
【0104】図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に進み、次のセクション構造を処理する。
【0105】当業者には、前述の本発明が、単にポイン
タ値に関して走査することのできるデータ構造と、OO
P環境でのインスタンス化オブジェクトの形態を簡略化
するデータ構造の両方を与える方法、システム、装置、
プログラミング製品を教示するものであることが理解さ
れよう。
【0106】本発明を現在好ましい実施形態に関して説
明したが、当業者には、本発明の範囲から逸脱せずに様
々な修正および変形を加えられることが理解されよう。
したがって、本発明の範囲は、本明細書で論じる本発明
の特定の実施形態に限らず、添付の特許請求の範囲およ
びその等価物によってのみ定義すべきである。
【図面の簡単な説明】
【図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・カリフォルニア 州・パロ アルト・エイムズ アヴェニ ュ・771

Claims (27)

    【特許請求の範囲】
  1. 【請求項1】 カード・マーク・ヒープ中の複数の要素
    を有するポインタ・アレイ中の複数のポインタ値に対す
    るガーベッジ収集動作を最適化するコンピュータ制御に
    よる方法であって、 (a)前記ポインタ・アレイをプログラム・ループ動作
    に従ってパラメータ化し、前記ポインタ・アレイに関連
    するポインタ割当てのパターンを指定するポインタ・デ
    ータ・パラメータ化を実施するステップと、 (b)前記プログラム・ループ動作中に前記カード・マ
    ーク・ヒープをマーク付けせずに前記プログラム・ルー
    プ動作中に前記複数のポインタ値を前記複数の要素中に
    記憶するステップと、 (c)前記ポインタ・データ・パラメータ化に従って前
    記複数の要素に対する前記ガーベッジ収集動作を最適化
    するステップとを含むコンピュータ制御による方法。
  2. 【請求項2】 前記ポインタ・データ・パラメータ化
    が、前記ポインタ・アレイ中の最初の修正された要素を
    指定する最初に変更された要素索引、最後の修正された
    要素を指定する最後に変更された要素索引、およびスト
    ライド値を含む請求項1に記載のコンピュータ制御によ
    る方法。
  3. 【請求項3】 前記ポインタ・データ・パラメータ化
    が、前記ポインタ・アレイ中のアレイ・ヘッダ中に記憶
    される請求項1に記載のコンピュータ制御による方法。
  4. 【請求項4】 カード・マーク・ヒープ中のポインタ・
    アレイ中の複数の要素に対するプログラム・ループ動作
    中の割当て動作を最適化するコンピュータ制御による方
    法であって、 (b)前記ポインタ・アレイに関連する現在のポインタ
    ・データ・パラメータ化および既存のポインタ・データ
    ・パラメータ化によって特徴付けられるプログラム・ル
    ープ動作に従って前記ポインタ・アレイをパラメータ化
    し、前記ポインタ・アレイに関連する修正されたポイン
    タ・データ・パラメータ化を実施するステップと、 (c)前記プログラム・ループ動作中に前記カード・マ
    ーク・ヒープをマーク付けせずに前記プログラム・ルー
    プ動作中に前記複数のポインタ値を前記複数の要素中に
    記憶するステップとを含むコンピュータ制御による方
    法。
  5. 【請求項5】 前記既存のポインタ・データ・パラメー
    タ化、現在のポインタ・データ・パラメータ化、および
    前記修正されたポインタ・データ・パラメータ化がそれ
    ぞれ、前記ポインタ・アレイ中の最初の修正された要素
    を指定する最初に変更された要素索引、最後の修正され
    た要素を指定する最後に変更された要素索引、およびス
    トライド値を含む請求項4に記載のコンピュータ制御に
    よる方法。
  6. 【請求項6】 前記既存のポインタ・データ・パラメー
    タ化および前記修正されたポインタ・データ・パラメー
    タ化が前記ポインタ・アレイ中のアレイ・ヘッダ中に記
    憶される請求項5に記載のコンピュータ制御による方
    法。
  7. 【請求項7】 ステップ(b)およびステップ(c)中
    に前記カード・マーク・ヒープに対するガーベッジ収集
    動作をディスエーブルにするステップをさらに含む請求
    項4に記載のコンピュータ制御による方法。
  8. 【請求項8】 前記カード・マーク・ヒープ中の前記ポ
    インタ・アレイをマーク付けするステップをさらに含む
    請求項4に記載のコンピュータ制御による方法。
  9. 【請求項9】 (a)コンパイル時間決定可能ループの
    前記現在のポインタ・データ・パラメータ化および前記
    ポインタ・アレイの上限および下限に従ってコンパイラ
    によってステップ(b)を最適化するステップをさらに
    含む請求項4に記載のコンピュータ制御による方法。
  10. 【請求項10】 中央演算処理装置(CPU)および前
    記CPUに結合されたメモリを有し、前記メモリのカー
    ド・マーク・ヒープ中の複数の要素を有するポインタ・
    アレイ中の複数のポインタ値に対するガーベッジ収集動
    作を最適化する装置であって、 前記ポインタ・アレイをプログラム・ループ動作に従っ
    てパラメータ化し、前記ポインタ・アレイに関連するポ
    インタ割当てのパターンを指定するポインタ・データ・
    パラメータ化をもたらすように構成されたパラメータ化
    機構と、 前記プログラム・ループ動作中に前記カード・マーク・
    ヒープをマーク付けせずに前記プログラム・ループ動作
    中に前記複数のポインタ値を前記複数の要素中に記憶す
    るように構成された記憶機構と、 前記ポインタ・データ・パラメータ化に従って前記複数
    の要素に対する前記ガーベッジ収集動作を最適化するよ
    うに構成された最適化機構とを含む装置。
  11. 【請求項11】 前記ポインタ・データ・パラメータ化
    が、前記ポインタ・アレイ中の最初の修正された要素を
    指定する最初に変更された要素索引、最後の修正された
    要素を指定する最後に変更された要素索引、およびスト
    ライド値を含む請求項10に記載の装置。
  12. 【請求項12】 前記ポインタ・データ・パラメータ化
    が、前記ポインタ・アレイ中のアレイ・ヘッダ中に記憶
    される請求項10に記載の装置。
  13. 【請求項13】 中央演算処理装置(CPU)および前
    記CPUに結合されたメモリを有し、前記メモリのカー
    ド・マーク・ヒープ中のポインタ・アレイ中の複数の要
    素に対するプログラム・ループ動作中の割当て動作を最
    適化する装置であって、 前記ポインタ・アレイに関連する現在のポインタ・デー
    タ・パラメータ化および既存のポインタ・データ・パラ
    メータ化によって特徴付けられるプログラム・ループ動
    作に従って前記ポインタ・アレイをパラメータ化し、前
    記ポインタ・アレイに関連する修正されたポインタ・デ
    ータ・パラメータ化をもたらすように構成されたパラメ
    ータ化機構と、 前記プログラム・ループ動作中に前記カード・マーク・
    ヒープをマーク付けせずに前記プログラム・ループ動作
    中に前記複数のポインタ値を前記複数の要素中に記憶す
    るように構成された記憶機構とを含む装置。
  14. 【請求項14】 前記既存のポインタ・データ・パラメ
    ータ化、現在のポインタ・データ・パラメータ化、およ
    び前記修正されたポインタ・データ・パラメータ化がそ
    れぞれ、前記ポインタ・アレイ中の最初の修正された要
    素を指定する最初に変更された要素索引、最後の修正さ
    れた要素を指定する最後に変更された要素索引、および
    ストライド値を含む請求項13に記載の装置。
  15. 【請求項15】 前記既存のポインタ・データ・パラメ
    ータ化および前記修正されたポインタ・データ・パラメ
    ータ化が前記ポインタ・アレイ中のアレイ・ヘッダ中に
    記憶される請求項14に記載の装置。
  16. 【請求項16】 パラメータ化機構および記憶機構の動
    作中に前記カード・マーク・ヒープに対するガーベッジ
    収集動作をディスエーブルにするように構成されたディ
    スエーブル機構をさらに含む請求項13に記載の装置。
  17. 【請求項17】 前記カード・マーク・ヒープ中の前記
    ポインタ・アレイをマーク付けするように構成されたマ
    ーク付け機構をさらに含む請求項13に記載の装置。
  18. 【請求項18】 コンパイル時間決定可能ループの前記
    現在のポインタ・データ・パラメータ化および前記ポイ
    ンタ・アレイの上限および下限に従ってパラメータ化機
    構を最適化するように構成されたコンパイラ中の最適化
    機構をさらに含む請求項13に記載の装置。
  19. 【請求項19】 前記メモリのカード・マーク・ヒープ
    中に複数の要素を有するポインタ・アレイ中の複数のポ
    インタ値に対するガーベッジ収集動作をコンピュータに
    最適化させるプログラムをコンピュータに読取りできる
    ように記録された記憶媒体において、 前記ポインタ・アレイをプログラム・ループ動作に従っ
    てパラメータ化し、前記ポインタ・アレイに関連するポ
    インタ割当てのパターンを指定するポインタ・データ・
    パラメータ化を実行するように構成されたパラメータ化
    機構を前記コンピュータに実施させるように構成された
    コンピュータ読取り可能プログラムと、 前記プログラム・ループ動作中に前記カード・マーク・
    ヒープをマーク付けせずに前記プログラム・ループ動作
    中に前記複数のポインタ値を前記複数の要素中に記憶す
    るように構成された記憶機構を前記コンピュータに実施
    させるように構成されたコンピュータ読取り可能プログ
    ラムと、 前記ポインタ・データ・パラメータ化に従って前記複数
    の要素に対する前記ガーベッジ収集動作を最適化するよ
    うに構成された最適化機構を前記コンピュータに実施さ
    せるように構成されたコンピュータ読取り可能プログラ
    ムとを含むコンピュータ・プログラムを記録した記憶媒
    体。
  20. 【請求項20】 前記ポインタ・データ・パラメータ化
    が、前記ポインタ・アレイ中の最初の修正された要素を
    指定する最初に変更された要素索引、最後の修正された
    要素を指定する最後に変更された要素索引、およびスト
    ライド値を含む請求項19に記載のコンピュータ・プロ
    グラムを記録した記憶媒体。。
  21. 【請求項21】 前記ポインタ・データ・パラメータ化
    が、前記ポインタ・アレイ中のアレイ・ヘッダ中に記憶
    される請求項19に記載のコンピュータ・プログラムを
    記録した記憶媒体。
  22. 【請求項22】 前記メモリのカード・マーク・ヒープ
    中のポインタ・アレイ中の複数の要素に対するプログラ
    ム・ループ動作中の割当て動作をコンピュータに最適化
    させるプログラムをコンピュータに読み取ることができ
    るように記録した記憶媒体において、 前記ポインタ・アレイに関連する現在のポインタ・デー
    タ・パラメータ化および既存のポインタ・データ・パラ
    メータ化によって特徴付けられるプログラム・ループ動
    作に従って前記ポインタ・アレイをパラメータ化し、前
    記ポインタ・アレイに関連する修正されたポインタ・デ
    ータ・パラメータ化をもたらすように構成されたパラメ
    ータ化機構を前記コンピュータに実施させるように構成
    されたコンピュータ読取り可能プログラムと、 前記プログラム・ループ動作中に前記カード・マーク・
    ヒープをマーク付けせずに前記プログラム・ループ動作
    中に前記複数のポインタ値を前記複数の要素中に記憶す
    るように構成された記憶機構を前記コンピュータに実施
    させるように構成されたコンピュータ読取り可能プログ
    ラムとを含むコンピュータ・プログラムを記録した記憶
    媒体。
  23. 【請求項23】 前記既存のポインタ・データ・パラメ
    ータ化、現在のポインタ・データ・パラメータ化、およ
    び前記修正されたポインタ・データ・パラメータ化がそ
    れぞれ、前記ポインタ・アレイ中の最初の修正された要
    素を指定する最初に変更された要素索引、最後の修正さ
    れた要素を指定する最後に変更された要素索引、および
    ストライド値を含む請求項22に記載のコンピュータ・
    プログラムを記録した記憶媒体。
  24. 【請求項24】 前記既存のポインタ・データ・パラメ
    ータ化および前記修正されたポインタ・データ・パラメ
    ータ化が前記ポインタ・アレイ中のアレイ・ヘッダ中に
    記憶される請求項23に記載のコンピュータ・プログラ
    ムを記録した記憶媒体。
  25. 【請求項25】 パラメータ化機構および記憶機構の動
    作中に前記カード・マーク・ヒープに対するガーベッジ
    収集動作をディスエーブルにするように構成されたディ
    スエーブル機構を前記コンピュータに実施させるように
    構成されたコンピュータ読取り可能プログラム・コード
    ・デバイスをさらに含む請求項22に記載のコンピュー
    タ・プログラムを記録した記憶媒体。
  26. 【請求項26】 前記カード・マーク・ヒープ中の前記
    ポインタ・アレイをマーク付けするように構成されたマ
    ーク付け機構を前記コンピュータに実施させるように構
    成されたコンピュータ読取り可能プログラム・コード・
    デバイスをさらに含む請求項22に記載のコンピュータ
    ・プログラムを記録した記憶媒体。
  27. 【請求項27】 コンパイル時間決定可能ループの前記
    現在のポインタ・データ・パラメータ化および前記ポイ
    ンタ・アレイの上限および下限に従ってパラメータ化機
    構を最適化するように構成されたコンパイラ中の最適化
    機構を前記コンピュータに実施させるように構成された
    コンピュータ読取り可能プログラム・コード・デバイス
    をさらに含む請求項22に記載のコンピュータ・プログ
    ラムを記録した記憶媒体。
JP10111848A 1997-04-23 1998-04-22 カード・ヒープ中のアレイ・ノードの正確なガーベッジ収集を最適化する方法および装置 Pending JPH10301837A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/842,139 US5903900A (en) 1997-04-23 1997-04-23 Method and apparatus for optimizing exact garbage collection of array nodes in a carded heap
US08/842,139 1997-04-23

Publications (1)

Publication Number Publication Date
JPH10301837A true JPH10301837A (ja) 1998-11-13

Family

ID=25286618

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10111848A Pending JPH10301837A (ja) 1997-04-23 1998-04-22 カード・ヒープ中のアレイ・ノードの正確なガーベッジ収集を最適化する方法および装置

Country Status (4)

Country Link
US (1) US5903900A (ja)
EP (1) EP0874317B1 (ja)
JP (1) JPH10301837A (ja)
DE (1) DE69800909T2 (ja)

Families Citing this family (77)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6115782A (en) * 1997-04-23 2000-09-05 Sun Micosystems, Inc. Method and apparatus for locating nodes in a carded heap using a card marking structure and a node advance value
US6105040A (en) * 1997-06-30 2000-08-15 Sun Microsystems, Inc. Method and apparatus for managing stored objects
US6308185B1 (en) * 1998-03-06 2001-10-23 Sun Microsystems, Inc. Methods and apparatus for generational dynamic management of computer memory
US6141738A (en) * 1998-07-08 2000-10-31 Nortel Networks Corporation Address translation method and system having a forwarding table data structure
US6173294B1 (en) * 1998-08-25 2001-01-09 International Business Machines Corporation Method for combining card marking with remembered set for generational garbage collection with more than two generations
US6148310A (en) * 1998-08-25 2000-11-14 International Business Machines Corporation Method for combining card marking with remembered sets for old area of a memory heap
US6148309A (en) * 1998-08-25 2000-11-14 International Business Machines Corporation Method for handling overflow of counters in comparison based actions
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
US6275985B1 (en) 1998-12-17 2001-08-14 Sun Microsystems, Inc Method and apparatus for developing an application that implements garbage collection efficiently by combining proxy objects with compiler support
GB2345355A (en) * 1998-12-30 2000-07-05 Ibm Garbage collection in a Java virtual machine
US6401182B1 (en) * 1999-02-10 2002-06-04 International Business Machines Corporation Method and apparatus for memory management
US6457019B1 (en) * 1999-02-11 2002-09-24 Oracle Corp. Memory management within a run-time environment
US6249793B1 (en) * 1999-06-10 2001-06-19 Sun Microsystems, Inc. Mostly concurrent compaction in a garbage collection system
US6381738B1 (en) * 1999-07-16 2002-04-30 International Business Machines Corporation Method for optimizing creation and destruction of objects in computer programs
US6434576B1 (en) 1999-08-19 2002-08-13 Sun Microsystems, Inc. Popular-object handling in a train-algorithm-based garbage collector
US6424977B1 (en) 1999-08-19 2002-07-23 Sun Microsystems, Inc. Train-algorithm-based garbage collector employing reduced oversized-object threshold
US6185581B1 (en) * 1999-08-19 2001-02-06 Sun Microsystems, Inc. Train-algorithm-based garbage collector employing fixed-size remembered sets
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
US7096238B2 (en) 1999-08-19 2006-08-22 Sun Microsystems, Inc. Dynamic feedback for determining collection-set size
US6415302B1 (en) 1999-08-19 2002-07-02 Sun Microsystems, Inc. Train-algorithm-based garbage collector employing farthest-forward-car indicator
WO2001057656A2 (en) * 2000-02-07 2001-08-09 Insignia Solutions Plc Reduced size object headers
US6529919B1 (en) 2000-02-15 2003-03-04 Sun Microsystems, Inc. Incremental class unloading in a train-algorithm-based garbage collector
US6738875B1 (en) 2000-07-31 2004-05-18 Microsoft Corporation Efficient write-watch mechanism useful for garbage collection in a computer system
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
US6928460B2 (en) * 2002-07-01 2005-08-09 Sun Microsystems, Inc. Method and apparatus for performing generational garbage collection in a segmented heap
US7035884B2 (en) * 2002-11-05 2006-04-25 Sun Microsystems, Inc. Placement of allocation trains in the train algorithm
US7539713B2 (en) 2002-11-05 2009-05-26 Sun Microsystems, Inc. Allocation of likely popular objects in the train algorithm
US6999979B2 (en) * 2002-11-05 2006-02-14 Sun Microsystems, Inc. Efficient encoding of references into a collection set
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
US20040111718A1 (en) * 2002-12-04 2004-06-10 Detlefs David L. Block-offset table employing gaps in value set
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
US7085790B2 (en) * 2002-12-06 2006-08-01 Sun Microsystems, Inc. Advancing cars in trains managed by a collector 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
US7143124B2 (en) * 2002-12-06 2006-11-28 Sun Microsystems, Inc. Detection of dead regions during incremental collection
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
US7058781B2 (en) * 2003-02-14 2006-06-06 Sun Microsystems, Inc. Parallel card table scanning and updating
US7043509B2 (en) * 2003-02-19 2006-05-09 Sun Microsystems, Inc. Parallel non-contiguous allocation and card parsing
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
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
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
US7096329B2 (en) * 2003-02-27 2006-08-22 Sun Microsystems, Inc. Better placement of objects promoted into a generation managed by the train algorithm
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
DE10329680A1 (de) * 2003-07-01 2005-02-10 Universität Stuttgart Prozessorarchitektur für exakte Zeigeridentifizierung
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
US7404182B1 (en) 2003-10-03 2008-07-22 Sun Microsystems, Inc. Deferring and combining write barriers for a garbage-collected heap
US7792880B2 (en) * 2004-01-05 2010-09-07 International Business Machines Corporation Method and apparatus for efficient implementation of discontiguous objects
US7624137B2 (en) * 2004-01-05 2009-11-24 International Business Machines Corporation Method and apparatus for scheduling and performing garbage collection in a real-time system with guaranteed space bounds
US7636745B1 (en) 2004-03-12 2009-12-22 Sun Microsystems, Inc. Concurrent-marking-initiation heuristic
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
US7774741B2 (en) * 2006-05-22 2010-08-10 Microsoft Corporation Automatically resource leak diagnosis and detecting process within the operating system
US7627621B2 (en) * 2007-02-12 2009-12-01 Sun Microsystems, Inc. Method and system for minor garbage collection
US7870171B2 (en) * 2007-02-12 2011-01-11 Oracle America, Inc. Method and system for garbage collection in a multitasking environment
KR101634118B1 (ko) * 2010-03-22 2016-06-29 삼성전자주식회사 메모리 관리 장치 및 방법
US8726255B2 (en) 2012-05-01 2014-05-13 Concurix Corporation Recompiling with generic to specific replacement
US9417935B2 (en) 2012-05-01 2016-08-16 Microsoft Technology Licensing, Llc Many-core process scheduling to maximize cache usage
US8650538B2 (en) 2012-05-01 2014-02-11 Concurix Corporation Meta garbage collection for functional code
US8595743B2 (en) 2012-05-01 2013-11-26 Concurix Corporation Network aware process scheduling
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
US9575813B2 (en) 2012-07-17 2017-02-21 Microsoft Technology Licensing, Llc Pattern matching process scheduler with upstream optimization
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
US9043788B2 (en) 2012-08-10 2015-05-26 Concurix Corporation Experiment manager for manycore systems
US8656135B2 (en) 2012-11-08 2014-02-18 Concurix Corporation Optimized memory configuration deployed prior to execution
US8656134B2 (en) 2012-11-08 2014-02-18 Concurix Corporation Optimized memory configuration deployed on executing code
US8607018B2 (en) 2012-11-08 2013-12-10 Concurix Corporation Memory usage configuration based on observations
US9665474B2 (en) 2013-03-15 2017-05-30 Microsoft Technology Licensing, Llc Relationships derived from trace data

Family Cites Families (21)

* 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
JPH04506720A (ja) * 1990-03-23 1992-11-19 イーストマン・コダック・カンパニー ディジタル・データ処理システムのための仮想メモリ管理及び割付け装置
NL9001262A (nl) * 1990-06-05 1992-01-02 Oce Nederland Bv Werkwijze voor het in een logisch georganiseerd systeem, van door digrafen te representeren groepen van met elkaar in relatie staande entiteiten, distribueren van status-informatie betreffende een digraaf en een inrichting voor het toepassen van een dergelijke werkwijze.
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
US5218698A (en) * 1991-11-22 1993-06-08 Aerojet-General Corporation Garbage collection system for a symbolic digital processor
ATE233001T1 (de) * 1992-06-15 2003-03-15 Microsoft Corp Rechnerverfahren und system zur speicherverwaltung
EP0606461B1 (en) * 1992-07-24 1999-11-24 Microsoft Corporation Computer method and system for allocating and freeing memory
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
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

Also Published As

Publication number Publication date
US5903900A (en) 1999-05-11
EP0874317B1 (en) 2001-06-13
DE69800909T2 (de) 2002-03-28
DE69800909D1 (de) 2001-07-19
EP0874317A2 (en) 1998-10-28
EP0874317A3 (en) 1999-04-21

Similar Documents

Publication Publication Date Title
US6049810A (en) Method and apparatus for implementing a write barrier of a garbage collected heap
JPH10301837A (ja) カード・ヒープ中のアレイ・ノードの正確なガーベッジ収集を最適化する方法および装置
US6115782A (en) Method and apparatus for locating nodes in a carded heap using a card marking structure and a node advance value
EP0874318B1 (en) A method and apparatus for locating object pointers used within exact garbage collection
US5920876A (en) Performing exact garbage collection using bitmaps that identify pointer values within objects
US6038572A (en) Method and apparatus for localizing nodes in a garbage collected carded heap
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
US6021272A (en) Transforming and manipulating program object code
US6192517B1 (en) Method, apparatus, and product for improved garbage collection in a memory system through the removal of reference conflicts
US6381738B1 (en) Method for optimizing creation and destruction of objects in computer programs
US6253215B1 (en) Method, apparatus, and article of manufacture for facilitating resource management for applications having two types of program code
US7831961B1 (en) Cooperative preemption mechanism for garbage-collected multi-threaded computation
US6820101B2 (en) Methods and apparatus for optimizing garbage collection using separate heaps of memory for storing local objects and non-local objects
US7036118B1 (en) System for executing computer programs on a limited-memory computing machine
JPH11161502A (ja) スタティックオーバーロードのない基本型の値に関する効率的演算方法および装置
US9921959B2 (en) Efficient reference classification and quick memory reuse in a system that supports concurrent garbage collection
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
JP2004295889A (ja) データ処理システム内での処理タスクの実行を制御する方法および装置
US6275985B1 (en) Method and apparatus for developing an application that implements garbage collection efficiently by combining proxy objects with compiler support
US11507503B1 (en) Write barrier for remembered set maintenance in generational Z garbage collector
US11513954B2 (en) Consolidated and concurrent remapping and identification for colorless roots
US11573794B2 (en) Implementing state-based frame barriers to process colorless roots during concurrent execution
US11875193B2 (en) Tracking frame states of call stack frames including colorless roots

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