JP3628032B2 - コンサーバティブ・スタックとジェネレイショナル・ヒープガーベージ・コレクション用コンピュータシステム及び方法 - Google Patents
コンサーバティブ・スタックとジェネレイショナル・ヒープガーベージ・コレクション用コンピュータシステム及び方法 Download PDFInfo
- Publication number
- JP3628032B2 JP3628032B2 JP14379293A JP14379293A JP3628032B2 JP 3628032 B2 JP3628032 B2 JP 3628032B2 JP 14379293 A JP14379293 A JP 14379293A JP 14379293 A JP14379293 A JP 14379293A JP 3628032 B2 JP3628032 B2 JP 3628032B2
- Authority
- JP
- Japan
- Prior art keywords
- accessible
- pointer
- new
- objects
- 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.)
- Expired - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
- 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)
Description
【産業上の利用分野】
本発明は、メモリ・ガーベージコレクション用コンピュータシステム及び方法、特にポインターをスタックする従来のアプローチ及び目的を改善する世代アプローチを用いるガーベージコレクション用のシステム及び方法に関する。
【0002】
【発明の背景】
コンピュータシステムはコンピュータメモリをダイナミックに管理することができる。ダイナミックメモリ管理をメモリのブロックが特別な目的のために一時的に割り当てられ、且つその目的のために最早必要でない時に割当解除される処理に関連している。割当解除されたブロックは他の目的のために再割当に利用できる。メモリをダイナミックに管理する処理はメモリマネジャーと呼ばれている。メモリマネジャーが管理するメモリはヒープと呼ばれている。プログラムがデータを格納するためにメモリブロックを必要とするとプログラムはメモリマネジャーに要求する。メモリマネジャーはその要求を満たすためにヒープにあるメモリブロックを割り当て、プログラムに対してメモリブロックにポインタを送る。プログラムはポインタを介してメモリブロックにアクセスすることが可能である。
【0003】
ある言語、例えばC++で記述されているプログラムの場合、複数のメモリブロック(一つのメモリブロックはしばしばオブジェクトと呼ばれる)は自動的に或いはダイナミックに割り当てられることができる。自動的なオブジェクトは手続きが入り口に入ると自動的に割り当てられ、また手続きが出口を出ると自動的に割当解除になる。逆に言えば、ダイナミックオブジェクトは明白な呼び出しによってメモリマネジャーに割り当てられ、また明白な呼び出しによってメモリマネジャーに、或いはガーベージコレクションとして知られる技術により自動的に割当解除される。典型的には、自動的なオブジェクトはスタックに格納され、またダイナミックオブジェクトはヒープに格納される。
【0004】
プログラムはポインターを介してダイナミックオブジェクトにアクセスすることだけができる。ポインターはオブジェクトのアドレスを有するメモリ位置である。もしプログラムがポインターをオーバーライトすると、それに対応するオブジェクトはプログラムにアクセスできなくなる。オブジェクトは幾らかのポインターによって指定される。全てのポインターがオーバーライトしたり、あるいは他のアクセスできないオブジェクトの部分であるたときだけ、オブジェクトはアクセスできなくなる。アクセスできないオブジェクトはプログラムがデータを検索できないか、データを書き込むことができない。ガーベージコレクションはプログラムによって最早アクセスできないオブジェクトを検出し、再生するダイナミックメモリ管理の処理であり、また割当解除およびそれに続く再割当のためのものである。
【0005】
オブジェクトがアクセス可能であるか否かを決定するための2つの基本的技術がある。レファレンスカウンティング技術は、オブジェクトが新しいポインターはオブジェクトに指定するためにセットされるあらゆる時にオブジェクトのポインターカウントを増加することによって、またオブジェクトに対して指定するポインタがオーバーライトするあらゆる時にポインタカウントを減少することによりアクセス可能であるかどうかを追跡する。レファレンスカウンティング技術は高価につく。ある実行において、ポインターカウントを増加、減少する全てのポインター割当のために余分な50バイトのコードを必要とする。また、ある状態においてはアクセスすることができないオブジェクトを識別することは困難である。例えば、もしオブジェクトAがオブジェクトBに対するポインターを含んでおり、オブジェクトBがオブジェクトAに対するポインターを含んでおり、またオブジェクトAに対するポインターカウントが1で、オブジェクトBに対するポインターカウントが1であるなら、たとえこれらのポインターカウントが0でなくても、オブジェクトAとBは実際上アクセスができない。
【0006】
どのオブジェクトがアクセス可能かを決定する他のガーベージコレクション技術は、オブジェクトに対するポインタを追跡しない。むしろ、さらにヒープメモリが割当てに必要な場合には、ガーベージコレクタがプログラムにおける全てのポインタをチェックすることによっておよびポインタがアクセス可能であるとして指示する各オブジェクトをマーキングすることによってアクセス可能なオブジェクトを識別する。このマーキングが完全であれば、アクセス可能なものとしてマークされていないすべてのオブジェクトはアクセス不能であって再割当てが可能なものである。
【0007】
代表的には、ガーベージコレクタがメモリ(スタック及びヒープ)の全てのポインタをチェックする。しかし、あるメモリロケーションがポインタまたは他の値を含むかどうかを識別するのは極めて難しい。たとえば、以下のC++デクラレーションはオブジェクトAがあるときはオブジェクトに対するポインタであり他の時間ではインテジャ値であることを示すものである。
プログラムがこのオブジェクトに対して各割当てとともにインジケータを設定しないかぎり、ガーベージコレクタにはオブジェクトAがポインタまたはインテジャを含んでいるかがわからない。この形式のトラッキングは極めて高価である。この形式のトラッキングがないばあいには、オブジェクトAがオブジェクトに対するポインタとして同じビットパターンをたまたま含むインテジャ値を含む場合には、ガーベージコレクタはそれが本当にインテジャかポインタであるかを知ることが出来ない。ときによってはポインタであり、ときによってはポインタでないメモリロケーションは、”メイビポインタ(may−be−pointer)”として参照する。
【0008】
ガーベージコレクションへの”コンサーバティブ(conservative)”アプローチはメイビポインタの各割当てを追跡しない。むしろ、オブジェクトAはポインタであると仮定して、それがオブジェクトにたいしてアクセス可能であるとして取り扱う。このアプローチに関し、ガーベージコレクタはそれが本当にアクセス不能の場合には、アクセス可能としてオブジェクトをマークする。
【0009】
コンサーバティブガーベージコレクタはメモリを縮小する場合に問題がある。メモリを縮小する場合、すべてのアクセス可能なオブジェクトは通常では自由空間(再割当てされたオブジェクト)を有するヒープ(割当てられたオブジェクト)の一端に移動させられ、他端をうめる。ガーベージコレクタがオブジェクトに移動すると、ガーベージコレクタはそのオブジェクトに対する全てのポインタをアップデートして新たなロケーションを与えなければならない。しかし、コンサーバティブガーベージコレクタは、メイビポインタの値を変えることはできない。もしメイビポインタが本当に非ポインタ値を含んでいる場合には、ガーベージコレクタはプログラムにエラーを持ち込むことになるからである。このため、この結果、コンサーバティブガーベージコレクタは通常は、メモリを縮小しない。
【0010】
ガーベージコレクションは時間がかかるので、あるガーベージコレクタはジェネレイショナルコレクションといわれる技術を用いる。ジェネレイショナルガーベージコレクタはヒープにあるオブジェクトを新しいオブジェクト(最近クリエイトされたもの)と古いオブジェクト(最近クリエイトされたものでないもの)との2つのカテゴリーに分割する。この技術は最近クリエイトされたオブジェクトは一般に早くアクセス不能になり、一方、古いオブジェクトは通常は、しばらくはアクセス可能な状態に止まるという仮定を用いる。したがって、ジェネレイショナルガーベージコレクタは新しいオブジェクトを再割当てし古いオブジェクトは行わない。ジェネレイショナルガーベージコレクタは、ガーベージコレクションの完了を犠牲にして、(いくつかの古いオブジェクトはアクセス不能の可能性がある)早いガーベージコレクタプロセスを選択する。
【0011】
図1及び図2はコンサーバティブアプローチを用いるガーベージコレクション前後のサンプルスタック及びヒープを示す。図1は、ガーベージコレクションの前のスタック110とヒープ120を示す。スタック110は4、23、12、64及び16の値を有する50のスタック入力111〜115を含む。ヒープ120はロケーション0、4、8、12、16、20、24及び28に8個のオブジェクト121〜128を含む。スタックエントリ111はポインタとしてのみ定義される。スタックエントリ112〜114はポインタあるいはインテジャである。そして、スタックエントリ115はインテジャである。スタックエントリ111はオブジェクト122に対するポインタ118を含む。スタックエントリ112は現状ではポインタを含んでいない。その値23は、任意のオブジェクトのアドレスに対応しないからである。スタックエントリ113はポインタ116(点線でしめす)を含む可能性がある。ロケーション12にオブジェクトがあるからである。スタックエントリ114は現状ではポインタを含んでいない。その値64はフリースペースにおけるオブジェクトに対するものであるからである。スタックエントリ115は、その値16がオブジェクトのロケーションに対応していてもポインタではない。ヒープ120のオブジェクト122はオブジェクト123に対するポインタまたはインテジャでるフィールド117を含む。オブジェクト121、125、126、127及び128はアクセス不能である。これらのオブジェクトに対するポインタがないからである。オブジェクト122はポインタ118がそれを示すからアクセス可能である。オブジェクト123及び124は、スタックエントリ113とフィールド119がこのオブジェクトをしめすためアクセス可能である。
【0012】
図2は、コンサーバティブアプローチを用いてガーベージコレクションを行った後のスタック110及びヒープ120を示している。この例では、コンサーバティブガーベージコレクタは、メモリロケーションがポインタを含んでいるか、含んでいないか、あるいは、メイビーポインタ(may−be−pointer)を含んでいるか否かを知悉している。ただし、このガーベージコレクタはメイビーポインタがポインタを現在含んでいるか否かは追跡しない。ヒープ120はアクセス可能なオブジェクト122と、アクセス可能になり得るオブジェクト123,124とを含んでいる。アクセス不可能なオブジェクト121、124乃至128は自由スペース130,131に再クレーム(割り当て解除)されている。オブジェクト122は移動し、それに対応するポインタであるスタックエントリ111は新しいロケーションをポイントするように変更されている。オブジェクト123,124は、ガーベージコレクションプロセスがスタックエントリ113またはフィールド119が整数であるか、ポインタであるかを確定することができないので、移動していない。
【0013】
図3及び図4は、発生的アプローチを用いてガーベージコレクションを行った前後におけるサンプルスタック及びヒープを示している。図3は発生アプローチを用いてガーベージコレクションを行う前のスタック210及びヒープ220を示す。スタック210はポインタである三つのスタックエントリ211,213,214を有している。ヒープ220は8個のオブジェクト211乃至218と自由スペース229とを有している。ポインタ240はガーベージコレクタによって維持され、新しいオブジェクトのスタートにポイントする。スタックエントリ211はオブジェクト211にポイントし、スタックエントリ213はオブジェクト227にポイントし、スタックエントリ214はオブジェクト223にポイントする。オブジェクト223はオブジェクト224へのポインタ242を含み、オブジェクト227はオブジェクト228へのポインタ244を含んでいる。オブジェクト221乃至225は古いオブジェクトであり、オブジェクト226乃至228は新しいオブジェクトである。オブジェクト222,223,224,227,228はアクセス可能であり、オブジェクト221,225,226はアクセス不可能である。
【0014】
図4は発生的アプローチを用いてガーベージコレクションを行った後のスタック210及びヒープ220を示す。発生的アプローチが用いられたので、アクセス不可能な古いオブジェクト221,225はリクレーム(割り当て解除)されていない。新しく、かつ、アクセス不可能なオブジェクト226だけがリクレームされている。スタックエントリ213は更新され、オブジェクト227の新しいロケーションをリフレクトし、ポインタ244は更新され、オブジェクト228の新しいロケーションをリフレクトした。ポインタ240は更新され、新しいオブジェクトのスタートにポイントされた。
【0015】
【発明の概要】
本発明の目的は、コンピュータメモリ用のガーベージコレクションプロセスを改良することである。
本発明の他の目的は、コンサーバティブガーベージコレクション技術とジェネレイショナルガーベージコレクション技術との利点を組み合わせたガーベージコレクションプロセスを提供することである。
【0016】
本発明のさらに他の目的は、コンピュータメモリ中のアクセス不可能なオブジェクトを特定するための方法を提供することである。
これらの目的及び他の目的(これらは本発明を以下に詳述するにつれて明らかになる)は、コンピュータメモリ中のアクセス不可能なオブジェクトを特定するための方法及びシステムによって達成される。好適な実施例においては、メモリはスタック及びヒープを有しており、ヒープは古いオブジェクト及び新しいオブジェクトを有しており、オブジェクトはポインタにより特定され、スタックはポインタになり得るスタックエントリを有している。好適な実施例においては、古いオブジェクトが新しいオブジェクトにポイントされるように設定されているポインタを有している場合には、その古いオブジェクトは想起リストに加えられる。ガーベージコレクションの間においては、各スタックエントリはメイビーポインタであると想定される。スタックエントリによりポイントされた新しい各オブジェクトはアクセス可能とマーク付けされ、想起リスト中の古いオブジェクトによりポイントされる新しい各オブジェクトはアクセス可能とマーク付けされ、既にマーク付けされたオブジェクトを介してアクセス可能な新しい各オブジェクトはアクセス可能とマーク付けされる。このプロセスが完了した時点で、アクセス可能とマーク付けされなかった全ての新しいオブジェクトはアクセス不可能である。
【0017】
【実施例】
本発明は、従来の又一般的なガーベージ・コレクションの技術を組み合わせた改良されたガーベージ・コレクションの技術を提供する。好適な実施例においては、ガーベージ・コレクタは、従来からオブジェクトに対して各スタック・エントリ・ポイントを推定し、さらに的確な方法を用いてグローバル変数がポインタであるか否かさらにヒープ内のオブジェクトの中のフィールドがポインタであるか否かを判定している。さらに、ガーベージ・コレクタが新オブジェクトのみを回収するものであることが好ましい。
【0018】
プログラムが作動中に、新オブジェクトに対してポインタを含む古いオブジェクトのリストが保持される。ポインタを含むオブジェクトが古くてポイントされたオブジェクトが新規な場合には、古いオブジェクトリは想起リストに追加される。好適な実施例においては、コンパイラがコードを生成し、このコードがこのチェック及び各ポインタ・アサイメント・ステートメントの想起リストへの追加を実行する。このコンパイラは、オブジェクトの各クラスのための仮想記憶機能を生成する。これらの仮想記憶機能の一つにより、オブジェクト内に含まれるポインタのリストを返却し、他のものにより、オブジェクトのサイズを返却する。コンパイラは、コードを生成し、このコードにより、オブジェクト内のメイビー・ポインタが今回ポインタを含んでいるか否かを正確に探知する。
【0019】
好適な実施例においては、メモリ・マネージャーが、新スペースと古いスペースとにヒープを論理的に分割する。メモリ・マネージャーは、新スペースから新オブジェクトを割り当てる。好適な実施例においては、ガーベージ・コレクタは、インテル80386などの別個のアーキテクチャーを有するプロセッサで実行される。
【0020】
アクセス可能な新なオブジェクトは、スタックエントリ若しくは想起リストの古いオブジェクトを介して接近可能である。このようにして、スタックエントリ及び想起リストのオブジェクトを処理することにより、ガーベージ・コレクタは、新オブジェクトがアクセス可能であるか若しくはアクセス可能でありそうなのかを判定することができる。好適な実施例においては、ガーベージ・コレクタは、各スタック・エントリを従来から取り扱っており、即ち、各スタック・エントリは、メイビー・ポインタであると推定される。ガーベージ・コレクタは、ロックされ且つアクセス可能であるとしてスタック・エントリによりポイントされる可能性のある、さらに、ロックされたオブジェクトから接近できる新規な各オブジェクトをアクセス可能であるとしてポイントされる可能性のある、新オブジェクトの各々をマークする。その後、ガーベージ・コレクタは、その古いオブジェクトを介してアクセス可能である各新オブジェクトを訪問することにより且つそれをアクセス可能なものとしてマークすることにより、想起リスト内の各オブジェクトを処理する。マークが完了後、ガーベージ.コレクタは、新セグメント内にそのメモリをコンパクト化する。
【0021】
図5は、より好ましい実施例におけるガーベージコレクタ手続きの概略流れ図である。ステップ301で、ガーベージコレクタは、ルーチン、“プロセススタックポインタ”をインボウクし、スタックエントリを通じてアクセスすることができるような全ての新オブジェクトに対してコンサーバティブに(conservatively)マーク付けを行なう。ステップ302で、ガーベージコレクタは、ルーチン、“プロセス想起リスト”をインボウクし、想起リスト内の古いオブジェクトを通じてアクセスすることができるような全ての新オブジェクトにマーク付けを行なう。ステップ303で、ガーベージコレクタは、ヒープの新セグメントを圧縮する。
【0022】
図6は、より好ましい実施例におけるルーチン、“プロセススタックポインタ”の流れ図である。ステップ401〜404で、ガーベージコレクタは各スタックエントリを処理し、それが新オブジェクトに対するポインタであるのか、或いは、それは明らかに新オブジェクトに対するポインタではないのかを、判断する。もしそれが新オブジェクトに対するポインタであれば、ガーベージコレクタは、その後の処理のために、そのスタックエントリをメイビー・ポインタ(may−be−pointers)のリストに付加する。ステップ401で、ガーベージコレクタは、その最初のもので始まる次のスタックエントリを選択する。ステップ402で、全てのスタックエントリがすでに選択されていれば、ガーベージコレクタはステップ405に続き、さもなければ、ガーベージコレクタはステップ403に続く。ステップ403で、選択されたスタックエントリが新オブジェクトに対するポインタであれば、ガーベージコレクタは、ステップ404で、選択されたスタックエントリを“メイビーポインタリスト”に付加し、次のスタックエントリを選択するためにステップ401にループし、さもなければ、ガーベージコレクタはステップ401にループする。より好ましい実施例において、新オブジェクトは単一セグメントの割当てスペースである。故に、新オブジェクトに対するポインタは、新セグメントのそれと等価なセグメントセクレタを有する。スタックエントリは、そのセレクタ部分が新セグメントを指示しており、オフセット部分が新セグメントの限界範囲内である場合には、新オブジェクトに対するポインタであってもよい。ステップ405で、ガーベージコレクタは、ルーチン、“プロセスメイビーポインタリスト”をインボウクし、メイビーポインタリストのスタックエントリによって指示され得るオブジェクトに保守的にマーク付けを行なう。ガーベージコレクタはその後戻る。
【0023】
図7は、より好ましい実施例におけるルーチン、“プロセスメイビーポインタリスト”の流れ図である。このルーチンは、ロック済、及びアクセス可能として指示され得るような全ての新オブジェクトにマーク付けを行なうことによって、“メイビーポインタリスト”のエントリを処理する。このルーチンも、これらのオブジェクトを通じてアクセス可能であるような新オブジェクトに対して、アクセス可能のマーク付けを行なう。ステップ501で、ガーベージコレクタは“メイビーポインタリスト”の分類を行なう。ステップ502で、ガーベージコレクタは、最初の新オブジェクトで始まるヒープ内の次の新オブジェクトを選択する。ステップ503で、全ての新オブジェクトが既に選択されている場合は、ガーベージコレクタは戻り、さもなければ、ガーベージコレクタはステップ504に続く。ステップ504で、“メイビーポインタリスト”が、選択されたオブジェクトを指示するスタックエントリ、若しくは、選択されたオブジェクトに埋込みされたオブジェクトを含み、それがポインタである場合には、ガーベージコレクタはステップ505に続き、さもなければ、ガーベージコレクタはステップ502をループして次の新オブジェクトを選択する。ステップ505で、ガーベージコレクタは、選択されたオブジェクトに対してロック済のマーク付けを行なう。選択されたオブジェクトは、アクセス可能として既にマーク付けがなされているものでもよい。なぜなら、この選択されたオブジェクトは、既にアクセス可能のマーク付けがなされた新オブジェクトを通じてアクセスすることができるからである。それにもかかわらず、それはロック済としてマーク付けがなされているために、ヒープコンパクション (heap compaction)の間に移動されることはないであろう。ステップ506で、選択されたオブジェクトに既にアクセス可能のマーク付けがなされている場合には、埋込みされたポインタは既に処理されており、どの新オブジェクトがそれらを通じてアクセスできるのかを判断し、ガーベージコレクタはステップ502にループして次の新オブジェクトを選択し、さもなければ、ガーベージコレクタはステップ507に続く。
【0024】
ステップ507では、ガーベージコレクタが選択されたオブジェクトをアクセス可能であると標示する。ステップ508では、ガーベージコレクタがルーチンチェック埋込みポインターを呼出してそこに選択したオブジェクトを通過させ、その後ステップ502へループして次の新しいオブジェクトを選択する。このルーチンは、以下に詳述するように、通過したオブジェクト(古いオブジェクトを通して通過したオブジェクトからアクセスさせ得るだけの新しいオブジェクトを除く)からアクセス可能であるすべての新しいオブジェクト(すでにアクセス可能であると標示したものではない)を、アクセス可能であると標示する。
【0025】
図9は、好ましい実施例のルーチンプロセス想起リストのフローダイヤグラムである。このルーチンは想起リストの各古いオブジェクトを処理してそれを通してアクセス可能な各新しいオブジェクトをアクセス可能だあると標示する。ステップ601では、ガーベージコレクタは最初から始まる想起リストの新しいオブジェクトを選択する。ステップ602において、想起リストのオブジェクトがすべて既に選択されている場合には、ガーベージコレクタが戻り、その代わりそのガーベージコレクタは603に留まる。ステップ603において、ガーベージコレクタはルーチンチェック埋込みポインターを呼び出してそこに選択したオブジェクトを通過させ、その後ステップ601へループして次の新しいオブジェクトを選択する。
図10は、好ましい実施例のルーチンチェック埋込みポインターのフローダイヤグラムである。このルーチンは、オブジェクトを通過させ、通過したオブジェクト(古いオブジェクトを通して通過したオブジェクトからアクセスされ得るだけの新しいオブジェクトを除く)に埋め込まれたポインタを通してアクセス可能である各新しいオブジェクト(すでにアクセス可能であると標示されたオブジェクトではない)をアクセス可能であると設定する。このルーチンは、再帰的に呼び出されて通過したオブジェクトに含まれるポインタにより指示された各新しいオブジェクトを処理する。当業者はこのルーチンを非再帰的に構成できることを認識するであろう。このルーチンが古いオブジェクトを指示するポインタに遭遇した場合、そのルーチンは古いオブジェクトのポインタを処理しない。というのは、古いオブジェクトが新しいオブジェクトへのポインタを含む場合には、古いオブジェクトは想起リストの上にあり、ガーベージコレクタはそれをそのように処理する。ステップ701では、ガーベージコレクタが最初から始まる通過したオブジェクトの新しいポインタを選択する。好ましい実施例では、バーチャルファンクションが各オブジェクトのクラスについて定められる。このオブジェクトは、呼び出された場合、オブジェクトに含まれるポインタを与える。ステップ702では、通過したオブジェクトに対する埋め込まれたポインタがすべて処理されてしまった場合には、ガーベージコレクタを戻し、その代わりそのガーベージコレクタはステップ703に留まる。ステップ703において、選択されたポインタにより指示されたオブジェクトが新しいもので既にアクセス可能であると標示されたものでない場合には、ガーベージコレクタがステップ704に留まり、その代わりそのガーベージコレクタはステップ701にループして新しい埋め込みポインタを選択する。選択されたポインタが0ならば、そのポインタは新しいオブジェクトを指示しない。そのオブジェクトが既にアクセス可能であると標示されたものである場合には、そこからアクセス可能なすべての新しいオブジェクト(古いオブジェクトを通して通過したオブジェクトからアクセスされ得るだけの新しいオブジェクトを除く)がアクセス可能であると標示される。ステップ704では、ガーベージコレクタが選択されたポインタにより指示されたオブジェクトを選択する。ステップ705では、ガーベージコレクタが選択されたオブジェクトをアクセス可能であると標示する。ステップ706では、ガーベージコレクタがルーチンチェック埋込みポインターを再帰的に呼び出して選択したオブジェクトを通過させ、その後ステップ701へループして次の新しい埋め込みポインタを選択する。
【0026】
本発明の好ましいコンパクションアルゴリズムによって、マークされ、かつ、ヒープの一方の端にロックされないオブジェクトの各々が移動される。この移動されたオブジェクトは、お互いに相対的な位置を保持する。この相対的に位置の保持によって、基準位置が向上するようになる。オブジェクトは、一般的に略同時に作られた基準オブジェクトに向かう。このように、相対的に位置の保持によって、ロックされたオブジェクトを除いて、オブジェクトが、同じ時間的な近接において作られたオブジェクトの近くに空間的に存在するということが確実になる。移動しないオブジェクトはロックされるので、同じ時間的な近接において作られたオブジェクトから空間的に分離される場合がある。改善された基準位置は、仮想メモリを有するコンピュータ・システムにおいてページ・フォールト(page fault)を減少させるときに特に重要である。
【0027】
オブジェクトが移動されたとき、そのオブジェクトは、ロックされたオブジェクトの近くに記憶される。ロックされたオブジェクトと移動したオブジェクトとの間の空間が次の移動されるオブジェクトを保持するのに十分大きくない場合、ダミーオブジェクトが作られ、その空間に移動される。ダミーオブジェクトは、その空間を満たすのに十分大きく、関連する仮想機能テーブルを有する。ポインタはダミー・オブジェクトを参照しないので、そのダミーオブジェクトは、次のガーベージ・コレクションの間にリクームされる。
【0028】
オブジェクトの移動が完全なとき、リストは自由空間の隣接する区分領域から成る。この自由空間は、マークされ、かつ、ロックされたオブジェクトを除き、接触している。新たなオブジェクトの割り当ては、この自由空間から生じる。
図11は、全てのアクセス可能なオブジェクトがマークされたのちのサンプルとなる新たな空間を示す。マークされ、かつ、ロックされないオブジェクトは、M0 、M1 、M2 、M3 、M4 、及びM5 である。マークされ、かつ、ロックされたオブジェクトは、ML0 、ML1 、ML2 、及びML3 である。マークされないオブジェクトは、U0 、U1 、U2 、U3 、U4 、U5 、U6 、及びU7 である。各オブジェクトの右下コーナーの数字はオブジェクトの大きさを示す。図12はコンパクション後のヒープのサンプルとなる新たな空間を示す。D0 のマークのオブジェクトは、ダミーオブジェクトである。自由空間はF0 、F1 、及びF2 で示され、これらは一緒にリンクされている。ポインタTOSは、コンパクションが完全になった後、空間の先端を示す。コンパクション・プロセスの間、大きさ5を有するオブジェクトM2 は大きさ2を有する空間に適合しないと決定された。その結果、大きさ2を有するダミー・オブジェクトD0 が作られ、大きさ2を有する空間に挿入された。大きさ2を有するオブジェクトM4 はその空間に適合するけれども、移動されなかった。その理由は、そうすることは、マークされ、かつ、ロックされないオブジェクトの相対的な順序を変えるからである。
【0029】
図13は、本発明の好ましい実施例におけるコンパクションルーチンのフローチャートである。このルーチンは、新スペースにおいて第1のオブジェクトを指すように、トップオブスペース(TOS)ポインタを初期化する。このTOSポインタは、オブジェクトが移動されうる次のロケーションを指す。ステップ901において、コンパクタは、第1オブジェクトから開始する新スペースの次のオブジェクトを選択する。ステップ902においては、全てのオブジェクトが既に選択されていた場合、コンパクタはステップ911に続き、そうでない場合には、コンパクタはステップ903に続く。ステップ903において、選択されたオブジェクトがマークされていて且つロックされていない場合、選択されたオブジェクトは移動させられるようになり、コンパクタはステップ904に続き、そうでない場合には、コンパクタはステップ901にループして次のオブジェクトを選択する。ステップ904において、TOSとロックされた次のオブジェクトとの間に十分なスペースがある場合、オブジェクトはTOSに移動されることができ、コンパクタはステップ908に続く。そうでない場合には、コンパクタはステップ905に続く。ロックされた次のオブジェクトは、TOSと新スペースのエンドとの間にある最も近いロックオブジェクトを参照する。かかるロックオブジェクトがない場合、そのスペースは、TOSから新スペースのエンドまでにわたって考慮される。ステップ905〜907において、コンパクタは、TOSと次のロックオブジェクトとの間のスペースをダミーオブジェクトで満たす。TOSが次のオブジェクトを指す場合、ダミーオブジェクトは不要になってステップ905〜907はスキップする。ダミーオブジェクトは、オブジェクトのサイズを戻す仮想ファンクションと、オブジェクトにポインタがないという指示を戻す仮想ファンクションとを有する。作成された後の次のガーベージコレクション中において、ダミーオブジェクトは、アクセス可能なものとしてマークされず(それを指すオブジェクトがない)、これにより、リクレームされる。ステップ905において、コンパクタは、TOSと次のロックオブジェクトとの間のスペースを満たすのに十分な大きさのダミーオブジェクトを作成する。ステップ906において、コンパクタは、ダミーオブジェクトをTOSにストアする。ステップ907において、コンパクタは、TOSを次のロックオブジェクトを通るように進め、ステップ904にループさせて、進められたTOSと新しい次のロックオブジェクトの間に十分なスペースがあるかどうかをチェックする。ステップ908において、コンパクタは選択されたオブジェクトをTOSに移動する。ステップ909において、コンパクタはポインタを移動したオブジェクトに更新する。オブジェクトのマーク処理中において、ガーベージコレクターは、各マークしたオブジェクトを指す全ポインタのリストを作成した。ステップ910において、コンパクタは、TOSを移動したオブジェクトを通るように進め、ステップ901にループさせて次のオブジェクトを処理する。ステップ911において、コンパクタは、TOS上のフリースペースにリンクして、リターンする。
【0030】
コンパクションルーチンの完了時に、TOSが新スペースの開始と旧スペースの終了を決める。想起リストは、新スペース内のオブジェクトをもはや指し示めさない古いオブジェクトを除去することにより好適に更新される。この更新は、オブジェクトが移動する時にコンパクションルーチンによって達成できることは当業者が理解できるであろう。図12に示される様に、新スペースはロックされたオブジェクト、例えばML2 及びML3 を含むことができるので、コンパクション後の想起リストは、新スペース内のこれらのロックされたオブジェクトを指し示す古いオブジェクトを含むことができる。別法においては、オブジェクトを含まないものとして新スペースが定義されるまで、想起リストは更新されない。この様な定義が生じると、新スペース内に指し示すためのオブジェクトが存在しないので、古いオブジェクトの全てを、想起リストから除去することができる。例えば、図12の新たなスペースは、新スペースがオブジェクトF2で開始するか、セグメントアーキテクチャーを有するコンピュータで実施される時は、別のセグメントで開始する様に定義することによりオブジェクトを含まない様に定義できる。この様な定義を用ると、旧スペースはフリースペースを含むことができる。新スペースがTOS以外のロケーションで開始する様に定義される場合、次のコンパクション中に、このコンパクションルーチンは、新スペースを指し示すようにTOSをリセットするのではなく、オブジェクトをTOSによって指し示されたロケーションに移動するのが好ましい。従って、旧スペース内のフリーエリアがコンパクション中に充填される。
【0031】
本発明は好適な実施例に基づいて説明されたが、本発明をこれらの実施例に限定する様には意図されていない。本発明の概念内にある改良が当業者に明らかであろう。本発明の範囲は特許請求の範囲によって規定されている。
【図面の簡単な説明】
【図1】従来の方法を用いたガーベージコレクション前のサンプルスタックとヒープを示す図である。
【図2】従来の方法を用いたガーベージコレクション後のサンプルスタックとヒープを示す図である。
【図3】一般的な方法を用いたガーベージコレクション前のサンプルスタックとヒープを示す図である。
【図4】一般的な方法を用いたガーベージコレクション後のサンプルスタックとヒープを示す図である。
【図5】本発明の実施例によるガーベージコレクションの手続きの全体フローチャートを示す。
【図6】本発明の実施例によるプロセス・スタック・ポインタのルーチンを示すフローチャートである。
【図7】本発明の実施例によるプロセス・メイビー・ポインタ・リストのルーチンの前半部を示すフローチャートである。
【図8】本発明の実施例によるプロセスメイビーポインタリストのルーチンの後半部を示すフローチャートである。
【図9】本発明の実施例によるプロセス想起リストのルーチンを示すフローチャートである。
【図10】本発明の実施例によるチェック埋込みポインタのルーチンを示すフローチャートである。
【図11】接近できるオブジェクトがマークされた後のヒープのサンプル新規スペースを示す図である。
【図12】コンパクション後のサンプル新規スペースを示す図である。
【図13】本発明の実施例によるコンパクションのルーチンを示すフローチャートである。
【符号の説明】
110 スタック
111−115 スタック入力
116、118 ポインター
120 ヒープ
121−128 オブジェクト
Claims (14)
- コンピュータシステムにおいて、コンピュータメモリにおけるデータオブジェクトをマーキングする方法であって、各オブジェクトは、ポインターによって識別され、前記メモリは、スタックおよびヒープを含んでおり、前記ヒープは、複数の古いオブジェクトおよび複数の新オブジェクトを有しており、前記メモリは、新オブジェクトへのポインターを含む複数の古いオブジェクトに対するポインターのリストを含んでおり、前記スタックは、確実にポインターでないか、または多分、ポインターであるとして識別されるスタックエントリを有しており、
各スタックエントリが確実にポインターでないか、または多分、ポインターであるか、を識別し、
多分、ポインターであるとして識別されるスタックエントリによって多分指示される各新オブジェクトに対して、その新オブジェクトをアクセス可能で且つロックされたものとしてマーキングし、該マークされたオブジェクトによりアクセス可能な各新オブジェクトをアクセス可能なものとしてマーキングし、
前記ポインターのリストにおけるポインターによって指示される各古いオブジェクトに対して、その古いオブジェクトに含まれたポインターによって指示される各新オブジェクトをアクセス可能なものとしてマーキングし且つ前記マークされたオブジェクトによりアクセス可能な各新オブジェクトをアクセス可能なものとしてマーキングし、ヒープ圧縮中に、前記ロックされたオブジェクトが移動せず、ロックされていないアクセス可能なオブジェクトが、ヒープの自由空間を統合するように移動する、
各段階を含むことを特徴とする方法。 - マークされたオブジェクトによりアクセス可能な各新オブジェクトをアクセス可能なものとしてマーキングする段階は、そのマークされたオブジェクトから古いオブジェクトによってのみアクセス可能な新オブジェクトをマーキングしない請求項1記載の方法。
- コンピュータシステムにおけるガーベージコレクション方法であって、前記コンピュータシステムは、スタックおよびヒープを有しており、前記ヒープは、複数の新オブジェクトおよび複数の古いオブジェクトを有しており、前記スタックは、スタックエントリを有しており、各オブジェクトは、ポインターによって識別され、
古いオブジェクトが新オブジェクトを指示するようにセットされているポインターを含むとき、その古いオブジェクトを想起し、
ガーベージコレクション中、
各スタックエントリを確実にポインターでないとして、または多分、ポインターであるとして識別し、
多分、ポインターであるとして識別されたスタックポインターによって多分指示された各新オブジェクトをアクセス可能で且つロックされたものとしてマーキングし、想起されたオブジェクトによって指示される各新オブジェクトをアクセス可能なものとしてマーキングし、
前にマークされたオブジェクトによってアクセス可能な各新オブジェクトをアクセス可能なものとしてマーキングし、
アクセス可能で且つロックされていない新オブジェクトを移動させ、アクセス可能で且つロックされたオブジェクトを移動させないことにより、マークされていない新オブジェクトに対して使用されるメモリをアクセス可能なものとして再生利用する段階を含むことを特徴とする方法。 - コンピュータシステムにおけるメモリコンパクション方法であって、前記コンピュータシステムは、メモリを有しており、該メモリは、複数のメモリ場所を有しており、複数のオブジェクトを記憶し、各オブジェクトは、そのオブジェクトを備えるメモリ場所の数を指示するサイズを有しており、各オブジェクトは、アクセス可能であるか、またはアクセス不可能なものであり、各アクセス可能なオブジェクトは、ロックされるか、またはロックされないかであり、前記オブジェクトは、最初のオブジェクトから最後のオブジェクトまで順序付けられており、アクセス可能であってロックされない各オブジェクトは、そのオブジェクトを指示する基準ポインターを有しており、
前記メモリにおいて最初のオブジェクトを指示するメモリポインターを初期化し、
前記メモリにおける各オブジェクトに対して、最初のオブジェクトから始めて最後のオブジェクトまで順番に、そのオブジェクトを選択していき、
前記選択されたオブジェクトがアクセス可能でありロックされていないときに、
前記選択されたオブジェクトのサイズが、前記選択されたオブジェクトがロックされたオブジェクトをオーバライトせずに、前記メモリポインターによって指示されるメモリ場所で始まるメモリ場所へコピーされるようなものであるときは、前記選択されたオブジェクトを、前記メモリポインターによって指示されるメモリ場所で始まるメモリ場所へコピーし、
前記選択されたオブジェクトのサイズが、ロックされたオブジェクトをオーバライトせずにメモリポインターによって指示されたメモリ場所で始まるメモリ場所にコピーされないようなものであるときは、前記選択されたオブジェクトを、ロックされたオブジェクトの後に、前記メモリ場所で始まるメモリ場所へコピーし、
基準ポインターがそのコピーされたオブジェクトを指示するように、その基準ポインターをその選択されたオブジェクトへ更新し、
そのコピーされたオブジェクトの後のメモリ場所を指示するようにメモリポインターを進める、
段階を含むことを特徴とする方法。 - 前記選択されたオブジェクトのサイズが、その選択されたオブジェクトがコピーされ得ないようなものであるときに、前記メモリポインターによって指示されるメモリポインターによって指示されるメモリで始まるダミーオブジェクトを、そのダミーオブジェクトのサイズがロックされるオブジェクトをオーバーライトしないように、記憶させ、前記メモリポインターを、前記ロックされるオブジェクトの後の場所を指示するように進める段階を含む請求項4記載の方法。
- コンピュータシステムにおけるメモリコンパクション方法であって、前記コンピュータシステムは、複数のメモリ場所および複数のオブジェクトを有したメモリを有しており、各オブジェクトは、1つまたはそれ以上のメモリ場所を備えており、各オブジェクトは、最初のオブジェクトから最後のオブジェクトまで順序付けられており、各オブジェクトは、アクセス可能であるか、またはアクセス不可能なものであり、各アクセス可能なオブジェクトは、ロックされるか、またはロックされないものであり、アクセス可能でありロックされない各オブジェクトは、そのオブジェクトを指示する基準ポインターを有しており、
複数のアクセス可能なオブジェクトを移動させる段階であって、当該段階は、ロックされないアクセス可能なオブジェクトを移動させ、ロックされるアクセス可能なオブジェクトは移動せず、アクセス可能であってロックされないオブジェクトの順序が移動後も維持されるように移動し、
各移動されたオブジェクトの基準ポインターを、その移動された場所を指示するように調整する
段階を含むことを特徴とする方法。 - 前記移動させる段階は、アクセス可能でありロックされないオブジェクトを、既に移動されたアクセス可能でありロックされないオブジェクトまたはアクセス不可能なオブジェクトによって前に占められていたメモリ場所へ移動させることを含む請求項6記載の方法。
- コンピュータシステムにおけるガーベージコレクター装置であって、コンピュータメモリに配置され複数のスタックエントリを有するスタックと、
コンピュータメモリに配置され複数の新および古いオブジェクトを有するヒープと、
各新オブジェクトに対するポインターを含む古いオブジェクトを識別する想起リストと、
各スタックエントリを、多分新オブジェクトに対するポインターであるか、またはそのポインターでないとして識別するようなプロセススタックポインター処理手段と、
多分、ポインターであるとして識別されるスタックエントリによって指示される各新オブジェクトをアクセス可能で且つロックされるとしてマークする多分ポインター処理手段と、
想起リストにおいて識別される古いオブジェクトによって指示される新オブジェクトをアクセス可能なものとしてマークする想起リスト処理手段と、
アクセス可能なものとしてマークされる新オブジェクトによってアクセス可能な新オブジェクトをアクセス可能なものとしてマークするチェック埋込みポインター処理手段と、
ロックされないアクセス可能なオブジェクトを移動させ、ロックされるアクセス可能なオブジェクトは移動せず、アクセス可能なものとしてマークされない各オブジェクトを、アクセス可能オブジェクトを移動することにより、再生利用するリクラメイション手段とを備え、
たことを特徴とするガーベージコレクター装置。 - スタックエントリを有するスタックと、新および古いオブジェクトを有するヒープとを有するコンピュータシステムにおけるガーベージコレクションを行なう方法であって、
各スタックエントリがオブジェクトに対するポインターであるかどうかをコンサーバティブに決定し、
どの古いオブジェクトが新オブジェクトに対するポインターを含むかを想起し、
ポインターであるとしてコンサーバティブに決定されたスタックエントリによってアクセス可能でない新オブジェクトおよび想起される古いオブジェクトによってアクセス可能でない新オブジェクトを再生利用し、
アクセス可能であるが、ポインターであるとコンサーバティブに判断されたスタックエントリを介して指示されない新オブジェクトを移動することによりヒープを結合し、
オブジェクトは、データメンバーを含み、前記データメンバーが新オブジェクトに対するポインターを含むかどうかを明確に決定する段階を含み、ヒープのオブジェクトは、互いに対する相対的な位置を有しており、新オブジェクトの移動は、移動されるオブジェクトの互いに対する相対的な順序位置を維持することを含む
ことを特徴とする方法。 - スタックおよびヒープを有するコンピュータシステムのためのガーベージコレクター装置であって、前記スタックは、エントリを有し、前記ヒープは、新および古いオブジェクトを有しており、
各スタックエントリが新オブジェクトを指示するかどうかをコンサーバティブに決定する手段と、
新オブジェクトに対するポインターを含む古いオブジェクトを追跡する手段と、
ポインターであるとしてコンサーバティブに決定されたスタックエントリによってアクセス可能でない新オブジェクトおよび新オブジェクトに対するポインターを含む古いオブジェクトによってアクセス可能でない新オブジェクトを再生利用する手段と、
アクセス可能であるが、ポインターであるとコンサーバティブに判断されたスタックエントリを介して指示されない新オブジェクトを移動することによりヒープを結合する手段と、
オブジェクトは、データメンバーを含み、該データメンバーが新オブジェクトに対するポインターを含むかどうかを明確に決定する手段とを備え、ヒープのオブジェクトは、互いに対する相対的位置を有しており、前記新オブジェクトを再生利用する手段は、移動されるオブジェクトの相対的な順序位置を維持する
ことを特徴とするガーベージコレクター装置。 - コンピュータシステムにおけるガーベージコレクションの方法であって、コンピュータシステムがヒープを有しており、前記ヒープが複数のオブジェクトを有しており、コンピュータシステムは、オブジェクトを確実に参照する複数のデータ値と、オブジェクトを多分参照する複数のデータ値とを有し、
データ値によって多分参照される各オブジェクトを、アクセス可能であってロックされる、としてマーキングし、
データ値によって確実に参照される各オブジェクトを、アクセス可能である、としてマーキングし、
アクセス可能な以前マーキングされたオブジェクトを介してアクセス可能である各オブジェクトをマーキングし、
ヒープを圧縮し、アクセス可能でないヒープの部分を統合するように、ロックされるオブジェクトは移動されず、アクセス可能であってロックされないオブジェクトは移動される、
ことを特徴とする方法。 - コンピュータシステムがスタックを含み、オブジェクトを多分参照するデータ値が前記スタック内に包含される、ことを特徴とする請求項11に記載の方法。
- 前記圧縮ステップが、アクセス可能であってロックされないオブジェクトを移動させるステップを含み、移動されたオブジェクトの相対的な順序位置が維持される、ことを特徴とする請求項11に記載の方法。
- 請求項11に記載の方法が、古い若しくは新しい何れかの各オブジェクトを指定するステップを有し、
データ値によって確実に参照される各オブジェクトを、アクセス可能である、としてマーキングするステップが、古いオブジェクトからアクセス可能であるそれらの新しいオブジェクトだけをマーキングするステップを有し、
圧縮ステップが新しいオブジェクトだけを移動させるステップを有する、
ことを特徴とする請求項11に記載の方法。
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 JPH0695954A (ja) | 1994-04-08 |
JP3628032B2 true 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) |
Families Citing this family (56)
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 |
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 |
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 |
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 |
GB2345160B (en) * | 1998-12-23 | 2003-08-20 | Ibm | Virtual machine memory management |
GB2345159B (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 |
US6970893B2 (en) * | 2000-10-27 | 2005-11-29 | Bea Systems, Inc. | System and method for regeneration of methods and garbage collection of unused methods |
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 |
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 |
EP1502196A4 (en) * | 2002-05-02 | 2008-04-02 | Sarvega Inc | SYSTEM AND METHOD FOR TRANSFORMING XML DOCUMENTS USING STYLE SHEETS |
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 |
JP4504756B2 (ja) * | 2004-07-26 | 2010-07-14 | 株式会社アプリックス | Java(登録商標名)実行環境におけるメモリ管理方法及びメモリ管理プログラム |
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 |
US7870171B2 (en) * | 2007-02-12 | 2011-01-11 | Oracle America, Inc. | Method and system for garbage collection in a multitasking environment |
US7627621B2 (en) * | 2007-02-12 | 2009-12-01 | Sun Microsystems, Inc. | Method and system for minor garbage collection |
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 |
US8726264B1 (en) | 2011-11-02 | 2014-05-13 | Amazon Technologies, Inc. | Architecture for incremental deployment |
US8984162B1 (en) * | 2011-11-02 | 2015-03-17 | Amazon Technologies, Inc. | Optimizing performance for routing operations |
CN103838679B (zh) * | 2012-11-22 | 2017-08-04 | 中兴通讯股份有限公司 | 一种缓存处理方法及装置 |
KR101723100B1 (ko) * | 2013-07-18 | 2017-04-05 | 엠파이어 테크놀로지 디벨롭먼트 엘엘씨 | 메모리 공격 검출 |
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 CA CA002098459A patent/CA2098459A1/en not_active Abandoned
- 1993-06-15 JP JP14379293A patent/JP3628032B2/ja 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 EP EP93109545A patent/EP0574884B1/en not_active Expired - Lifetime
-
1995
- 1995-05-23 US US08/448,238 patent/US5652883A/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
DE69332696D1 (de) | 2003-03-27 |
US5652883A (en) | 1997-07-29 |
ATE233001T1 (de) | 2003-03-15 |
EP0574884B1 (en) | 2003-02-19 |
DE69332696T2 (de) | 2003-08-21 |
CA2098459A1 (en) | 1993-12-16 |
JPH0695954A (ja) | 1994-04-08 |
EP0574884A1 (en) | 1993-12-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3628032B2 (ja) | コンサーバティブ・スタックとジェネレイショナル・ヒープガーベージ・コレクション用コンピュータシステム及び方法 | |
US6928460B2 (en) | Method and apparatus for performing generational garbage collection in a segmented heap | |
US5321834A (en) | Method and system for reclaiming unreferenced computer memory space | |
US6249793B1 (en) | Mostly concurrent compaction in a garbage collection system | |
US6434576B1 (en) | Popular-object handling in a train-algorithm-based garbage collector | |
US6434577B1 (en) | Scalable-remembered-set garbage collection | |
US6865585B1 (en) | Method and system for multiprocessor garbage collection | |
US5561786A (en) | Computer method and system for allocating and freeing memory utilizing segmenting and free block lists | |
US6185581B1 (en) | Train-algorithm-based garbage collector employing fixed-size remembered sets | |
KR100541174B1 (ko) | 로컬화된 메모리 재이용을 가진 데이터 처리기 | |
US6308185B1 (en) | Methods and apparatus for generational dynamic management of computer memory | |
US7310718B1 (en) | Method for enabling comprehensive profiling of garbage-collected memory systems | |
US6424977B1 (en) | Train-algorithm-based garbage collector employing reduced oversized-object threshold | |
US6415302B1 (en) | Train-algorithm-based garbage collector employing farthest-forward-car indicator | |
US7389395B1 (en) | Split-reference, two-pass mark-compaction | |
US6105040A (en) | Method and apparatus for managing stored objects | |
WO2001061472A2 (en) | Incremental class unloading in a train-algorithm-based garbage collector | |
US7533228B1 (en) | Two-pass sliding compaction | |
WO2001013239A1 (en) | Reduced-cost remembered-set processing in a train-algorithm-based garbage collector | |
US6427154B1 (en) | Method of delaying space allocation for parallel copying garbage collection | |
US6999979B2 (en) | Efficient encoding of references into a collection set | |
US7499961B2 (en) | Method and apparatus for limiting the size and facilitating maintenance of remembered sets in a space incremental garbage collector | |
US6804762B1 (en) | Method and system for garbage collection using a dynamically tuned write barrier | |
JPH05274152A (ja) | オブジェクト管理方式 | |
US6721865B2 (en) | Elimination of coloring during object creation for concurrent garbage collection |
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 |