JP4043528B2 - 部分的に再配置されたオブジェクトのインスタンスに関連する読み込みバリア及び書き込みバリアを有する有界休止時間ガーベッジコレクションシステム及びそのガーベッジコレクション方法 - Google Patents
部分的に再配置されたオブジェクトのインスタンスに関連する読み込みバリア及び書き込みバリアを有する有界休止時間ガーベッジコレクションシステム及びそのガーベッジコレクション方法 Download PDFInfo
- Publication number
- JP4043528B2 JP4043528B2 JP50584599A JP50584599A JP4043528B2 JP 4043528 B2 JP4043528 B2 JP 4043528B2 JP 50584599 A JP50584599 A JP 50584599A JP 50584599 A JP50584599 A JP 50584599A JP 4043528 B2 JP4043528 B2 JP 4043528B2
- Authority
- JP
- Japan
- Prior art keywords
- instance
- store
- access
- memory
- barrier
- 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
-
- 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
-
- 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
-
- Y—GENERAL 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
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99956—File allocation
- Y10S707/99957—Garbage collection
Description
発明の技術分野
本発明はガーベッジコレクションに関し、特にガーベッジコレクタに於てジェネレーションを分離するためのシステム及び方法に関する。
関連技術の説明
多くのプログラム言語は、伝統的に、メモリの動的アロケーション(割り当て)及びディアロケーション(割り当て解除)の責任をプログラマの記憶に負わせていた。例えば、Cプログラム言語に於ては、mallocプロシージャによってまたはその擬似命令(variant)によってヒープからメモリを割り当てる。ポインタ変数pが与えられると、p=malloc(sizeof(SomeStruct))というステートメントに対応するマシン命令の実行により、SomeStructデータ構造を表すために必要なサイズのメモリオブジェクトのために新たに割り当てられた記憶領域にポインタ変数pをポイントさせる。使用後には、ポインタ変数pにより識別されるメモリオブジェクトは、free(p)を呼ぶことにより割り当てが解除される。Pascal及びC++言語は、メモリを明示的に割り当て及び割り当てを解除するための同様の機能を提供する。
残念ながら、動的に割り当てられた記憶領域は、特定の演算過程のためのルート参照位置のセットに、記憶領域に対する参照、即ちポインタが残されていないと、到達不能になる。このように到達不能であってしかも解放されていないメモリオブジェクトはガーベッジ(garbage)と呼ばれる。依然として参照されている間に、メモリオブジェクトと関連する記憶領域を割り当てを解除することもできる。この場合、ぶら下がり参照(dangling reference)が形成される。一般に、ダイナミックメモリを正しく管理することは困難である。多くのプログラム言語に於て、データ構造を、それを生成したプロシージャの後に渡って残存させるためにはヒープ割り当てが必要となる。これらのデータ構造が更なるプロシージャまたは機能に受け継がれると、プログラマやコンパイラが、それをどの時点で割り当て解除するのが安全であるかを判定することが困難或いは不可能となる。
この困難のために、プログラムによって最後に使用された後にヒープ割り当てを自動的に再利用するガーベッジコレクションが、ダイナミックメモリ管理の魅力的な代替モデルとなり得る。ガーベッジコレクションは、特にJAVA言語(JAVA及びJAVAに基づいた商標は、米国及びその他の国々に所在のSun Microsystems社の登録商標である)、Prolog、Lisp、Smalltalk,Scheme,Eiffel、Dylan、ML、Haskell、Miranda、Oberon等のアルゴリズム言語にとって特に魅力的である。これらの言語はデータ共有や、遅延実行などを行い、手続き型言語に比較して、より予測困難な実行順序を伴う。ガーベッジコレクション及びそのための古典的なアルゴリズムについては、Jones & Lins,“Garbage Collection:Algorithms for Automatic Dynamic Memory Manegement”,pp.1-41Wiley(1996)を参照されたい。
3つの古典的なガーベッジコレクション方法として、参照カウンティング(reference counting)、マークスイープ(mark-sweep)、コピーストレージ回復(copying storage reclamation)等の方法がある。第1の参照カウンティング法は、アクティブメモリオブジェクト或いはルート参照位置から各メモリオブジェクトへの参照即ちポインタの数のカウントを継続的に維持することに基づく。新たなメモリオブジェクトが割り当てられ、それに対してポインタが割り付けられると、メモリオブジェクトの参照カウントは1にセットされる。その後、このメモリオブジェクトにポインタが参照するようにセットされる度に、メモリオブジェクトの参照カウントが1ずつ増大させられる。メモリオブジェクトに対する参照が削除或いは上書きされると、参照カウントが1ずつ減らされる。参照カウントが0であるメモリオブジェクトは到達不能であって、ガーベッジとして収集される。参照カウント式のガーベッジコレクタの実施態様は、通常各メモリオブジェクトに参照カウントと呼ばれる追加のフィールドを有しており、新たなオブジェクト、オブジェクトの削除或いはポインタのアップデートの機能としてのカウンタの増減を行うサポートを有する。
それに対して、トレーシングコレクタ(tracing collector)法は、生きた即ち参照可能なメモリオブジェクトを特定するために、メモリの参照チェーンを横断することを含む。このようなトレーシングコレクタ法の一つとして、メモリの参照チェーンを横断して生きたメモリオブジェクトを識別しマークするようなマークスイープ法がある。マークされていないメモリはガーベッジであって、回収され、別のスイープ段階の間にフリープール(free pool)に戻される。マークスイープガーベッジコレクタ法は通常、各メモリオブジェクトにマークビットと呼ばれる追加のフィールドを有している。マークコンパクトコレクタ(mark-compact collector)は、伝統的なマークスイープ法に対して短縮(compaction)の機能を付加する。短縮は、生きたオブジェクトを再配置し、断片化を削減する利点がある。参照カウント法も短縮を用いることができる。
他のトレーシング方法、即ちコピーコレクションは、メモリまたはその一部を2つの半空間に分割し、一方に現在のデータを記憶し、他方に古いデータを記憶する。コピーガーベッジコレクションは、これらの2つの半空間の役割を逆転することにより開始される。コピーコレクタは次に、古い半空間FromSpace内の生きたオブジェクトを横断して、到達可能なオブジェクトを新たな半空間ToSpaceにコピーする。FromSpace内の全ての生きたオブジェクトを横断して、かつコピーした後、データ構造のレプリカがToSpace内に存在する。要するに、コピーコレクタはガーベッジの中から生きたオブジェクトを取り出すのである。コピーコレクションの利点となる副次的効果は、生きたオブジェクトがToSpace内に短縮され、断片化を減少させることである。
ジェネレーション的な方法は次の2つの発見に基づくものである。(1)メモリオブジェクトは通常早死にする。(2)トレーシング方法は比較的長生きのオブジェクトを横断して、コピー即ち再配置操作するためにかなりのリソースを消費する。ジェネレーション的なガーベッジコレクション方法は、ヒープを2つまたはそれ以上のジェネレーションに分け、オブジェクトを年齢によって区分し、若いジェネレーションに対して収集の努力を集中し或いは少なくともより熱心に収集する。若いジェネレーションは小さいものであるため、ガーベッジコレクションに関連する休止時間は平均的に短く保たれる。ジェネレーション内のガーベッジコレクションは、コピーコレクション或いはマークスイープコレクションのどちらかの方法によって行われる。メモリオブジェクトの若いジェネレーションから古いジェネレーションへの格上げには、コピーを伴う。
大形オブジェクトをコピーするコストのために、ジェネレーション的な手法の中には、大形オブジェクト領域を伴うものがある。これについては、Ungar & Jackson,“Tenuring Policies for Generation-based Storage Reclamation”,ACM SIGPLAN Notices,23(11),pp.1-17(1998),Ungar & Jackson,“An Adaptive Tenuring Policy for Generation Scavengers”,ACM Transactions on Programming Languages and Systems,14(1),pp.1-17(1992)を参照されたい。通常この方法では、大形オブジェクトを、ヒープのジェネレーション的部分に記憶されたヘッダー部分、及び大形オブジェクト領域に記憶されたボディ部分に分割する。ヘッダー部分は他のオブジェクトのように取り出されるが、ボディ部分をコピーする時にリソースは消費されない。Ungar及びJacksonの両氏は、330Kバイトを大形オブジェクト領域に割り当てることによって4つのファクターによって、休止時間を減らすことができることを発見した。
対話型アプリケーションまたはリアルタイムアプリケーションにとって、ガーベッジコレクションの休止時間が短いことは、重要な性能指数である。従来のガーベッジコレクタの定期的なトレーシングの実施は、使用されなくなったメモリを探すためにメモリを横断することにより、アプリケーションプログラムの実行が中断される。残念ながら、ハードなリアルタイムシステムは、オンタイム演算となるワーストケースの保証を必要とする。対話型システムでさえ、休止時間は有界で短くなければならない。いわゆるインクリメンタルガーベッジコレクション方法は、再利用の開始と停止時に起こる長い休止時間を避けようとするものであり、代わりにアプリケーションプログラム周期のインターリーブコレクションを用いる。この目的を達成するために、インクリメンタルコレクタは、コレクタ及びアプリケーションプログラム(一般には、ミューテータ(mutator)として呼ばれることが多い)によって、首尾一貫してヒープアクセスを管理しなければならない。例えば、マルチプロセッサのコンカレントコレクタは類似の性能を有するが、よりきびしい細粒度同期を必要とする。
一般に、インターリーブまたはコンカレント再配置コレクタには、多重読み込み装置、多重書き込み同期の問題がある。読み込みバリア及び書き込みバリア方法は、コレクタのその横断を中断するようにメモリオブジェクト参照グラフの連結性を変えることによりミューテータがガーベッジコレクションを中断させないように使用されてきた。これについては、以下を参照されたい。Steele,“Multiprocessing Compactifying Garbage Collection”,Communications of the ACM,18(9),pp.495-508(1975)(write barrier,mark-sweep-compact collection);Dijkstra et al.,“On-the-fly Garbage Collection”:An Exercise in Cooperation,Communications of the ACM,21(11),pp.965-975(1978)(write barrier);Kung & Song,“An Efficient Parallel Garbage Collection System and its Correctness Proof”,IEEE Symposium on Foundations of Computer Science,pp.120-131(1977)(write barrier);Baker,“List Processing in Real-time on a Serial Computer”,Communications of the ACM,21(4),pp.280-293(1978)(read barrier,copying collector);Brooks,“Trading Data Space for Reduced Time and Code Space in Real-time Garbage Collection on Stock Hardware”,in Conference Record of the 1984 ACM Symposium on Lisp and Functional Programming,Austin,Texas,pp.256-262(1984)(write barrier,copying collector);and Dawson,“Improved Effectiveness from a Real-time Lisp Garbage Collector”,Conference Record of the 1992 ACM symposium on Lisp and Functional Programming,San Fransisco,California,pp.159-167(1982)(write barrier,copying collector)。
Symbolics3600は、Bakerタイプのコピーコレクション及びジェネレーション間ポインタストアに割り込みをかけるために、ハードウエア読み込みバリア及び書き込みバリアサポートを提供する。これについては、Moon,“Architecture of the Symbolics 3600”,Proceedings of the 12th Annual International Symposium on Computer Architecture,pp.76-83(1985)を参照。MIT Lispマシン及びTI Explorerもまた、Bakerタイプのコピーコレクション用のハードウエア読み込みバリアサポートを提供する。Nilsen及びSchmidtの両氏は、米国特許第5,560,003号においてハードウエア読み込みバリア及び書き込みバリアを実行するガーベッジ収集メモリモジュールについて記述している。
コレクタのその横断を中断するようなメモリオブジェクト参照グラフの連結性の変更を防ぐための、ミューテータアクセスの管理という基本的な要求に加え、有界休止時間再配置コレクタは、大形及びまたはアクセス頻度の高い(popular)メモリオブジェクトの再配置操作にかかるなかなりの時間に対して対策を講じなければならない。ガーベッジコレクタは、大形オブジェクト領域に対する有界のインターバルとコンパチブルでない大形オブジェクトを追放することにより、メモリオブジェクトが有界のインターバル内で完全に再配置されることを確実とする。この大形オブジェクト領域は、再配置しない方法によって収集され得る。Ungar & Jackson,“Tenuring Policies for Generation-based Storage Reclamation”,ACM SINGPLAN Notices,23(11),pp.1-17(1988)を参照されたい。しかしながら、レージー(lazy)またはインクリメンタルコピー法は好ましい。
Bakerのソリューションは、大形オブジェクトのヘッダーに追加のリンクワード(link word)を含む。オブジェクトのFromSpaceインスタンスにおいて、このリンクワードは、オブジェクトのTopSpaceインスタンスに順方向アドレスを格納する。オブジェクトのTopSpaceインスタンスにおいて、このリンクワードは、オブジェクトのFromSpaceインスタンスに逆方向リンクを格納する。順方向及び逆方向リンクがセットされた後、オブジェクトがインクリメンタルコピーされる。小さいオブジェクトと同様に、大形オブジェクトのフィールドは、コピーされ、コピーされていないFromSpaceオブジェクトにポインタを戻すためにスキャンされる。Bakerは、ガーベッジコレクション変数、即ちscanによって識別されるスキャンした/スキャンしなかった境界を用いて、書き込みアクセスを部分的にコピーされた大形オブジェクトに進めた。追加のヘッダーワードを別にしたBaker計画のコストは、大形オブジェクトのTopSpaceインスタンスの中の記憶装置に対するソフトウエア書き込みバリアであった。アドレスがscanより大きい場合、書き込みは逆方向リンクを用いてOldSpaceインスタンスに実行される。そうでない場合は、NewSpaceインスタンスに書込みが実行される。
Nielsen及びSchmidtの両氏は、Bakerのコピーコレクタに基づいたハードウエアソリューションを提示した。特に、Nielsen及びSchmidtの両氏は、ハードウエア読み込みバリアが収集が完了したという錯覚を維持するガーベッジ収集メモリモジュールを提供した。ガーベッジ収集メモリモジュールのハードウエアアービタが、Bakerタイプのハードウエア読み込みバリアを提供し、さらにTopSpace内のオブジェクトインスタンスのコピーされていない部分にアクセスする読み込みバリア及び書き込みバリアを提供した。ガーベッジ収集メモリモジュールは、コピーされなかった部分の最初と最後を示すために、メモリアドレスレジスタ(memory address registers)を維持する。コピーされなかった部分への読み込みアクセス及び書き込みアクセスは、FromSpaceインスタンスに導かれる。
発明の概要
以上より、部分的に再配置された大型及び/又はアクセス頻度の高いメモリオブジェクトへのストアに対する書き込みバリア及びそこからのロードに対する読み込みバリアにより、再配置ガーベッジコレクタ(例えばコピーコレクタ、ジェネレーションコレクタ、及び短縮を行うコレクタを含む)の有界休止時間インプリメンテーションを容易に実現できるようになることが分かった。部分的に再配置されたオブジェクト識別子ストレージ及びそれに応ずる書き込み及び読み込みバリアによって、ガーベッジコレクタインプリメンテーションがミューテータプロセスに対する有界休止時間条件を満たすように中断されるようにすることにより、大型の及び/またはアクセス頻度の高いメモリの再配置操作が可能になる。詳述すると、このような構成により、重複したソース及び目標インスタンスをサポートするとともに、オブジェクトのインクリメンタルコピーとそれに対するポインタのインクリメンタル更新が容易になる。
書き込み及び読み込みバリアロジックがアクセス可能な“copy from”及び“copy to”識別子ストレージを含む部分的に再配置されたオブジェクト識別子ストアによって、部分的に再配置されたメモリオブジェクトの適切なFromSpace又はToSpaceインスタンスへのストア志向アクセス及びロード志向アクセスを、書き込み及び読み込みバリアロジックが、メモリオブジェクトの部分的再配置状態に基づいて選択的に方向付けすることが可能となる。実施例によっては、これらのバリアが部分的に再配置されたオブジェクトトラップハンドラにトラップをかける。他の実施例では、ソフトウェアトラップハンドラオーバーヘッドなしに書き込みバリア自身がアクセスを方向付けする。オプションの“how far”表示ストレージによって、部分的に再配置されたメモリオブジェクトのコピー済みの部分とコピーされていない部分との区別を、バリアロジック、又は部分的に再配置されたオブジェクトトラップハンドラが容易に行えるようになる。実施例によっては、部分的に再配置されたオブジェクトのコピーされた部分とコピーされていない部分の区別を行わなくても済む場合がある。更に、書き込みバリアがアクセス可能な“Copy to”及び“Copy From”識別子ストレージによって、ソフトウェアトラップハンドラオーバーヘッドなしに、部分的に再配置されたメモリオブジェクトのFromSpaceインスタンスとToSpaceインスタンスとの整合性を書き込みバリアロジックが維持できるようになるという利点が得られるが、実施例によってはそのようなソフトウェアトラップハンドラを含める場合もある。書き込みバリアロジックと、部分的に再配置されたオブジェクトトラップハンドラとの間で異なる機能を様々な形で割り振ることも企図されており、これは本発明の範囲に包含される。
【図面の簡単な説明】
本発明は、添付の図面を参照することにより、当業者であれば、その様々な目的、特徴及び利点と共に、より良く理解されるであろう。
第1A図及び第1B図(総称して第1図と呼ぶ)は、本発明に基づく有界休止時間ガーベッジコレクタのインプリメンテーションのためのサポートを含む仮想マシンハードウェアプロセッサの実施例を示すブロック図である。
第2図は、第1図のハードウェアプロセッサ及び例として与えられたJAVA仮想マシン実施態様のソフトウェア要素を含むJAVAアプリケーション環境のソフトウェア及びハードウェア要素間の相互的な(buildsupon)関係を示す。
第3図は、第1図のハードウェアプロセッサのいくつかの可能なアドオンを示す。
第4A図及び第4B図(総称して第4図と呼ぶ)は、コピーする前のコピーガーベッジコレクタのための半空間メモリ編成に従った好適なメモリオブジェクト参照グラフ及び部分的に再配置されたオブジェクト識別子ストアの一実施例を示す。
第5図は、大形オブジェクトをFromSpaceからToSpaceにコピーする間の第4図の半空間メモリ編成及び部分的に再配置されたオブジェクト識別子ストアを示す。
第6図は、コピーコレクタプロセスのアクセス、及び部分的に再配置された大形オブジェクトを含む収集されたメモリ領域のFromSpace及びToSpace部分に対するミューテータプロセスのアクセスを示す。第6図はまた、第4図及び第5図の部分的に再配置されたオブジェクト識別子ストアに関連する第1図のハードウエアプロセッサの書き込みバリアの一部を例示する。
第7図は、部分的に再配置されたオブジェクトのcopy-fromインスタンスへのストアに対するバリアと、そのためのトラップハンドラとを含む有界休止時間ガーベッジコレクションシステムの一実施例を示す。
第8図は、部分的に再配置されたオブジェクトのcopy-fromインスタンスへのストアに対するハードウエアバリアを含み、さらにcopy-fromインスタンス識別子とcopy-toインスタンス識別子を有する部分的に再配置されたオブジェクト識別子ストアを含む有界休止時間ガーベッジコレクションシステムの一実施例を示す。この実施例によれば、ストアを部分的に再配置されたオブジェクトのcopy-fromインスタンスとcopy-toインスタンスの両方に選択的にブロードキャスト(broadcast)する。
第9図は、部分的に再配置されたオブジェクトのcopy-fromインスタンスへのストアに対するハードウエアバリアを含み、さらにcopy-fromインスタンス識別子とcopy-toインスタンス識別子とcopied/uncopied境界識別子とを有する部分的に再配置されたオブジェクト識別子ストアを含む有界休止時間ガーベッジコレクションシステムの一実施例を示す。この実施例は、部分的に再配置されたオブジェクトの部分的に再配置された状態によって、ストアを選択的に方向付けまたはブロードキャストしてインクリメンタルコピーを可能にする。
第10図は、部分的に再配置されたオブジェクトのcopy-fromインスタンス及びcopy-toインスタンスへのストアに対するバリアを含み、さらにcopy-fromインスタンス識別子とcopy-toインスタンス識別子とを有する部分的に再配置されたオブジェクト識別子ストアを含む有界休止時間ガーベッジコレクションシステムの一実施例を示す。この実施例では、インクリメンタルコピー及びインクリメンタルポインタ更新が可能である。
第11図は、部分的に再配置されたオブジェクトのcopy-fromインスタンス及びcopy-toインスタンスへのストアに対するバリアを含み、さらにcopy-fromインスタンス識別子とcopy-toインスタンス識別子とcopied/uncopied境界識別子とガーベッジコレクション段階インディケータを有する部分的に再配置されたオブジェクト識別子ストアを含む有界休止時間ガーベッジコレクションシステムの一実施例を示す。この実施例は、ガーベッジコレクション段階及び部分的に再配置されたオブジェクトの部分的に再配置された状態によって、ストアを選択的に方向付けまたはブロードキャストしてインクリメンタルコピー及びインクリメンタルポインタ更新を可能にする。
第12図は、部分的に再配置されたオブジェクトのcopy-fromインスタンスからのロードに対する及びcopy-fromインスタンスへのストアに対するバリアを含み、さらにcopy-fromインスタンス識別子とガーベッジコレクション段階インディケータと部分的に再配置されたオブジェクトトラップハンドラとを有する部分的に再配置されたオブジェクト識別子ストアを含む、有界休止時間ガーベッジコレクションシステムの一実施例を示す。この実施例は、ストアを選択的に方向付けし直しまたはブロードキャストし、ロードを選択的に方向付けし直すことにより、インクリメンタルコピー及びインクリメンタルポインタ更新を可能にし、他の実施例ではさらにオーバーラッピングcopy-fromインスタンス及びオーバーラッピングcopy-toインスタンスも可能にする。
第13図は、部分的に再配置されたオブジェクトのcopy-fromインスタンスからのロードに対する及びcopy-fromインスタンスへのストアに対するバリアを含み、さらにcopy-fromインスタンス識別子とcopy-toインスタンス識別子とガーベッジコレクション段階インディケータとを有する部分的に再配置されたオブジェクト識別子ストアを含む、有界休止時間ガーベッジコレクションシステムの一実施例を示す。この実施例は、ストアを選択的に方向付けし直しまたはブロードキャストし、ロードを選択的に方向付けし直すことにより、インクリメンタルコピー及びインクリメンタルポインタ更新を可能にする。
第14図は、部分的に再配置されたオブジェクトのcopy-fromインスタンスからのロードに対する及びcopy-fromインスタンスへのストアに対するバリアを含み、さらにcopy-fromインスタンス識別子とcopy-toインスタンス識別子とcopied/uncopied境界識別子とガーベッジコレクション段階インディケータとを有する部分的に再配置されたオブジェクト識別子ストアを含む、有界休止時間ガーベッジコレクションシステムの一実施例を示す。この実施例は、ストアを選択的に方向付けし直し、ロードを選択的に方向付けし直すことにより、インクリメンタルコピー、インクリメンタルポインタ更新、及びcopy-fromインスタンスとcopy-toインスタンスのオーバーラッピングを可能にする。
第15図は、部分的に再配置された大形オブジェクトのFromSpace部分とToSpace部分のオーバーラッピングを可能にする有界休止時間ガーベッジコレクションシステムのオペレーションを示す。
第16図は、本発明の一実施例に従ったオブジェクト参照(objectref)フォーマットを示す。
第17A図は、本発明の一実施例に従ったオブジェクトフォーマットを示す。
第17B図は、本発明の一実施例に従って取り扱われた別のオブジェクトフォーマットを示す。
異なる図面に於ける同様の符合は、同様または同一の部分を示す。
好適実施例の説明
以下に、本発明を実施するための最良の形態と考えられる態様を詳しく説明する。この記載は、あくまでも本発明の例示であって、本発明の範囲を限定するものではないことを了解されたい。
再配置ガーベッジコレクタの有界休止時間のインプリメンテーションのための構造的サポートは、どの位置から(或る実施例ではどの位置に)大形オブジェクト及びまたはアクセス頻度の高いオブジェクトが再配置されたかを明確に示すストレージを含む。本明細書で用いる大形オブジェクトは、全てのサイズ、構造、または次ぎの内容のメモリオブジェクトである。その内容とは、それに対する参照の更新を含みうる完全なメモリオブジェクトの再配置が、ワーストケースの場合,ガーベッジコレクタインプリメンテーションの有界休止時間保証とコンパチブルでない。本発明に基づいた実施例は、大形オブジェクトの動作定義に対する保守性が広範囲に及ぶことを示す。例えば、或る実施例ではサイズのしきい値を用い、また別の実施例では大形オブジェクトの演算方法に参照カウントを含む。特に、かなりの部分がハードウエアに基づく別の実施例では、メモリオブジェクトのサイズに関係なく、ここに示す構造的サポートを用いる。本明細書で用いるアクセス頻度の高いオブジェクトは、それに対する参照の更新を含む完全なメモリオブジェクトの再配置が、最悪の場合、ガーベッジコレクタインプリメンテーションの有界休止時間保証とコンパチブルでない参照カウントをもつ全てのメモリオブジェクトである。以上のことから、本発明に基づいた実施例は、大形オブジェクトの動作定義に対する保守性が広範囲に及ぶことを示す。
一般に、本発明に基づく実施例は、大形オブジェクト及びアクセス頻度の高いオブジェクト並びに全てのオブジェクト(を含み大形オブジェクト及びまたはアクセス頻度の高いオブジェクトに限定されない)の再配置操作のために、ここに説明する構造的サポートを用いる。この構造的サポートは、ハードウエア、ソフトウエア、及びそれらの組み合わせに提供可能であるが、この構造的サポートを主にハードウエアに用いた実施例では通常、性能が向上し、かつメモリの要求の減少という優れた利点がある。このために、好適なハードウエアプロセッサの実施例をここに説明する。当業者は、本発明の説明に基づき、ここに記載しない別の実施例も後述の請求の範囲内であることを理解するであろう。
本明細書に於いて、再配置ガーベッジコレクタとは、オペレーションの一部としてメモリオブジェクトの再配置操作をする全てのガーベッジコレクタであり、例えば、コピーコレクタ、ジェネレーション的コレクタ、断片化の減少及び/または局所参照性の向上のための短縮を伴うコレクタまたはオブジェクト再配置操作を伴うコレクタを含む。このような再配置ガーベッジコレクタのリアルタイムまたは有界休止時間のインプリメンテーションは通常、このソフトウエアプロセスの演算がユーザープロセスアクティビティーを用いてインターリーブされるインクリメンタルガーベッジコレクション・ソフトウエアプロセスとして実施される。しかしながら、当業者は、ここでの説明に基づいたコンカレントガーベッジコレクションのインプリメンテーションを理解するであろう。さらに、並列コレクションのインプリメンテーションをサポートするために、多数の部分的に再配置されたオブジェクトを特定するストレージの実現を含む、好適な変更例を理解するであろう。
JAVA仮想マシン命令プロセッサの実施例
第1図は、仮想マシン命令プロセッサ100のハードウェアとして構成された実施例を示すもので、このハードウェア100は本発明に基づく有界休止時間再配置ガーベッジコレクションのためのサポートを含み、プロセッサ構造に依存しないJAVA仮想マシン命令を直接的に実行する。仮想マシン命令を実行する上でのハードウェアプロセッサ100の性能は、インテルPENTIUMマイクロプロセッサやサンマイクロシステムのULTRASPARCプロセッサ等のハイエンドCPUよりも高い(ULTRASPARCは、カリフォルニア州Mountain Viewに所在するSun-Mircrosystemsの商標であり、PENTIUMは、カリフォルニア州Sunnyvaleに所在するIntel Corpの商標である。)。更に、ハードウェアプロセッサ100の性能は、JAVAジャストインタイム(JIT)コンパイラを備えたハイエンドCPUよりも優れている。ハードウェアプロセッサ100は低コストであって、電力消費が少ない。そのため、ハードウェアプロセッサ100はポータブルの用途に適している。
ハードウェアプロセッサ100は、概ねハードウェアとしてJAVA仮想マシン命令プロセッサを構成するものであって、普通ならソフトウェアインタプリタに必要な25−50キロバイトの、リードオンリーメモリやランダムアクセスメモリ等のメモリストレージが不要となり、それを他の用途に転用することもができる。ガーベッジコレクションのためのハードウェアサポートは、さらにガーベッジコレクションのためのインラインコード(例えば、コンパイラにより提供される読み込み及びまたは書き込みバリアサポート)を低減し、限定されたメモリの利用状況を改善し、ガーベッジコレクションに要するオーバーヘッド或いは休止時間を削減することにより、メモリを比較的必要としないJAVA仮想マシン構造のためのさらなる利点を提供するものである。ネットワーク製品のためのインターネットチップや、携帯電話用プロセッサ、その他の通信用集積回路或いは他の低電力、低コストの用途例えば埋め込み(embedded)プロセッサや、ポータブル装置など大形メモリを伴う高コストが受け入れられないような環境に於いてハードウェアプロセッサ100が有利である。
大形メモリが可能であるような環境に於いても、ガーベッジコレクションのためのハードウェアサポートは、バリアの実施に関連するオーバヘッドを減少させ、メモリの有効利用を促進し、ガーベージコレクタの再配置操作のための休止時間を減少させることができる。特に、ハードウェアプロセッサ100は、JAVA仮想マシン構造の枠組みの中で、ガーベッジコレクション方法のための利点を提供する。しかしながら、本明細書の記載に基づき、当業者であれば、インタープリットされたJITコンパイラJAVA仮想マシン構造やその他の非JAVA仮想マシン構造を含む様々なJAVA仮想マシン構造の変形例に思い至るであろう。
本明細書に於いて、仮想マシンとは、命令セットを有し様々なメモリ領域を用いる、現実のコンピュータと同様な抽象的なコンピュータを意味する。仮想マシンの仕様は、仮想マシン構造によって実行されるプロセッサ命令に依存しない仮想マシン構造のセットを規定する。一般に、仮想マシンはハードウェアプロセッサ100のようなハードウェア、またはインタープリットされたJITコンパイラ構造の場合のようにソフトウェア、或いはハードウェア及びソフトウェアの両方に装備される。各仮想マシン命令は、実行されるべき特定の演算を規定する。仮想マシンは、仮想マシン命令を生成するために用いられる或いは仮想マシンの実現の基礎となるようなコンピュータ言語を理解する必要がない。仮想マシン命令のための特定のフォーマットを理解するのみでよい。ある実施例に於いては、仮想マシン命令はJAVA仮想マシン命令からなる。各JAVA仮想マシン命令は命令特定情報、オペランド、その他必要な情報をコード化する1つまたは複数のバイトを含む。
ある実施例に於いては、第1図のハードウェアプロセッサ100は、バイトコードを含むJAVA仮想マシン命令を取り扱う。ハードウェアプロセッサ100はバイトコードの多くを直接的に実行する。しかしながら、バイトコードのあるものの実行は、マイクロコードとして実行される。Lindholm & Yellen,“The JAVATMVirtual Machine Specification”(Addison-Wesley,1996),ISBN 0-201-63452-Xは、JAVA仮想マシン命令の例としてのセットを含み、この文献に言及することを以って、その内容の全てを本明細書の一部とするものとする。ハードウェアプロセッサ100によりサポートされた仮想マシン命令の特定のセットは、本発明の重要な要素ではない。しかしながら、仮想マシン命令に関して、当業者であれば仮想マシン命令の特定のセットを変更したり、JAVA仮想マシン使用を変更することができる。
ある実施例に於いては、ハードウェアプロセッサ100はI/Oバス及びメモリインターフェイスユニット110、命令キャッシュ125を含む命令キャッシュユニット120、非高速から高速トランスレータキャッシュ131を含む命令デコードユニット130、一体化された実行ユニット140、スタックキャッシュ155を含むスタック管理ユニット150、データキャッシュ165を含むデータキャッシュユニット160、及びプログラムカウンタ及びトラップ制御ロジック170を含む。本明細書に記載されているガーベッジコレクションのサポートの特徴は、主にプログラムカウンタ及びトラップ制御ロジック170に於けるある程度の追加のサポートを備えた実行ユニット140の整数ユニット142及びレジスタ144に見ることができ、ここで追加のサポートとしては、トラッピングストアに続き、プログラムカウンタに次のJAVA仮想マシン命令に進ませるためのサポートを含む。ある実施例に於いては、非高速から高速へのトランスレータキャッシュ131は、整数ユニット142のハードウェア書き込みバリアロジックのためのポインタ依存性を促進する。これらのユニットのそれぞれについて以下に詳しく説明する。
第2図は、例えばハードウェアプロセッサ100上に部分的に規定され、かつ部分的に実行可能とされるようなJAVAアプリケーション環境のソフトウェア及びハードウェア要素の相互関係を示している。JAVAアプリケーション/アプレットソフトウェア210は、AWTクラス241、ネット及びI/Oクラス242、JAVA OSウィンドウズ243、JAVA OSグラフィックス248、TCP244、NFS245、UDP246、IP247、イーサーネット222、キーボード249、及びマウス221ソフトウェア要素を含むアプレット/アプリケーションプログラミングインターフェイス220を規定するソフトウェア要素を利用するもので、ある実施例に於いてはJAVAバイトコードを含む。第2図に示された実施例に於いては、JAVA OSグラフィックス248及びイーサーネット222ソフトウェア要素はまた、ベースラインJAVA仮想マシン使用により規定されたものを越えた拡張バイトコードをも含む。埋め込みアプリケーションプログラミングインターフェイス(EAPI)230の要素は、ファンデーションクラス(foundation class)231、JAVA仮想マシン仕様(JAVA Virtual Machine Specification)に基づくJAVA仮想マシン構造250のハードウェア及びソフトウェア要素を含む。
JAVA仮想マシン構造250は、ハードウェアプロセッサ100と、JAVA仮想マシン命令を評価するために該プロセッサ上にて実行可能なトラップコードとを含む。さらに、JAVA仮想マシン構造250は、ガーベッジコレクションについて以下に記載されているようなポインタストアバイトコード及びメモリアクセスバリアを含むような拡張バイトコードのためのハードウェアサポートや、クラスローダ252、バイトコードベリファイア253、スレッドマネージャ254、ガーベッジコレクタ251ソフトウェア及びマイクロカーネル(micro kernel)255を含む。JAVA仮想マシン構造250は、JAVA仮想マシン仕様に適合した部分250a及び構造に依存する部分を含む。JAVA仮想マシン仕様はガーベッジコレクションが提供されることを特定しているが、どのようなガーベッジコレクション方法を使うかはその構造に依存する。
JAVA仮想マシン構造250の実施例としてのハードウェアプロセッサ100に関して以下に記載されているガーベッジコレクションの構造的特徴は、特にジェネレーション的ガーベッジコレクション方法に適合している。しかしながら、本明細書の記載に基づき、当業者は、非ジェネレーション的コレクタ構造、インクリメント式マーク短縮コレクタ、コピーコレクタの再配置操作に対して制限された休止時間サポートの応用が可能であることに容易に思い至り得るものである。
第3図は、より複雑なシステムを構成するためのハードウェアプロセッサ100に対するいくつかの可能なアドオンを示している。NTSCエンコーダ501、MPEG502、イーサーネットコントローラ503、VIS504、ISDN505、I/Oコントローラ506、ATMアセンブリ/リアセンブリ507及び無線リンク508からなる8つの機能のいずれをサポートする回路も、本発明のハードウェアプロセッサ100と同一のチップ内に集積化することができる。
さらに、当業者であれば容易に理解できるように、上記したアドオン回路のいずれかを備えたハードウェアプロセッサ100の実施例を含む、ハードウェアプロセッサ100が組み込まれた様々なコンピュータシステムに思い至り得ることができよう。例としてのコンピュータシステム100は、物理的なメモリ(RAM及びまたはROM)、コンピュータ読み取り可能なメディアのアクセスデバイス(ディスク、CD−ROM、テープ及びまたはメモリ技術に基づくコンピュータ読み取り可能メディアアクセスデバイスなど)、入出力インターフェイス(キーボード及びまたはポインティングデバイス或いはディスプレイデバイスなどのためのインターフェイス)及び通信デバイスまたはインターフェイスを含む。適当な通信デバイス及びまたはインターフェイスとしては、ネットワーク或いはテレフォニー(telephony)に基づく通信、公共スイッチネットワークの有線または無線のものを含む通信ネットワークとのインターフェイス或いは専用ネットワークへのインターフェイスを含む。本発明のある実施例に於いては、JAVAバイトコードを含む命令ストリームが、ハードウェアプロセッサ100により実行されるべく、このような通信デバイスまたはインターフェイスを介して送信または受信される。
ガーベッジコレクションのための構造的サポート
ハードウェアプロセッサ100は、該プロセッサ上で実行可能なガーベッジコレクションソフトウェアトして実現される再配置コレクタ方法を含む様々なガーベッジコレクション方法のための構造的サポートを提供する。特に、ハードウエアプロセッサ100は、部分的に再配置されたオブジェクト識別子ストア及びバリアサポートを含む。或る実施例に於いては、このようなバリアサポートは、プログラマが選択可能なストアのフィルタリングのバリアサポート及びまたはポインタストアトラッピングを促進するポインタ特定バイトコードに対するストアバイトコードの実行時間解決のサポートを含む。詳細については、PCT国際出願番号PCT/US98/07622、名称「GENERATION ISOLATION SYSTEM AND METHOD FOR GARBAGE COLLECTION」を参照されたい、またこの文献に言及することを以って、その内容の全てを本明細書の一部とするものとする。
部分的に再配置されたオブジェクト識別子ストア
第4A図は、fromフィールド410、toフィールド412及びhow farフィールド413を含む部分的に再配置されたオブジェクト識別子ストア410の一実施例を示す。第4B図は、コピーコレクタ方法に従ったメモリストレージのFromSpace420及びToSpace430部分を示す。ジェネレーション的コレクタインプリメンテーションに於いて、FromSpace420及びToSpace430部分は、単一ジェネレーションの半空間、または若い及び古いジェネレーション空間のそれぞれの部分であり得る。別法では、FromSpace420及びToSpace430部分は、非ジェネレーション的コレクション空間の半空間であり得る。さらに、オーバーラップするまたは隣接する或いは隣接しないFromSpace420及びToSpace430部分は、必ずしも一定のサイズまたはメモリストレージ内の一定の位置にある必要はない。さらに別の実施例では、多数のFromSpace及びToSpace部分は、好適に変更された部分的に再配置されたオブジェクト識別子ストア410及び本明細書で説明する各バリアによってサポートされる。第4B図は、ToSpace430にコピーされる前の大形オブジェクト450及び生きたメモリオブジェクトA,B、Cの第1の参照状態を示す。ルートポインタセット440は、スタックキャッシュ155に表されるローカル変数ストレージまたは及びオペランドスタックのエントリからのポインタを含む、参照構造の中の全てのルートポインタセットを表す。
第5図は、大形オブジェクト450の再配置操作が中断中の部分的に再配置されたオブジェクト識別子ストア410、FromSpace420、及びToSpace430の第2の参照状態を示す。生きたメモリオブジェクトA及びBは、対応するToSpace430のインスタンスA'及びB'にコピーされる。コピーを中断すると、大形オブジェクト450は、コピーされた部分551及び完全にはコピーされていない部分552を含む。大形オブジェクト450のコピーされた部分551の内容は、大形オブジェクト450のインスタンスであるToSpace430の対応する部分551aにコピーされる。大形オブジェクト450の完全にはコピーされないで残った部分のためのToSpace430ストレージが部分552aとして示される。fromフィールド411がFromSpace420の大形オブジェクト450を識別し、toフィールド412が大形オブジェクト450の対応する部分的に再配置されたインスタンス450aを識別し、howfarフィールド413が大形オブジェクト450のコピーされた部分551とコピーされなかった部分552との間の境界を特定する。オーバーラッピングコピー方向フィールド(図示せず)は、随意選択である。一実施例に於いて、このコピー方向フィールドは、オーバーラップしたfromフィールド411とtoフィールド412のコピーの順方向または逆方向を示す状態のコピー方向ビットを含む。別の実施例に於いては、コピー方向は、fromフィールド411とtoフィールド412の相対値によって求められることが当業者には理解できよう。
howfarフィールド413は、大形オブジェクトコピーの進捗状態を示し、及びまたは、書きこみバリアハードウエアと部分的に再配置されたオブジェクトトラップハンドラが、部分的にコピーされた大形オブジェクトへのミューテータアクセスを適切に取り扱う(handle)ことを可能にする。第5図の実施例に於いて、howfarフィールド413は、コピーされた部分551とコピーされなかった部分552間の境界のメモリのアドレスを示す。当業者はこの説明から、例えば、fromフィールド411によって示されるメモリ位置のインデックスオフ(index off)、大形オブジェクト450のToSpaceインスタンス550aの対応する境界の表示を含む種々の別のコード化が可能なことを理解するであろう。
ここで第6図を参照すると、部分的に再配置されたオブジェクト識別子ストア410が、ミューテータプロセス610及びガーベッジコレクタプロセス620のコンテキストに示されている。第6図の実施例において、ミューテータプロセス610及びガーベッジコレクタプロセス620のそれぞれが、ハードウエアプロセス100によって実行可能なJAVA仮想マシン命令によって規定される。ガーベッジコレクタプロセス620は全ての再配置コレクタを含む。後続の説明は、第5図を参照して上記のとおり説明した半空間コピーコレクタであるが、当業者は他の再配置コレクタへの適用性も理解するであろう。大形オブジェクト450をFromSpace420からToSpace430にコピーする間に、ガーベッジコレクタプロセス620が収集されたスペース630から読み込み、またコレクション空間630に書き込む。
一実施例において、ガーベッジコレクタプロセス620が、大形オブジェクト450のコピーの始めにfromフィールド411及びtoフィールド412を更新し、コピー中にhowfarフィールド413も更新することにより、ミューテータプロセス610によって中断されると、howfarフィールド413がコピーされた部分551とコピーされなかった部分552との間の境界を示す。コンカレントミューテータプロセス610及びガーベッジコレクタプロセス620の実行(例、マルチプロセッサ上での)の実施例に於いては、howfarフィールド413のロック機能を備える。従って、当業者は好適な方法を理解するであろう。別の実施例では、中断時の更新を選択してhowfarフィールド413のインクリメンタル更新を備えないこともある。
ミューテータプロセス610は、収集されたスペース630を含むメモリから読み込み、及びそのメモリに書き込みをする。一実施例において、ハードウエアプロセス100は、fromフィールド411、toフィールド412またはその両方の内容に対してオブジェクト参照情報(例、objectref)を比較するバリア660のための整数ユニット142サポートを含む。fromフィールド411の内容との一致が、参照したオブジェクトが部分的に再配置された大形オブジェクト450のFromSpace420であることを示す。toフィールド412の内容との一致が、参照したオブジェクトが部分的にコピーされたToSpace430のインスタンス450aであることを示す。或る実施例に於いては、参照したオブジェクト内の特定のフィールドオフセットの評価は、参照したオブジェクトのコピーされた及びコピーされなかった部分のバリア660取り扱いを洗練するためのhowfarフィールド413の内容と比較される。
後述の種々の実施例に於いて、バリア660は、部分的に再配置されたオブジェクト識別子ストア410に応答する書きこみバリアサポートを含む。或る実施例に於いて、バリア660はまた、部分的に再配置されたオブジェクト識別子ストア410に応答する読み込みバリアサポートを含む。或る実施例に於いて、バリア660は、好適にトラッピングアクセスを取り扱う(例、書きこみアクセスのブロードキャスト、書き込みアクセスの方向付けのし直し、読み込みアクセスの方向付けのし直し、または通常のアクセスを許可することによる)部分的に再配置されたオブジェクトトラップハンドラソフトウエアにトラッピングするためのハードウエア読み込み及びまたは書き込みバリアサポートを含む。別の実施例においては、ハードウエア読み込み及びまたは書きこみバリア自体が、ソフトウエアトラップハンドラのオーバーヘッドなしに、そのような適切な取り扱いを提供する。
或る実施例に於いて、有界休止時間再配置は、それに対するポインタ更新がオブジェクト参照取り扱いを介している間に、大形及びまたはアクセス頻度の高いオブジェクトのインクリメンタルコピーを可能にするバリア660の要素によって提供される。このような実施例に於いて、アクセス頻度の高いオブジェクトへのポインタ更新でさえ、シングルポインタ即ちオブジェクト参照取り扱いの更新によって単に提供される。別の実施例に於いて、バリア660の要素によって提供される有界休止時間再配置は、アクセス頻度の高いオブジェクト(及び可能性としては大形オブジェクトも)に対するポインタのインクリメンタル更新のためのサポートを含む。ここで用いる有界休止時間は、コピー及びポインタ更新を含む。当業者は、大形オブジェクトの有界休止時間の再配置、アクセス頻度の高いオブジェクトの有界休止時間の再配置、及びこの両方のオブジェクトの有界休止時間再配置に上記した実施例が適用できることを理解するであろう。取り扱われた及び取り扱われないオブジェクト参照を以下に詳述する。
ハードウエアプロセッサ100の特定の一実施例によってサポートされるガーベッジコレクション方法によって、書き込み及びまたは読み込みバリアサポートが、そのコレクタの横断を中断するようにメモリオブジェクト参照グラフの連結性を変えることによりミューテータプロセス610がガーベッジコレクタプロセス620を中断しないように提供される。例えば、ハードウエアプロセッサ100の一実施例に於いて、ジェネレーション間ポインタストア、全てのポインタストア、及び全てのポインタストア(それぞれのフィルターされた擬似バリアのサポートを含む)に対するプログラマが選択可能なハードウエア書き込みバリアが、前述した下記の文献に詳述されるように提供される。PCT国際出願番号PCT/US98/07622、名称「GENERATION ISOLATION SYSTEM AND METHOD FOR GARBAGE COLLECTION」。バリア660の一実施例に於いて、このような追加のバリアのためのサポートが、部分的に再配置された大形オブジェクトのストアの中に上記したバリアとともに集積化される。
第1図に従った実施例に於いて、部分的に再配置されたオブジェクトトラップハンドラは、ハードウエアプロセッサ100上で実行可能で、かつプログラムカウンタ及びトラップ制御ロジック170によって開始される、JAVA仮想マシン命令バイトコードを含む。例えば部分的に再配置されたオブジェクトトラップを含むガーベッジコレクショントラップは、トラッピング書き込みがそれ自体を評価する前に、トリガされる。したがって、プロセッサが無限にトラッピングするのを防ぐために、部分的に再配置されたオブジェクトトラップハンドラ650が、追加のガーベッジコレクション関連機能と共にトラッピング書き込みをエミュレートする。一実施例に於いて、プログラムカウンタ及びトラップ制御ロジック170によって、プログラムカウンタがトラッピング書き込みの後JAVA仮想マシンの次ぎなる命令に強制される。詳細な説明に基づき、当業者は、強制される一貫性次第で、部分的に再配置されたオブジェクトトラップハンドラのための種々の有効な形態があることを理解するであろう。
ガーベッジコレクションは、fromフィールド411、toフィールド412及びhowfarフィールド413を含む部分的に再配置されたオブジェクト識別子ストア410の第6図の実施例に関連して、及び部分的に再配置されたオブジェクトトラップハンドラを含みうるバリア660のコンテキストの中で上記の通り説明したが、他にも様々な好適な実施例がある。これらの多くの他の実施例において、部分的に再配置されたオブジェクトトラップハンドラを排除可能であり、かつハードウエアバリアサポートによるミューテータプロセスアクセスの適切な取り扱いも可能であり、トラップハンドラに関連するオーバーヘッドを減少できる。実施例の説明に基づき、当業者は、その他の変更例、組み合わせ等が本請求項の範囲内であることを理解するであろう。
Copy-Fromインスタンス識別子ストアに関連する書き込みバリア
第7図は、書き込みバリアに関連するCopy-Fromレジスタフィールドを有する実施例を示す。詳述すると、第7図の実施例は、部分的に再配置されたオブジェクト識別子ストア410(第4図参照)のfromフィールド411、ハードウェア書き込みバリア740、及び部分的に再配置されたオブジェクトトラップハンドラ750を有する。第7図の実施例では、fromフィールド411が、ハードウェアプロセッサ100のレジスタ144に表現される。ミューテータプロセス610、ガーベッジコレクタプロセス620、及び部分的に再配置されたオブジェクトトラップハンドラ650は、ハードウェアプロセッサ100上で実行可能なソフトウェアを含む。この実施例では、大形のオブジェクトのインクリメンタルコピーが容易である。しかし、追加のサポートがないと、この実施例は、アクセス頻度が高い、再配置されたオブジェクトのToSpace430インスタンスに対する多数のポインタのインクリメンタル更新には適さない。それにも関わらず、例えば後に第17B図に関連して説明するような取り扱いを介してオブジェクトが参照されるガーベッジコレクションシステムにおいては、このような実施例によってハードウェアに対する要求が少なくなり、この実施例を有界休止時間再配置操作のために用いることができる。ToSpace430インスタンスに対する1回の取り扱いの更新が非常に少ない場合が多いからである。
ミューテータプロセス610は、収集された空間630からの読み込みアクセス及びそこへの書き込みアクセスを行う。読み込みアクセスは、ガーベッジコレクションサポートによる影響を受けない。しかし、書き込みアクセスは、ハードウェア書き込みバリア740によって選択的にトラップをかけられる。ハードウェア書き込みバリア740は、fromフィールド411のコンテンツと、書き込みアクセス701に関連する目標objectrefとの間の一致に応じて部分的に再配置されたオブジェクトトラップハンドラ750を起動する。この実施例では、部分的に再配置されたオブジェクトトラップハンドラ750が、例えば他の場合にはtoフィールド412にストアされるようなCopy-To行先情報に対するメモリストレージを決定し、必要に応じてそれを維持する。更に、ガーベッジコレクションソフトウェアは、他の場合にはhowfarフィールド413にストアされるようなhowfar情報に対するストレージを必要に応じて維持し得る。ミューテータプロセス610が、大形のオブジェクトのFromSpace420インスタンスにデータをストアする時、ストアデータは、copy-fromインスタンス450とcopy-toインスタンス450Aの双方にブロードキャストされるか、或いは、HowFar情報に対するメモリストレージが与えられるような実施例では、howfarストレージを調べて、大形のオブジェクトのストア済みのtoフィールドがすでにコピーされている場合にはこのストアは両インスタンスにブロードキャストされ、そうでない場合にはcopy-fromインスタンス450のみに向けられる。部分的に再配置されたオブジェクトトラップハンドラ750が使用可能なtoフィールド及びhowfarフィールドにストアされる変数751の更新を、ガーベッジコレクタプロセス620が行う際に利用できる様々な方法を当業者は理解できよう。更新701は、そのような適切な方法の何れかによって行われる。
上述のように、ガーベッジコレクタプロセス620は、部分的に再配置されたオブジェクト識別子ストア410のfromフィールド411を更新して、大形オブジェクトのcopy-fromインスタンス450を指定する。この実施例では、コピーの終了後大形オブジェクトに対する取り扱いが更新されるまで、ミューテータプロセス610がcopy-toインスタンスに対するポインタのいずれも使用できない。従って、copy-toインスタンス450Aへのアクセスに対するバリアを維持する必要はない。この実施例は、重複したcopy-from及びcopy-toインスタンス用には構成されていないが、重複インスタンスに対するサポートは、多くの再配置操作によるコレクタメソッド(relocating collector method)、例えばジェネレーション式のガーベッジ除去、つまりコピーによるコレクタメソッド(generational scavenging or copying collector method)では、重複インスタンスに対するサポートは不要である。
或る実施例では、ハードウェア書き込みバリア747が、ストア指向バイトコード(例えばputfield_quick,putfield,aastore等)の評価を行う整数ユニット142(第1図)ロジックによって構成される。このような実施例では、ロジックで実現したハードウェア書き込みバリア740がfromフィールド411のコンテンツによって識別されたCopy-Fromインスタンスへの書き込みにトラップを入れる。例えば、ハードウェア書き込みバリア640Aの所望の挙動は以下の論理式で記述される。
ここでgc_notifyはトラップハンドラの一例である。上述したようなジェネレーション間ポインタストアトラップのような他の書き込みバリア機能を組込んでいるロジックインプリメンテーションを含む、種々の適切なロジックインプリメンテーションを、当業者は理解されよう。How far情報は必要に応じてレジスタ144(第4図参照、第7図には示されていない)におけるhowfarフィールド413として提供され得、このHowfar情報によって、ハードウェア書き込みバリア740によるトラップをブロードキャストが必要であるような状況のみに対してより良く適合させることができ、もって部分的に再配置されたオブジェクトトラップハンドラ750の起動に関連するオーバーヘッドを減らすことができる。
第8図は、書き込みバリア840に関連するCopy-Fromレジスタフィールド(例えばfromフィールド411)に加えてCopy-Toレジスタフィールド(例えばtoフィールド412)を備えた実施例を示す。第8図の実施例は、fromフィールド411のコンテンツによって識別されたオブジェクトのフィールドへのストアに対する書き込みバリアを提供し、且つ部分的に再配置されたオブジェクトトラップハンドラ750が取り除かれ、それに関連するオーバーヘッドが無くなるという利点を有する。この実施例では、大形のオブジェクトのインクリメンタル(有界休止時間)コピーが容易であるが、第7図の実施例のように、コピーされたオブジェクトのToSpace430インスタンスに対する数多くのポインタの有界休止時間更新には適さない。前の実施例のように、取り扱われるオブジェクト参照はこの制限を緩和することができ、追加のレベルの間接化技法(an additional level of indirection)の負担があるにも関わらず、たとえアクセス頻度の高い大形のオブジェクトであってもその全体の有界休止時間再配置ができるようになる。
例えばレジスタ144におけるtoフィールド412のように、ハードウェアにおけるCopy-Toレジスタフィールドを維持することにより、Copy-Fromインスタンスへの書き込みアクセスは、ソフトウェアトラップハンドラの介入なしに、ハードウェア書き込みバリア840によりCopy-FromインスタンスとCopy-Toインスタンスの双方にブロードキャストできる。或る実施例では、ハードウェア書き込みバリア840は、ストア指向バイトコードの評価を行う整数ユニット142(第1図)ロジックにより提供される。このような実施例では、ロジックで実現したハードウェア書き込みバリア840が、toフィールド412のコンテンツ及びobjectrefによりそれぞれ特定されたCopy-Toインスタンス及びCopy-Fromインスタンスの双方にstore_detaをブロードキャストする。ハードウェア書き込みバリア840の一例は、以下の論理式により記述される。
ここでoffsetは、そのストア指向バイトコードに関連する目標フィールドの大形のオプジェクトへのオフセットである。上述のような、ジェネレーション間ポインタストアトラップのような他の書き込みバリア機能を組込んでいるロジックインプリメンテーションを含む、種々の適切なロジックインプリメンテーションを、当業者は理解されよう。ハードウェア書き込みバリア840がtoフィールド412を使用可能であることから、このブロードキャストはハードウェアで行うことができ、ソフトウェアトラップオーバーヘッドはなくなる。
第9図は、ハードウェア書き込みバリア940に関連するCopy-Fromレジスタフィールド(例えばfromフィールド411)に加えてCopy-To及びHow-Farレジスタフィールド(toフィールド412及びhowfarフィールド413)を備える実施例を示す。第9図の実施例は、fromフィールド411のコンテンツにより識別されるオブジェクトのフィールドへのストアに対する書き込みバリアを提供し、部分的に再配置されたオブジェクトトラップハンドラ650を取り除き、それに関連するオーバーヘッドをなくすと共に、ハードウェア書き込みバリア490が大形のオブジェクトのまだコピーされていない部分へのストアのブロードキャストなしで済ませることできるという利点を有する。上述の実施例のように、この実施例では、大形のオブジェクトのインクリメンタルコピーが容易であるが、コピーされたオブジェクトのToSpace430インスタンスに対する多数のポインタの有界休止時間更新には適さない。上述のように、取り扱われるオブジェクト参照は、この制限を緩和することができ、追加のレベルの間接化技法の負担があるにも関わらず、たとえアクセス頻度の高い大形のオブジェクトであってもその全体の有界休止時間再配置ができるようになる。
例えばレジスタ144におけるtoフィールド412のようなハードウェアにおけるCopy-Toレジスタフィールドを維持することにより、Copy-Fromインスタンスへの書き込みアクセスは、ハードウェア書き込みバリア490によりCopy-Fromインスタンス及びCopy-Toインスタンスの双方にブロードキャストすることができる。更に、例えばレジスタ144におけるhowfarフィールド413のようなハードウェアにおけるHow-Farレジスタフィールドを維持することにより、ブロードキャストを、その書き込みアクセスのために書き込みアクセスの特定の目標フィールドが既にToSpace430にコピーされた書き込みアクセスに制限され得る。何れの場合でも、部分的に再配置されたオブジェクトへの書き込みアクセスの取り扱いは、ソフトウェアトラップハンドラの介入なしに行うことができる。或る実施例では、ハードウェア書き込みバリア490が、ストア指向バイトコードの評価を行う整数ユニット142(第1図)ロジックにより提供される。ロジックで実現したハードウェア書き込みバリア490は、目標オブジェクトフィールドが大形のオブジェクトの既にコピーされた部分である場合にはstore_detaをCopy-FromインスタンスとCopy-Toインスタンスの双方にブロードキャストし、目標オブジェクトフィールドが大形のオブジェクトのまだコピーされていない部分である場合にはstore_detaをCopy-Fromインスタンスへ向ける。ハードウェア書き込みバリア940の一例は、以下の論理式で記述される。
ここでoffsetは、そのストア指向バイトコードに関連する目標フィールドの大形のオブジェクトへのオフセットである。幾つかの実施例では、store_detaをCopy-Fromインスタンスに向けることは、通常ハードウェア書き込みバリア490の介入なしに、単に書き込みアクセスを終了できるようにすることによって行うことができる。上述のような、ジェネレーション間ポインタストアトラップのような他の書き込みバリア機能を組込んでいるロジックインプリメンテーションを含む、種々の適切なロジックインプリメンテーションを、当業者は理解されよう。ハードウェア書き込みバリア940がhowfarフィールド413を使用可能であることから、ハードウェア書き込みバリア940は、store_detaのCopy-Toインスタンスへの書き込みを、選択的に行わずに済ませることができる。このような簡単な最適化によって、2つの書き込みをブロードキャストするのではなくただ1つの書き込みを行うようにすることにより処理能力を高めることができる。
Copy-From及びCopy-Toインスタンス識別子ストアの双方に関連する書き込みバリア
ここで第10図及び第11図を参照して別の実施例について説明する。前述した幾つかの実施例と同様に、これらの実施例も、ソフトウェアトラップハンドラの介入なしに、部分的に再配置された大形のオブジェクトのFromSpace420インスタンスへの適切な書き込みを取り扱うために、ハードウェアサポート(例えばハードウェア書き込みバリアや部分的に再配置されたオブジェクト識別子ストア410)を利用する。しかし、更に、これらの実施例では、部分的に再配置された大形のオブジェクトのToSpace430インスタンスへの書き込みに対するバリアも提供する。このようにして、これらの実施例は、取り扱われるオブジェクト参照なしに、大形で及び/またはアクセス頻度の高いオブジェクトの全体の有界休止時間再配置のための、大形のオブジェクトのインクリメンタルコピーと、アクセス頻度の高いオブジェクトに対するポインタのインクリメンタル更新の双方をサポートしている。
第10図及び第11図の実施例では、ガーベッジコレクタプロセス620が大形のオブジェクトに対するポインタ(即ちobjectrefs)のインクリメンタル更新を行う。FromSpace420インスタンスかToSpace430インスタンスの何れかへのミューテータプロセス610書き込みアクセスは、ハードウェア書き込みバリア、例えばハードウェア書き込みバリア1040かハードウェア書き込みバリア1140によってブロードキャスト(つまり適切な方向づけ)されて、この2つのインスタンスが“in sync(同期した状態)”に維持されると共にobjectrefsが更新される。この2つのインスタンスがin syncに維持されることから、メモリ参照の構造体は、objectrefsの或るものがFromSpace420インスタンスを参照し、或るものは対応するToSpace430インスタンスを参照するような参照状態に対して頑強(robust)である。大形のオプジェクトを参照するobjectrefsの有界休止時間更新では、そのようなobjectrefsが、(FromSpace420インスタンスではなく)ToSpace430インスタンスを参照することになるようなインクリメンタル更新が行われる。第10図及び第11図の実施例では、FromSpace420インスタンスとToSpace430インスタンスが重複し得ないということに注意されたい。
第10図では、ハードウェア書き込みバリア1040がcopy-fromインスタンス450かcopy-toインスタンス450Aの何れかへの書き込みアクセスに対するバリアを提供する。ハードウェア書き込みバリア1040は、ハードウェア書き込みバリア840について前に説明したようなインクリメンタル有界休止時間コピーをサポートする。しかし、ハードウェア書き込みバリア1040は、Copy-Toレジスタフィールド(例えばtoフィールド412)にも応答する。Copy-fromインスタンス450かcopy-toインスタンス450Aの何れかへの書き込みアクセスを、copy-fromインスタンス450とcopy-toインスタンス450Aの双方にブロードキャストし、この2つのインスタンスのデータ状態を同期させる。このようにして、部分的に再配置された大形のオブジェクトに対するobjectrefsをインクリメンタル更新することができる。何れかのインスタンスへの読み込みアクセスが同じフィールド状態に解決することになるからである。
或る実施例では、ハードウェア書き込みバリア1040が、ストア指向バイトコードの評価を行う整数ユニット142(第1図)ロジックにより提供される。このような実施例では、ロジックで実現したハードウェア書き込みバリア1040が、それぞれfromフィールド411とtoフィールド412のコンテンツによって特定されたcopy-fromインスタンス及びcopy-toインスタンスの双方にstore_detaをブロードキャストする。ハードウェア書き込みバリア1040の一例は、以下の論理式で記述される。
ここでoffsetは、そのストア指向バイトコードに関連する目標フィールドの大形のオブジェクトへのオフセットである。上述のようなジェネレーション間ポインタストアトラップのような他の書き込みバリア機能を組み込んでいるロジックインプリメンテーションを含む、種々の適切なロジックインプリメンテーションを、当業者は理解されよう。ハードウェア書き込みバリア1040がfromフィールド411及びtoフィールド412を使用可能であることから、それによって特定されたcopy-fromインスタンス450又はcopy-toインスタンス450Aのそれぞれへのストアが認識可能となり、両インスタンスへのブロードキャストを、ソフトウェアトラップオーバーヘッドなしでハードウェアにおいて行うことが可能になる。
第11図は、How-Farレジスタフィールド(例えばhowfarフィールド413)及びMode表示(例えばレジスタ144のmodeフィールド1114)を加えた実施例を示す。第10図の実施例の場合のように、ハードウェア書き込みバリア1140は、copy-fromインスタンス450かcopy-toインスタンス450Aの何れかへの書き込みアクセスに対するバリアを提供する。ハードウェア書き込みバリア1140は、FromSpace420インスタンス及びToSpace430インスタンスのコピーされた部分をin syncの状態に維持することにより、インクリメンタル有界休止時間コピーをサポートする。第11図の実施例では、ハードウェア書き込みバリア1140によって、modeフィールド1114のCOPY状態によって表示されるコピー段階の間に、ハードウェアプロセッサ100が、大形のオブジェクトのまだコピーされていない部分へのストアのブロードキャストを行わなくて済むようになるという利点がある。しかし、modeフィールド1114のPTR_UPDATE状態によって表示されるポインタ更新段階の間においては、copy-fromインスタンス450かcopy-toインスタンス450Aの何れかへの書き込みアクセスは、copy-fromインスタンス450及びcopy-to450Aの双方にブロードキャストされる。ガーベッジコレクタプロセス620は、その時点での大形オブジェクト再配置操作の段階に対応するようにmodeフィールド1114の表示を更新する。
或る実施例では、ハードウェア書き込みバリア1140が、ストア指向バイトコードの評価を行う整数ユニット142(第1図)ロジックにより提供される。このような実施例では、目標オブジェクトフィールドが大形のオブジェクトの既にコピーされた部分にある場合、或いは大形のオブジェクトが完全にコピーされて再配置操作がポインタ更新段階に入っている場合には、ロジックで実現したハードウェア書き込みバリア1140はstore_detaをCopy-FromインスタンスとCopy-Toインスタンスの双方にブロードキャストする。コピー段階の間では、目標オブジェクトフィールドが大形のオブジェクトのまだコピーされていない部分にある場合には、ロジックで実現したハードウェア書き込みバリア1140が、store_detaをCopy-Fromインスタンスに向ける。ハードウェア書き込みバリア1140の一例は、以下の論理式で記述される。
ここでmodeフィールド1114の状態、MODEは、再配置操作の段階(例えばCOPY又はPTR_UPDATE)を表示し、offsetは、そのストア指向バイトコードに関連する目標フィールドの大形のオブジェクトへのオフセットである。上述したものようなジェネレーション間ポインタストアトラップのような他の書き込みバリア機能を組込んでいるロジックインプリメンテーションを含む、種々の適切なロジックインプリメンテーションを、当業者は理解されよう。ハードウェア書き込みバリア1140がhowfarフィールド413とmodeフィールド1114を使用可能であることから、ハードウェア書き込みバリア1140は、ポインタ更新段階の間に書き込みをブロードキャストすると共に、大形のオブジェクトの再配置操作のコピー段階の間にstore_detaのCopy-Toインスタンスへの書き込みを選択的に行わないで済ますことが可能である。この簡単な最適化によって、コピー段階の間に2つの書き込みをブロードキャストするのではなく、書き込みを1つだけ行うことによって処理能力を改善することができる。更に、再配置操作モードは、ガーベッジコレクタプロセス620が、howfarフィールド413の状態におけるコピー段階の終了をコード化できるようにすることによって表示することができる。上述の論理式において、howfarフィールド413の値をゼロ(0)以下とすることでコピー段階の完了をコード化し、これによりmodeフィールド1114を不要にすることができることを、当業者は理解されよう。
Copy-Fromインスタンス識別子ストアに関連する読み込み及び書き込みバリア
ここで第12図〜第14図を参照して別の実施例について説明する。前述した幾つかの実施例と同様に、これらの実施例では、部分的に再配置された大形のオブジェクトのFromSpace420インスタンスへの書き込みを適切に取り扱うためのハードウェアサポート(例えばハードウェア書き込みバリア及び部分的に再配置されたオブジェクト識別子ストア410)を利用する。しかし、これらの実施例では、部分的に再配置された大形のオブジェクトのFromSpace420インスタンスからの読み込みに対するバリアも提供する。このようにして、これらの実施例は、取り扱われるオブジェクト参照なしの大形のオブジェクトへのポインタの有界休止時間更新と共に有界休止時間コピーをサポートしている。
第12図〜第14図の実施例では、ガーベッジコレクタプロセス620が、コピー段階(MODE=COPY)の間に大形のオブジェクトのFromSpace420インスタンスからToSpace430インスタンスへのインクリメンタルコピーを行い、ポインタ更新段階(MODE=PTR_UPDATE)の間に大形のオブジェクトに対するポインタ(objectrefs)のインクリメンタル更新を行う。大形のオブジェクト再配置操作のコピー段階の間に、FromSpace420インスタンスへのミューテータプロセス610の書き込みアクセスは、部分的に再配置されたオブジェクトトラップハンドラ、例えば部分的に再配置されたオブジェクトトラップハンドラ1250(第12図)か、ハードウェア書き込みバリア、例えばハードウェア書き込みバリア1340(第13図)又はハードウェア書き込みバリア1440(第14図)によってブロードキャスト、即ち適切に方向付けられる。大形オブジェクトの再配置操作のポインタ更新段階の間に、FromSpace420インスタンスへのミューテータプロセス610の書き込み及び読み込みアクセスは、ToSpace430インスタンスへ向け直される。
第12図は、読み込み及び書き込みバリアに関連するCop-Fromレジスタフィールドを含む実施例を示す。第12図の実施例は、fromフィールド411,ハードウェア読み込みバリア1242、ハードウェア書き込みバリア1241、及び部分的に再配置されたオブジェクトトラップハンドラ1250を有する。ハードウェア読み込みバリア1242及びハードウェア書き込みバリア1241は、読み込み及び書き込みバリアハードウェア1240として図示されている。しかし、インプリメンテーションによっては、ハードウェア書き込みバリア1241及びハードウェア読み込みバリア1242は、ハードウェアを共有する形、或いは独立したハードウェアベースの形で実現されることもある。或る実施例では、ストア指向バイトコードの評価を行う整数ユニット420(第1図)ロジックがハードウェア書き込みバリア1241を提供し、ロード指向バイトコード(例えばgetfield_quick,getfield,aaload等)の評価を行う整数ユニット420ロジックがハードウェア読み込みバリア1242を提供する。
ミューテータプロセス610は、収集された空間630への書き込みアクセス及びそこからの読み込みアクセスを行う。所定の読み込み又は書き込みアクセスは、その読み込み又は書き込みアクセスが、部分的に再配置されたオブジェクトのFromSpace420インスタンスを標的とする場合には、読み込み及び書き込みバリアハードウェア1240によって選択的にトラップをかけられる。読み込み及び書き込みバリアハードウェア1240は、fromフィールド411のコンテンツと書き込みアクセス701又は読み込みアクセス1202に関連する目標objectrefとの間の一致に応じて、部分的に再配置されたオブジェクトトラップハンドラ1250を起動する。或る実施例では、読み込み及び書き込みバリアハードウェア1240が、レジスタ144のmodeフィールド1114に応答する。このフィールドは、modeフィールド1114の状態に基づいてハードウェア読み込みバリア1242の動作のし方、つまり挙動を変える。このような実施例では、ハードウェア読み込みバリア1242が、大形オブジェクトの再配置操作のポインタ更新段階の間にのみ選択的なトラップをかける。
ハードウェア書き込みバリア1241の一例は、以下の論理式で記述される。
ここでgc_notifyは、部分的に再配置されたオブジェクトトラップハンドラ1250のようなトラップハンドラである。上述のような、ジェネレーション間ポインタストアトラップのような他の書き込みバリア機能を組込んでいるロジックインプリメンテーションを含む、種々の適切なロジックインプリメンテーションを、当業者は理解されよう。ハードウェア読み込みバリア1242の一例は、以下の論理式で記述される。
別の実施例は、より大形のトラップハンドラオーバーヘッドの負担があるにも関わらず、部分的に再配置されたオブジェクトトラップハンドラ1250による適切な取り扱いによって、大形オブジェクトの再配置操作のコピー段階及びポインタ更新段階の双方の間に選択的にトラップをかけることができる。
コピー段階の間に、部分的に再配置されたオブジェクトトラップハンドラ1250は、別の場合にはtoフィールド412にストアされるようなCopy-To行先情報のためのメモリストレージを確保し、或いは必要に応じて維持する。更に、部分的に再配置されたオブジェクトトラップハンドラ1250は、別の場合にはhowfarフィールド413にストアされるようなHowFar情報のためのストレージを必要に応じて維持することができる。ミューテータプロセス610が、大形のオブジェクトのFromSpace420インスタンスにストアする場合には、ストアデータは、copy-fromインスタンス450とcopy-toインスタンス450Aの双方にブロードキャストされるか、或いは、howfar情報に対するストレージを提供するような実施例では、howfarストレージが検査されて、大形のオブジェクトのstored-toフィールドが既にコピーされている場合にはストアが両インスタンスにブロードキャストされ、そうでない場合にはcopy-fromインスタンス450に向けられる。
ポインタ更新段階の間に、部分的に再配置されたオブジェクトトラップハンドラ1250は、部分的に再配置された大形のオブジェクトのFromSpace420インスタンスを目標にした読み込み及び書き込みアクセスを、そのToSpace430インスタンスに向ける。前述の場合のように、部分的に再配置されたオブジェクトトラップハンドラ1250は、別の場合にはtoフィールド412にストアされるようなCopy-To行先情報のためのメモリストレージを確保し、或いは必要に応じて維持する。何れの場合にも、部分的に再配置されたオブジェクトトラップハンドラ1250は、ToSpace430インスタンスへの読み込み及び書き込みアクセスの双方を方向付けしなおす。このようにして、部分的に再配置されたオブジェクトへの読み込みアクセスは、最新の状態への更新が保証されているToSpace430インスタンスに解決する。
部分的に再配置されたオブジェクトトラップハンドラ1250のための書き込みトラップ及び読み込みトラップ機能の例は、以下のようなものである。
ここで、read_destinationは、ロード指向バイトコードの行先である。
一般に、読み込みバリアに対するトラップによってオーバーヘッドが生ずるケースは、書き込みバリアのみが提供されている場合より起こりやすい。読み込みアクセスは、通常所定の命令ストリームにおいては書き込みアクセスより一般的で、何れの場合も書き込みアクセスに伴って生ずるからである。これを一つの理由として、ハードウェア書き込みバリア1242は、ポインタ更新段階における部分的に再配置された大形のオブジェクトのFromSpace420インスタンスからの読み込みに対して選択的となっている。しかし、ハードウェア書き込みバリア1242は、再配置操作の段階とは無関係に、部分的に再配置された大形のオブジェクトのFromSpace420インスタンスからの読み込みに対して、所望に応じてトラップをかけられる。このような実施例では、部分的に再配置されたオブジェクトトラップハンドラ1250は、重複するcopy-fromインスタンス450とcopy-toインスタンス450Aのインテリジェントな取り扱いが可能であるように構成することができる。第15図は、fromインスタンス1560とtoインスタンス1570の重複を示す。ここではコピー済み部分1561が、toインスタンス1570の部分1571にコピーされている。fromフィールド411、toフィールド412、及びhowfarフィールド413は、上述のように、部分的に再配置されたオブジェクトの状態をコード化する。第15図の実施例では、ガーベッジコレクタプロセス620が、fromインスタンス1560とtoインスタンス1570の相対的な重複に応じて、大形のオブジェクトを後ろから前へ(又は前から後ろへ)コピーする。重複したfromインスタンスとtoインスタンスの取り扱いを容易にするために、部分的に再配置されたオブジェクトトラップハンドラ1550は、書き込みのブロードキャストは行わず、代わりにコピーされていない部分1562を目標とする書き込みをfromインスタンス1560に向け、コピー済み部分1561を目標とする書き込みをtoインスタンス1570に向ける。部分的に再配置されたオブジェクトトラップハンドラ1250の書き込みトラップファンクションの適切な改変形態は、以下の通りである。
ここでCOPY_DIRECTIONは、それぞれfromフィールド411及びtoフィールド412によってコード化されている、fromインスタンス1561とtoインスタンス1570の相対的な位置から確認することができる。ロード指向アクセスを適切に方向付けし直すための、部分的に再配置されたオブジェクトトラップハンドラ1250の読み込みトラップファンクションの改変も、類似の方式で行うことができる。
第13図に示す実施例は、読出し・書込みバリアハードウェア1340に関連するCopy-Fromレジスタフィールド(例えば、from field411)に加えてCopy-Toレジスタフィールド(例えば、to field412)を含む。前述のように、この実施例は、読出し・書込みバリアハードウェア1340が、コピー段階と大形オブジェクト再配置操作のポインタ更新段階との間の識別が可能となるように、ガーベッジコレクタプロセス620によって保守されたモード表示(例えば、レジスタ144のモードフィールド1114)を含む。第12図の実施例と比較して、第13図は、ハードウェア(例えば、from field411のコンテンツによって特定されるオブジェクトのフィールドへのストアに対するハードウェア書込みバリア1342及び読出しバリア1341)において、読出しバリア及び書込みバリアサポート(barrier support)の両方を具備し、その結果、部分的に再配置されたオブジェクトトラップハンドラ1250及びそれに関連するオーバヘッドを都合よく消去する。
ハードウェアの中のCopy-Toレジスタフィールド(例えば、レジスタ144の中のto field412)の保守によって、Copy-Toインスタンスへの書込みアクセスは、ソフトウェアトラップハンドラ介入なしに、ハードウェア書込みバリア1341によって、Copy-From及びCopy-Toインスタンスの両方に対するコピー段階(MODE = COPY)の間において、ブロードキャストであり得る。ポインタ更新段階(MODE = PTR_UPDATE)の間において、Copy-Fromインスタンスに対する書込みアクセスは、再びソフトウェアトラップハンドラ介入なしに、ハードウェア書込みバリア1341によってCopy-Toインスタンスに対し再び向けられる。また、Copy-Fromインスタンスからの読出しアクセスは、ポインタ更新段階の間において、ソフトウェアトラップハンドラ介入なしに、ハードウェア読出しバリア1342によって、Copy-Toインスタンスに再び向けられる。Copy-Fromインスタンスに対するコピー段階読出しアクセスは正常に終了する。
一実施例において、読出し・書込みバリアハードウェア1340は、バイトコードの評価を行なう整数ユニット142(第1図)ロジックによって具備される。ハードウェア書込みバリア1341は、ストア指向(store-oriented)バイトコードの評価を行なう整数ユニット142ロジックによって具備され、ハードウェア読出しバリア1342は、ロード指向(load-oriented)バイトコードの評価を行なう整数ユニット142ロジックによって具備される。
コピー段階の間において、ロジック実行ハードウェア書込みバリア1342は、to field412のコンテンツ及びオブジェクト参照(objectref)によって各々特定されるCopy-From及びCopy-Toインスタンスの両方に対するストアデータ(store_data)をブロードキャストし、一方、ポインタ更新段階において、ロジック実行ハードウェア書込みバリア1342は、Copy-Toインスタンスのみに対して記憶データを再び向ける。典型的なハードウェア書込みバリア1342は、以下の論理式で示される。
同様に、典型的なハードウェア読出しバリア1341は、以下の論理式で示される。
ここで、各々の場合における“offset”は、ストアまたはロード指向バイトコードに関する目標フィールドの大形オブジェクトにおけるオフセットである。前述のように、先行技術は、ハードウェア書込みバリア1342と、ジェネレーション間ポインタストアトラップのような機能を有する別の書込みバリアとを組合せたインプリメンテーションと同様に、ハードウェア読出しバリア1341と、ハードウェア書込みバリア1342とを組合せたロジックのインプリメンテーションを含め、様々な好適なロジックのインプリメンテーションを認識するであろう。to field412はハードウェア書込みバリア1342に使用可能なため、ハードウェアにおいてブロードキャスト及び向け直し(redirection)が可能であり、ソフトウェアトラップオーバヘッドが削除される。
How-farレジスタフィールド(例えば、howfar field413)を追加する実施例を第14図に示す。第13図の実施例のように、読出し・書込みバリアハードウェア1440は、copy-fromインスタンス450から、或いはcopy-fromインスタンス450への読出し・書込みアクセスに対するバリアを具備する。さらに、読出し・書込みバリアハードウェア1440は、既にToSpace430インスタンスにコピーされたストアまたはロード指向バイトコードによってそのフィールドが参照されるかどうかによって、好適なFromSpace420またはToSpace430インスタンスに対して読出し・書込みアクセスを向ける(steers)。howfar field413に関する操作によって、ハードウェア書込みバリア1441は、モードフィールド1114のコピー状態によって示されるコピー段階の間に、ハードウェアプロセッサ100が、大形オブジェクトの未だコピーされていない部分に対するストアのブロードキャストを見合わせることを都合よく許容する。ポインタ更新段階の間に、ToSpace430インスタンスは、最新への更新を補償され、故に、そこへ読出しアクセスの向け直しによって、ハードウェア読出しバリア1442は、ポインタ更新段階の間において、ハードウェアプロセッサ100のストアのブロードキャストを見合わせることを都合よく許容する。ブロードキャストストアは削除されるので、第14図の実施例は、FromSpace420及びToSpace430インスタンスのオーバラップのサポートに特に都合が良い。
一実施例において、読出し・書込みハードウェア1440は、バイトコードの評価を行なう整数ユニット142(第1図)ロジックによって具備される。ハードウェア書込みバリア1441は、ストア指向バイトコードの評価を行なう整数ユニット142ロジックによって具備され、ハードウェア読出しバリア1442は、ロード指向バイトコードの評価を行なう整数ユニット142ロジックによって具備される。典型的なハードウェア書込みバリア1442は、以下の論理式で示される。
同様に、典型的なハードウェア読出しバリア1341は、以下の論理式で示される。
ここで“read_destination”は、ロード指向バイトコードのための宛先(destination)であり、各々において“offset”は、ストアまたはロード指向バイトコードに関係する目標フィールドの大形オブジェクトにおけるオフセットである。前述のように、先行技術は、ハードウェア書込みバリア1442と、ジェネレーション間ポインタストアトラップのような機能を有する別の書込みバリアとを組合せたインプリメンテーションと同様に、ハードウェア読出しバリア1441と、ハードウェア書込みバリア1442とを組合せたロジックのインプリメンテーションを含め、様々な好適なロジックのインプリメンテーションを認識するであろう。
Copy-Toインスタンス識別子ストアに関する読出し・書込みバリア
第12図から第14図の一連の種々の実施例は、Copy-Fromインスタンス識別子ストアではなく、Copy-Toインスタンス識別子ストアに関する読出し・書込みバリアを含む。前述のように、これらの実施例は、ソフトウェアトラップハンドラオーバヘッド(software trap handlerovehead)を削除し、copy-fromインスタンス450及びcopy-toインスタンス450Aのオーバラップを考慮するために、逐次的レベルの付加的ハードウェアサポート(例えば、from field411及びhawfarフィールド413サポート)を加える。その様々な実施例は、部分的に再配置された大形オブジェクトに対するポインタの有界休止時間更新及び有界休止時間コピーの両方をサポートする。これらの様々な実施例は、第12図から第14図の実施例の類推によって示され、それらの先行技術は、この明細書に基づく好適な改変の真価を認めるだろう。
オブジェクトデータのコピーの前に、ガーベッジコレクタプロセス620は大形オブジェクトに対しポインタを更新する(即ち、FromSpace420インスタンスからToSpace430インスタンスへ)。この方法において、ポインタ更新とコピー段階のオーダは逆になる。読出し・書込みバリアの後の読出し・書込みアクセスは、copy-toインスタンス450Aの変わりにcopy-fromインスタンス450に向ける。一実施例において、ハードウェア読出し・書込みバリアトラップは、copy-toインスタンス450Aにアクセスし、それは、Copy-Fromインスタンスに対する実際の取次を行なう部分的に再配置されたオブジェクトトラップハンドラのソフトウェアを呼び出す。部分的に再配置されたオブジェクトトラップハンドラは、そうでなければhowfar field413にストアされるように、所望によりHowFarインフォメーションのためのストレージを保持しても良い。ミューテータプロセス610が大形オブジェクトToSpace420インスタンスにストアする際に、大形オブジェクトのストアされたto fieldが既にコピーされている場合は、ストアデータはcopy-toインスタンス450Aに向けられ、そうでない場合はcopy-fromインスタンス450に向けられる。同様に、ミューテータプロセス610が大形オブジェクトのToSpace420インスタンスからロードするとき大形オブジェクトのストアされたto fieldが既にコピーされている場合は、ロードはcopy-toインスタンス450Aから行なわれ、そうでない場合はcopy-fromインスタンス450から行なわれる。前述のように第12図および第14図に関して、オーバーラップしたFromSpace430及びToSpace430インスタンスのためのサポートが具備される。別法として、オーバーラップ領域のためのサポートが不要な場合、読出しバリアはロードをCopy-Fromインスタンスに向けて、書込みバリアはCopy-From及びCopy-Toインスタンスの両方に対してストアをブロードキャストし得る。
上述のように、ソフトウェアトラップオーバーヘッドは、より多くのレジスタ及び複雑動作をハードウェアに置くことによって消去され得る。例えば、一実施例ではto field412及びfrom field411を含む。ハードウェア書込みバリアは、ストアをcopy-toインスタンス450Aとcopy-fromインスタンス450の両方に対してブロードキャストするto field412及びストア目標の間の一致に応答する。ハードウェア読出しバリアは、ロードをcopy-fromインスタンス450に対して向け直すto field412及びロードソース(load source)の間の一致に応答する。別の実施例では、to field412及びfrom field411に加えてhowfar field413を含む。ハードウェア書込みバリア及び読出しバリアは、copy-toインスタンス450Aのコピーされた部分及びcopy-fromインスタンス450のコピーされていない部分にストア及びロードを向ける。これらの先行技術は、前述に基づく各々の実施例のための好適なロジックを認識するであろう。
オブジェクト参照フォーマット(object referencing formats)
第16図は、ハードウエアプロセッサ100において表現されているようなオブジェクト参照(objectref)の一実施例を示している。objectrefの3つのビットを上述に織込まれたPCT国際出願番号第PCT/US98/07622号(ガーベッジコレクションのためのジェネレーション離隔(generation isolation)システム及び方法)に記載のガーベッジコレクションヒント(garbage collection hints)のために使用することができる。別のハンドルビットHは、オブジェクトがobjectrefによって直接参照されているか、又はハンドル(handle)を通して間接的に参照されているかを示す。ハンドルは、別のレベルの間接的手続きが発生するという代償はあるが、メモリオブジェクトの再配置操作を、それらを指定するポインタ(またはobjectrefs)の大量の更新なしに容易に実現する参照メソッド(referencing method)を提供する。これらのフィールドはどちらもハードウエアプロセッサ100の整数ユニット142(第1図)に与えられる前にマスクしてなくなる(maskout)。
ハードウエアプロセッサ100及び収集された空間630(第6〜14図)の一実施例では、オブジェクト1700はヘッダ部1710及びインスタンス変数ストレージ部1720を含むメモリにおいて表現される。第17A図は、そのような実施例の1つを示している。ヘッダ部1710は32ビットワードを含んでおり、この32ビットワードそれ自身はオブジェクトのクラスを表すためのメソッドベクタテーブルベース部(method vector table base portion)1712と、オブジェクトの同期状態及びガーベッジコレクタ用の情報のために確保された追加的なストレージ(storage)1714の5つのビットを含んでいる。所望に応じて、第2のヘッダワード(例えばモニタポインタ1716)に、オブジェクトに割り当てられたモニタのアドレスを格納し、それによって第1のヘッダワード内の追加的なストレージ1714の5つのビット全てをガーベッジコレクション情報に使用可能とすることもできる。第17A図の実施例では、オブジェクト参照(objectref)はメソッドの呼び出しのオーバヘッドを最小化するべく、メソッドベクタテーブルベース部1712の場所を示している。
ヘッダ部1710の3つのビットは、例えばコレクタプロセス620のようなガーベッジコレクタによって使用可能である。ヘッダ部1710において、3つの下位ビット(header[2:0])及び2つの上位ビット(header[31:30])はヘッダがポインタとして処理されるときはマスクしてなくなる(mask off)。これらのビットの内3つ(header[31:30,2])は、オブジェクト1700に関する情報をストアすべくガーベッジコレクタによって使用可能である。オブジェクトの同期のため、LOCK及びWANTビットを保持すべくビット1及び0を用いることができる。別の方法として、例えばモニタポインタ1716のような第2のヘッダワードをオブジェクト1700の同期状態を保持するのに用い、5つのビット全てをガーベッジコレクションのサポートのために残すこともできる。ガーベッジコレクションのサポートのためのビットがどのように用いられるかは、コレクタプロセス620及びガーベッジコレクショントラップハンドラによって実現されるガーベッジコレクションメソッドの特定のタイプに依存する。可能な使用方法には、マークビット、所定のジェネレーションのオブジェクトの年齢を決定するためのカウンタビット等として使用することが含まれる。上述したように、所望に応じてなされるヘッダ部1710の第2のヘッダワードを使用した実施態様では、5つのビットが例えばコレクタプロセス620のようなガーベッジコレクタに対して使用可能となる。
第17A図の実施例において、インスタンス変数ストレージ部1720はメソッドベクタテーブルベース部1712の1ワード後に始まっており、オブジェクト1700のインスタンス変数を格納する。objectrefの最下位ビットによって、参照が取り扱われる(==1)か又は取り扱われない(==0)かが指定される。一方の選択肢である“取り扱われる”場合のオブジェクトフォーマットが第17B図に示されている。オブジェクト1700bが生成されるとき、取り扱われる参照が確立され、その後の全ての参照はオブジェクトにアクセスすべくハンドル、即ちストレージポインタ1750bを通過する。このようなサポートは、下層に位置するオブジェクトストレージ(インスタンス変数に対するものを含む)ではなくハンドルをコピーすることによってオブジェクトの再配置操作に伴うポインタの更新の代償を軽減するようなガーベッジコレクタに対して提供される。
取扱われるオブジェクト参照は、前述の第7〜9図のように、ガーベッジコレクションシステムが、コピーされたオブジェクトに対しポインタ更新のための有界休止時間動作を示すことを可能にする。別のガーベッジコレクションシステムにおいては、多数の参照ポインタの有界休止時間ポインタが、それによって備えられたバリア構造によってサポートされるが、例えば、上述の第10〜14図の実施例においては、直接のオブジェクト参照が好ましい。
本発明を様々な実施例に基づいて説明してきたが、これらの実施例は例示的なものであり、発明の範囲はこれらの実施例に限定されないことを理解されたい。請求の範囲で使用される第1命令、第2命令、第3命令などの用語は特定のためのものであって、命令の特定の順番を要求すると解釈されるべきでものではない。説明した実施例に対して様々な変形、変更、追加及び改良が可能である。例えば、本発明をJAVAプログラミング言語及びJAVA仮想マシンに関連する実施例に基づいて説明してきたが、本発明はそれらに限定されるものではなく、様々なプロセッサ環境(仮想及び物理的なものの両方)に対するシステム、製品、方法、及び装置を包含するものである。更に、いくつかの実施例は、ハードウエアとして説明してきたが、上述に従って応答する部分的に再配置されたオブジェクト識別子ストア及びバリアに組込まれた好適な仮想マシンの具現(JAVAに関するもの、或いはその他のもの)は、バイトコードインタプリタ(bytecode interpreter)またはジャストインタイムコンパイラ(just-in-time compiler)のようなソフトウエアによる仮想マシーン命令プロセッサの具現を含む。上述した或いはその他の変形および、変更、追加、改良は特許請求の範囲に画定される本発明の範囲に入るものである。
Claims (54)
- コンピュータシステムにおけるガーベッジコレクションに用いられる、特定のメモリオブジェクトの再配置時にメモリオブジェクトインスタンスの整合性を維持し、かつその特定のメモリオブジェクトに対するアクセスを発生する他の処理の休止時間を有界とするように前記特定のメモリオブジェクトの再配置を行う装置であって、該装置は、メモリストレージであって、そこに形成されたオブジェクトを、その各FromSpace(420)インスタンスから各ToSpace(430)インスタンスへ再配置可能なメモリストレージ(630)を備え、該装置は、
前記オブジェクトのなかに再配置操作が完了していないオブジェクトがあれば、そのようなオブジェクトのなかの特定の一つのオブジェクトの特定のインスタンスを識別するべく更新可能な部分的に再配置されたオブジェクト識別子ストアであって、前記特定のインスタンスがFromSpaceインスタンス及びToSpaceインスタンスの何れか一方である、該部分的に再配置されたオブジェクト識別子ストア(144,410)と、
前記特定のインスタンスへのストア指向メモリアクセスに対する書き込みバリア(1241,1341,1441,1540)と、
前記特定のインスタンスへのロード指向メモリアクセスに対する読み込みバリア(1242,1342,1442,1540)とを有することを特徴とし、
前記書き込みバリア及び前記読み込みバリアは、前記部分的に再配置されたオブジェクト識別子ストアのコンテンツと、前記ストア指向メモリアクセス及び前記ロード指向メモリアクセスのそれぞれに対するオブジェクト識別子との対応に応答しており、前記書き込みバリアと前記読み込みバリアの範囲は、あれば、前記部分的に再配置されたオブジェクト識別子ストアによって識別された前記特定のインスタンスに対応することを特徴とする装置。 - 前記特定のインスタンスが、FromSpaceインスタンスであることを特徴とし、
前記再配置操作が、コピー段階、及びそれに続くポインタ更新段階を有することを特徴とし、
前記部分的に再配置されたオブジェクト識別子が、FromSpaceインスタンス識別子を含むことを特徴とする請求項1に記載の装置。 - 前記特定のインスタンスが、ToSpaceインスタンスであることを特徴とし、
前記再配置操作が、ポインタ更新段階、及びそれに続くコピー段階を有することを特徴とし、
前記部分的に再配置されたオブジェクト識別子が、ToSpaceインスタンス識別子を含むことを特徴とする請求項1に記載の装置。 - 前記再配置操作が、一時的に重複するインクリメンタルコピー操作とインクリメンタルポインタ更新操作とを含むことを特徴とする請求項1に記載の装置。
- 前記書き込みバリアが、前記特定のインスタンスのコピー済み部分を目標とする第1の前記ストア指向メモリアクセスを前記ToSpaceインスタンスへ方向付け、かつ前記特定のインスタンスのコピーされていない部分を目標とする第2の前記ストア指向メモリアクセスを前記FromSpaceインスタンスへ方向付けることを特徴とする請求項1に記載の装置。
- 前記書き込みバリアが、前記第1のストア指向メモリアクセスを前記FromSpaceインスタンスへも方向付けることを特徴とする請求項5に記載の装置。
- 前記読み込みバリアが、前記特定のインスタンスのコピー済み部分を目標とする第1の前記ロード指向メモリアクセスを前記ToSpaceインスタンスへ方向付け、かつ前記特定のインスタンスのコピーされていない部分を目標とする第2の前記ロード指向メモリアクセスを前記FromSpaceインスタンスへ方向付けることを特徴とする請求項1に記載の装置。
- 前記読み込みバリアが、前記再配置操作のコピー段階の完了後に発生する第3のロード指向メモリアクセスを、前記ToSpaceインスタンスへ方向付けることを特徴とする請求項7に記載の装置。
- 前記書き込みバリアの動作により、前記特定のオブジェクトの、その前記FromSpaceインスタンスから前記ToSpaceインスタンスへのインクリメンタルコピーが可能となることを特徴とする請求項1に記載の装置。
- 前記書き込みバリア及び前記読み込みバリアの動作により、前記特定のオブジェクトの、その前記FromSpaceインスタンスからToSpaceインスタンスへのインクリメンタルコピーが可能となることを特徴とし、
前記FromSpaceインスタンス及び前記ToSpaceインスタンスが、前記メモリストレージにおいて重複していることを特徴とする請求項1に記載の装置。 - 前記FromSpaceインスタンス及び前記ToSpaceインスタンスが、前記メモリストレージにおいて重複していることを特徴とする請求項1に記載の装置。
- 前記読み込みバリアの動作により、前記特定のオブジェクトに対するポインタ群のインクリメンタル更新が可能となることを特徴とし、
前記インクリメンタル更新が、FromSpaceインスタンスを参照する状態からToSpaceインスタンスを参照する状態へのインクリメンタル更新であることを特徴とする請求項1に記載の装置。 - 前記書き込みバリア及び前記読み込みバリアが、書き込み及び読み込みバリアロジック及び部分的に再配置されたオブジェクトトラップハンドラを含み、前記書き込み及び読み込みバリアロジックが、それぞれ前記ストア指向メモリアクセス及び前記ロード指向メモリアクセスのオブジェクト識別子と、前記部分的に再配置されたオブジェクト識別子ストアのコンテンツとの間の対応に応答することを特徴とする請求項1に記載の装置。
- 前記部分的に再配置されたオブジェクト識別子ストアが、FromSpace及びToSpaceインスタンス識別子を含み、かつ、
前記書き込みバリア及び前記読み込みバリアが、前記FromSpace及び前記ToSpaceインスタンス識別子に結合した書き込み及び読み込みバリアロジックを含み、前記書き込み及び前記読み込みバリアロジックが、それぞれ前記ストア指向メモリアクセス及び前記ロード指向メモリアクセスのオブジェクト識別子と、前記FromSpaceインスタンス及び前記ToSpaceインスタンス識別子の一方のコンテンツとの間の対応に応答することを特徴とする請求項1に記載の装置。 - 前記書き込み及び読み込みバリアが、書き込み及び読み込みバリアロジックを含み、
前記部分的に再配置されたオブジェクト識別子ストアが、FromSpaceインスタンス識別子及び部分的コピー位置表示子を含み、
前記特定のオブジェクトのコピー済みの部分への第1ストア指向アクセスに対しては、前記書き込みバリアが、ストアデータを、少なくとも前記ToSpaceインスタンスに向け、
前記特定のオブジェクトのコピーされていない部分への第2のストア指向アクセスに対しては、前記書き込みバリアが、ストアデータを、少なくとも前記FromSpaceインスタンスに向けることを特徴とする請求項1に記載の装置。 - 前記第1のストア指向アクセスに対しては、前記書き込みバリアが、ストアデータを、前記FromSpaceインスタンスにも向け、
前記読み込みバリアが、前記再配置操作のコピー段階の完了後に発生する第3のロード指向メモリアクセスを、前記ToSpaceインスタンスに向けることを特徴とする請求項15に記載の装置。 - 前記読み込みバリアが、前記特定のオブジェクトのコピー済みの部分への第1のロード指向メモリアクセスを、前記ToSpaceインスタンスに向け、
前記読み込みバリアが、前記特定のオブジェクトのコピーされていない部分への第2のロード指向メモリアクセスを、前記FromSpaceインスタンスに向けることを特徴とする請求項15に記載の装置。 - 前記部分的に再配置されたオブジェクト識別子ストアと前記書き込みバリアと前記読み込みバリアとを含むプロセッサ上で実行可能な第1命令群を含むガーベッジコレクションプロセスであって、前記第1命令群が、前記特定のオブジェクトの部分を、前記FromSpaceインスタンスから前記ToSpaceインスタンスへインクリメンタルコピーするためのものである、該ガーベッジコレクションプロセスと、
前記ロード指向メモリアクセス及び前記ストア指向メモリアクセスを行うための、前記プロセッサ上で実行可能な第2命令群を含むミューテータプロセスとをさらに含むことを特徴とする請求項1に記載の装置。 - 前記部分的に再配置されたオブジェクト識別子ストアが、前記特定のオブジェクトのコピー済み部分とコピーされていない部分との間の境界を表示する部分的コピー位置表示子部分を有することを特徴とする請求項1に記載の装置。
- 前記再配置操作が、前記メモリストレージのガーベッジコレクションをなされた部分のFromSpace部分からToSpace部分への前記特定のオブジェクトのインクリメンタルコピー操作と、前記特定のオブジェクトに対するポインタ群のインクリメンタル更新操作を含むことを特徴とする請求項1に記載の装置。
- 前記FromSpaceと前記ToSpaceとが重複していることを特徴とし、
前記再配置操作が、前記特定のオブジェクトをインクリメンタルコピーを行ない、前記メモリストレージにおける複数の前記オブジェクトを短縮することを含むことを特徴とする請求項1に記載の装置。 - 前記部分的に再配置されたオブジェクト識別子ストアが、対応するインクリメンタルコピーを伴うガーベッジコレクションプロセスによって更新されることを特徴とする請求項1に記載の装置。
- 前記部分的に再配置されたオブジェクト識別子ストア、前記書き込みバリア、及び前記読み込みバリアを実現するプロセッサと、
前記プロセッサが読出し可能な媒体にコード化され、前記プロセッサによる実行が可能なミューテータプロセス命令群であって、前記ミューテータプロセス命令群が、前記ストア指向メモリアクセス及び前記ロード指向メモリアクセスに対応する命令を有する、該ミューテータプロセス命令群と、
前記プロセッサが読出し可能な媒体にコード化され、前記プロセッサによる実行が可能なリロケータプロセス命令群であって、前記リロケータプロセス命令群が、前記特定のオブジェクトを前記FromSpaceインスタンスから前記ToSpaceインスタンスへインクリメンタルコピーし、FromSpaceインスタンスを、参照しているポインターを前記ToSpaceインスタンスを参照するようにインクリメンタル更新し、かつ、前記部分的に再配置されたオブジェクト識別子ストアをそれらと対応するように維持する命令シーケンスを含み、前記ミューテータプロセス命令群の実行のため前記命令シーケンスの実行が前記ミューテータプロセス命令群により中断可能である、該リロケータプロセス命令群とを更に含むことを特徴とする請求項1に記載の装置。 - 前記リロケータプロセス命令群が、ジェネレーション式ガーベッジコレクション処理(generation garbage collection)、マーク−スイープ−コンパクト式ガーベッジコレクション処理(mark-sweep-compact garbage collection)、コピー式ガーベッジコレクション処理(copying garbage collection)、及びヒープ短縮処理(heap compaction)のなかの1つを、ミューテータプロセス休止時間有界にて行うように選択されることを特徴とする請求項23に記載の装置。
- 前記プロセッサが、前記部分的に再配置されたオブジェクト識別子ストア、前記書き込みバリア、及び前記読み込みバリアを実現するレジスタストレージ及びロジックを有するハードウェアプロセッサを含むことを特徴とする請求項23に記載の装置。
- 前記特定のオブジェクトが、大形のオブジェクト、アクセス頻度の高いオブジェクト、及び大形でアクセス頻度の高いオブジェクトのなかの一つを含むことを特徴とする請求項1に記載の装置。
- 前記部分的に再配置されたオブジェクト識別子ストア、前記書き込みバリア、及び前記読み込みバリアを実現するハードウェアプロセッサと、
前記ハードウェアプロセッサ上で実行するためにミューテータプロセス命令群を受け取るために前記ハードウェアプロセッサに接続された通信装置であって、前記ミューテータプロセス命令群が、前記ストア指向メモリアクセスに対応する第1命令と、前記ロード指向メモリアクセスに対応する第2命令とを有する、該通信装置と、
前記ハードウェアプロセッサが実行可能な、前記特定のオブジェクトをインクリメンタルコピーし、かつそれに対するポインタをインクリメンタル更新するためのガーベッジコレクタプロセス命令群をコード化するための、前記ハードウェアプロセッサが読出し可能な媒体とをさらに有することを特徴とする請求項1に記載の装置。 - 前記部分的に再配置されたオブジェクト識別子ストア及び前記メモリストレージに接続された第1のプロセッサ及び第2のプロセッサを更に有し、前記第1のプロセッサが、前記書き込みバリア及び前記読み込みバリアを有することを特徴とし、
前記再配置操作が、前記第2のプロセッサ上で実行可能なガーベッジコレクタプロセスによる前記特定のオブジェクトのインクリメンタルコピーを含むことを特徴とし、
前記ストア指向メモリアクセス及び前記ロード指向メモリアクセスが、それぞれ前記第1のプロセッサ上で実行可能なミューテータプロセスによる書き込みアクセス及び読み込みアクセスを含むことを特徴とし、
前記部分的に再配置されたオブジェクト識別子ストアが、前記ガーベッジコレクタプロセスにより、前記特定のオブジェクトの前記インクリメンタルコピーと対応するように維持されることを特徴とする請求項1に記載の装置。 - 前記第2のプロセッサが、特定目的ガーベッジコレクションプロセッサを含むことを特徴とする請求項28に記載の装置。
- 前記第2のプロセッサが前記メモリストレージと一体にされ、前記第2のプロセッサが前記メモリストレージとともに、ガーベッジコレクション処理されたメモリモジュールを含むことを特徴とする請求項28に記載の装置。
- 前記部分的に再配置されたオブジェクト識別子ストアが、再配置が完了していない前記オブジェクトのなかの第2のオブジェクトを特定するべく、更に更新可能であることを特徴とし、
前記装置が、前記部分的に再配置された識別子ストア及び前記メモリストレージに接続された第1及び第2のガーベッジコレクションプロセッサを更に有し、前記特定のオブジェクト及び前記第2のオブジェクトの再配置操作が、それぞれ前記第1のガーベッジコレクションプロセッサ及び前記第2のガーベッジコレクションプロセッサによるそのインクリメンタルコピーを含むことを特徴とする請求項1に記載の装置。 - コンピュータシステムにおけるガーベッジコレクションに用いられる、特定のメモリオブジェクトの再配置時にメモリオブジェクトインスタンスの整合性を維持し、かつその特定のメモリオブジェクトに対するアクセスを発生する他の処理の休止時間を有界とするように前記特定のメモリオブジェクトの再配置を行う装置であって、該装置は、メモリストレージであって、そこに形成されたオブジェクトを、その各FromSpace(420)インスタンスから各ToSpace(430)インスタンスへ再配置可能なメモリストレージ(630)を備え、該装置は、
前記オブジェクトのなかに再配置操作が完了していないオブジェクトがあれば、そのようなオブジェクトのなかの特定の一つのオブジェクトのFromSpaceインスタンスを識別するべく更新可能な部分的に再配置されたオブジェクト識別子ストアと、
前記FromSpaceインスタンスへのストア指向メモリアクセスに対する書き込みバリアと、
前記FromSpaceインスタンスへのロード指向メモリアクセスに対する読み込みバリアとを有することを特徴とし、
少なくとも前記再配置操作のポインタ更新段階の間に、前記読み込みバリアが、前記ロード指向メモリアクセスを、前記特定のオブジェクトのToSpaceインスタンスへ方向付けしなおすことを特徴とし、
前記書き込みバリア及び前記読み込みバリアは、前記部分的に再配置されたオブジェクト識別子ストアのコンテンツと、前記ストア指向メモリアクセス及び前記ロード指向メモリアクセスのそれぞれに対するオブジェクト識別子との対応に応答することを特徴とする装置。 - 前記再配置操作のコピー段階の間に、前記書き込みバリアが、前記特定のオブジェクトのToSpaceインスタンスと、前記FromSpaceインスタンスの少なくともコピー済みの部分との間の整合性を維持することを特徴とする請求項32に記載の装置。
- 前記FromSpaceインスタンスのコピー済みの部分とコピーされていない部分との境界を表示する部分的コピー位置表示子を更に有することを特徴とし、
前記コピー済み部分への第1の前記ストア指向アクセスについては、前記書き込みバリアが、ストアデータを、前記ToSpaceインスタンスに向けることを特徴とし、
前記コピーされてない部分への第2の前記ストア指向アクセスについては、前記書き込みバリアが、ストアデータを、前記FromSpaceインスタンスに向けることを特徴とし、
前記コピー済み部分への第1の前記ロード指向メモリアクセスについては、前記読み込みバリアが、前記第1のロード指向メモリアクセスを、前記ToSpaceインスタンスに向けることを特徴とし、
前記コピーされていない部分への第2の前記ロード指向メモリアクセスについては、前記読み込みバリアが、前記第2のロード指向メモリアクセスを、前記FromSpaceインスタンスに向けることを特徴とする請求項32に記載の装置。 - コンピュータシステムにおけるガーベッジコレクションに用いられる、特定のメモリオブジェクトの再配置時にメモリオブジェクトインスタンスの整合性を維持し、かつその特定のメモリオブジェクトに対するアクセスを発生する他の処理の休止時間を有界とするように前記特定のメモリオブジェクトの再配置を行う装置であって、該装置は、メモリストレージであって、そこに形成されたオブジェクトを、その各FromSpace(420)インスタンスから各ToSpace(430)インスタンスへ再配置可能なメモリストレージ(630)を備え、該装置は、
前記オブジェクトのなかに再配置操作が完了していないオブジェクトがあれば、そのようなオブジェクトのなかの特定の一つのオブジェクトのToSpaceインスタンスを識別するべく更新可能な部分的に再配置されたオブジェクト識別子ストアと、
前記ToSpaceインスタンスへのストア指向メモリアクセスに対する書き込みバリアと、
前記ToSpaceインスタンスへのロード指向メモリアクセスに対する読み込みバリアとを有することを特徴とし、
前記書き込みバリア及び前記読み込みバリアは、前記部分的に再配置されたオブジェクト識別子ストアのコンテンツと、前記ストア指向メモリアクセス及び前記ロード指向メモリアクセスのそれぞれに対するオブジェクト識別子との対応に応答することを特徴とする装置。 - 前記ToSpaceインスタンスのコピー済みの部分とコピーされていない部分との境界を表示する部分的コピー位置表示子を更に有することを特徴とし、
前記書き込みバリア及び前記読み込みバリアが、前記コピーされていない部分への前記ストア指向メモリアクセス、及び、前記コピーされていない部分への前記ロード指向メモリアクセスの各々を、前記FromSpaceインスタンスへ向けることを特徴とする請求項35に記載の装置。 - コンピュータシステムにおけるガーベッジコレクションに用いられる、特定のメモリオブジェクトの再配置時にメモリオブジェクトインスタンスの整合性を維持し、かつその特定のメモリオブジェクトに対するアクセスを発生する他の処理の休止時間を有界とするように前記特定のメモリオブジェクトの再配置を行うガーベッジコレクションシステムであって、
前記特定のオブジェクトの第1インスタンスから第2インスタンスへのインクリメンタルコピーを用いて前記特定のオブジェクトの再配置操作の休止時間を有界とすることを特徴とし、
前記第1インスタンスに対する識別子フィールド及び前記第2インスタンスに対する識別子フィールドを有する部分的に再配置されたオブジェクト識別子ストアと、
ストア指向ミューテータプロセスアクセスに対するオブジェクト識別子と、前記第1インスタンス識別子フィールドのコンテンツとの間の対応に応じる書き込みバリアロジックと、
ロード指向ミューテータプロセスアクセスに対するオブジェクト識別子と、前記第1インスタンス識別子フィールドとのコンテンツとの間の対応に応じる読み込みバリアロジックとを有することを特徴とするガーベッジコレクションシステム。 - 前記書き込みバリアが、前記特定のオブジェクトの前記第1インスタンスへの第1の前記ストア指向ミューテータプロセスアクセスを、前記第1インスタンスと前記第2インスタンスの双方にブロードキャストすることを特徴とする請求項37に記載のガーベッジコレクションシステム。
- 前記部分的に再配置されたオブジェクト識別子ストアが、前記特定のオブジェクトのコピーされていない部分を特定する部分的コピー位置表示子を更に有し、
前記書き込みバリアロジックが、アクセスを、前記特定のオブジェクトを目標とする第2の前記ストア指向ミューテータプロセスアクセスの適合するものに方向付け、
前記読み込みバリアロジックが、アクセスを、前記特定のオブジェクトから生じる第3の前記ロード指向ミューテータプロセスアクセスの適合するものに方向付け、
前記書き込みバリア及び前記読み込みバリアによる前記の選択的な方向付けが、前記コピー位置表示子によりコード化された部分的再配置状態に従うことを特徴とする請求項37に記載の装置。 - ガーベッジコレクション休止時間を制限する方法であって、
メモリオブジェクトのソースインスタンスから目標インスタンスへの再配置操作の間に、ミューテータプロセスへの有界休止時間コミットメント(bounded pause time commitment)に従って、前記再配置操作を中断する過程と、
前記再配置操作の前記中断の間に、前記ミューテータプロセスによる書き込みアクセスのためのオブジェクト識別子と部分的に再配置されたオブジェクト識別子のコンテンツとの間の対応を検出する過程と、
前記メモリオブジェクトの部分的再配置状態に基づいて、前記ソースインスタンス及び前記目標インスタンスの一方へ前記書き込みアクセスを選択的に方向付けする過程と、
前記再配置操作の前記中断の間に、前記ミューテータプロセスによる読み込みアクセスのためのオブジェクト識別子と部分的に再配置されたオブジェクト識別子のコンテンツとの間の対応を検出する過程と、
前記メモリオブジェクトの部分的再配置状態に基づいて、前記ソースインスタンス及び前記目標インスタンスの一方へ前記読み込みアクセスを選択的に方向付けする過程とを含むことを特徴とするガーベッジコレクション休止時間を制限する方法。 - 前記メモリオブジェクトのコピー済みの部分と前記書き込みアクセスとの間に対応が存在する場合には、その選択的方向付けが、前記書き込みアクセスの前記目標インスタンスへの方向付けを含み、そうでない場合には、前記書き込みアクセスの前記ソースインスタンスへの方向付けを含むことを特徴とする請求項40に記載の方法。
- 前記メモリオブジェクトのコピー済みの部分と前記読み込みアクセスとの間に対応が存在する場合には、その選択的方向付けが、前記読み込みアクセスの前記目標インスタンスへの方向付けを含み、そうでない場合には、前記読み込みアクセスの前記ソースインスタンスへの方向付けを含むことを特徴とする請求項40に記載の方法。
- 前記再配置操作が、前記ソースインスタンスに関連するデータの、前記標的インスタンスへのインクリメンタルコピー操作と、その後のそれに対するポインタのインクリメンタル更新操作とを含むことを特徴とする請求項40に記載の方法。
- 前記再配置操作が、前記ソースインスタンスを参照するポインタを、代わりに前記目標インスタンスを参照するようにするインクリメンタル更新操作と、その後の前記ソースインスタンスに関連するデータの前記目標インスタンスへのインクリメンタルコピー操作とを含むことを特徴とする請求項40に記載の装置。
- 前記再配置操作が、前記ソースインスタンスを参照するポインタを、代わりに前記目標インスタンスを参照するようにするインクリメンタル更新操作と、前記ソースインスタンスに関連するデータの前記目標インスタンスへのインクリメンタルコピー操作とを含み、前記ポインタの更新操作と前記インクリメンタルコピー操作が、一時的に重複することを特徴とする請求項40に記載の装置。
- メモリオブジェクトの再配置方法であって、
前記メモリオブジェクトの再配置が、前記メモリオブジェクトへのアクセスを行うミューテータプロセスに対して有界休止時間の影響がある状態の下で行われることを特徴とし、
それぞれ前記ミューテータプロセスによる前記メモリオブジェクトのFromインスタンスへのストア指向アクセス及びロード指向アクセスに応答する書き込みバリア及び読み込みバリアを構成する過程と、
前記FromインスタンスからToインスタンスへの前記メモリオブジェクトのインクリメンタルコピーと、それに対するポインタのインクリメンタル更新とを行う過程と、
前記インクリメンタルコピー及びポインタ更新の間に、第1の前記ストア指向アクセスに応じて、前記メモリオブジェクトのコピー済み部分への前記第1のストア指向アクセスを、その前記Toインスタンスへ方向付けする過程と、
前記インクリメンタルコピー及びポインタ更新の間に、第1の前記ロード指向アクセスに応じて、前記メモリオブジェクトの前記コピー済み部分への前記第1のロード指向アクセスを、その前記Toインスタンスに方向付けする過程とを含むことを特徴とするメモリオブジェクトの再配置方法。 - 前記書き込み及び読み込みバリアを構成する過程が、前記Fromインスタンスを特定するべく部分的に再配置されたオブジェクト識別子ストアを更新する過程を含むことを特徴とする請求項46に記載の方法。
- 前記書き込みバリアの構成において、前記Toインスタンスを特定するべく前記部分的に再配置されたオブジェクト識別子を更新する過程をさらに含むことを特徴とする請求項47に記載の方法。
- 前記メモリオブジェクトのコピー済み部分とコピーされていない部分とを区別するべく部分的コピー位置表示子を維持する過程と、
前記インクリメンタルコピーの間に、前記コピーされていない部分への第2の前記ストア指向アクセスに応じて、前記第2のストア指向アクセスを前記Toインスタンスではなく前記Fromインスタンスに方向付けする過程とを更に含むことを特徴とする請求項46に記載の方法。 - 前記方向付けが、トラップハンドラにより行われることを特徴とする請求項46に記載の方法。
- 前記方向付けが、前記書き込みバリアのトラップに応じてトラップハンドラソフトウェアにより行われることを特徴とする請求項46に記載の方法。
- メモリオブジェクトの再配置方法であって、
前記メモリオブジェクトの再配置が、前記メモリオブジェクトへのアクセスを行うミューテータプロセスに対して有界休止時間の影響がある状態の下で行われることを特徴とし、
それぞれ前記ミューテータプロセスによる前記メモリオブジェクトのToインスタンスへのストア指向アクセス及びロード指向アクセスに応答する書き込みバリア及び読み込みバリアを構成する過程と、
前記Fromインスタンスを参照するポインタを代りにToインスタンスを参照するようにするインクリメンタル更新と、前記Fromインスタンスから前記Toインスタンスへの前記メモリオブジェクトのインクリメンタルコピーとを行う過程と、
前記インクリメンタルポインタ更新及びコピーの間に、第1の前記ストア指向アクセスに応じて、前記メモリオブジェクトのコピーされていない部分への前記第1のストア指向アクセスを、その前記Fromインスタンスへ方向付けする過程と、
前記インクリメンタルポインタ更新及びコピーの間に、第1の前記ロード指向アクセスに応じて、前記メモリオブジェクトの前記コピーされていない部分への前記第1のロード指向アクセスを、その前記Fromインスタンスに方向付けする過程とを含むことを特徴とするメモリオブジェクトの再配置方法。 - メモリオブジェクトのインクリメンタルコピー及びそれに対するポインタのインクリメンタル更新に従って、FROMインスタンス識別子状態、TOインスタンス識別子状態、及びメモリオブジェクト内のオブジェクトデータコピー位置を表示する状態を含む部分的再配置状態を維持する過程と、
前記部分的再配置状態に応じるハードウェア読み込みバリアを用いて、ロード指向メモリアクセスを、前記メモリオブジェクトのFROMインスタンスまたはTOインスタンスの何れかに選択的に方向付けするA選択的方向付け過程と、
前記部分的再配置状態に応じるハードウェア書き込みバリアを用いて、ストア指向メモリアクセスを、前記メモリオブジェクトのFROMインスタンスまたはTOインスタンスの何れかに選択的に方向付けするB選択的方向付け過程とを含むことを特徴とし、
前記A選択的方向付け過程と前記B選択的方向付け過程が、前記ロード指向メモリアクセス及び前記ストア指向メモリアクセスを行うミューテータプロセスに対して整合性のあるオブジェクト表現を維持することを特徴とする方法。 - 演算処理装置であって、
プロセッサと、
メモリであって、そこに形成されるオブジェクトを前記プロセッサが参照可能な、該メモリと、
前記プロセッサがアクセス可能な、前記メモリにおける部分的に収集処理されたオブジェクトを特定するための部分的に収集処理されたオブジェクト識別手段であって、前記部分的に収集処理されたオブジェクト識別手段と、前記プロセッサによるオブジェクト参照操作のためのオブジェクト識別子との対応によって誤りハンドラが起動する、該部分的に収集処理されたオブジェクト識別手段と、
前記メモリのガーベッジコレクションを行うためのガーベッジコレクション手段であって、前記ガーベッジコレクション手段が、前記オブジェクトのなかに再配置操作が完了していないオブジェクトがあれば、そのようなオブジェクトのなかの特定の一つのオブジェクトを特定するように前記部分的に収集処理されたオブジェクト識別手段を維持し、これにより、前記プロセッサ上で実行可能なミューテータ手段への有界休止時間コミットメントに従って前記ガーベッジコレクション手段の中断が可能となっている、該ガーベッジコレクション手段とを有することを特徴とする演算処理装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/882,801 US5857210A (en) | 1997-06-26 | 1997-06-26 | Bounded-pause time garbage collection system and method including read and write barriers associated with an instance of a partially relocated object |
US08/882,801 | 1997-06-26 | ||
PCT/US1998/013476 WO1999000729A1 (en) | 1997-06-26 | 1998-06-25 | Bounded-pause time garbage collection system and method including read and write barriers associated with an instance of a partially relocated object |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2002506548A JP2002506548A (ja) | 2002-02-26 |
JP4043528B2 true JP4043528B2 (ja) | 2008-02-06 |
Family
ID=25381360
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP50584599A Expired - Lifetime JP4043528B2 (ja) | 1997-06-26 | 1998-06-25 | 部分的に再配置されたオブジェクトのインスタンスに関連する読み込みバリア及び書き込みバリアを有する有界休止時間ガーベッジコレクションシステム及びそのガーベッジコレクション方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US5857210A (ja) |
EP (1) | EP1000396A1 (ja) |
JP (1) | JP4043528B2 (ja) |
KR (1) | KR20010020494A (ja) |
WO (1) | WO1999000729A1 (ja) |
Families Citing this family (62)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
US6021415A (en) * | 1997-10-29 | 2000-02-01 | International Business Machines Corporation | Storage management system with file aggregation and space reclamation within aggregated files |
US6065020A (en) * | 1998-05-27 | 2000-05-16 | Microsoft Corporation | Dynamic adjustment of garbage collection |
US6131191A (en) | 1998-07-21 | 2000-10-10 | Intel Corporation | Code implants for compilers |
US6144970A (en) * | 1998-09-24 | 2000-11-07 | International Business Machines Corporation | Technique for inplace reorganization of a LOB table space |
US6317756B1 (en) * | 1998-10-07 | 2001-11-13 | International Business Machines Corporation | On-the-fly garbage collector |
AU2158900A (en) * | 1998-11-25 | 2000-06-19 | Sun Microsystems, Inc. | A method for enabling comprehensive profiling of garbage-collected memory systems |
US6629113B1 (en) | 1999-06-30 | 2003-09-30 | International Business Machines Corporation | Method and system for dynamically adjustable and configurable garbage collector |
US7096238B2 (en) | 1999-08-19 | 2006-08-22 | Sun Microsystems, Inc. | Dynamic feedback for determining collection-set size |
US6349314B1 (en) | 1999-09-29 | 2002-02-19 | Motorola, Inc. | Adaptive scheduler for mark and sweep garbage collection in interactive systems |
US6671707B1 (en) * | 1999-10-19 | 2003-12-30 | Intel Corporation | Method for practical concurrent copying garbage collection offering minimal thread block times |
US6678810B1 (en) * | 1999-12-30 | 2004-01-13 | Intel Corporation | MFENCE and LFENCE micro-architectural implementation method and system |
US6944637B2 (en) * | 2000-02-07 | 2005-09-13 | Esmertec Ag | Reduced size objects headers |
US6799191B2 (en) * | 2000-05-16 | 2004-09-28 | Sun Microsystems, Inc. | Object sampling technique for runtime observations of representative instances thereof |
US6839725B2 (en) * | 2000-05-16 | 2005-01-04 | Sun Microsystems, Inc. | Dynamic adaptive tenuring of objects |
US6502111B1 (en) * | 2000-07-31 | 2002-12-31 | Microsoft Corporation | Method and system for concurrent garbage collection |
US6865585B1 (en) * | 2000-07-31 | 2005-03-08 | Microsoft Corporation | Method and system for multiprocessor garbage collection |
US6738875B1 (en) | 2000-07-31 | 2004-05-18 | Microsoft Corporation | Efficient write-watch mechanism useful for garbage collection in a computer system |
EP1387273B1 (en) * | 2002-07-31 | 2010-07-21 | Texas Instruments Incorporated | Conditional garbage collection based on monitoring to improve real time performance |
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 |
US7035884B2 (en) * | 2002-11-05 | 2006-04-25 | Sun Microsystems, Inc. | Placement of allocation trains in the train algorithm |
US7188129B2 (en) | 2002-11-15 | 2007-03-06 | Sun Microsystems, Inc. | Merging trains in a collector based on the train algorithm |
US7209935B2 (en) * | 2002-11-27 | 2007-04-24 | Sun Microsystems, Inc. | Avoiding remembered-set maintenance overhead for memory segments known to be in a collection set |
US7069280B2 (en) | 2002-12-06 | 2006-06-27 | Sun Microsystems, Inc. | Collection-tick mechanism for a collector based on the train algorithm |
US7031990B2 (en) | 2002-12-06 | 2006-04-18 | Sun Microsystems, Inc. | Combining external and intragenerational reference-processing in a garbage collector based on the train algorithm |
US7024437B2 (en) * | 2002-12-06 | 2006-04-04 | Sun Microsystems, Inc. | Better placement of objects reachable from special objects during collection based on the train algorithm |
US7143124B2 (en) | 2002-12-06 | 2006-11-28 | Sun Microsystems, Inc. | Detection of dead regions during incremental collection |
US7085790B2 (en) * | 2002-12-06 | 2006-08-01 | Sun Microsystems, Inc. | Advancing cars in trains managed by a collector 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 |
US7146390B2 (en) | 2003-02-24 | 2006-12-05 | Sun Microsystems, Inc. | Staging the processing of remembered-set entries as part of collection based on the train algorithm |
US7096329B2 (en) * | 2003-02-27 | 2006-08-22 | Sun Microsystems, Inc. | Better placement of objects promoted into a generation managed by the train algorithm |
US7062519B2 (en) * | 2003-02-27 | 2006-06-13 | Sun Microsystems, Inc. | Incremental scanning of enormous objects to improve scheduling and pause-time behavior of garbage collection |
US20040186863A1 (en) * | 2003-03-21 | 2004-09-23 | Garthwaite Alexander T. | Elision of write barriers for stores whose values are in close proximity |
US7089272B1 (en) | 2003-06-18 | 2006-08-08 | Sun Microsystems, Inc. | Specializing write-barriers for objects in a garbage collected heap |
US7149762B1 (en) | 2003-08-20 | 2006-12-12 | Sun Microsystems, Inc. | Handling futile collections in the train algorithm through selective extension of the collection set |
US7404182B1 (en) | 2003-10-03 | 2008-07-22 | Sun Microsystems, Inc. | Deferring and combining write barriers for a garbage-collected heap |
US7114045B1 (en) * | 2003-12-23 | 2006-09-26 | Sun Microsystems, Inc. | Garbage collection with a dynamic window |
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 |
US7519639B2 (en) * | 2004-01-05 | 2009-04-14 | International Business Machines Corporation | Method and apparatus for dynamic incremental defragmentation of memory |
US7747659B2 (en) * | 2004-01-05 | 2010-06-29 | International Business Machines Corporation | Garbage collector with eager read barrier |
US7702663B2 (en) * | 2004-01-05 | 2010-04-20 | International Business Machines Corporation | Breaking read barrier to apply optimizations |
KR100608606B1 (ko) * | 2004-01-28 | 2006-08-03 | 삼성전자주식회사 | 적응형 가비지 컬렉션 방법 및 상기 방법을 수행하는 장치 |
US20050198088A1 (en) * | 2004-03-03 | 2005-09-08 | Sreenivas Subramoney | Method and system for improving the concurrency and parallelism of mark-sweep-compact garbage collection |
US7853628B1 (en) * | 2004-04-09 | 2010-12-14 | Oracle America, Inc. | Selective promotion policy for generational garbage collectors |
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 |
WO2006128062A2 (en) * | 2005-05-25 | 2006-11-30 | Terracotta, Inc. | Database caching of queries and stored procedures using database provided facilities for dependency analysis and detected database updates for invalidation |
US7953773B2 (en) * | 2005-07-15 | 2011-05-31 | Oracle International Corporation | System and method for deterministic garbage collection in a virtual machine environment |
CN102389332B (zh) * | 2005-07-21 | 2014-08-27 | 泰科医疗集团有限合伙公司 | 治疗中空解剖结构的系统和方法 |
US7685580B1 (en) * | 2005-08-30 | 2010-03-23 | Sun Microsystems, Inc. | Method and apparatus for selectively eliminating write barriers in snapshot-at-the beginning concurrent-marking garbage collectors |
JP5120455B2 (ja) * | 2008-08-11 | 2013-01-16 | 富士通株式会社 | ガーベジコレクションプログラム、及びガーベジコレクション方法、ならびにガーベジコレクションシステム |
US8412751B2 (en) * | 2010-12-15 | 2013-04-02 | International Business Machines Corporation | Determining whether a Java object has been scan-missed by a garbage collector scan |
US8825721B2 (en) * | 2011-10-03 | 2014-09-02 | Oracle International Corporation | Time-based object aging for generational garbage collectors |
US9053003B2 (en) | 2012-06-21 | 2015-06-09 | Microsoft Technology Licensing, Llc | Memory compaction mechanism for main memory databases |
WO2014142861A1 (en) * | 2013-03-14 | 2014-09-18 | Intel Corporation | Memory object reference count management with improved scalability |
US9535831B2 (en) | 2014-01-10 | 2017-01-03 | Advanced Micro Devices, Inc. | Page migration in a 3D stacked hybrid memory |
US10254998B2 (en) * | 2015-11-03 | 2019-04-09 | Samsung Electronics Co., Ltd. | Coordinated garbage collection of flash devices in a distributed storage system |
US20170123700A1 (en) | 2015-11-03 | 2017-05-04 | Samsung Electronics Co., Ltd. | Io redirection methods with cost estimation |
US11789649B2 (en) | 2021-04-22 | 2023-10-17 | Nvidia Corporation | Combined on-package and off-package memory system |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4922414A (en) * | 1982-12-17 | 1990-05-01 | Symbolics Inc. | Symbolic language data processing system |
US4775932A (en) * | 1984-07-31 | 1988-10-04 | Texas Instruments Incorporated | Computer memory system with parallel garbage collection independent from an associated user processor |
US4989134A (en) * | 1987-03-20 | 1991-01-29 | Hewlett-Packard Company | Method and apparatus for enhancing data storage efficiency |
US4807120A (en) * | 1987-04-30 | 1989-02-21 | Texas Instruments Incorporated | Temporal garbage collector with indirection cells |
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 |
US5218698A (en) * | 1991-11-22 | 1993-06-08 | Aerojet-General Corporation | Garbage collection system for a symbolic digital processor |
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 |
US5687368A (en) * | 1994-07-22 | 1997-11-11 | Iowa State University Research Foundation, Inc. | CPU-controlled garbage-collecting memory module |
US5590332A (en) * | 1995-01-13 | 1996-12-31 | Baker; Henry G. | Garbage collection, tail recursion and first-class continuations in stack-oriented languages |
-
1997
- 1997-06-26 US US08/882,801 patent/US5857210A/en not_active Expired - Lifetime
-
1998
- 1998-06-25 EP EP98932943A patent/EP1000396A1/en not_active Ceased
- 1998-06-25 WO PCT/US1998/013476 patent/WO1999000729A1/en not_active Application Discontinuation
- 1998-06-25 KR KR1019997012181A patent/KR20010020494A/ko not_active Application Discontinuation
- 1998-06-25 JP JP50584599A patent/JP4043528B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
US5857210A (en) | 1999-01-05 |
EP1000396A1 (en) | 2000-05-17 |
KR20010020494A (ko) | 2001-03-15 |
JP2002506548A (ja) | 2002-02-26 |
WO1999000729A1 (en) | 1999-01-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4043528B2 (ja) | 部分的に再配置されたオブジェクトのインスタンスに関連する読み込みバリア及び書き込みバリアを有する有界休止時間ガーベッジコレクションシステム及びそのガーベッジコレクション方法 | |
JP3957770B2 (ja) | 部分的に再配置されたオブジェクトのソースインスタンスに関連する書き込みバリアを含む有界休止時間ガーベッジコレクションシステム及びその方法 | |
JP3881702B2 (ja) | 部分的に再配置されたオブジェクトのソース及び目標インスタンスに関する書込みバリアを含む有界休止時間ガーベッジコレクションシステム及び方法 | |
EP0914633B1 (en) | Generation isolation system and method for garbage collection | |
EP0914634B1 (en) | Write barrier system and method including pointer-specific instruction variant replacement mechanism | |
EP0914632B1 (en) | Write barrier apparatus and method for trapping garbage collection page boundary crossing pointer stores | |
US7069281B2 (en) | Efficient collocation of evacuated objects in a copying garbage collector using variably filled local allocation buffers | |
US7035884B2 (en) | Placement of allocation trains in the train algorithm | |
US7412580B1 (en) | Concurrent incremental garbage collector with a card table summarizing modified reference locations | |
US7062519B2 (en) | Incremental scanning of enormous objects to improve scheduling and pause-time behavior of garbage collection | |
US20040111445A1 (en) | Method and mechanism for finding references in a card in time linear in the size of the card in a garbage-collected heap | |
US7062518B2 (en) | Efficiently supporting the existence of long trains in a generation managed by the train algorithm | |
US7676801B1 (en) | Scanning of evacuated objects in a generation managed by the train algorithm | |
US7096329B2 (en) | Better placement of objects promoted into a generation managed by the train algorithm | |
US7653793B1 (en) | Use of memory protection to implement replicating collection in an incremental, copying garbage collector | |
US7024437B2 (en) | Better placement of objects reachable from special objects during collection based on the train algorithm | |
US7149762B1 (en) | Handling futile collections in the train algorithm through selective extension of the collection set | |
US20040172428A1 (en) | Numbering sequences of cars with the same number in a generation managed by the train algorithm |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050809 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20051108 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20051226 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060209 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060829 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061129 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20061128 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20070122 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070410 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20070615 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20070730 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20070806 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20070914 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070907 |
|
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: 20071023 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20071114 |
|
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: 20101122 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111122 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111122 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121122 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121122 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131122 Year of fee payment: 6 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |