JPH0695954A - コンサーバティブ・スタックとジェネレイショナル・ヒープガーベージ・コレクション用コンピュータシステム及び方法 - Google Patents
コンサーバティブ・スタックとジェネレイショナル・ヒープガーベージ・コレクション用コンピュータシステム及び方法Info
- Publication number
- JPH0695954A JPH0695954A JP5143792A JP14379293A JPH0695954A JP H0695954 A JPH0695954 A JP H0695954A JP 5143792 A JP5143792 A JP 5143792A JP 14379293 A JP14379293 A JP 14379293A JP H0695954 A JPH0695954 A JP H0695954A
- Authority
- JP
- Japan
- Prior art keywords
- pointer
- new
- objects
- accessible
- memory
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
- G06F12/0269—Incremental or concurrent garbage collection, e.g. in real-time systems
- G06F12/0276—Generational garbage collection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/70—Details relating to dynamic memory management
- G06F2212/702—Conservative garbage collection
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
を改良する。 【構成】 ヒープは、各々新または古いとして識別され
る複数のオブジェクトを備え、ラン時間中、新オブジェ
クトに対するポインターを含む古いオブジェクトのリス
トが維持される。ガーベージコレクション時間中、その
リストにおける古いオブジェクトによってアクセス可能
な各新オブジェクトは、アクセス可能としてマークさ
れ、スタックは、新オブジェクトに対するポインターで
あるかもしれない複数のスタックを含み、各スタックエ
ントリは、それが新オブジェクトを指示しうるか見るた
めにチェックされる。スタックエントリが指示しうる各
新オブジェクトは、アクセス可能としてマークされ、マ
ークされたオブジェクトによってアクセス可能な各新オ
ブジェクトもアクセス可能としてマークされる。
Description
レクション用コンピュータシステム及び方法、特にポイ
ンターをスタックする従来のアプローチ及び目的を改善
する世代アプローチを用いるガーベージコレクション用
のシステム及び方法に関する。
モリをダイナミックに管理することができる。ダイナミ
ックメモリ管理をメモリのブロックが特別な目的のため
に一時的に割り当てられ、且つその目的のために最早必
要でない時に割当解除される処理に関連している。割当
解除されたブロックは他の目的のために再割当に利用で
きる。メモリをダイナミックに管理する処理はメモリマ
ネジャーと呼ばれている。メモリマネジャーが管理する
メモリはヒープと呼ばれている。プログラムがデータを
格納するためにメモリブロックを必要とするとプログラ
ムはメモリマネジャーに要求する。メモリマネジャーは
その要求を満たすためにヒープにあるメモリブロックを
割り当て、プログラムに対してメモリブロックにポイン
タを送る。プログラムはポインタを介してメモリブロッ
クにアクセスすることが可能である。
ログラムの場合、複数のメモリブロック(一つのメモリ
ブロックはしばしばオブジェクトと呼ばれる)は自動的
に或いはダイナミックに割り当てられることができる。
自動的なオブジェクトは手続きが入り口に入ると自動的
に割り当てられ、また手続きが出口を出ると自動的に割
当解除になる。逆に言えば、ダイナミックオブジェクト
は明白な呼び出しによってメモリマネジャーに割り当て
られ、また明白な呼び出しによってメモリマネジャー
に、或いはガーベージコレクションとして知られる技術
により自動的に割当解除される。典型的には、自動的な
オブジェクトはスタックに格納され、またダイナミック
オブジェクトはヒープに格納される。
ックオブジェクトにアクセスすることだけができる。ポ
インターはオブジェクトのアドレスを有するメモリ位置
である。もしプログラムがポインターをオーバーライト
すると、それに対応するオブジェクトはプログラムにア
クセスできなくなる。オブジェクトは幾らかのポインタ
ーによって指定される。全てのポインターがオーバーラ
イトしたり、あるいは他のアクセスできないオブジェク
トの部分であるたときだけ、オブジェクトはアクセスで
きなくなる。アクセスできないオブジェクトはプログラ
ムがデータを検索できないか、データを書き込むことが
できない。ガーベージコレクションはプログラムによっ
て最早アクセスできないオブジェクトを検出し、再生す
るダイナミックメモリ管理の処理であり、また割当解除
およびそれに続く再割当のためのものである。
を決定するための2つの基本的技術がある。レファレン
スカウンティング技術は、オブジェクトが新しいポイン
ターはオブジェクトに指定するためにセットされるあら
ゆる時にオブジェクトのポインターカウントを増加する
ことによって、またオブジェクトに対して指定するポイ
ンタがオーバーライトするあらゆる時にポインタカウン
トを減少することによりアクセス可能であるかどうかを
追跡する。レファレンスカウンティング技術は高価につ
く。ある実行において、ポインターカウントを増加、減
少する全てのポインター割当のために余分な50バイト
のコードを必要とする。また、ある状態においてはアク
セスすることができないオブジェクトを識別することは
困難である。例えば、もしオブジェクトAがオブジェク
トBに対するポインターを含んでおり、オブジェクトB
がオブジェクトAに対するポインターを含んでおり、ま
たオブジェクトAに対するポインターカウントが1で、
オブジェクトBに対するポインターカウントが1である
なら、たとえこれらのポインターカウントが0でなくて
も、オブジェクトAとBは実際上アクセスができない。
する他のガーベージコレクション技術は、オブジェクト
に対するポインタを追跡しない。むしろ、さらにヒープ
メモリが割当てに必要な場合には、ガーベージコレクタ
がプログラムにおける全てのポインタをチェックするこ
とによっておよびポインタがアクセス可能であるとして
指示する各オブジェクトをマーキングすることによって
アクセス可能なオブジェクトを識別する。このマーキン
グが完全であれば、アクセス可能なものとしてマークさ
れていないすべてのオブジェクトはアクセス不能であっ
て再割当てが可能なものである。
(スタック及びヒープ)の全てのポインタをチェックす
る。しかし、あるメモリロケーションがポインタまたは
他の値を含むかどうかを識別するのは極めて難しい。た
とえば、以下のC++デクラレーションはオブジェクト
Aがあるときはオブジェクトに対するポインタであり他
の時間ではインテジャ値であることを示すものである。 プログラムがこのオブジェクトに対して各割当てととも
にインジケータを設定しないかぎり、ガーベージコレク
タにはオブジェクトAがポインタまたはインテジャを含
んでいるかがわからない。この形式のトラッキングは極
めて高価である。この形式のトラッキングがないばあい
には、オブジェクトAがオブジェクトに対するポインタ
として同じビットパターンをたまたま含むインテジャ値
を含む場合には、ガーベージコレクタはそれが本当にイ
ンテジャかポインタであるかを知ることが出来ない。と
きによってはポインタであり、ときによってはポインタ
でないメモリロケーションは、”メイビポインタ(ma
y−be−pointer)”として参照する。
ティブ(conservative)”アプローチはメ
イビポインタの各割当てを追跡しない。むしろ、オブジ
ェクトAはポインタであると仮定して、それがオブジェ
クトにたいしてアクセス可能であるとして取り扱う。こ
のアプローチに関し、ガーベージコレクタはそれが本当
にアクセス不能の場合には、アクセス可能としてオブジ
ェクトをマークする。
モリを縮小する場合に問題がある。メモリを縮小する場
合、すべてのアクセス可能なオブジェクトは通常では自
由空間(再割当てされたオブジェクト)を有するヒープ
(割当てられたオブジェクト)の一端に移動させられ、
他端をうめる。ガーベージコレクタがオブジェクトに移
動すると、ガーベージコレクタはそのオブジェクトに対
する全てのポインタをアップデートして新たなロケーシ
ョンを与えなければならない。しかし、コンサーバティ
ブガーベージコレクタは、メイビポインタの値を変える
ことはできない。もしメイビポインタが本当に非ポイン
タ値を含んでいる場合には、ガーベージコレクタはプロ
グラムにエラーを持ち込むことになるからである。この
ため、この結果、コンサーバティブガーベージコレクタ
は通常は、メモリを縮小しない。
で、あるガーベージコレクタはジェネレイショナルコレ
クションといわれる技術を用いる。ジェネレイショナル
ガーベージコレクタはヒープにあるオブジェクトを新し
いオブジェクト(最近クリエイトされたもの)と古いオ
ブジェクト(最近クリエイトされたものでないもの)と
の2つのカテゴリーに分割する。この技術は最近クリエ
イトされたオブジェクトは一般に早くアクセス不能にな
り、一方、古いオブジェクトは通常は、しばらくはアク
セス可能な状態に止まるという仮定を用いる。したがっ
て、ジェネレイショナルガーベージコレクタは新しいオ
ブジェクトを再割当てし古いオブジェクトは行わない。
ジェネレイショナルガーベージコレクタは、ガーベージ
コレクションの完了を犠牲にして、(いくつかの古いオ
ブジェクトはアクセス不能の可能性がある)早いガーベ
ージコレクタプロセスを選択する。
チを用いるガーベージコレクション前後のサンプルスタ
ック及びヒープを示す。図1は、ガーベージコレクショ
ンの前のスタック110とヒープ120を示す。スタッ
ク110は4、23、12、64及び16の値を有する
50のスタック入力111〜115を含む。ヒープ12
0はロケーション0、4、8、12、16、20、24
及び28に8個のオブジェクト121〜128を含む。
スタックエントリ111はポインタとしてのみ定義され
る。スタックエントリ112〜114はポインタあるい
はインテジャである。そして、スタックエントリ115
はインテジャである。スタックエントリ111はオブジ
ェクト122に対するポインタ118を含む。スタック
エントリ112は現状ではポインタを含んでいない。そ
の値23は、任意のオブジェクトのアドレスに対応しな
いからである。スタックエントリ113はポインタ11
6(点線でしめす)を含む可能性がある。ロケーション
12にオブジェクトがあるからである。スタックエント
リ114は現状ではポインタを含んでいない。その値6
4はフリースペースにおけるオブジェクトに対するもの
であるからである。スタックエントリ115は、その値
16がオブジェクトのロケーションに対応していてもポ
インタではない。ヒープ120のオブジェクト122は
オブジェクト123に対するポインタまたはインテジャ
でるフィールド117を含む。オブジェクト121、1
25、126、127及び128はアクセス不能であ
る。これらのオブジェクトに対するポインタがないから
である。オブジェクト122はポインタ118がそれを
示すからアクセス可能である。オブジェクト123及び
124は、スタックエントリ113とフィールド119
がこのオブジェクトをしめすためアクセス可能である。
いてガーベージコレクションを行った後のスタック11
0及びヒープ120を示している。この例では、コンサ
ーバティブガーベージコレクタは、メモリロケーション
がポインタを含んでいるか、含んでいないか、あるい
は、メイビーポインタ(may−be−pointe
r)を含んでいるか否かを知悉している。ただし、この
ガーベージコレクタはメイビーポインタがポインタを現
在含んでいるか否かは追跡しない。ヒープ120はアク
セス可能なオブジェクト122と、アクセス可能になり
得るオブジェクト123,124とを含んでいる。アク
セス不可能なオブジェクト121、124乃至128は
自由スペース130,131に再クレーム(割り当て解
除)されている。オブジェクト122は移動し、それに
対応するポインタであるスタックエントリ111は新し
いロケーションをポイントするように変更されている。
オブジェクト123,124は、ガーベージコレクショ
ンプロセスがスタックエントリ113またはフィールド
119が整数であるか、ポインタであるかを確定するこ
とができないので、移動していない。
てガーベージコレクションを行った前後におけるサンプ
ルスタック及びヒープを示している。図3は発生アプロ
ーチを用いてガーベージコレクションを行う前のスタッ
ク210及びヒープ220を示す。スタック210はポ
インタである三つのスタックエントリ211,213,
214を有している。ヒープ220は8個のオブジェク
ト211乃至218と自由スペース229とを有してい
る。ポインタ240はガーベージコレクタによって維持
され、新しいオブジェクトのスタートにポイントする。
スタックエントリ211はオブジェクト211にポイン
トし、スタックエントリ213はオブジェクト227に
ポイントし、スタックエントリ214はオブジェクト2
23にポイントする。オブジェクト223はオブジェク
ト224へのポインタ242を含み、オブジェクト22
7はオブジェクト228へのポインタ244を含んでい
る。オブジェクト221乃至225は古いオブジェクト
であり、オブジェクト226乃至228は新しいオブジ
ェクトである。オブジェクト222,223,224,
227,228はアクセス可能であり、オブジェクト2
21,225,226はアクセス不可能である。
ジコレクションを行った後のスタック210及びヒープ
220を示す。発生的アプローチが用いられたので、ア
クセス不可能な古いオブジェクト221,225はリク
レーム(割り当て解除)されていない。新しく、かつ、
アクセス不可能なオブジェクト226だけがリクレーム
されている。スタックエントリ213は更新され、オブ
ジェクト227の新しいロケーションをリフレクトし、
ポインタ244は更新され、オブジェクト228の新し
いロケーションをリフレクトした。ポインタ240は更
新され、新しいオブジェクトのスタートにポイントされ
た。
のガーベージコレクションプロセスを改良することであ
る。本発明の他の目的は、コンサーバティブガーベージ
コレクション技術とジェネレイショナルガーベージコレ
クション技術との利点を組み合わせたガーベージコレク
ションプロセスを提供することである。
メモリ中のアクセス不可能なオブジェクトを特定するた
めの方法を提供することである。これらの目的及び他の
目的(これらは本発明を以下に詳述するにつれて明らか
になる)は、コンピュータメモリ中のアクセス不可能な
オブジェクトを特定するための方法及びシステムによっ
て達成される。好適な実施例においては、メモリはスタ
ック及びヒープを有しており、ヒープは古いオブジェク
ト及び新しいオブジェクトを有しており、オブジェクト
はポインタにより特定され、スタックはポインタになり
得るスタックエントリを有している。好適な実施例にお
いては、古いオブジェクトが新しいオブジェクトにポイ
ントされるように設定されているポインタを有している
場合には、その古いオブジェクトは想起リストに加えら
れる。ガーベージコレクションの間においては、各スタ
ックエントリはメイビーポインタであると想定される。
スタックエントリによりポイントされた新しい各オブジ
ェクトはアクセス可能とマーク付けされ、想起リスト中
の古いオブジェクトによりポイントされる新しい各オブ
ジェクトはアクセス可能とマーク付けされ、既にマーク
付けされたオブジェクトを介してアクセス可能な新しい
各オブジェクトはアクセス可能とマーク付けされる。こ
のプロセスが完了した時点で、アクセス可能とマーク付
けされなかった全ての新しいオブジェクトはアクセス不
可能である。
レクションの技術を組み合わせた改良されたガーベージ
・コレクションの技術を提供する。好適な実施例におい
ては、ガーベージ・コレクタは、従来からオブジェクト
に対して各スタック・エントリ・ポイントを推定し、さ
らに的確な方法を用いてグローバル変数がポインタであ
るか否かさらにヒープ内のオブジェクトの中のフィール
ドがポインタであるか否かを判定している。さらに、ガ
ーベージ・コレクタが新オブジェクトのみを回収するも
のであることが好ましい。
対してポインタを含む古いオブジェクトのリストが保持
される。ポインタを含むオブジェクトが古くてポイント
されたオブジェクトが新規な場合には、古いオブジェク
トリは想起リストに追加される。好適な実施例において
は、コンパイラがコードを生成し、このコードがこのチ
ェック及び各ポインタ・アサイメント・ステートメント
の想起リストへの追加を実行する。このコンパイラは、
オブジェクトの各クラスのための仮想記憶機能を生成す
る。これらの仮想記憶機能の一つにより、オブジェクト
内に含まれるポインタのリストを返却し、他のものによ
り、オブジェクトのサイズを返却する。コンパイラは、
コードを生成し、このコードにより、オブジェクト内の
メイビー・ポインタが今回ポインタを含んでいるか否か
を正確に探知する。
ジャーが、新スペースと古いスペースとにヒープを論理
的に分割する。メモリ・マネージャーは、新スペースか
ら新オブジェクトを割り当てる。好適な実施例において
は、ガーベージ・コレクタは、インテル80386など
の別個のアーキテクチャーを有するプロセッサで実行さ
れる。
ックエントリ若しくは想起リストの古いオブジェクトを
介して接近可能である。このようにして、スタックエン
トリ及び想起リストのオブジェクトを処理することによ
り、ガーベージ・コレクタは、新オブジェクトがアクセ
ス可能であるか若しくはアクセス可能でありそうなのか
を判定することができる。好適な実施例においては、ガ
ーベージ・コレクタは、各スタック・エントリを従来か
ら取り扱っており、即ち、各スタック・エントリは、メ
イビー・ポインタであると推定される。ガーベージ・コ
レクタは、ロックされ且つアクセス可能であるとしてス
タック・エントリによりポイントされる可能性のある、
さらに、ロックされたオブジェクトから接近できる新規
な各オブジェクトをアクセス可能であるとしてポイント
される可能性のある、新オブジェクトの各々をマークす
る。その後、ガーベージ・コレクタは、その古いオブジ
ェクトを介してアクセス可能である各新オブジェクトを
訪問することにより且つそれをアクセス可能なものとし
てマークすることにより、想起リスト内の各オブジェク
トを処理する。マークが完了後、ガーベージ.コレクタ
は、新セグメント内にそのメモリをコンパクト化する。
ベージコレクタ手続きの概略流れ図である。ステップ3
01で、ガーベージコレクタは、ルーチン、“プロセス
スタックポインタ”をインボウクし、スタックエントリ
を通じてアクセスすることができるような全ての新オブ
ジェクトに対してコンサーバティブに(conservatively)
マーク付けを行なう。ステップ302で、ガーベージコ
レクタは、ルーチン、“プロセス想起リスト”をインボ
ウクし、想起リスト内の古いオブジェクトを通じてアク
セスすることができるような全ての新オブジェクトにマ
ーク付けを行なう。ステップ303で、ガーベージコレ
クタは、ヒープの新セグメントを圧縮する。
チン、“プロセススタックポインタ”の流れ図である。
ステップ401〜404で、ガーベージコレクタは各ス
タックエントリを処理し、それが新オブジェクトに対す
るポインタであるのか、或いは、それは明らかに新オブ
ジェクトに対するポインタではないのかを、判断する。
もしそれが新オブジェクトに対するポインタであれば、
ガーベージコレクタは、その後の処理のために、そのス
タックエントリをメイビー・ポインタ(may-be-pointer
s)のリストに付加する。ステップ401で、ガーベージ
コレクタは、その最初のもので始まる次のスタックエン
トリを選択する。ステップ402で、全てのスタックエ
ントリがすでに選択されていれば、ガーベージコレクタ
はステップ405に続き、さもなければ、ガーベージコ
レクタはステップ403に続く。ステップ403で、選
択されたスタックエントリが新オブジェクトに対するポ
インタであれば、ガーベージコレクタは、ステップ40
4で、選択されたスタックエントリを“メイビーポイン
タリスト”に付加し、次のスタックエントリを選択する
ためにステップ401にループし、さもなければ、ガー
ベージコレクタはステップ401にループする。より好
ましい実施例において、新オブジェクトは単一セグメン
トの割当てスペースである。故に、新オブジェクトに対
するポインタは、新セグメントのそれと等価なセグメン
トセクレタを有する。スタックエントリは、そのセレク
タ部分が新セグメントを指示しており、オフセット部分
が新セグメントの限界範囲内である場合には、新オブジ
ェクトに対するポインタであってもよい。ステップ40
5で、ガーベージコレクタは、ルーチン、“プロセスメ
イビーポインタリスト”をインボウクし、メイビーポイ
ンタリストのスタックエントリによって指示され得るオ
ブジェクトに保守的にマーク付けを行なう。ガーベージ
コレクタはその後戻る。
チン、“プロセスメイビーポインタリスト”の流れ図で
ある。このルーチンは、ロック済、及びアクセス可能と
して指示され得るような全ての新オブジェクトにマーク
付けを行なうことによって、“メイビーポインタリス
ト”のエントリを処理する。このルーチンも、これらの
オブジェクトを通じてアクセス可能であるような新オブ
ジェクトに対して、アクセス可能のマーク付けを行な
う。ステップ501で、ガーベージコレクタは“メイビ
ーポインタリスト”の分類を行なう。ステップ502
で、ガーベージコレクタは、最初の新オブジェクトで始
まるヒープ内の次の新オブジェクトを選択する。ステッ
プ503で、全ての新オブジェクトが既に選択されてい
る場合は、ガーベージコレクタは戻り、さもなければ、
ガーベージコレクタはステップ504に続く。ステップ
504で、“メイビーポインタリスト”が、選択された
オブジェクトを指示するスタックエントリ、若しくは、
選択されたオブジェクトに埋込みされたオブジェクトを
含み、それがポインタである場合には、ガーベージコレ
クタはステップ505に続き、さもなければ、ガーベー
ジコレクタはステップ502をループして次の新オブジ
ェクトを選択する。ステップ505で、ガーベージコレ
クタは、選択されたオブジェクトに対してロック済のマ
ーク付けを行なう。選択されたオブジェクトは、アクセ
ス可能として既にマーク付けがなされているものでもよ
い。なぜなら、この選択されたオブジェクトは、既にア
クセス可能のマーク付けがなされた新オブジェクトを通
じてアクセスすることができるからである。それにもか
かわらず、それはロック済としてマーク付けがなされて
いるために、ヒープコンパクション (heap compaction)
の間に移動されることはないであろう。ステップ506
で、選択されたオブジェクトに既にアクセス可能のマー
ク付けがなされている場合には、埋込みされたポインタ
は既に処理されており、どの新オブジェクトがそれらを
通じてアクセスできるのかを判断し、ガーベージコレク
タはステップ502にループして次の新オブジェクトを
選択し、さもなければ、ガーベージコレクタはステップ
507に続く。
が選択されたオブジェクトをアクセス可能であると標示
する。ステップ508では、ガーベージコレクタがルー
チンチェック埋込みポインターを呼出してそこに選択し
たオブジェクトを通過させ、その後ステップ502へル
ープして次の新しいオブジェクトを選択する。このルー
チンは、以下に詳述するように、通過したオブジェクト
(古いオブジェクトを通して通過したオブジェクトから
アクセスさせ得るだけの新しいオブジェクトを除く)か
らアクセス可能であるすべての新しいオブジェクト(す
でにアクセス可能であると標示したものではない)を、
アクセス可能であると標示する。
ス想起リストのフローダイヤグラムである。このルーチ
ンは想起リストの各古いオブジェクトを処理してそれを
通してアクセス可能な各新しいオブジェクトをアクセス
可能だあると標示する。ステップ601では、ガーベー
ジコレクタは最初から始まる想起リストの新しいオブジ
ェクトを選択する。ステップ602において、想起リス
トのオブジェクトがすべて既に選択されている場合に
は、ガーベージコレクタが戻り、その代わりそのガーベ
ージコレクタは603に留まる。ステップ603におい
て、ガーベージコレクタはルーチンチェック埋込みポイ
ンターを呼び出してそこに選択したオブジェクトを通過
させ、その後ステップ601へループして次の新しいオ
ブジェクトを選択する。図10は、好ましい実施例のル
ーチンチェック埋込みポインターのフローダイヤグラム
である。このルーチンは、オブジェクトを通過させ、通
過したオブジェクト(古いオブジェクトを通して通過し
たオブジェクトからアクセスされ得るだけの新しいオブ
ジェクトを除く)に埋め込まれたポインタを通してアク
セス可能である各新しいオブジェクト(すでにアクセス
可能であると標示されたオブジェクトではない)をアク
セス可能であると設定する。このルーチンは、再帰的に
呼び出されて通過したオブジェクトに含まれるポインタ
により指示された各新しいオブジェクトを処理する。当
業者はこのルーチンを非再帰的に構成できることを認識
するであろう。このルーチンが古いオブジェクトを指示
するポインタに遭遇した場合、そのルーチンは古いオブ
ジェクトのポインタを処理しない。というのは、古いオ
ブジェクトが新しいオブジェクトへのポインタを含む場
合には、古いオブジェクトは想起リストの上にあり、ガ
ーベージコレクタはそれをそのように処理する。ステッ
プ701では、ガーベージコレクタが最初から始まる通
過したオブジェクトの新しいポインタを選択する。好ま
しい実施例では、バーチャルファンクションが各オブジ
ェクトのクラスについて定められる。このオブジェクト
は、呼び出された場合、オブジェクトに含まれるポイン
タを与える。ステップ702では、通過したオブジェク
トに対する埋め込まれたポインタがすべて処理されてし
まった場合には、ガーベージコレクタを戻し、その代わ
りそのガーベージコレクタはステップ703に留まる。
ステップ703において、選択されたポインタにより指
示されたオブジェクトが新しいもので既にアクセス可能
であると標示されたものでない場合には、ガーベージコ
レクタがステップ704に留まり、その代わりそのガー
ベージコレクタはステップ701にループして新しい埋
め込みポインタを選択する。選択されたポインタが0な
らば、そのポインタは新しいオブジェクトを指示しな
い。そのオブジェクトが既にアクセス可能であると標示
されたものである場合には、そこからアクセス可能なす
べての新しいオブジェクト(古いオブジェクトを通して
通過したオブジェクトからアクセスされ得るだけの新し
いオブジェクトを除く)がアクセス可能であると標示さ
れる。ステップ704では、ガーベージコレクタが選択
されたポインタにより指示されたオブジェクトを選択す
る。ステップ705では、ガーベージコレクタが選択さ
れたオブジェクトをアクセス可能であると標示する。ス
テップ706では、ガーベージコレクタがルーチンチェ
ック埋込みポインターを再帰的に呼び出して選択したオ
ブジェクトを通過させ、その後ステップ701へループ
して次の新しい埋め込みポインタを選択する。
ズムによって、マークされ、かつ、ヒープの一方の端に
ロックされないオブジェクトの各々が移動される。この
移動されたオブジェクトは、お互いに相対的な位置を保
持する。この相対的に位置の保持によって、基準位置が
向上するようになる。オブジェクトは、一般的に略同時
に作られた基準オブジェクトに向かう。このように、相
対的に位置の保持によって、ロックされたオブジェクト
を除いて、オブジェクトが、同じ時間的な近接において
作られたオブジェクトの近くに空間的に存在するという
ことが確実になる。移動しないオブジェクトはロックさ
れるので、同じ時間的な近接において作られたオブジェ
クトから空間的に分離される場合がある。改善された基
準位置は、仮想メモリを有するコンピュータ・システム
においてページ・フォールト(page fault)を減少させる
ときに特に重要である。
ジェクトは、ロックされたオブジェクトの近くに記憶さ
れる。ロックされたオブジェクトと移動したオブジェク
トとの間の空間が次の移動されるオブジェクトを保持す
るのに十分大きくない場合、ダミーオブジェクトが作ら
れ、その空間に移動される。ダミーオブジェクトは、そ
の空間を満たすのに十分大きく、関連する仮想機能テー
ブルを有する。ポインタはダミー・オブジェクトを参照
しないので、そのダミーオブジェクトは、次のガーベー
ジ・コレクションの間にリクームされる。
は自由空間の隣接する区分領域から成る。この自由空間
は、マークされ、かつ、ロックされたオブジェクトを除
き、接触している。新たなオブジェクトの割り当ては、
この自由空間から生じる。図11は、全てのアクセス可
能なオブジェクトがマークされたのちのサンプルとなる
新たな空間を示す。マークされ、かつ、ロックされない
オブジェクトは、M0 、M1 、M2 、M3 、M4 、及び
M5 である。マークされ、かつ、ロックされたオブジェ
クトは、ML0 、ML1 、ML2 、及びML3 である。
マークされないオブジェクトは、U0 、U1 、U2 、U
3 、U4 、U5 、U6 、及びU7 である。各オブジェク
トの右下コーナーの数字はオブジェクトの大きさを示
す。図12はコンパクション後のヒープのサンプルとな
る新たな空間を示す。D0 のマークのオブジェクトは、
ダミーオブジェクトである。自由空間はF0 、F1 、及
びF2 で示され、これらは一緒にリンクされている。ポ
インタTOSは、コンパクションが完全になった後、空
間の先端を示す。コンパクション・プロセスの間、大き
さ5を有するオブジェクトM2 は大きさ2を有する空間
に適合しないと決定された。その結果、大きさ2を有す
るダミー・オブジェクトD0 が作られ、大きさ2を有す
る空間に挿入された。大きさ2を有するオブジェクトM
4 はその空間に適合するけれども、移動されなかった。
その理由は、そうすることは、マークされ、かつ、ロッ
クされないオブジェクトの相対的な順序を変えるからで
ある。
るコンパクションルーチンのフローチャートである。こ
のルーチンは、新スペースにおいて第1のオブジェクト
を指すように、トップオブスペース(TOS)ポインタ
を初期化する。このTOSポインタは、オブジェクトが
移動されうる次のロケーションを指す。ステップ901
において、コンパクタは、第1オブジェクトから開始す
る新スペースの次のオブジェクトを選択する。ステップ
902においては、全てのオブジェクトが既に選択され
ていた場合、コンパクタはステップ911に続き、そう
でない場合には、コンパクタはステップ903に続く。
ステップ903において、選択されたオブジェクトがマ
ークされていて且つロックされていない場合、選択され
たオブジェクトは移動させられるようになり、コンパク
タはステップ904に続き、そうでない場合には、コン
パクタはステップ901にループして次のオブジェクト
を選択する。ステップ904において、TOSとロック
された次のオブジェクトとの間に十分なスペースがある
場合、オブジェクトはTOSに移動されることができ、
コンパクタはステップ908に続く。そうでない場合に
は、コンパクタはステップ905に続く。ロックされた
次のオブジェクトは、TOSと新スペースのエンドとの
間にある最も近いロックオブジェクトを参照する。かか
るロックオブジェクトがない場合、そのスペースは、T
OSから新スペースのエンドまでにわたって考慮され
る。ステップ905〜907において、コンパクタは、
TOSと次のロックオブジェクトとの間のスペースをダ
ミーオブジェクトで満たす。TOSが次のオブジェクト
を指す場合、ダミーオブジェクトは不要になってステッ
プ905〜907はスキップする。ダミーオブジェクト
は、オブジェクトのサイズを戻す仮想ファンクション
と、オブジェクトにポインタがないという指示を戻す仮
想ファンクションとを有する。作成された後の次のガー
ベージコレクション中において、ダミーオブジェクト
は、アクセス可能なものとしてマークされず(それを指
すオブジェクトがない)、これにより、リクレームされ
る。ステップ905において、コンパクタは、TOSと
次のロックオブジェクトとの間のスペースを満たすのに
十分な大きさのダミーオブジェクトを作成する。ステッ
プ906において、コンパクタは、ダミーオブジェクト
をTOSにストアする。ステップ907において、コン
パクタは、TOSを次のロックオブジェクトを通るよう
に進め、ステップ904にループさせて、進められたT
OSと新しい次のロックオブジェクトの間に十分なスペ
ースがあるかどうかをチェックする。ステップ908に
おいて、コンパクタは選択されたオブジェクトをTOS
に移動する。ステップ909において、コンパクタはポ
インタを移動したオブジェクトに更新する。オブジェク
トのマーク処理中において、ガーベージコレクターは、
各マークしたオブジェクトを指す全ポインタのリストを
作成した。ステップ910において、コンパクタは、T
OSを移動したオブジェクトを通るように進め、ステッ
プ901にループさせて次のオブジェクトを処理する。
ステップ911において、コンパクタは、TOS上のフ
リースペースにリンクして、リターンする。
Sが新スペースの開始と旧スペースの終了を決める。想
起リストは、新スペース内のオブジェクトをもはや指し
示めさない古いオブジェクトを除去することにより好適
に更新される。この更新は、オブジェクトが移動する時
にコンパクションルーチンによって達成できることは当
業者が理解できるであろう。図12に示される様に、新
スペースはロックされたオブジェクト、例えばML2 及
びML3 を含むことができるので、コンパクション後の
想起リストは、新スペース内のこれらのロックされたオ
ブジェクトを指し示す古いオブジェクトを含むことがで
きる。別法においては、オブジェクトを含まないものと
して新スペースが定義されるまで、想起リストは更新さ
れない。この様な定義が生じると、新スペース内に指し
示すためのオブジェクトが存在しないので、古いオブジ
ェクトの全てを、想起リストから除去することができ
る。例えば、図12の新たなスペースは、新スペースが
オブジェクトF2で開始するか、セグメントアーキテク
チャーを有するコンピュータで実施される時は、別のセ
グメントで開始する様に定義することによりオブジェク
トを含まない様に定義できる。この様な定義を用ると、
旧スペースはフリースペースを含むことができる。新ス
ペースがTOS以外のロケーションで開始する様に定義
される場合、次のコンパクション中に、このコンパクシ
ョンルーチンは、新スペースを指し示すようにTOSを
リセットするのではなく、オブジェクトをTOSによっ
て指し示されたロケーションに移動するのが好ましい。
従って、旧スペース内のフリーエリアがコンパクション
中に充填される。
たが、本発明をこれらの実施例に限定する様には意図さ
れていない。本発明の概念内にある改良が当業者に明ら
かであろう。本発明の範囲は特許請求の範囲によって規
定されている。
のサンプルスタックとヒープを示す図である。
のサンプルスタックとヒープを示す図である。
前のサンプルスタックとヒープを示す図である。
後のサンプルスタックとヒープを示す図である。
の手続きの全体フローチャートを示す。
インタのルーチンを示すフローチャートである。
インタ・リストのルーチンの前半部を示すフローチャー
トである。
タリストのルーチンの後半部を示すフローチャートであ
る。
ーチンを示すフローチャートである。
タのルーチンを示すフローチャートである。
ヒープのサンプル新規スペースを示す図である。
示す図である。
チンを示すフローチャートである。
Claims (22)
- 【請求項1】 コンピュータシステムにおいて、コンピ
ュータメモリにおけるアクセス可能なデータオブジェク
トをマーキングする方法であって、各オブジェクトは、
ポインターによって識別され、前記メモリは、スタック
およびヒープを含んでおり、前記ヒープは、複数の古い
オブジェクトおよび複数の新オブジェクトを有してお
り、前記メモリは、新オブジェクトへのポインターを含
む複数の古いオブジェクトに対するポインターのリスト
を含んでおり、前記スタックは、確実にポインターでな
いか、または多分、ポインターであるとして識別される
スタックエントリを有しており、各スタックエントリが
確実にポインターでないか、または多分、ポインターで
あるか、を識別し、多分、ポインターであるとして識別
されるスタックエントリによって多分指示される各新オ
ブジェクトに対して、その新オブジェクトをアクセス可
能なものとしてマーキングし且つ該マークされたオブジ
ェクトによりアクセス可能な各新オブジェクトをアクセ
ス可能なものとしてマーキングし、前記ポインターのリ
ストにおけるポインターによって指示される各古いオブ
ジェクトに対して、その古いオブジェクトに含まれたポ
インターによって指示される各新オブジェクトをアクセ
ス可能なものとしてマーキングし且つ前記マークされた
オブジェクトによりアクセス可能な各新オブジェクトを
アクセス可能なものとしてマーキングする各段階を含む
ことを特徴とする方法。 - 【請求項2】 マークされたオブジェクトによりアクセ
ス可能な各新オブジェクトをアクセス可能なものとして
マーキングする段階は、そのマークされたオブジェクト
から古いオブジェクトによってのみアクセス可能な新オ
ブジェクトをマーキングしない請求項1記載の方法。 - 【請求項3】 多分、ポインターであるとして識別され
るスタックエントリによって多分指示される各新オブジ
ェクトに対して、そのオブジェクトがメモリコンパクシ
ョン中に移動されないように、その新オブジェクトをロ
ックされたものとしてマーキングする段階を含む請求項
1記載の方法。 - 【請求項4】 コンピュータシステムにおけるガーベー
ジコレクション方法であって、前記コンピュータシステ
ムは、スタックおよびヒープを有しており、前記ヒープ
は、複数の新オブジェクトおよび複数の古いオブジェク
トを有しており、前記スタックは、スタックエントリを
有しており、各オブジェクトは、ポインターによって識
別され、古いオブジェクトが新オブジェクトを指示する
ようにセットされているポインターを含むとき、その古
いオブジェクトを想起し、ガーベージコレクション中、
各スタックエントリを確実にポインターでないとして、
または多分、ポインターであるとして識別し、多分、ポ
インターであるとして識別されたスタックポインターに
よって多分指示された各新オブジェクトをアクセス可能
なものとしてマーキングし、想起されたオブジェクトに
よって指示される各新オブジェクトをアクセス可能なも
のとしてマーキングし、前にマークされたオブジェクト
によってアクセス可能な各新オブジェクトをアクセス可
能なものとしてマーキングし、マークされていない新オ
ブジェクトに対して使用されるメモリをアクセス可能な
ものとしてリクレームする段階を含むことを特徴とする
方法。 - 【請求項5】 多分、ポインターであるとして識別され
たスタックエントリによって多分指示される各新オブジ
ェクトをロックされたものとしてマーキングする段階を
含み、前記リクレームする段階は、アクセス可能なもの
としてマークされ且つロックされていないオブジェクト
を移動させることを含む請求項4記載の方法。 - 【請求項6】 コンピュータシステムにおけるメモリコ
ンパクション方法であって、前記コンピュータシステム
は、メモリを有しており、該メモリは、複数のメモリ場
所を有しており、複数のオブジェクトを記憶し、各オブ
ジェクトは、そのオブジェクトを備えるメモリ場所の数
を指示するサイズを有しており、各オブジェクトは、ア
クセス可能であるか、またはアクセス不可能なものであ
り、各アクセス可能なオブジェクトは、ロックされる
か、またはロックされないかであり、前記オブジェクト
は、最初のオブジェクトから最後のオブジェクトまで順
序付けられており、アクセス可能であってロックされな
い各オブジェクトは、そのオブジェクトを指示する基準
ポインターを有しており、前記メモリにおいて最初のオ
ブジェクトを指示するメモリポインターを初期化し、前
記メモリにおける各オブジェクトに対して、最初のオブ
ジェクトから始めて最後のオブジェクトまで順番に、そ
のオブジェクトを選択していき、前記選択されたオブジ
ェクトがアクセス可能でありロックされていないとき
に、前記選択されたオブジェクトサイズが、前記選択さ
れたオブジェクトがロックされたオブジェクトをオーバ
ライトせずに、前記メモリポインターによって指示され
るメモリ場所で始まるメモリ場所へコピーされるような
ものであるときは、前記選択されたオブジェクトを、前
記メモリポインターによって指示されるメモリ場所で始
まるメモリ場所へコピーし、基準ポインターがそのコピ
ーされたオブジェクトを指示するするように、その基準
ポインターをその選択されたオブジェクトへ更新し、そ
のコピーされたオブジェクトの後のメモリ場所を指示す
るようにメモリポインターを進める段階を含むことを特
徴とする方法。 - 【請求項7】 前記選択されたオブジェクトのサイズ
が、その選択されたオブジェクトがコピーされ得ないよ
うなものであるときに、前記メモリポインターによって
指示されるメモリポインターによって指示されるメモリ
で始まるダミーオブジェクトを、そのダミーオブジェク
トのサイズがロックされるオブジェクトをオーバーライ
トしないように、記憶させ、前記メモリポインターを、
前記ロックされるオブジェクトの後の場所を指示するよ
うに進める段階を含む請求項6記載の方法。 - 【請求項8】 コンピュータシステムにおけるメモリコ
ンパクション方法であって、前記コンピュータシステム
は、複数のメモリ場所および複数のオブジェクトを有し
たメモリを有しており、各オブジェクトは、1つまたは
それ以上のメモリ場所を備えており、各オブジェクト
は、最初のオブジェクトから最後のオブジェクトまで順
序付けられており、各オブジェクトは、アクセス可能で
あるか、またはアクセス不可能なものであり、各アクセ
ス可能なオブジェクトは、ロックされるか、またはロッ
クされないものであり、アクセス可能でありロックされ
ない各オブジェクトは、そのオブジェクトを指示する基
準ポインターを有しており、複数のアクセス可能であっ
てロックされないオブジェクトを、それらオブジェクト
の順序が移動後も維持されるようにして、移動させ、各
移動されたオブジェクトの基準ポインターを、その移動
された場所を指示するように調整する段階を含むことを
特徴とする方法。 - 【請求項9】 前記移動させる段階は、アクセス可能で
ありロックされないオブジェクトを、既に移動されたア
クセス可能でありロックされないオブジェクトまたはア
クセス不可能なオブジェクトによって前に占められてい
たメモリ場所へ移動させることを含む請求項8記載の方
法。 - 【請求項10】 コンピュータシステムにおけるカーベ
ージコレクターであって、コンピュータメモリに配置さ
れ複数のスタックエントリを有するスタックと、コンピ
ュータメモリに配置され複数の新および古いオブジェク
トを有するヒープと、各新オブジェクトに対するポイン
ターを含む古いオブジェクトを識別する想起リストと、
各スタックエントリが、多分新オブジェクトに対するポ
インターであるか、またはそのポインターでないとし
て、識別されるようなプロセススタックポインタールー
チンと、多分、ポインターであるとして識別されるスタ
ックエントリによって指示される各新オブジェクトがア
クセス可能であるとしてマークされるようなプロセス多
分ポインタールーチンと、想起リストにおいて識別され
る古いオブジェクトによって指示される新オブジェクト
がアクセス可能なものとしてマークされるようなプロセ
ス想起リストルーチンと、アクセス可能なものとしてマ
ークされる新オブジェクトによってアクセス可能な新オ
ブジェクトがアクセス可能なものとしてマークされるよ
うなチェック埋込みポインタールーチンと、アクセス可
能なものとしてマークされない各オブジェクトがリクレ
ームされるようなリクラメイションルーチンとを備える
ことを特徴とするガーベージコレクター。 - 【請求項11】 スタックエントリを有するスタック
と、新および古いオブジェクトを有するヒープとを有す
るコンピュータシステムにおけるガーベージコレクショ
ンを行なう方法であって、各スタックエントリがオブジ
ェクトに対するポインターであるかどうかをコンサーバ
ティブに決定し、どの古いオブジェクトが新オブジェク
トに対するポインターを含むかを想起し、ポインターで
あるとしてコンサーバティブに決定されたスタックエン
トリによってアクセス可能でない新オブジェクトおよび
想起される古いオブジェクトによってアクセス可能でな
い新オブジェクトをリクレームする段階を含むことを特
徴とする方法。 - 【請求項12】 オブジェクトは、データメンバーを含
み、前記データメンバーが新オブジェクトに対するポイ
ンターを含むかどうかを限定的に決定する段階を含む請
求項11記載の方法。 - 【請求項13】 新オブジェクトをリクレームする段階
は、アクセス可能な新オブジェクトを移動させることを
含む請求項12記載の方法。 - 【請求項14】 ポインターであるとしてコンサーバテ
ィブに決定されたスタックエントリによって指示される
新オブジェクトは移動されない請求項13記載の方法。 - 【請求項15】 ヒープのオブジェクトは、互いに対す
る相対的な位置を有しており、新オブジェクトを移動さ
せる段階は、移動されるオブジェクトの互いに対する相
対的位置を維持する請求項14記載の方法。 - 【請求項16】 ヒープのオブジェクトは、互いに対す
る相対的位置を有しており、前記新オブジェクトを移動
させる段階は、移動されるオブジェクトの互いに対する
相対的位置を維持する請求項12記載の方法。 - 【請求項17】 スタックおよびヒープを有するコンピ
ュータシステムのためのガーベージコレクターであっ
て、前記スタックは、エントリを有し、前記ヒープは、
新および古いオブジェクトを有しており、各スタックエ
ントリが新オブジェクトを指示するかどうかをコンサー
バティブに決定する手段と、新オブジェクトに対するポ
インターを含む古いオブジェクトをトラッキングする手
段と、ポインターであるとしてコンサーバティブに決定
されたスタックエントリによってアクセス可能でない新
オブジェクトおよび新オブジェクトに対するポインター
を含む古いオブジェクトによってアクセス可能でない新
オブジェクトをリクレームする手段とを備えることを特
徴とするガーベージコレクター。 - 【請求項18】 オブジェクトは、データメンバーを含
み、該データメンバーが新オブジェクトに対するポイン
ターを含むかどうかを限定的に決定する手段を含む請求
項17記載のガーベージコレクター。 - 【請求項19】 前記新オブジェクトをリクレームする
手段は、アクセス可能な新オブジェクトを移動させる請
求項18記載のガーベージコレクター。 - 【請求項20】 前記新オブジェクトをリクレームする
手段は、ポインターであるとしてコンサーバティブに決
定されたスタックエントリによって指示される新オブジ
ェクトを移動させない請求項19記載のガーベージコレ
クター。 - 【請求項21】 ヒープのオブジェクトは、互いに対す
る相対的位置を有しており、前記新オブジェクトをリク
レームする手段は、移動されるオブジェクトの相対的位
置を維持する請求項20記載のガーベージコレクショ
ン。 - 【請求項22】 ヒープのオブジェクトは、互いに対す
る相対的位置を有しており、前記新オブジェクトをリク
レームする手段は、移動されるオブジェクトの相対的位
置を維持する請求項18記載のガーベージコレクター。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US89961692A | 1992-06-15 | 1992-06-15 | |
US07/899616 | 1992-06-15 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH0695954A true JPH0695954A (ja) | 1994-04-08 |
JP3628032B2 JP3628032B2 (ja) | 2005-03-09 |
Family
ID=25411296
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP14379293A Expired - Lifetime JP3628032B2 (ja) | 1992-06-15 | 1993-06-15 | コンサーバティブ・スタックとジェネレイショナル・ヒープガーベージ・コレクション用コンピュータシステム及び方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US5652883A (ja) |
EP (1) | EP0574884B1 (ja) |
JP (1) | JP3628032B2 (ja) |
AT (1) | ATE233001T1 (ja) |
CA (1) | CA2098459A1 (ja) |
DE (1) | DE69332696T2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006039878A (ja) * | 2004-07-26 | 2006-02-09 | Aplix Corp | Java(R)実行環境におけるメモリ管理方法及びメモリ管理プログラム |
Families Citing this family (55)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6233621B1 (en) * | 1996-04-30 | 2001-05-15 | Sun Microsystems, Inc. | System and method for space efficient hashcode allocation |
US5923877A (en) * | 1996-05-01 | 1999-07-13 | Electronic Data Systems Corporation | Object-oriented programming memory management framework and method |
US5949972A (en) * | 1996-08-23 | 1999-09-07 | Compuware Corporation | System for memory error checking in an executable |
US6092168A (en) * | 1996-10-25 | 2000-07-18 | Hewlett-Packard Co. | Data storage system and method for deallocating space by writing and detecting a predefined data pattern |
US5911144A (en) * | 1997-04-23 | 1999-06-08 | Sun Microsystems, Inc. | Method and apparatus for optimizing the assignment of hash values to nodes residing in a garbage collected heap |
US5915255A (en) * | 1997-04-23 | 1999-06-22 | Sun Microsystems, Inc. | Method and apparatus for referencing nodes using links |
US5903900A (en) * | 1997-04-23 | 1999-05-11 | Sun Microsystems, Inc. | Method and apparatus for optimizing exact garbage collection of array nodes in a carded heap |
US6199075B1 (en) * | 1997-05-30 | 2001-03-06 | Sun Microsystems, Inc. | Method and apparatus for generational garbage collection of a heap memory shared by multiple processors |
US6182107B1 (en) * | 1997-06-03 | 2001-01-30 | Object Technology Licensing Corporation | Management of reference object lifetimes in object oriented programs |
US6055612A (en) * | 1997-07-11 | 2000-04-25 | Geodesic Systems, Inc. | Incremental garbage collector with decommit barrier |
GB9721659D0 (en) * | 1997-10-14 | 1997-12-10 | Philips Electronics Nv | Space-limited marking structure for tracing garbage collectors |
US6065019A (en) * | 1997-10-20 | 2000-05-16 | International Business Machines Corporation | Method and apparatus for allocating and freeing storage utilizing multiple tiers of storage organization |
US6072952A (en) * | 1998-04-22 | 2000-06-06 | Hewlett-Packard Co. | Method and apparatus for coalescing variables |
US6125434A (en) * | 1998-05-19 | 2000-09-26 | Northorp Grumman Corporation | Dynamic memory reclamation without compiler or linker assistance |
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 |
GB2342470A (en) * | 1998-10-09 | 2000-04-12 | Ibm | A memory management system and method for a data processing system |
US6442751B1 (en) | 1998-12-14 | 2002-08-27 | International Business Machines Corporation | Determination of local variable type and precision in the presence of subroutines |
GB2345159B (en) * | 1998-12-23 | 2003-08-20 | Ibm | Virtual machine memory management |
GB2345160B (en) * | 1998-12-23 | 2003-08-20 | Ibm | Virtual machine memory management |
GB2345355A (en) * | 1998-12-30 | 2000-07-05 | Ibm | Garbage collection in a Java virtual machine |
US6480862B1 (en) * | 1999-04-23 | 2002-11-12 | International Business Machines Corporation | Relation-based ordering of objects in an object heap |
SE514318C2 (sv) * | 1999-10-28 | 2001-02-12 | Appeal Virtual Machines Ab | Förfarande för att effektivisera en databehandlingsprocess vid användning av en virtuell maskin och där ett skräpsamlingsförfarande används |
US6970893B2 (en) * | 2000-10-27 | 2005-11-29 | Bea Systems, Inc. | System and method for regeneration of methods and garbage collection of unused methods |
JP3611295B2 (ja) * | 2000-03-09 | 2005-01-19 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンピュータシステム、メモリ管理方法及び記憶媒体 |
US6757891B1 (en) * | 2000-07-12 | 2004-06-29 | International Business Machines Corporation | Method and system for reducing the computing overhead associated with thread local objects |
US6865585B1 (en) * | 2000-07-31 | 2005-03-08 | Microsoft Corporation | Method and system for multiprocessor garbage collection |
US6457023B1 (en) * | 2000-12-28 | 2002-09-24 | International Business Machines Corporation | Estimation of object lifetime using static analysis |
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 |
US7546305B2 (en) | 2001-04-13 | 2009-06-09 | Oracle International Corporation | File archival |
US6748503B1 (en) | 2001-06-27 | 2004-06-08 | Microsoft Corporation | System and method facilitating unmanaged code participation in garbage collection |
WO2003094007A1 (en) * | 2002-05-02 | 2003-11-13 | Sarvega, Inc. | System and method for transformation of xml documents using stylesheets |
JP4079684B2 (ja) * | 2002-05-08 | 2008-04-23 | 株式会社日立製作所 | ヒープメモリ管理方法およびそれを用いた計算機システム |
KR20030094658A (ko) * | 2002-06-07 | 2003-12-18 | 이승룡 | 자동화된 동적 메모리 관리 기반의 시스템 환경에서어플리케이션이 직접 동적 메모리를 관리하는 방법 |
US8108628B2 (en) * | 2003-08-04 | 2012-01-31 | Azul Systems, Inc. | Processor instruction used to perform a matrix test to generate a memory-related trap |
KR100626368B1 (ko) * | 2003-08-25 | 2006-09-20 | 삼성전자주식회사 | 가비지 콜렉션 벤치마킹 방법 |
US7587568B2 (en) * | 2003-09-05 | 2009-09-08 | Oracel International Corporation | Method and system of reclaiming storage space in data storage systems |
DE102004013180A1 (de) * | 2004-03-17 | 2005-10-06 | Giesecke & Devrient Gmbh | Speicherbereinigung (Garbage Collection) für Smart Cards |
US7380087B2 (en) * | 2004-08-25 | 2008-05-27 | Microsoft Corporation | Reclaiming application isolated storage |
US7730016B2 (en) * | 2005-01-31 | 2010-06-01 | Oracle International Corporation | Identification of false ambiguous roots in a stack conservative garbage collector |
US7779054B1 (en) * | 2005-09-30 | 2010-08-17 | Oracle America, Inc. | Heuristic-based resumption of fully-young garbage collection intervals |
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 |
US7831640B2 (en) * | 2008-04-15 | 2010-11-09 | Microsoft Corporation | Using an overflow list to process mark overflow |
US7860906B2 (en) * | 2008-05-28 | 2010-12-28 | Microsoft Corporation | Overflow per segment |
US8301672B2 (en) * | 2008-09-22 | 2012-10-30 | Advanced Micro Devices, Inc. | GPU assisted garbage collection |
US8473900B2 (en) * | 2009-07-01 | 2013-06-25 | Advanced Micro Devices, Inc. | Combining classes referenced by immutable classes into a single synthetic class |
US8327109B2 (en) * | 2010-03-02 | 2012-12-04 | Advanced Micro Devices, Inc. | GPU support for garbage collection |
US8577936B2 (en) * | 2010-11-29 | 2013-11-05 | International Business Machines Corporation | Fixup cache tool for object memory compaction in an information handling system |
US8527544B1 (en) | 2011-08-11 | 2013-09-03 | Pure Storage Inc. | Garbage collection in a storage system |
US9229740B1 (en) | 2011-11-02 | 2016-01-05 | Amazon Technologies, Inc. | Cache-assisted upload proxy |
US8984162B1 (en) * | 2011-11-02 | 2015-03-17 | Amazon Technologies, Inc. | Optimizing performance for routing operations |
US8726264B1 (en) | 2011-11-02 | 2014-05-13 | Amazon Technologies, Inc. | Architecture for incremental deployment |
CN103838679B (zh) * | 2012-11-22 | 2017-08-04 | 中兴通讯股份有限公司 | 一种缓存处理方法及装置 |
WO2015009306A1 (en) * | 2013-07-18 | 2015-01-22 | Empire Technology Development, Llc | Memory attack detection |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4775932A (en) * | 1984-07-31 | 1988-10-04 | Texas Instruments Incorporated | Computer memory system with parallel garbage collection independent from an associated user processor |
US4797810A (en) * | 1986-06-26 | 1989-01-10 | Texas Instruments Incorporated | Incremental, multi-area, generational, copying garbage collector for use in a virtual address space |
US4907151A (en) * | 1988-09-30 | 1990-03-06 | Digital Equipment Corporation | System and method for garbage collection with ambiguous roots |
JPH0812633B2 (ja) * | 1989-11-28 | 1996-02-07 | ゼロックス コーポレーション | 参照されないコンピュータ記憶スペースを再活用する方法およびシステム |
-
1993
- 1993-06-15 JP JP14379293A patent/JP3628032B2/ja not_active Expired - Lifetime
- 1993-06-15 EP EP93109545A patent/EP0574884B1/en not_active Expired - Lifetime
- 1993-06-15 DE DE69332696T patent/DE69332696T2/de not_active Expired - Lifetime
- 1993-06-15 AT AT93109545T patent/ATE233001T1/de not_active IP Right Cessation
- 1993-06-15 CA CA002098459A patent/CA2098459A1/en not_active Abandoned
-
1995
- 1995-05-23 US US08/448,238 patent/US5652883A/en not_active Expired - Lifetime
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006039878A (ja) * | 2004-07-26 | 2006-02-09 | Aplix Corp | Java(R)実行環境におけるメモリ管理方法及びメモリ管理プログラム |
JP4504756B2 (ja) * | 2004-07-26 | 2010-07-14 | 株式会社アプリックス | Java(登録商標名)実行環境におけるメモリ管理方法及びメモリ管理プログラム |
Also Published As
Publication number | Publication date |
---|---|
JP3628032B2 (ja) | 2005-03-09 |
DE69332696T2 (de) | 2003-08-21 |
CA2098459A1 (en) | 1993-12-16 |
EP0574884A1 (en) | 1993-12-22 |
US5652883A (en) | 1997-07-29 |
EP0574884B1 (en) | 2003-02-19 |
ATE233001T1 (de) | 2003-03-15 |
DE69332696D1 (de) | 2003-03-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3628032B2 (ja) | コンサーバティブ・スタックとジェネレイショナル・ヒープガーベージ・コレクション用コンピュータシステム及び方法 | |
US5321834A (en) | Method and system for reclaiming unreferenced computer memory space | |
US6928460B2 (en) | Method and apparatus for performing generational garbage collection in a segmented heap | |
US6434576B1 (en) | Popular-object handling in a train-algorithm-based garbage collector | |
US6249793B1 (en) | Mostly concurrent compaction in a garbage collection system | |
US6434577B1 (en) | Scalable-remembered-set garbage collection | |
US6560619B1 (en) | Using atomic compare-and-swap operations for forwarding-pointer installation | |
US6816956B1 (en) | User control of multiple memory heaps | |
US6185581B1 (en) | Train-algorithm-based garbage collector employing fixed-size remembered sets | |
US6449626B1 (en) | Reduced-cost remembered-set processing in a train-algorithm-based garbage collector | |
US6823351B1 (en) | Work-stealing queues for parallel garbage collection | |
US6826583B1 (en) | Local allocation buffers for parallel garbage collection | |
US6424977B1 (en) | Train-algorithm-based garbage collector employing reduced oversized-object threshold | |
US6308185B1 (en) | Methods and apparatus for generational dynamic management of computer memory | |
US6415302B1 (en) | Train-algorithm-based garbage collector employing farthest-forward-car indicator | |
US6105041A (en) | Using three-state references to manage garbage collection of referenced objects | |
US7389395B1 (en) | Split-reference, two-pass mark-compaction | |
EP0172707A2 (en) | Method for managing virtual memory to separate active and stable memory blocks | |
WO2001061472A2 (en) | Incremental class unloading in a train-algorithm-based garbage collector | |
US7533228B1 (en) | Two-pass sliding compaction | |
US6427154B1 (en) | Method of delaying space allocation for parallel copying garbage collection | |
US7499961B2 (en) | Method and apparatus for limiting the size and facilitating maintenance of remembered sets in a space incremental garbage collector | |
US7617264B1 (en) | Parallel remembered-set processing respecting popular-object detection | |
US7653793B1 (en) | Use of memory protection to implement replicating collection in an incremental, copying garbage collector | |
EP0430668B1 (en) | Method and system for reclaiming unreferenced computer memory space |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20040223 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040623 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20040628 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040726 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20041026 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20041115 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20041207 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20071217 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081217 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091217 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101217 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101217 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111217 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111217 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121217 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131217 Year of fee payment: 9 |
|
EXPY | Cancellation because of completion of term |