JP2000513850A - ジェネレーション分離システム及びガーベッジコレクションのための方法 - Google Patents

ジェネレーション分離システム及びガーベッジコレクションのための方法

Info

Publication number
JP2000513850A
JP2000513850A JP10546157A JP54615798A JP2000513850A JP 2000513850 A JP2000513850 A JP 2000513850A JP 10546157 A JP10546157 A JP 10546157A JP 54615798 A JP54615798 A JP 54615798A JP 2000513850 A JP2000513850 A JP 2000513850A
Authority
JP
Japan
Prior art keywords
store
pointer
generation
instruction
trap
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.)
Ceased
Application number
JP10546157A
Other languages
English (en)
Inventor
オコナー、ジェイムズ・マイケル
トレンブレイ、マーク
ビシン、サンジェイ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JP2000513850A publication Critical patent/JP2000513850A/ja
Ceased legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • G06F12/0276Generational garbage collection
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users
    • Y10S707/99953Recoverability
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99956File allocation
    • Y10S707/99957Garbage collection

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)

Abstract

(57)【要約】 ジェネレーション分離のためのアーキテクチャ的サポートが、ジェネレーション間ポインタストアのトラップによって提供される。ポインタストアがジェネレーション間にまたがるとの識別は、トラップされるべきストアターゲットオブジェクト及びストアポインタデータジェネレーション対によりプログラム可能にエンコードされるジェネレーション間ポインタストアトラップマトリクスに応答するストアバリアによってなされる。ライトバリア及びジェネレーション間ポインタトラップマトリクスによれば、トラップされるべきジェネレーション対のプログラム可能なフレキシブルな定義が提供され、さまざまなジェネレーション的ガーベッジコレクション方法のためのサポートを備えたガーベッジコレクタの実施態様が提供される。このような方法としては、想起されたセットに基づく方法、カードマーキング式方法、ライトバリアに基づくコピーコレクタ方法、マークシープ方法などがあり、更にこれらの組み合わせやジェネレーション的に収集されたメモリスペースの成熟した部分を管理するためのトレーンアルゴリズム式方法が含まれる。ポインタ依存ストア命令置換手段によって、本発明に基づく実施態様において、ポインタストアに対してというだけでなく、特定のガーベッジコレクション方法や複数の方法の組み合わせにとって関心のあるジェネレーション間ポインタストアの特定のセットに対して、正確なバリアを提供することが可能となる。

Description

【発明の詳細な説明】 ジェネレーション分離システム及びガーベッジコレクションのための方法発明の背景 発明の技術分野 本発明はガーベッジコレクションに関し、特にガーベッジコレクタに於てジェ ネレーションを分離するためのシステム及び方法に関する。関連技術の説明 多くのプログラム言語は、伝統的に、メモリの動的アロケーション(割り当て )及びディアロケーション(割り当て解除)の責任をプログラマの記憶に負わせ ていた。例えば、Cプログラム言語に於ては、mallocプロシージャによってまた はその擬似命令(variant)によってヒープからメモリを割り当てる。ポインタ変 数pが与えられると、p=malloc(size of(SomeStruct))というステートメントに 対応するマシン命令の実行により、SomeStructデータ構造を表すために必要なサ イズのメモリオブジェクトのために新たに割り当てられた記億領域にポインタ変 数pをポイントさせる。使用後には、ポインタ変数pにより識別されるメモリオ ブジェクトは、free(p)を呼ぶことにより割り当て解除される。Pascal及びC++言 語は、メモリを明示的に割り当て及び割り当て解除するための同様の構造を提供 する。 残念ながら、動的に割り当てられた記憶領域は、特定の演算過程のためのルー ト参照位置のセットに、記憶領域に対する参照、即ちポインタが残されていない と到達不能になる。このように到達不能であってしかも解放されていないメモリ オブジェクトはガーベッジ(garbage)と呼ばれる。依然として参照されているメ モリオブジェクトを割り当て解除す ることもできる。この場合、ぶら下がり参照(dangling reference)が形成され る。一般に、ダイナミックメモリを正しく管理することは困難である。多くのプ ログラム言語に於て、データ構造を、それを生成したプロシージャの後に渡って 残存させるためにはヒープ割り当てが必要となる。これらのデータ構造が更なる プロシージャまたは機能に受け継がれると、プログラマやコンパイラが、それを どの時点で割り当て解除するのが安全であるかを判定することが困難或いは不可 能となる。 この困難のために、ダイナミックメモリ管理の魅力的な代替モデルとして、ガ ーベッジコレクション即ちヒープ割り当てされた記憶領域を、プログラムによっ て最後に使用された後に自動的に再利用可能とするものがある。ガーベッジコレ クションは、特にJAVA言語、Prolog、Lisp、Smalltalk、Eiffel、Dylan、M L、Haskel、Miranda、Oberon等のアルゴリズム言語にとって特に魅力的である 。これらの言語はデータ共有や、遅延実行などを行い、手続き型言語に比較して 、より予測困難な実行順序を伴う。ガーベッジコレクション及びそのための古典 的なアルゴリズムについては、Jones & Lins,''Garbage Collection:Algorithms for Automatic Dynamic Memory Manegement'',pp.1-41 Wiley(1996)を参照され たい。 3つの古典的なガーベッジコレクション方法として、参照カウンティング(ref erence counting)、マークスイープ(mark-sweep)、コピストレージ回復(copying storage reclamation)等の方法がある。第1の参照カウンティング法は、アク ティブメモリオブジェクト或いはルート参照位置から各メモリオブジェクトへの 参照即ちポインタの数のカウントを継続的に維持することに基づく。新たなメモ リオブジェクトが割り当てられ、それに対してポインタが割り付けられると、メ モリオブジェクトの参照カウントは1にセットされる。その後、このメモリオブ ジェクトにポイ ンタが参照するようにセットされる度毎に、メモリオブジェクトの参照カウント が1ずつ増大させられる。メモリオブジェクトに対する参照が削除或いは上書き されると、参照カウントが1ずつ減らされる。参照カウントが0であるメモリオ ブジェクトは到達不能であって、ガーベッジとして収集される。参照カウント式 のガーベッジコレクタの実施態様は、通常各メモリオブジェクトに参照カウント と呼ばれる追加のフィールドを有しており、新たなオブジェクト、オブジェクト の削除或いはポインタのアップデートの機能の一部としてのカウンタの増減を行 う機能を有する。 それに対して、トレーシングコレクタ(tracing collector)法は、生きた即ち 参照可能なメモリオブジェクトを特定するために、メモリの参照チェーンを横断 することを含む。このようなトレーシングコレクタ法の一つとして、メモリの参 照チェーンを横断して生きたメモリオブジェクトを識別しマークするようなマー クスイープ法がある。マークされていないメモリはガーベッジであって、回収さ れ、別のスイープフェイズの間にフリープールに戻される。マークスイープガー ベッジコレクタ法は通常、各メモリオブジェクトにマークビットと呼ばれる追加 のフィールドを有している。マークコンパクトコレクタ(mark-compact collecto r)は、伝統的なマークスイープ法に対して短縮(compaction)の機能を付加する。 短縮は、生きたオブジェクトを再配置し、フラグメンテーションを削減する利点 がある。参照カウント法も短縮を用いることができる。 他のトレーシング方法、即ちコピーコレクションは、メモリまたはその一部を 2つの半空間に分割し、一方に現在のデータを記憶し。他方に古いデータを記憶 する。コピーガーベッジコレクションは、これらの2つの半空間の役割を逆転す ることにより開始される。コピーコレクタは次に、古い半空間FromSpace内の生 きたオブジェクトを横断して、到達 可能なオブジェクトを新たな半空間ToSpaceにコピーする。FromSpace内の全ての 生きたオブジェクトを横断して、かつコピーした後、データ構造のレプリカがTo Space内に存在する。要するに、コピーコレクタはガーベッジの中から生きたオ ブジェクトを探し出すことになる。コピーコレクションの有意義な副次的効果は 、生きたオブジェクトがToSpace内に短縮され、フラグメンテーションを減少さ せることである。 ジェネレーション的な方法は次の2つの発見に基づくものである。(1)メモリ オブジェクトは通常早死にする。(2)トレーシング方法は比較的長生きのオブジ ェクトを横断して、コピーし或いは再配置するためにかなりのリソースを消費す る。ジェネレーション的なガーベッジコレクション方法は、ヒープを2つまたは それ以上のジェネレーションに分け、オブジェクトを年齢によって区分し、若い ジェネレーションに対して収集の努力を集中し或いは少なくともより熱心に収集 する。若いジェネレーションは小さいものであるため、ガーベッジコレクション に関連する中断時間は平均的に短く保たれる。ジェネレーション内のガーベッジ コレクションは、コピー、マークスイープ、その他のガーベッジコレクション方 法によって行われる。ジェネレーション的なガーベッジコレクションを実施する ためには、変異プロセス、ガーベッジコレクタ或いはこれら両者の組み合わせが 、ジェネレーション間ポインタを識別し、それらをガーベッジコレクタによって ルートセットの一部として取り扱い得るようにすることが重要である。変異とは 、コンピュータシステムに於て、ガーベッジコレクションとは別に、有用な仕事 を行うプロセスに於てメモリ内の参照チェーンのグラフを変更させるプロセスで ある。 ジェネレーション間ポインタは、通常変異プロセスポインタ記憶装置またはオ ブジェクトを含むポインタの昇進(promotion)によって引き起こされる。昇進し たジェネレーション間ポインタは、昇進に際するコレ クタプロセスによって容易に検出できる。しかしながら、古いジェネレーション をスキャンしてポインタを若いジェネレーションに移すような、多大なコストを 要するプロセスを行わない限り、ジェネレーション間ポインタストアを検出する ために、ポインタストアをトラップし、記録しなければならない。バリアが良く 知られており、通常ページングシステムからなるオペレーティングシステムのサ ポートにより、ハードウェアとして或いはソフトウェアとして実施される。Jone s & Lins,''Garbage Collection:Algorithms for Automatic Dynamic Memory Ma negement'',pp.165-74 Wiley(1996)を参照されたい。特に、この文献は、ジェネ レーション間ポインタ、ライトバリア、エントリーテーブル、想起されたセツト (remembered set)、逐次的なストアバッファ、ハードウェアサポートを伴うペー ジマーキング、仮想メモリサポートを伴うページマーキング及びカードマーキン グについて議論している。 ポインタストアチェッキングのためのインラインコードなどのようなソフトウ ェア技術が用いられた場合、実行時間及びインラインコードスペースのオーバー ヘッドが課題となる。ソフトウェアライトバリアの1つの例がUngar(David M.U ngar,''Generation Scavenging:A Non-distruptive High Performance Storage Reclamation Algorithm'',ACMSIGPLAN Notices,19(5),pp.157-67(1984))により 提案されている。このライトバリアは、(1)ポインタがストアされつつあるか 否か及び(2)ポインタが若いジェネレーションのオブジェクトに向けられ、古 いジェネレーションのオブジェクト内にストアされているか否かをチェックする ために、ストアをインターセプトする。そのような場合には、古いジェネレーシ ョンのオブジェクトのアドレスが、想起されたセットに加えられる。ソフトウェ アバリアは、それらが適用される演算に対して、大きなオーバーヘッドを課す。 例えば、インラインコードにより提 供されるソフトウェアバリアは、ポインタがストアであるか否か、及びポインタ がジェネレーション間であるか否かをチェックするための追加の命令レイテンシ ーを加え、コードの全量を増大させる。コードの増大はキャッシュの性能を損な う。 このようなソフトウェアバリアに代わるものとしては、オペレーティングシス テムの仮想メモリページプロテクト機構を用いて、プロテクトされたページのア クセスをトラップしたり、アップデートされたジェネレーション間ポインタフィ ールドによってオブジェクトを含み得るページのマップとして、ページ変更汚れ ビット(dirty bits)を用いることがある。このような手法は、通常ポインタスト アの識別を延期させ、特にジェネレーション間ポインタストアの識別を遅らせ、 コレクションの時まで、全てのストアの中からの特にジェネレーション間ポイン タストアの識別を遅れさせる。しかしながら仮想メモリページサイズはガーベッ ジコレクションサービスにあまり適していないのが一般的である。例えば、ペー ジは、オブジェクトに比較して大きくなりがちであって、仮想メモリ汚れビット は、ポインタストアばかりでなく、関連するページに対するあらゆる変更を記憶 する。その結果、ジェネレーション間ポインタを探すためにページをスキャンす るためのコストが高くなる。 インラインコードソフトウェアライトバリアに代わる更に別の方法としては、 ハードウェアバリアサポートがある。多くのライトバリア法は、ポインタ及び非 ポインタストアを区別せず、全てのライトを記録し、コレクションの時までジェ ネレーション間ポインタについてのチェックを延期するにも拘らず、Symbolics 3600に於けるガーベッジコレクションのためのハードウェアサポートの大幅な使 用により、ページマーキングスキームを効率的に実施することができた。Symbol ics 3600の3つの特徴がこれを可能にした。第1に、ハードウェアライトバリア はジェネレ ーション的データに対するポインタでないあらゆるワードを無視した。ジェネレ ーション的メモリに対する参照をページにストアするときは、ライトバリアハー ドウェアが、対応するビットをガーベッジコレクションページテーブルに設定す る。第2に、タグ付き構造は、オブジェクトの境界を考慮する必要を無くすと同 時に、ポインタワードがタグを用いた非ポインタワードから常に区別できること により、ジェネレーション的ポインタに対するチェックをコレクションの時に行 うことができる。Symbolics 3600は2ビットメージャーデータタイプタグ、4ビ ットマイナータグ及び28ビットアドレスを、36ビットワード内に収容する。 最後に、ページは256ワードであって、一般的な仮想メモリページよりも小さ く、そのために、コレクションの時にページを高速でスキャンすることができた 。Jones & Lins,''Garbage Collection:Algorithms for Automatic Dynamic Mem ory Manegement'',pp.169-70 Wiley(1996)を参照されたい。この文献は、Symbol ics 3600上でのハードウェアサポートを伴うページマーキングについての記載を 含む。また、Moon,''Architecture of the Symbolics 3600'',In Proceedings of the 12th Annual International Symposium on Computer Architecture,pp.7 6-83(1985)も参照されたい。この文献は、オブジェクトのストアされた表現につ いての記載を含む。 ジェネレーション間ポインタを識別するプロセスは、かなりのコレクション時 スキャニングを必要とする。1つの改良方法では、収集されたメモリスペース、 即ちヒープを、カードと呼ばれる小さな領域にセグメント化することである。カ ードマーキングは、カードが適正なサイズであれぱ幾つもの利点をもたらす。こ れらは仮想メモリページよりも小さいことから、コレクション時スキャニングの 量が削減される。その一方、カードテーブルにより占められるスペースの大きさ は、ワード毎のマー キング方法のために必要な量よりも小さい。一般に、カード内のワードか変更さ れる度毎に、カードテーブルに1ビットが無条件にセットされる。カードマーキ ングコレクタは、コレクション時にジェネレーション間ポインタを求めて汚れた カードをスキャンしなければならない。カードをスキャンするためのコストは、 実行されたストアの数よりも、むしろマークされたカードの数及びサイズに比例 する。なぜなら、繰り返しが発生することがないからである。Wilson and Moher ,''Design of the Opportunistic Garbage Collector'',ACM SIGPLAN Notices,2 4(10),pp.23-35(1989)を参照されたい。 ジェネレーション的な方法は、ガーベッジコレクションに要する時間を効果的 に削減することができ、コレクションの多くが仕事即ちジョブの中断を伴わない ものであるのに対し、古いジェネレーションのコレクションはジョブを中断させ る。ジョブの中断を伴うことなくオブジェクトの古いジェネレーションを収集す るために、Hudson及びMossの両氏は、各コレクション時に、成熟したオブジェク トスペースの境界の定められたサイズの領域を処理するアルゴリズムを提案した 。アルゴリズムは本質的に歩進的なものであって、最終的には必ず全てのガーベ ッジを収集する。Hudson及びMossの両氏は、問題の解決方法を記述するために、 列車の例えを用いており、客車は境界の定められたサイズの領域を表し、列車は 客車を含む連結構造のグループを表す。このシステムは、特定のハードウェア即 ち仮想メモリ機構に依存しない点で効率的である。Hudson and Moss,''Increme ntal Collection of Mature Objects'',Proceedings of International Worksh op on Memory Management,St.Malo,France(16-18 Septemper,1992)を参照され たい。発明の開示 本発明は、ガーベッジコレクタの実施を容易に行い得るようにするよ うなシステム及び方法及び装置並びにそのようなシステム、方法及び装置を具現 するようなコンピュータプログラム製品を提供するものである。特に、本発明は 、ジェネレーション間ポインタストアをトラップすることを通じてジェネレーシ ョンの分離をするためのアーキテクチャ的サポート(architectural support) を提供する。ポインタストアがジェネレーション間にまたがるものであるとの識 別は、トラップされるべきストアターゲットオブジェクト及びストアポインタデ ータジェネレーション対によりプログラム可能にエンコードされるジェネレーシ ョン間ポインタストアトラップマトリクスに応答するストアバリアによってなさ れる。ライトバリア及びジェネレーション間ポインタトラップマトリクスによれ ば、トラップされるべきジェネレーション対のプログラム可能なフレキシブルな 定義が提供され、さまざまなジェネレーション的ガーベッジコレクション方法の ためのサポートを備えたガーベッジコレクタの実施態様が提供される。このよう な方法としては、想起されたセットに基づく方法、カードマーキング式方法、ラ イトバリアに基づくコピーコレクタ方法、マークシープ方法などがあり、更にこ れらの組み合わせやジェネレーション的に収集されたメモリスペースの成熟した 部分を管理するためのトレーンアルゴリズム式方法が含まれる。 ポインタ依存ストア命令置換手段によって、本発明に基づく実施態様において 、ポインタストアに対してというだけでなく、将来開発されるようなガーベッジ コレクション方法を含む特定のガーベッジコレクション方法や複数の方法の組み 合わせにとって関心のあるジェネレーション間ポインタストアの特定のセットに 対して、正確なバリアを提供することが可能となる。ここでいうポインタストア の正確な識別は、収集されたメモリ記憶領域に対してインラインにエンコードさ れたタグを必要とせず、このようなタグをサポートするための標準的でないワー ドのサイ ズを必要としない。 本発明は、ジェネレーション間ポインタストアトラップマトリクスのハードウ ェアレジスタによる実現及びそのようなハードウェアレジスタの内容に基づくガ ーベッジコレクショントラップトリガ方程式の論理的な実現に特に影響を受ける 。しかしながら、交互のストアまたはジェネレーション間ポインタストアトラッ プマトリクスのエンコード及びガーベッジコレクショントラップトリガ方程式の ファームウェアまたはマイクロコードによる実現も適している。さらに、汎用ま たは特定用途ソフトウェアによる具現も、特にハードウェアプロセッサ上での実 行の代わりとなるソフトウェア仮想マシン命令プロセッサの実装において適して いる。ポインタ依存命令によるポインタ非依存命令の実行時間置き換え(execut ion time replacement)は、非ポインタストア命令がジェネレーション間ポイン タストアトラップチェックをバイパスすることを可能とするが、実施例によって はこの利点が生じないこともあり得る。これらの及び他の変形例は本願の請求の 範囲に入るものである。 本発明に基づく一実施例による装置は、動的割り当てストレージと、ジェネレ ーション間ポインタストアトラップマトリックスと、ジェネレーション間ポイン タストアに対するライトバリアとを含む。動的割り当てストレージの内部に形成 されたオブジェクトへの参照は、それに関連づけられたジェネレーションメンバ ーシップタグを有する。ライトバリアは、ターゲットオブジェクト参照により識 別されるターゲットオブジェクトにストアされる前記ターゲットオブジェクト参 照及びオブジェクト参照データのそれぞれのジェネレーションメンバーシップタ グ間の選択された対応関係に応答してストア命令をトラップする。前記した選択 された対応関係は、ジェネレーション間ポインタストアトラップマトリクスによ ってエンコードされる。 更なる実施例では、前記装置はジェネレーション間ポインタストアトラップマ トリックスの表現を含む仮想マシーン命令プロセッサを含む。ライトバリアは、 この仮想マシーン命令プロセッサ上で実行可能なポインタ依存ストア命令コード を含む。ポインタ依存ストア命令コードの実行は、ターゲットオブジェクト参照 及びオブジェクト参照データにそれぞれ関連づけられたジェネレーションタグに 基づいて、ジェネレーション間ポインタストアマトリックスによってトラップさ れるべきか否かについて指示されたジェネレーション間ポインタのストアを、ポ インタ依存ストア命令の1つの特定の実行が行うか否かを判定する。もしそうで あれば、ポインタ依存ストア命令コードの実行は、ガーベジコレクションフォー ルトハンドラへのトラップを行う。 本発明に基づく別の実施例によると、ジェネレーション間ポインタストアをト ラップするための方法であって、コンピュータで読むことのできるストレージ内 にジェネレーション間ポインタストアトラップマトリックスを形成する過程と、 前記ジェネレーション間ポインタストアトラップマトリックスへのインデックス 付けを行う過程と、そのようにインデックス付けされた前記ジェネレーション間 ポインタストアトラップマトリックスの要素に於いてエンコードされたトラップ インディケーションに基づいて選択的にトラップする過程とを含むことを特徴と する方法が提供される。前記したインデックス付けは、ターゲットオブジェクト 参照及び変異プロセスストアオペレーションによって格納されるオブジェクト参 照データにそれぞれ関連づけられたジェネレーションメンバーシップタグを用い る。 本発明に基づく更に別の実施例によると、ジェネレーション間ポインタストア をトラップするためのアーキテクチャ的サポートは、ジェネレーション間ポイン タストアトラップマトリックスと、ライトバリア手段 とを有する。ライトバリア手段は、ジェネレーション間ポインタストアマトリッ クスに応答する。(1)前記ストアのターゲットメモリオブジェクトが関連づけ られた第1ジェネレーションタグを有し前記ストアのオブジェクト参照データが 関連づけられた第2のジェネレーションタグを有し、かつ(2)前記ジェネレー ション間ポインタストアトラップマトリックスが第1ジェネレーションターゲッ トメモリオブジェクト及び第2ジェネレーションオブジェクト参照データ対に向 けられたトラップをエンコードする場合、前記変異プロセスによるストアの評価 によってガーベッジコレクションフォルトハンドラがトリガされる。図面の簡単な説明 本発明は、添付の図面を参照することにより、当業者であれば、その様々な目 的、特徴及び利点と共に、より良く理解されるであろう。 図1は本発明に基づくガーベッジコレクションジェネレーション分離のための サポートを含む仮想マシンハードウェアプロセッサの実施例を示すブロック図で ある。 図2は、図1のハードウェアプロセッサ及び例として与えられたJAVA仮想 マシン実施態様のソフトウェア要素を含むJAVAアプリケーション環境のソフ トウェア及びハードウェア要素間の相互的な(buildsupon)関係を示す。 図3は、図1のハードウェアプロセッサのいくつかの可能なアドオンを示す。 図4は、図1のハードウェアプロセッサ上で実行される変異プロセスによりな されるジェネレーション間及びカード境界横断ポインタストアのトラッピングの ための本発明の実施例に基づき提供されるライトバリアの動作を示す。 図5は、本発明の実施例に基づくオブジェクト参照(objectref)フォーマ ットを示す。 図6Aは、本発明の実施例に基づくオブジェクトフォーマットを示す。 図6Bは、本発明の実施例に基づく別のハンドル付オブジェクトフォーマット を示す。 図7は、ジェネレーション及びカード境界横断ポインタストアのトラッピング を容易にするようなポインタ依存バイト構造に、非ポインタ依存バイトコードを 動的に置換するために本発明に基づき用いられたバイトコード置換キャッシュの 一実施例を示す。 図8は、本発明に基づくガーベッジコレクションのための構造的サポートによ りサポート可能な、想起されたセットに基づくジェネレーションコレクタ方法を 示す。 異なる図面に於ける同様の符合は、同様または同一の部分を示す。好適実施例の説明 以下に、本発明を実施するための最良の形態と考えられる態様を詳しく説明す る。この記載は、あくまでも本発明の例示であって、本発明を範囲を限定するも のではないことを了解されたい。 ここでガーベッジコレクションジェネレーションの分離のために本明細書に記 載されている構造的サポートは、ジェネレーション間ポインタストアトラップマ トリックス、オブジェクト参照ジェネレーションタグ付け、ジェネレーション間 ポインタストアトラップマトリックス及びオブジェクト参照ジェネレーションタ グ付けに応答するライトバリア、ガーベッジコレクショントラップハンドラ、及 びライトバリアサポートによ非ポインタ依存命令のるポインタ依存命令への置換 のための構造を含む。 一般に、本発明に基づく実施例は、ガーベッジコレクションシステムに於ける ジェネレーションを分離するための構造的なサポートの様々な 分野に用いることができる。このような構造的なサポートはハードウェア、ソフ トウェア或いはそれらの組み合わせとして提供されるが、概ねハードウェアとし て提供される構造的サポートについての実施例は一般に性能が高く、メモリの必 要量が小さいという利点がある。そこで、例として、ハードウェア式の仮想マシ ン命令プロセッサの実施例を以下に説明する。しかしながら、この記述に基づき 、当業者であれば、ソフトウェアに基づくような別の実施例を容易に思いつくこ とができ、そのようなインタプリタ、ジャストインタイムコンパイラなどのソフ トウェアとして実現された仮想マシン命令プロセッサなども、添付の本発明の特 許請求の範囲に含まれるものである。JAVA仮想マシン命令プロセッサの実施例 図1は、仮想マシン命令プロセッサ100のハードウェアとして構成された実 施例を示すもので、このハードウェア100は本発明に基づく有界休止時間再配 置ガーベッジコレクション(bounded pause time relocating garbage collectio n)のためのサポートを含み、プロセッサ構造に依存しないJAVA仮想マシン命 令を直接的に実行する。仮想マシン命令を実行する上でのハードウェアプロセッ サ100の性能は、インテルPENTIUMマイクロプロセッサやサンマイクロ システムのULTRASPARCプロセッサ等のハイエンドCPUよりも高い( ULTRASPARCは、カリフォルニア州Mountain Viewに所在するSun Mircr osystemsの商標であり、PENTIUMは、カリフォルニア州Sunnyvaleに所在 するIntel Corpの商標である。)。更に、ハードウェアプロセッサ100の性能 は、JAVAジャストインタイム(JIT)コンパイラを備えたハイエンドCPU よりも優れている。ハードウェアプロセッサ100は低コストであって、電力消 費が少ない。そのため、ハードウェアプロセッサ100はポータブルの用途に示 している。 ハードウェアプロセッサ100は、概ねハードウェアとしてJAVA仮想マシ ン命令プロセッサを構成するものであって、そうでない場合にはソフトウェアイ ンタプリタによって必要とされるような25−50キロバイトの、リードオンリ ーメモリやランダムアクセスメモリ等のメモリが不要となり、或いは、それを他 の用途に転用することができる。ガーベッジコレクションのためのハードウェア サポートは、さらにガーベッジコレクションのためのインラインコード(コンパ イラにより提供されるリード及びまたはライトバリアサポート)を低減し、限定 されたメモリの利用状況を改善し、ガーベッジコレクションに要するオーバーヘ ッド或いは休止時間を削減することにより、メモリを比較的必要としないJAV A仮想マシン構造のためのさらなる利点を提供するものである。ネットワーク製 品のためのインターネットチップや、セルラーフォーンプロセッサ、その他の通 信用集積回路或いは他の低電力、低コストの用途例えば埋め込み(embedded)プロ セッサや、ポータブル装置など大きなメモリ伴う高コストが受け入れられないよ うな環境に於いてハードウェアプロセッサ100が有利である。 大きなメモリが可能であるような環境に於いても、ガーベッジコレクションの ためのハードウェアサポートは、バリアの実施に関連するオーバーヘッドを減少 させ、メモリの有効利用を促進し、ガーベージコレクタの再配置のための休止時 間を減少させることができる。特に、ハードウェアプロセッサ100は、JAV A仮想マシン構造の枠組みの中で、ガーベッジコレクション方法のための利点を 提供する。しかしながら、本明細書の記載に基づき、当業者であれば、インター プリットされたJITコンパイラJAVA仮想マシン構造やその他の非JAVA 仮想マシン構造を含む様々なJAVA仮想マシン構造の変形例に思い至るであろ う。 本明細書に於いて、仮想マシンとは、命令セットを有し様々なメモリ領域を用 いる、現実のコンピュータと同様な抽象的なコンピュータを意味する。仮想マシ ンの使用は、仮想マシン構造によって実行されるプロセッサ構造に依存しない仮 想マシン命令のセットを規定する。一般に、仮想マシン構造はハードウェアプロ セッサ100のようなハードウェアによって、インタープリットされたJITコ ンパイラ構造の場合のようにソフトウェアとして構成され、或いはハードウェア 及びソフトウェアの組み合わせとして構成される。各仮想マシン命令は、実行さ れるべき特定の演算を規定する。仮想マシンは、仮想マシン命令を生成するため に用いられる或いは仮想マシンの実現の基礎となるようなコンピュータ言語を理 解する必要がない。仮想マシン命令のための特定のフォーマットを理解するのみ でよい。ある実施例に於いては、仮想マシン命令はJAVA仮想マシン命令から なる。各JAVA仮想マシン命令は命令特定情報、オペランド、その他必要な情 報をエンコードする1つまたは複数のバイトを含む。 ある実施例に於いては、図1のハードウェアプロセッサ100は、バイトコー ドを含むJAVA仮想マシン命令を処理する。ハードウェアプロセッサ100は バイトコードの多くを直接的に実行する。しかしながら、バイトコードのあるも のの実行は、マイクロコードとして実行される。Lindholm & Yellen,''The JAV ATM Virtual Machlne Specification''(Addlson-Wesley,1996),ISB N0-201-63 452-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クラス2 42、JAVA OSウィンドウズ243、JAVA OSグラフィックス24 8、TCP244、NFS245、UDP246、IP247、イーサーネット 222、キーボード249、及びマウス221ソフトウェア要素を含むアプレッ ト/アプリケーショ ンプログラミングインターフェイス220を規定するソフトウェア要素を利用す るもので、ある実施例に於いてはJAVAバイトコードを含む。図2に示された 実施例に於いては、JAVA OSグラフィックス248及びイーサーネット2 22ソフトウェア要素はまた、ベースラインJAVA仮想マシン使用により規定 されたものを越えた拡張バイトコードをも含む。埋め込みアプリケーションプロ グラミングインターフェイス(EAPI)230の要素は、ファンデーションクラ ス(foundation class)231、JAVA仮想マシン仕様(JAVA Virtual Machine Specification)に基づくJAVA仮想マシン構造250のハードウェア及びソ フトウェア要素を含む。 JAVA仮想マシン構造250は、ハードウェアプロセッサ100と、JAV A仮想マシン命令を評価するために該プロセッサ上にて実行可能なトラップコー ドとを含む。さらに、JAVA仮想マシン構造250は、ガーベッジコレクショ ンについて以下に記載されているようなポインタストアバイトコード及びメモリ アクセスバリアを含むような拡張バイトコードのためのハードウェアサポートや 、クラスローダ252、バイトコードベリファイア253、スレッドマネージャ 254、ガーベッジコレクタ251ソフトウェア及びマイクロカーネル255を 含む。JAVA仮想マシン構造250は、JAVA仮想マシン仕様に適合した部 分250a及び構造に依存する部分を含む。JAVA仮想マシン仕様はガーベッ ジコレクションが提供されることを特定しているが、どのようなガーベッジコレ クション方法を使うかはその構造に依存する。 JAVA仮想マシン構造250の実施例としてのハードウェアプロセッサ10 0に関して以下に記載されているガーベッジコレクションの構造的特徴は、特に ジェネレーション的ガーベッジコレクション方法に適合している。しかしながら 、本明細書の記載に基づき、当業者は、非ジ ェネレーション的コレクタ構造、インクリメント式マーク短縮コレクタ、コピー コレクタの再配置に対して制限された休止時間サポートの応用が可能であること に容易に思い至り得るものである。 図3Aは、より複雑なシステムを構成するためのハードウェアプロセッサ10 0に対するいくつかの可能なアドオンを示している。NTSCエンコーダ301 、MPEG302、イーサーネットコントローラ303、VIS304、ISD N305、I/Oコントローラ306、ATMアセンブリ/リアセンブリ307 及び無線リンク308からなる8つの機能のいずれをサポートする回路も、本発 明のハードウェアプロセッサ100と同一のチップ内に集積化することができる 。 さらに、当業者であれば容易に理解できるように、上記したアドオン回路のい ずれかを備えたハードウェアプロセッサ100の実施例を含む、ハードウェアプ ロセッサ100が組み込まれた様々なコンピュータシステムに思い至り得ること ができよう。例としてのコンピュータシステム100は、物理的なメモリ(RA M及びまたはROM)、コンピュータ読み取り可能なメディアのアクセスデバイ ス(ディスク、CD−ROM、テープ及びまたはメモリ技術に基づくコンピュー タ読み取り可能メディアアクセスデバイスなど)、入出力インターフェイス(キ ーボード及びまたはポインティングデバイス或いはディスプレイデバイスなどの ためのインターフェイス)及び通信デバイスまたはインターフェイスを含む。適 当な通信デバイス及びまたはインターフェイスとしては、ネットワーク或いはテ レフォニーに基づく通信、公共スイッチネットワークの有線または無線のものを 含む通信ネットワークとのインターフェイス或いは専用ネットワークへのインタ ーフェイスを含む。本発明のある実施例に於いては、JAVAバイトコードを含 む命令ストリームが、ハードウェアプロセッサ100により実行されるべく、こ のような通信デバイスま たはインターフェイスを介して送信または受信される。ガーベッジコレクションのための構造的サポート ハードウェアプロセッサ100は、ガーベッジコレクションソフトウェアを実 行可能なジェネレーション的コレクタ方法を含む様々なガーベッジコレクション 方法のための構造的サポートを提供する。特に、ハードウェアプロセッサ100 は、プログラマブルストアフィルタリング、タグ付オブジェクト参照及びオブジ ェクトヘッダフォーマット及び拡張バイトコードサポートを含む。プログラマブルストアフィルタリング 図4は、ストアをヒープへとプログラマブルフィルタリングするためのサポー トを行うスーパバイザライタブルレジスタGC_CONFIGの一実施例を示す。図1に 於いて、レジスタGC_CONFIGはレジスタ144に含まれ、実行ユニット140に 対してアクセス可能である。ある実施例に於いては、レジスタGC_CONFIGの12 ビットは、ページ間ポインタストアチェックのためのページサイズを選択するた めに用いられるフィールドGC_PAGE_MASKを規定する。フィールドGC_PAGE_MASKの 12ビットは、32ビットガーベッジコレクションページマスクのビット23: 12として用いられ、追加のさらに8つの上位ビットは、0x3Fとして、さら に下位の12ビットは0x000として規定される。結果として得られる32ビ ットのガーベッジコレクションページマスクは、プログラマブルガーベッジコレ クションページ境界を越えるポインタストアに対するストアバリアを形成するた めに用いられる。(スタックキャッシュ155により表されるオペランドスタッ クの最上部に位置するvalue及びobjectrefに対してオペレートするaputfield_qu ick命令などの)ポインタストアのストアデータvalue及びobjectrefターゲットは 、32ビットガーベッジコレクションページマスクにより効果的にマスクされ、 それ自身objectrefであるvalueが、ターゲットオブジェクトが存在するのとは異 なるガーベッジコレクションページに向けられているか否かを決定するために比 較される。このようにガーベッジコレクションページのサイズは仮想メモリペー ジサイズに依存しない。さらに、ガーベッジコレクションページは、仮想的なメ モリのサポートを伴わないような低コスト、低電力消費ポータブルデバイスの用 途やインターネット装置の用途などのようなコンピュータシステムやオペレーテ ィングシステム環境に於いて提供することが可能である。図4の実施例に於いて は、レジスタGC_C0NFIGは、4キロバイトから8メガバイトの範囲のガーベッジ コレクションページサイズのプログラマブルな定義を可能にするが、当業者であ れば、このような記載に基づき、様々に異なるページサイズのガーベッジコレク ションが構成可能であることが容易に理解できよう。 レジスタGC_CONFIGはまた、ジェネレーション間ポインタストアトラップマト リックスをプログラム可能に規定するためのフィールドWB_VECTORを含む。フ ィールドWB_VECTORは、ストアデータvalueに対応するポインタデータジェネレー ション及びそのobjectrefターゲットに対応するターゲットオブジェクトジェネ レーションを有するポインタストアがトラップするであろうジェネレーションの 対をエンコードする。図4の実施例に於いては、フィールドWB_VECTORは、ガー ベッジコレクショントラップが望まれるようなポインタデータ及びターゲットオ ブジェクトジェネレーション対の1ビット表示の4×4マトリックスを有効に規 定する。他の実施例として、より大きな或いはより小さなマトリックスを規定し たり、(no_trap,gc_notifyl,gc_notlfy2及びgc_notify3等の)他の状態をエン コードすることも可能である。 図4の実施例に於いて、ターゲットオブジェクトのobjectrefの2ビットタグ は、それにストアされるべきvalueの2タグビットと連結され ることによりフィールドWB_VECTOR内への4ビットインデックスを形成する。2 ビットタグのそれぞれは、以下に説明するようなジェネレーションメンバーシッ プ情報をエンコードする。フィールドWB_VECTORのインデックス付けされたビッ トは、ライトバリアが対応するポインタストアをトラップすべきか否かをエンコ ードする。フィールドWB_VECTORは、(ポインタデータジェネレーション及びター ゲットオブジェクトジェネレーションが等しくないすべてのポインタストアとし ての)全てのジェネレーション間ポインタストア、(ジェネレーション間及びジェ ネレーション内を問わず)あらゆるポインタストア、或い(古いジェネレーション オブジェクトへの若いジェネレーションのポインタのストアとしてのより若いジ ェネレーションストア等のトラップをエンコードするためにプログラム可能にコ ンフィギュアすることができる。一般に、任意な度合いを以て複雑化されたジェ ネレーション対のトラッピングがサポートされる。図4に示された実施例では、 4ジェネレーションまでがサポートされているが、当業者であれば、この記載に 基づき、より多数のジェネレーションのための必要な変更に思い至ることができ よう。 ある実施例に於いては、フィールドGC_PAGE_MASK及びフィールドWB_ECTORは、 ポインタストアに対するライトバリアの挙動をプログラム可能に規定する。特に 、以下に記載されるように、ハードウェアプロセッサ100により提供される拡 張バイト構造サポートは、非ポインタストアの中からポインタライトバリアによ ってポインタストアを特定させ、フィールドGC_PAGE_MASK及びWB_VECTORはさら に、ハードウェアプロセッサ100によって、プログラム可能に規定されたポイ ンタストアのセットをトラップするために、ライトバリアをプログラム可能にフ ィルタリングする。しかしながら、さらに別の実施例では、ハードウェアプロセ ッサ100の拡張バイトコードサポートにより提供されるポイン タストアの有意義な正確な識別を不要とし、しかも控えめなバリアの構造に於い て、見かけ上のポインタストアのプログラム可能に規定されたセットを利用可能 にする。 図4は、4ジェネレーションコレクテッドメモリスペース450に於けるプロ グラム可能なストアフィルタリングサポートを示す。ガーベッジコレクタプロセ ス420は、変異プロセス410によりなされた若いジェネレーションポインタ ストアを記憶されたセット460が記録するようなジェネレーション的コレクタ を実施するための、ハードウェアプロセッサ100上にて実行可能なバイトコー ドを含む。フィールドWB_VECTORの内容に対応するジェネレーション間ポインタ ストアトラップマトリックス470の構成の内容は、ライトバリアを若いジェネ レーションポインタストアにエンコードする。以下に記載するようにエンコード されたタグが、ストアデータポインタvalueに対応するジェネレーション及び変 異プロセス410の(aputfield_quick命令などのような)ポインタストア命令の ターゲットobjectrefに対応するジェネレーション間ポインタストアトラップマ トリックス470に対してインデックス付けを行うために用いられる。このよう にインデックス付けされたジェネレーション間ポインタストアトラップマトリッ クス470に基づき、ライトバリア430は、若いジェネレーションオブジェク トに対する参照が、古いジェネレーションオブジェクト内にストアされ、ガーベ ッジコレクショントラップハンドラ(gc_notify)440の動作を引き起こすよう な場合には、aputfield_quickポインタストアをトラップし、ガーベッジコレク ショントラップハンドラ(gc_notify)440を呼び起こす。 当業者であれば、以上の記載から、フィールドWB_VECTOR及びまたはフィール ドGC_PAGE_MASKのジェネレーション間ポインタストアトラップマトリックス47 0の内容により提供される特定のプログラム可能に選 択されたストアフィルタリングをサポートするガーベッジコレクショントラップ ハンドラ440のための適切な構成の種類を理解することができる。ジェネレー ション間ポインタストアトラップマトリックス470の例として与えられた内容 (図4)に基づく実施例に於いては、ガーベッジコレクショントラップハンドラ 440は、ハードウエアプロセッサ100上で実行可能なバイトコードを含み、 トラッピングに関する情報を想起セットデータ構造にストアする。この構造は、 収集されたメモリスペース450のジェネレーション3,2及び1にそれぞれ対 応する想起セット461,462及び463を含む。 別の実施例に於いては、ジェネレーション間ポインタストアマトリックス47 0の内容が、ジェネレーション間であるか否かを問わず、すべてのポインタスト アにトラップするように、プログラム可能に規定される。関連するカードマーキ ング式の別実施例として与えられたガーベッジコレクショントラップハンドラ4 40は、ハードウエア100上で実行可能なバイトコードを含み、トラッピング ストアに関する情報をカードテーブルデータ構造にストアする。従来のカードマ ーキング法の構造に比較して、本明細書に記載されたガーベッジコレクションの ための構造的サポートによれば、ハードウエアプロセッサ100は、ポインタス トアを一般的なストアから区別し、同じくジェネレーション間ポインタを一般的 なポインタストアから区別することができる。このような理由により更に別のカ ードマーキング式実施例に於いては、ジェネレーション間ポインタストアトラッ プマトリックス470の内容が、ジェネレーション間ポインタストアのみをトラ ップするようにプログラム可能に規定される。 想起セット式実施例及びカードマーキング式実施例のいずれに於いても、拡張 バイトコードサポートにより、ハードウエアプロセッサ100 は、以下に詳しく説明するように非ポインタストアからポインタストアを正確に 特定することができる。更に、ジェネレーション間ポインタストアトラップマト リックス470、即ちフィールドWB_VECTORによってヒープに対するストアのプ ログラム可能なフィルタリングが提供され、ライトバリア430によって、ハー ドウエアプロセッサ100は、コレクション時ではなく、変異プロセス410の ストア時に於いて、ジェネレーション間であるようなポインタストアを特定する ことができる。そのためにカードマーキングなる用語は、コレクション時にコレ クタプロセス420により用いられるガーベッジコレクショントラップハンドラ 440の実施例により提供されるカードテーブルなどの記憶領域の種類について 記述的である。カードマーキングなる用語の使用は、ポインタまたはリテラルデ ータがストアされているか否かを問わずすべてのストアがトラップされる必要が あることを意味するものではない。 図4は、ポインタストアのトラッピングに基づくガーベッジへコレクションペ ージのためのサポートを示す。フィールドGC_PAGE_ASKは、aputfield_quick等の ポインタストア命令のストアデータポインタvalue及びターゲットobjectrefを比 較するためのプログラマブルマスクを提供する。ライトバリア430は、ガーベ ッジコレクションページがマッチしない場合には、ポインタストアをトラップす る。フィールドGC_PAGE_MASKにより提供される追加のストアフィルタリングは、 コレクタプロセス420の実施例によって古いジェネレーションの中断を伴わな い収集のために用いられるHudsonのトレーンアレゴリズムに於いて、ハードウエ ア上で実現されるコレクタプロセス420のために特に有用である。Hudson and Moss,"Incremental Collection of Mature Objects",Proceedings of Internat ional Workshop on Memory Management,St.Malo,France(16-18 Septemper,1992) を参照されたい。当業者であれば、 以上の記載から、フィールドGC PAGE MASKにより規定されるガーベッジコレクシ ョンページサイズが、Hudsonのトレーンアレゴリズムに於いて、列車の客車を規 定するために用いられることが容易に理解できよう。 例として、aputfield_quickバイトコードのシンタックス及びそれによるハー ドウエアプロセッサ100の作動を以下に説明する。 操作内容 ガーベッジコレクションチェックについて、オブジェクトのフィ ールドを設定する。 フォーマット スタック ,objectref,value … 詳細 参照型でなければならないobjectref及び同じく参照型でなけ ればならないvalueがオペランドスタックからポップされる。valueは、objectre fにより参照されるクラスインスタンスへの特定のオフセットに書き込まれる。 オフセットの値は、(offsetbytel<<8)|offsetbyte2である。 実行時例外 objectrefがnullである場合、aputfield_quickはNullPointerE xceptionをスローする。各objectref及びvalueの最上位2桁は、4ビットインデ ックスを構成するために連結される。このインデックスは、GC_CONFIG レジスタの16ビットWB_VECTORフィールドから1ビットを選択する。 選択されたビットがセットであれば、gc_notifyトラップが生成される。 index=((objectref&0xC0000000)>>28|(value>>30) if(GC_CONFIG.WB_VECTOR[index]==1) generate gc_notify 備考 この命令のオプコードの元は、putfieldであり、参照型のフィ ールドに対応するクラスインスタンスデータ内にオフセットを有するものと動的 に判定されたフィールドを操作するものである。putfield命令により参照される 一定プールエントリーが解決されると、それが参照するフィールドのオフセット が生成され、フィールドのタイプが決定される。16ビットオフセットは、元の putfield命令の2オペランドバイトを置換する。フィールドのタイプは、putfie ld_quick,aputfield_quick1或いはaputfield_quickが元のputfieldバイトコー ドを置換するか否かを決定する。 オブジェクトの参照フィールドではなく、クラスにおける静的参照フィールド を設定するためのaputstatic_quickバイトコードのシンタックス及びそれによる ハードウエアプロセッサ100の作動も同様である。る。高速ガーベッジコレクショントラップハンドラ 一実施例では、ガーベッジコレクションの高速取り扱いが、ベクトル指定され たトラップ(vectored trap)、 gc_notify(tt=0x27)、priority=17 によって与えられ、ハードウエアプロセッサ100によって実行可能なバイトコ ードを含む関連づけられたガーベッジコレクショントラップハ ンドラ440をトリガーするトラップ制御論理170によって実現される。一実 施例では、ガーベッジコレクションページ境界横断ポインタストア又はジェネレ ーション間ポインタストアのどちらに応答して生成されたかによらず、上述した ガーベッジコレクショントラップの各々に対して1つのガーベッジコレクション トラップハンドラ440が処理を行う。ガーベッジコレクショントラップは、ス トアのトラップが完了する前に発生するため、ガーベッジコレクショントラップ ハンドラ440はハードウエアプロセッサ100が際限なくトラッピングを繰り 返すことを防ぐため、想起セット又はカードテーブルの更新のような実行される ガーベッジコレクション機能に加えて、ストアのトラッピングをエミュレートす る必要がある。その後、ガーベッジコレクショントラップハンドラ440はスト アの後に続く命令にPCを強制的にセットする。 ガーベッジコレクショントラップによって影響されるJAVA仮想マシン命令 には、aputfield_quick、aputstatic_quick、aastore、anewarray、multianewar ray、newarray、putfield、putstatic,及びnewがある。これらの中で、aputfie ld_quick、aputstatic_quick、及びaastoreのみが上述したWB_VECTOR及 び/又はGC_PAGE_MASKの内容に基づいた動的フィルタリングのような ガーベッジコレクションチェックの実行を必要とする。他のものは、例えば適切 にジェネレーションメンバーシップタグを初期化するのに使用されるガーベッジ コレクションメカニズムを認識していさえすればよい。一実施例では、aastore バイトコードはエミュレーションルーチンへとトラップし、aastoreトラップハ ンドラが適切なガーベッジコレクションチェックを実行する。ある直接的なトラ ップハンドラの実現では、arrayrefはaastoreトラップハンドラ内のオペランド スタックの一番上にストアされ、バイトコードシーケンス:dup、getfield_quic k #0、 aputfield_quick #0が実行され、適切なチェックがなされ、必要であればトラッ プがなされる。タグ付けされた参照及びオブジェクトのフォーマット 第5図は、ハードウエアプロセッサ100において表現されているようなオブ ジェクト参照(objectref)の一実施例を示している。objectrefの3つのビット をガーベッジコレクションの指示のために使用することができる。特に、フィー ルドGC_TAGは、上述したように、ライトバリア430がポインタストアを トラップするかどうかを決定するため、レジスタフィールドGC_CONFIG. WB_VECTORへのインデックスの一部を形成する。第5図の実施例におい て、フィールドGC_TAGは、上述したように、ライトバリア430によって 使用されるジェネレーションメンバーシップ情報をエンコードする。別のハンド ルビットHは、オブジェクトがobjectrefによって直接参照されているか、又は ハンドル(handle)を通して間接的に参照されているかを示す。ハンドルは、別 のレベルの間接的手続きが発生するという代償はあるが、メモリオブジェクトの リロケーションをそれらを指定するポインタ(又はobjectrefs)を大量に更新す ることなく容易に実現する参照メソッド(referencingmethod)を提供する。こ れらのフィールドはどちらもハードウエアプロセッサ100の整数ユニット14 2(第1図)に与えられる前はマスキングされている。 ハードウエアプロセッサ100の一実施例では、オブジェクト600はヘッダ 部610及びインスタンス変数ストレージ部620を含むメモリにおいて表現さ れる。第6A図は、そのような実施例の1つを示している。ヘッダ部610は3 2ビットワードを含んでおり、この32ビットワードそれ自身はオブジェクトの クラスを表すためのメソッドベクタテーブルベース部612と、オブジェクトの 同期状態及びガーベッジコ レクタ用の情報のために確保された追加的なストレージ(storage)614の5 つのビットを含んでいる。所望に応じて、第2のヘッダワード(例えばモニタポ インタ616)に、オブジェクトに割り当てられたモニタのアドレスを格納し、 それによって第1のヘッダワード内の追加的なストレージ614の5つのビット 全てをガーベッジコレクション情報に使用可能とすることもできる。第6A図の 実施例では、オブジェクト参照(objectref)はメソッドの呼び出しのオーバヘ ッドを最小化するべく、メソッドベクタテーブルベース部612の場所を示して いる。 ヘッダ部610の3つのビットは、例えばコレクタプロセス420のようなガ ーベッジコレクタによって使用可能である。ヘッダ部610において、3つの下 位ビット(header[2:0])及び2つの上位ビット(header[31:30])はヘッダがポ インタとして処理されるときはマスクされる。これらのビットの内3つ(header [31:30,2])は、オブジェクト600に関する情報をストアするべくガーベッジ コレクタによって使用可能である。オブジェクトの同期のため、LOCK及びW ANTビットを保持するべくビット1及び0を用いることができる。別の方法と して、例えばモニタポインタ616のような第2のヘッダワードをオブジェクト 600の同期状態を管理するのに用い、5つのビット全てをガーベッジコレクシ ョンのサポートのために残すこともできる。ガーベッジコレクションのサポート のためのビットがどのように用いられるかは、コレクタプロセス420及びガー ベッジコレクショントラップハンドラ440によって実現されるガーベッジコレ クションメソッドの特定のタイプに依存する。可能な使用方法には、マークビッ ト、あるジェネレーションのオブジェクトの年齢を決定するためのカウンタビッ ト、等として使用することが含まれる。上述したように、所望に応じてなされる ヘッダ部610の第2のヘッダワードを使用した実施態様では、5つのビット が例えばコレクタプロセス420のようなガーベッジコレクタに対して使用可能 となる。 第6A図の実施例において、インスタンス変数ストレージ部620はメソッド ベクタテーブルベース部612の1ワード後に始まっており、オブジェクト60 0のインスタンス変数を格納する。objectrefの最下位ビットによって、参照が 取り扱われる(==1)か又は取り扱われない(==0)かが特定される。一方 の選択肢である“取り扱われる”場合のオブジェクトフォーマットが第6B図に 示されている。オブジェクト600bが生成されるとき、取り扱われる参照が確 立され、その後の全ての参照はオブジェクトにアクセスするべくハンドル、即ち ストレージポインタ650bを通過する。このようなサポートは、下層に位置す るオブジェクトストレージ(インスタンス変数に対するものを含む)ではなくハ ンドルをコピーすることによってオブジェクトのリロケーションに伴う代償を軽 減するようなガーベッジコレクタに対して提供される。ポインタ非依存バイトコードの動的置換のための拡張されたバイトコードサポー ハードウエアプロセッサ100は、実行ユニットに供給されたバイトコードを 、その高速擬似命令(quick variants)で動的に置き換えることによってJAV Aバイトコードの実行を加速するための特徴を備えている。しかしながら、今か ら述べるように、高速擬似命令バイトコードによる置換という特徴をハードウエ アプロセッサ100において利用して、ポインタ非依存ストアオペレーションバ イトコードをポインタ依存ストアオペレーションバイトコードによって動的に置 き換え、ガーベッジコレクションに対するライトバリアの実現をより容易にする ことができる。 一実施例では、オブジェクト又はクラスにおけるフィールドの設定をするため のputfield及びputstaticバイトコードが、対応する高速 擬似命令(例えば、putfield_quick、putfield2_quick、又はaputfield_quick、 及びputstatic_quick、putstatic2_quick、又はaputstatic_quick)によって動 的に置き換えられる。どのバイトコードで置換するかは、バイトコードがその上 で処理されるフィールドのタイプに依存する。例えば、参照型(type reference )のフィールド上で動作するように決められたputfieldバイトコードは、aputfi eld_quickバイトコードによって動的に置換される。高速擬似命令バイトコード による置換は、上記で示した引例に述べられているような関連する非高速バイト コードが初めて実行されるときになされるローディング(loading)及びリンキ ング(linking)を利用するが、ガーベッジコレクションにとってより重要なの は、ポインタ依存高速バイトコードによる動的な置換によって、ハードウエアプ ロセッサ100のような仮想マシン命令プロセッサがデータ型に依存しないスト アバイトコードのポインタストア型プログラム出現(pointer storingprogram o ccurrence)と非ポインタストア型プログラム出現(non-pointer storing progr am occurrence)とを識別することが可能になるということである。ポインタ依 存バイトコードによる置換により、ストアのトラッピングの回数が減少する。こ れは、ポインタストアバイトコード擬似命令(即ち、aputstatic_quick又はaputf ield_quick)のみしかライトバリアの実行に関わる必要がないからである。 動的なバイトコードの置換の一実施例について第7図を参照して説明する。第 7図は、ハードウエアプロセッサ100の一部のブロック図である。ハードウエ アプロセッサ100は、一実施例ではスタックキャッシュ155(第1図参照) において表現されるオペランドスタック723、命令デコーダ135、非高速か ら高速へのトランスレータキャッシュ131、トラップ論理回路170、ソフト ウエアサーチコード31、 32及び33、及び実行ユニット140を含んでいる。非高速から高速ヘのトラ ンスレータキャッシュ131は、命令及びデータプロセッサ12と関連メモリ( associative memory)14とを含んでいる。関連メモリ14は、命令識別子メモ リ部18、データセットメモリ部20、入力回路22及び出力回路24を含んで いる。 命令デコーダ135は命令キャッシュユニット120から、例えばJAVAバ イトコードのような命令ストリームを受信するように接続されている。本発明を JAVAバイトコードに関連して説明するが、本明細書の説明から当業者には理 解されるように、別の仮想マシーン環境では、別のタイプの命令の動的な置換を 行うための変更も可能である。本明細書中で述べるバイトコード置換という特徴 は、上記で示した特許出願においてより一般的に述べられているように、命令パ ラメータの実行時間解決(execution time resolution)に基づいて命令実行の 高速化に一般的に適用可能であるが、以下の説明はポインタ非依存非高速バイト コードをそのポインタ依存高速擬似命令で動的に置換することに焦点をあてると 共に、そのような動的な置換の実行を容易にし、ライトバリアの実現を容易にす るハードウエアプロセッサ100について特に重点をおいている。 第7図を参照されたい。命令デコーダ135はデコードされたバイトコードを バス11上に出力するとともに、デコードされたバイトコードに対応するプログ ラムカウンタ(PC)の値をバス13上に出力する。これらのバイトコード及び PC値は実行ユニット140及び命令及びデータプロセッサ12に渡される。更 に、PC値は関連メモリ14の入力回路22にも入力される。一般に、PC値の 各々はバイトコードの対応するプログラム出現を一意に特定する。オペランドス タック723のトップエントリは命令及びデータプロセッサ12に送られる。 関連メモリ14に於いて、命令識別子メモリ部18は複数(N個)のエントリ を含んでいる。これらのN個のエントリの各々は、バイトコード識別子値PC_0 ,PC_1,PC_2,PC_3,PC_Nのような対応するバイトコード識別子値をス トアすることができる。命令識別子メモリ部18内にストアされたバイトコード 識別子値の各々は異なるPC値に対応する。 命令識別子メモリ部18の幅はプログラムカウンタの幅に対応して選択される。 データセットメモリ部20もN個のエントリを含んでおり、命令識別子メモリ 部18内の各々のエントリがデータセット部20内において関連するエントリを 有することができるようになっている。データセットメモリ部20のN個のエン トリの各々はDATA_0,DATA_1,DATA_2,DATA_3,...DATA_Nの ようなデータセットをストアすることができる。以下により詳細に説明するよう に、データセットメモリ部20内に格納されたデータセットの各々はバイトコー ドの対応するプログラム出現の高速擬似命令の実行用データを含む。一実施例で は、データセットメモリ部20は4つの32ビットワードの幅を有する。しかし ながら、データセットメモリ部20は別の実施例では別の幅を有してもよい。 命令及びデータプロセッサ12はバス11上に出力されたバイトコードをモニ タし、バス11上のカレントバイトコードが、対応するデータセットがすぐにア クセス可能であれば高速化された方法で実行可能である非高速バイトコードであ るかどうかを判定する。そうである場合、その非高速バイトコードの高速擬似命 令が対応するデータセットと共に非高速から高速へのトランスレーターキャッシ ュ131内にキャッシュされる。一般に、非高速バイトコードは0,1,或いは それ以上の高速擬似命令を有し得る。JAVA仮想マシン仕様は、以下の非高速 バイトコードを記述している:anewarray,checkcast,getfield,getstatic, instanceof,invokeinterface,invokespecial,invokestatic,invokevirtual,ldc ,ldc_w,ldc2_w,multianewarray,new,putfield,及びputstatic。これらのバイト コードは、ハードウェアプロセッサ100の一実施例では、高速擬似命令を有す る。例えばputfield,putstatic及びaastoreのような非高速ストア指向バイトコ ードに対して、ターゲットオブジェクトフィールドに対応するコンスタントプー ルエントリの解決(resolution)により、その解決によってポインタストアオペ レーションが示される場合は、例えばaputfield_quick(ガーベッジコレクショ ンチェックと共にオブジェクト内に参照フィールドをセットする)又はaputstat ic_quick(ガーベッジコレクションチェックと共にクラス内に静的な参照フィー ルドをセットする)による置き換えが可能となる。解決によって参照以外のタイ プ(即ち非ポインタタイプ)のターゲットオブジェクトフィールドが示される場 合、置換は別の高速擬似命令、例えば、putfield_quick(オブジェクト内にフィ ールドをセットする)、putfield2_quick(オブジェクト内にロング又はダブル フィールドをセットする)、putstatic_quick(クラス内に静的フィールドをセ ットする)又はputstatic2_quick(クラス内にロング又はダブルの静的フィール ドをセットする)、によってなされる。 一般に、対応するデータセットがすぐにアクセス可能であれば高速化された実 行が可能であるような非高速バイトコードを、以後、高速擬似命令を有する非高 速バイトコードと呼ぶ。高速擬似命令を有する非高速バイトコードは、命令デコ ーダ135によって提供されるバイトコードのサブセットを形成する。命令及び データプロセッサ12は、カレントバイトコードの識別部(又は複数の識別部) をデコードすることによりカレントバイトコードが高速擬似命令を有する非高速 バイトコードであ るかどうかを判定する。高速擬似命令を有する非高速バイトコードのN個までの プログラム出現に対し、命令識別子メモリ及びデータセットメモリ内のエントリ によってサポートが与えられる。これらのエントリのいくつかは、対応するプロ グラム出現がポインタストアへと解決(resolve)される非高速ストア指向(し かしポインタ非依存)バイトコードのポインタ依存高速擬似命令のために使用す ることができる。 トランスレーターキャッシュ131は、カレントPC値を有するカレントバイ トコードに応答して次のように動作する。命令デコーダ135はカレントPC値 及びデコードされたカレントバイトコードを実行ユニット140及び命令及びデ ータプロセッサ12に送る。命令及びデータプロセッサ12はデコードされたバ イトコードが高速擬似命令を有する非高速バイトコード、高速擬似命令ロードバ イトコード(quick variant load bytecode)或いはリトライバイトコード(ret ry bytecoe)である場合に作動される。命令デコーダ135によってバス11上 に送出されるカレントバイトコードが高速擬似命令を有する非高速バイトコード 、高速擬似命令ロードバイトコード又はリトライバイトコードでない場合、命令 及びデータプロセッサ12はそのバイトコードに応答せず、代わりにカレントバ イトコード及びカレントPC値は実行ユニット140に渡されて実行される。 しかしながら、カレントバイトコードが高速擬似命令を有する非高速バイトコ ードの場合、命令及びデータプロセッサ12はカレント命令に応答して作動する 。一実施例ではバイトコードputfield及びputstaticはデータプロセッサ12を 作動させる。作動すると、命令及びデータプロセッサ12はライン21上の信号 NO_MATCHの状態を判定する。最初、命令識別子メモリ部18にストアさ れた命令識別子の値PC_0,PC_1,PC_2,PC_3,PC_Nが無効値に設定さ れる。別の方法として、命令識 別子値に関連づけられた有効なビットをクリアすることもできる。いずれの場合 も、入力回路22に入力されたカレントPC値は命令識別子メモリ部18内に格 納された命令識別子値のいずれとも一致しない。続いて信号NO_MATCHが アサートされる。カレントPC値と命令識別子値PC_0,PC_1,PC_2,PC_3, 及びPC_Nとの間に一致がないことにより、カレントバイトコードを実行す るのに必要なデータセットがそのとき関連メモリ14に格納されていることが示 される。そのため、命令及びデータプロセッサ12は、非高速バイトコードを適 切な高速擬似命令によって置換するために、まずこのデータセットの位置を特定 し取り出さなければならない。 アサートされた信号NO_MATCH及びカレントバイトコードが高速擬似命 令を有する非高速バイトコードであるという判定に応答して、命令及びデータプ ロセッサ12は制御信号TRAPをアサートする。制御信号TRAPはトラップ 論理170に送られる。制御信号TRAPに応答して、トラップ論理170は実 行ユニット140の動作を一時的に停止し、対応するソフトウエア部分31,3 2または33がアクセスされるようにする。アクセスされるソフトウエアコード 部分は、制御信号TRAPがアサートされるようにした非高速バイトコードに依 存する。 一実施例では、トラップ論理170は制御信号TRAPがアサートされるよう にしたバイトコードの特定のプログラム出現を確認するためカレントPC値を用 いて命令キャッシュユニット120にアクセスする。ソフトウエアによって具現 されるスイッチステートメントにより、実行が適切なソフトウエアコード部分に 移される(識別されたバイトコードに応答してなされる)。別の実施例では、ト ラップベクタ(trap vector)のような別の方法により実行を適切なソフトウエ アコード部分に移すこともできる。 このようにして、識別されたバイトコードが最初のバイトコードINST_0に 対応する場合、スイッチステートメントによって対応するソフトウエア部分31 がアクセスされる。同様に、識別されたバイトコードが第2のバイトコードIN ST_1に対応する場合、スイッチステートメントによって対応するソフトウエ ア部分32がアクセスされるようにされる。例示した実施例では、第1のバイト コードINST_0はputfieldであり、第2のバイトコードINST_1はputstati cである。識別されたバイトコードが他のバイトコード(説明のためINST_N とする)に対応する場合、スイッチステートメントは対応するソフトウェアコー ド部分33がアクセスされるようにする。 ソフトウェアコード部分31,32,...33はそれぞれバイトコードIN ST_0(例えばputfield)、INST_1(例えばputstatic),...INST_Nを実 行するのに必要なデータセットの位置を特定しそれを取り出す働きをする。別の 言い方をすると、ソフトウエアコード部分31,32,...33はバイトコー ドINST_0,INST_1,INST_Nのそれぞれのプログラム出現に対しコ ンスタントプールエントリを解決する。 いくつかの非高速バイトコード(例えばputfield及びputstatic)は複数の高速 擬似命令(例えばputfield_quick,putfie1d2_quick,aputfield_quick,putstatic _quick,putstatic2_quick及びaputstatic_quick)を有するため、対応するソフ トウエアコード部分も適切な高速擬似命令を選択する。対応するコンスタントプ ールエントリの解決によってストア指向のバイトコード(例えばputfield)の特 定のプログラム出現がポインタストアであることが示される場合(例えばストア ターゲットオブジェックトフィールドが参照型である場合)は、ポインタ依存高 速擬似命令(例えばaputfield_quick)による置き換えが適切である。 ソフトウェアコード部分31,32,...33は更に、取り出したデータセ ットがオペランドスタック723内にロードされるようにする。ソフトウエアコ ード部分31,32,...33は取り出されたデータセットがオペランドスタ ック723内にロードされた後、高速擬似命令ロードバイトコードを命令デコー ダ135に出力する。命令デコーダ135は受け取った高速擬似命令ロードバイ トコードをデコードする。デコードされた高速擬似命令ロードバイトコードはバ ス11上に於いて命令及びデータプロセッサ12に送られる。命令及びデータプ ロセッサ12はバス11上に存在する各高速擬似命令ロードバイトコードを識別 し、応答として、前にオペランドスタック723にロードされた対応するデータ セットを取り出す。 続いて命令及びデータプロセッサ12はカレントPC値及び取り出したデータ セットを関連メモリ14にロードする。一例では、カレントPC値は命令識別子 メモリ部18の第1エントリに命令識別子値PC_0として書き込まれ、対応する 取り出されたデータセットはデータセットメモリ部20の第1エントリにデータ セットDATA_0として書き込まれる。カレントPC値は命令及びデータプロセ ッサ12からメモリ部18へとバス15を介して送られる。データセットは命令 及びデータプロセッサ12からデータセットメモリ部20へとバス17を通じて 送られる。メモリ14内の特定のエントリを選択するのに使用されるメソッドは 、例えば、ランダム、LRU(最も最近使用したもの)アルゴリズム又はファー ストイン・ファーストアウト(FIFO)アルゴリズムとすることができる。 カレントPC値及び取り出されたデータセットがメモリ14に書き込まれた後 、命令及びデータプロセッサ12は、ソフトウエアコードが制御信号がアサート されるようにした非高速命令をリトライするようにす る。このとき、再度入力回路22に入力されるカレントPC値は、命令識別子メ モリ部18内に格納された命令識別子値(例えば命令識別子値PC_0)に一致す る。その結果、命令及びデータプロセッサ12はトラップ論理170及び対応す るソフトウエアコード部分31,32,...33の1つを通じて対応するデー タセットの場所を特定してそれを取り出すという試みをしない。 カレントPC値が命令識別子値PC_0と一致しているため、出力部24は対応 するデータセットDATA_0を実行ユニット140へと渡す。実行ユニット1 40はカレントPC値及び関連するデータセットDATA_0(高速擬似命令バ イトコードを含む)を非高速から高速へのトランスレータキャッシュ131から 受け取る。それに応じて実行ユニット140は高速擬似命令バイトコードを実行 する。 PC値及び高速擬似命令を有する非高速バイトコードに関連するデータセット が関連メモリ14にロードされると、高速擬似命令を有する非高速バイトコード の特定のプログラム出現が、コンスタントプールを解決したり、ソフトウエアコ ードにアクセスしたりする必要なく実行可能となる。更に、ストア指向バイトコ ードの特定のプログラム出現に対し、もしその特定のプログラム出現がポインタ ストアへと解決される場合はポインタ依存高速擬似命令(例えばaputfield_quic k)が続いて実行され、もしその特定のプログラム出現が非ポインタ(又はリテ ラル値)ストアへと解決される場合は非ポインタ高速擬似命令(例えばputfield _quick又はputfield2_quick)が続いて実行される。更に、非高速バイトコード はプログラムイメージにおいてオーバライトされないため、非高速バイトコード はその元の形態で使用可能であり続ける。更に、非高速バイトコードはオーバラ イトされないため、それを呼み出し専用メモリに格納するようにすることもでき る。 以下の例によってハードウエアプロセッサ100の動作がより明確になるだろ う。特に、変異プロセス(mutator process)410(第4図)によりポインタ ストアを選択的にトラップするためのライトバリア430のポインタストア依存 の実施例を容易にする上での非高速から高速へのトランスレータキャッシュ13 1の働きが明確になるだろう。命令デコーダ135は、まず高速擬似命令を有す る非高速バイトコード(例えばputstatic)を受け取るが、その非高速バイトコ ードの特定のプログラム出現は対応するPC値として0x000100を有する 。バイトコードputstaticの特定のプログラム出現が命令識別子メモリ部18内 に於いて表現されていないとすると、カレントPC値0x000100は、入力 回路22によって信号NO_MATCHがアサートされるようにする。信号NO_ MATCH及びバイトコードputstaticが高速擬似命令を有する非高速バイトコ ードであるとの判定に応答して、命令及びデータプロセッサ12は制御信号TR APをアサートする。トラップ論理170はPC値を用いてカレントバイトコー ドをバイトコードINST_1(即ち、putstatic)として識別する。カレントバ イトコードがバイトコードINST_1として識別されるのに応答してソフトウエ アスイッチステートメントにより、対応するソフトウェアコード部分32に実行 が移される。 ソフトウエアコード部分32は、続いてストアターゲットオブジェクトフィー ルドに関連づけられたコンスタントプールエントリを解決し、バイトコードIN ST_1を実行するのに必要なデータセットを取り出し、このデータセットをオペ ランドスタック723にロードする。ソフトウエアコード部分32は、高速擬似 命令ロードバイトコードを命令デコーダ135に送る。それに応答して、命令デ コーダ135はデコードされた高速擬似命令ロードバイトコードを命令及びデー タプロセッサ12に出力する。命令及びデータプロセッサ12はオペランドスタ ック723 からデータセットを取り出し、このデータセットをデータセットメモリ部20の 第1エントリにデータセットDATA_0としてロードする。ソフトウエアコード 部分32はストアターゲットオブジェクトフィールドが参照型であり(即ち、pu tstaticの特定のプログラム出現がポインタストアである)、データセットDA TA_0と共に適切なポインタに依存する高速擬似命令バイトコードをaputstatic _quick含むことを確定する。 命令及びデータプロセッサ12は更に0x000100のカレントPC値を命 令識別子メモリ部18の第1エントリに命令識別子値PC_0としてロードする。 命令及びデータプロセッサ12は続いて非高速バイトコードINST_1(即ちpu tstatic)及びカレントPC値0x000100がそれぞれバス11及び13上 で再アサートされるようにする。一実施例では、命令及びデータプロセッサ12 は制御信号TRAPがアサートされるようにしたバイトコードに制御を戻すリタ ーンフロムトラップ(ret_from_trap)バイトコードを発行することによってこれ を実現する。このとき、入力回路22はカレントPC値と命令識別子値PC-0と の間に一致を検出する。それに応答して、関連メモリ14は命令識別子値PC_0 に関連するデータセット(即ちポインタに依存する高速擬似命令バイトコードap utstatic_quickを含むデータセットDATA_0)を出力回路24へと供給する。 この出力回路24はこのデータセットDATA_0を実行ユニット140に渡し、 実行ユニット140はポインタ依存高速擬似命令バイトコードaputstatic_quick を実行する。 高速擬似命令を有する他の非高速バイトコード及び続いて命令デコーダ135 に渡される同じ非高速バイトコードの他のプログラムインスタンス(program in stance)も、同様に取り扱われる。例えば、関連するPC値0x000200を 有する非高速バイトコードINST_1(即ちputstatic)の別のプログラム出現 は、0x000200のPC値が命 令識別子メモリ部18にメモリ識別値PC_1として格納され、命令INST_1に 関連するデータセットがデータセットメモリ部22データセットDATA_1とし て格納される結果となる。もしバイトコードputstaticのこの特定のプログラム 出現がリテラル値ストアへと解決される場合、命令識別子値PC_1に関連するデ ータセット(即ちDATA_1)はポインタ依存高速擬似命令ではなく、putstatic2 _quickのような高速擬似命令バイトコードINST_1を含むであろう。非高速バ イトコードの最初のプログラム出現に関連づけられるデータセット(例えばデー タセットDATA_0)は非高速バイトコードINST_1の第2のプログラム出 現に関連づけられるデータセット(例えばデータセットDATA_1)とは同じ でないようにすることができることに注意されたい。 バイトコードputstaticの2つのプログラム出現を解決することによって、第 1のプログラム出現がポインタに依存するストアバイトコードaputstatic_quick に、第2のプログラム出現が非ポインタストアバイトコードputstatic2_quickへ と解決され、それによってハードウエアプロセッサ100の非高速から高速への トランスレータキャッシュ131はライトバリア430をポインタストアに限定 する。一実施例では、バイトコードaputstatic_quickは、ガーベッジコレクショ ンチェックと共にターゲットオブジェクト内に参照フィールドを設定する。ハー ドウエアプロセッサ100によるバイトコードaputfield_quickの評価に関連し て上述したように、ライトバリア430(ポインタに依存する高速擬似命令バイ トコードによって実現される)はobjectref及びvalueオペランドの各々の最上位 の2ビットを繋げることによって4ビットのインデックスを形成する。このイン デックスはレジスタGC_CONFIGの16ビットのフィールドWB_VECTORからビットを 選択する。選択されたビットがセットされている場合、トラップgc_notify が生成される。 index=((objectref & 0xC0000000)>>28)|(value>>30) if(GC_CONFIG.WB_VECTOR[index]==1) generate gc_notify 実行ユニット140(第1図)の一実施例では、バイトコードの評価のための 論理回路がレジスタGC_CONFIG(第4図)に接続しており、それによって上述し た論理表現を実現している。当業者であれば様々な適切な実現方法が理解される だろう。 別の実施例では、ライトバリア430(ポインタに依存する高速擬似命令バイ トコードによって実現される)はジェネレーション間ストアトラッピングとガー ベッジコレクションページ境界横断ポインタストアトラッピングの両方をサポー トする。前と同様に、ライトバリア430のこの実施例もobjectref及びstore_d ataオペランドの各々の上位2ビットを繋げることによって4ビットのインデッ クスを形成する。このインデックスはレジスタGC_CONFIGの16ビットフィール ドWB_VECTORからビットを選択する。選択されたビットがセットされている場合 、トラップgc_notifyが生成される。しかしながら、objectref及びstore_dataオ ペランドのマスクされた部分の比較によって第2のトリガーも生成される。マス クは、レジスタGC_CONFIGのフィールドGC_PAGE_MASK(即ちビット27:16) によってプログラム可能に定義される。この第2のトリガはプロセッサ状態レジ スタPSRのガーベッジコレクションページイネーブルビットGCE(garbage collection pages enabled bit)によりガードされている。 if{(GC_CONFIG[(objectref[31:30]##store_data[31:30])]==1) OR((PSR.GCE==1)AND ((store_data[31:12]&0x3F##GC_CONFIG[27:16])!= (objectref[31:12]&0x3F##GC_CONFIG[27:16))} then trap 実行ユニット140(第1図)の一実施例では、レジスタGC_CONFIG(第4図 )にバイトコードの評価のための論理回路が接続されており、それによって上記 した論理表現が実現されている。当業者には様々な適切な実施方法が理解される だろう。 ライトバリア430の別の実施例では、ガーベッジコレクションページ境界横 断チェックを、集められたメモリスペースの特定の1ジェネレーション又は複数 ジエネレーション(典型的には最も古いジェネレーション)に制限するメカニズ ムが提供される。変形されたページチェックトラッピングの式は、例えば以下の 通りである。 if(((PSR.GCE==1)|| ((objectref[31:30]==store_data[31:30])&& (GEN_PAGE_CHECK_ENABLE[objectref[31:30]]==1)))&& ((objectref[31:12]&0x3F##GC_PAGE_MASK) != (store_data[31:12]&0x3F##GC_PAGE_MASK))) then trap このような式は、objectref及びstore_dataオペランドのジェネレーションタ グビット(例えばビット31:30)が等しいことを要求する。 最も古いジェネレーションのエンコーディングに対するフレキシビリティーを実 現するため、レジスタGC_CONFIGのそのような目的がなければ使用され ない4つのビット(例えば31:28)を用いて、フィールドGEN_PAGE_CHECK_E NABLEをエンコードすることもできる。このファイルされた4つのビットは、ガ ーベッジコレクションページ境界横断ストアのトラッピングがどのジェネレーシ ョン(1つ又は複数)に制限されるかを示す。当業者であれば理解されるように 、様々な適切な実現方法があるが、そのような実現方法には例えばジェネレーシ ョンに固有の、ガーベッジコレクションページ境界横断ストアトラッピングをジ ェネレーション間ポインタストアトラッピングと一体化した実現例が含まれる。 上述したように、トランスレータキャッシュ131の動作により、参照型のフ ィールドに対応するクラスインスタンスデータ内へのオフセットを有するフィー ルド上で動作するように定められた元のバイトコードputfieldを、バイトコード aputfield_quickによって置換した。putfield命令によって参照されるコンスタ ントプールエントリが解決された場合は、それが参照するフィールドに対するオ フセットが生成され、フィールドの型は参照型として決定された。非高速から高 速へのトランスレータキャッシュ131の対応するデータセットDATA_1内に 含まれる16ビットのオフセットにより、元のputfield命令の2つのオペランド バイトは置換される。フィールドの型により、putfield_quick又はputfield2_qu ickバイトコードではなく、aputfield_quickバイトコードにより元のputfieldバ イトコードが置換されることが決定された。レジスタGC_CONFIGのフィールドWB_ VECTOR及びGC_PAGE_MASKの内容に依存して、ライトバリア430(一実施例では 部分的に高速擬似命令バイトコード aputfield_quickによって実現される)は、ポインタストアを上述したようにト ラップすることができる。 上記の説明では、ハードウエアプロセッサ100に対する動的なバイトコード の置換の1例を詳細に説明した。動的バイトコード置換の別の実施例は、自己修 飾コード(self-modifying code)に基づく。トランスレータキャッシュ131 の説明から分かるように、自己修飾コードの実施例は、キャッシュの実現が実際 的でない場合又は望ましくない場合(例えばコスト的な理由による)に有利であ る。そのような場合、トランスレータキャッシュ131は除去することができる 。代わりに、例えばソフトウエアコード部分31、32、...33のようなト ラップコードは、命令スペースに直接書き込むことによって元の非高速バイトコ ードを適切な高速擬似命令で置き換え、それによって元の非高速バイトコードの 特定のプログラム出現のその後の実行によって高速擬似命令が評価されるように する。自己修飾コードに基づいた動的バイトコード置換メカニズムの一実施例が 、米国特許第5,367,685号に開示されている。ガーベッジコレクションの例 上記した構造的なサポートのガーベッジコレクションに対する使用について、 3つのジェネレーション型コレクタアプローチ(即ちUngarの想起セットに 基づくジェネレーション型コレクタの実現、Wilsonのカードテーブルに基 づくジェネレーション型コレクタの実現、及びHudsonのトレーンアルゴリ ズムに基づくコレクタの実現)について説明する。想起セットに基づくジェネレーション型コレクタ 第8図は、Ungarによる想起セットを用いたジェネレーション型ガーベッ ジコレクションを示している。このガーベッジコレクションア プローチの実現(例えばライトバリア430、コレクタプロセス420、及びガ ーベッジコレクショントラップハンドラ440を含む)により、次のようにして ハードウエアプロセッサ100の特徴を有益に利用することができる。 1.全てのストアがトラップを必要とするわけではない。特に、ヒープへのポイ ンタのストアのみしかチェックを必要としない。上述したaputfield_quick及びa putstatic_quickバイトコードを使用することにより、そのようなポインタスト アのみのチェックが可能となる。 更に、スタックキャッシュ155において表現されるオペランドスタック、又 はローカル変数エリアへのストアがそのオペランドスタック、ローカル変数及び 静的エリアがルートセットの一部であると仮定される場合はトラップの必要がな い。スタックキャッシュ155のエントリにおいて表現されるオブジェクト参照 はポインタとして識別することができる。 2.上述したように、若いジェネレーションのオブジエクトのobjectrefが古い ジェネレーションオブジエクト内にストアされようとしている場合、ハードウエ アプロセッサ100のライトバリア430によるサポートがトラップする。 集められたメモリスペース850内において2つのジェネレーションしかサポ ートされていないような実施例においては、レジスタGC_CONFIGのフィールドWB_ VECTORは値0x5050を有する。objectrefのフィールドGC_TAGの1ビットのみ(即 ちビット30)がコードされる。一実施例では、値0はobjectrefを若いジェネ レーション810内のオブジェクトを示しているものとして識別し、値1はobje ctrefが古いジェネレーション820のオブジェクトを示しているものとして識 別する。この実施例では、ビット31は効果的に無視され得る。より多くの数の ジェネレーションに対する実施例は当業者には明らかであろう。フィールドWB_V ECTORの内容に基づき、ライトバリア430は古いジェネレーション820のオ ブジェクトから若いジェネレーション810のオブジェクトへのポインタがスト アされるときは常にガーベッジコレクショントラップハンドラ440をトリガす る。この実施例では、PSR.GCEビツトは0にセットされ、フィールドGC_PAGE_MAS Kの内容に基づくライトバリア430の動作をディスエーブルする。 4.ストアに対するトラップ条件は、 if{(GC_CONFIG[(objectref[31:30]##stor_data[31:30])]==1) OR((PSR.GCE==1)AND ((store_data[31:12] AND 0x3F##GC_CONFIG[27:16])!= (objectref[31:12]AND 0x3F##GC_CONFIG[27:16))} then trap であり、ここでがstore_dataはターゲットオブジェクトにストアされようとして いる32ビットポインタであり、objectrefはストアがなされようとしているオ ブジェクトに対する32ビットポインタである。 5.ハードウエアプロセッサ100がトラップする場合(即ち、ライトバリア4 30がガーベッジコレクショントラップハンドラ440をトリガする場合)、ハ ードウエアプロセッサ100の実行はガーベッジコレクショントラップハンドラ 440にジャンプする。ある実施例では、ガーベッジコレクショントラップハン ドラ440が想起セット830についての情報をストアし、ポインタストアのト ラッピングをエミュレートする。 6.ガーベッジコレクションの間、オブジェクトは若いジェネレーショ ン810から古いジェネレーション820に昇格(promoted)するが、昇格した オブジェクトに対する全ての参照のフィールドGC_TAGが更新され、昇格したオブ ジェクトがより古いジェネレーションの一部であることが反映される。カードテーブルに基づくジェネレーションコレクタ カードに基づくジェネレーションコレクタの実施に対し、レジスタGC_CONFIG のフィールドWB_VECTORは0xFFFFにセツトされる。これにより、ライトバリア4 30は全てのポインタストアをヒープへとトラップし、例えばガーベッジコレク ショントラップハンドラ440のようなトラップハンドラをトリガする。このよ うなカードに基づくジェネレーション型コレクタの実施例では、ガーベッジコレ クショントラップハンドラ440はカードテーブルデータ構造に対し追加的なス トアを実行し、ストアのトラッピングをエミュレートする。Wilsonによる 従来のカードに基づくジェネレーション型コレクタの実施例とは対照的に、ここ で述べている実施例ではポインタストアのみがトラップされる。別の実施例では 、レジスタGC_CONFIGのフィールドWB_VECTORは、やはりジェネレーション間にま たがるポインタストアのみに対応するライトバリア430のトラッピング動作を 定義するべく適切な値に設定される。このようにして、コレクションタイムスキ ャンニングは、ジェネレーション間ポインタストアが発生するようなカードに限 定され得る。そのような実施例では、カードテーブルにより上述した想起セット に基づく実施例とは対照的に二重化された除去機能が与えられるという利点があ る。トレーンアルゴリズムに基づくコレクタ Hudsonのトレーンアルゴリズムは、ジェネレーション型システムの最も 古いジェネレーションをほころびなく(non-disruptive)集めることができるた め、よく使用される。このアルゴリズムは、ライト バリアを用いて、最も古いジェネレーション内の異なるメモリ領域(“車両(ca rs)”)間の参照を追跡することにより作動する。ハードウエアプロセッサ10 0による実現においては、これらの“車両”は2の累乗個の境界において整合さ れた固定された2の累乗個の大きさの定められた領域として定義される。フィー ルドGC_PAGE_MASKはこのクラスのガーベッジコレクションアルゴリズムに対する ライトバリア430の動作を定義する。プロセッサ状態レジスタビットPSR.GCE が1にセットされている場合、ガーベッジコレクションページ境界(フィールド GC_PAGE_MASKによって定義される)を横切るポインタストアは全て、ライトバリ ア430によるガーベッジコレクショントラップハンドラ440のトリガーを引 き起こす。そのような実施例では、ガーベッジコレクショントラップハンドラ4 40は管理を行う。ページ(“車両”)の大きさはレジスタGC_CONFIGのフィー ルドGC_PAGE_MASKに基づいてプログラム可能に定義される。4Kバイト乃至8M バイトのページ範囲が上述した実施例においてサポートされる。他のコレクタ ライトバリアに依存するいくつかのリアルタイムガーベッジコレクタが開発さ れている。これらのガーベッジコレクタの実装は、ライトバリア430のポイン タに依存する特徴を有効に利用することを可能とする。Steeleによって提 案されているようなインクリメント的マスクスイープコレクタも、ライトバリア 430のポインタ依存特性を有効に利用し得る(Guy L.Steele,Multiprocessi ng Compactifying Garbge Collection,Communications of the ACM,18(9) (19 75)参照)。 本発明を様々な実施例に基づいて説明してきたが、これらの実施例は例示的な ものであり、発明の範囲はこれらの実施例に限定されないことが理解されるだろ う。第1命令、第2命令、第3命令などのクレームで 使用される用語は識別のためのものであって、命令の特定の順番を要求するもの と理解されるべきではない。説明した実施例に対し様々な変形、変更、追加及び 改良が可能である。例えば、本発明をJAVAプログラミング言語及びJAVA 仮想マシンに関連する実施例に基づいて説明してきたが、本発明はそれらに限定 されるものではなく、様々なプロセッサ環境に対するシステム、製品、方法、及 び装置を包含するものである。 更に、いくつかの実施例は、ハードウエアとして説明してきたが、ソフトウエ ア(例えばインタープリタ、ジャストインタイムコンパイラ(just-in-time com piler)など)による仮想マシーン命令プロセッサの具現が可能であり、そのよ うなプロセッサは、ジェネレーション間ポインタストアトラップマトリクス、オ ブジェクト参照ジェネレーションタグ付け、ジエネレーション間ポインタストア トラップマトリクス及びオブジェクト参照ジェネレーションタグ付けに応答する ライトバリア、ガーベッジコレクショントラップハンドラ、及び/又はライトバ リアによりサポートされたポインタ非依存命令のポインタ依存命令による選択的 動的置換のための機能を含むことができる。上述した又は他の変形、変更、追加 、及び改良は特許請求の範囲に画定される本発明の範囲に入るものである。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ビシン、サンジェイ アメリカ合衆国カリフォルニア州94087・ サニーベイル・マネアベニュー 1055・ア パートメント 89 【要約の続き】 ンタ依存ストア命令置換手段によって、本発明に基づく 実施態様において、ポインタストアに対してというだけ でなく、特定のガーベッジコレクション方法や複数の方 法の組み合わせにとって関心のあるジェネレーション間 ポインタストアの特定のセットに対して、正確なバリア を提供することが可能となる。

Claims (1)

  1. 【特許請求の範囲】 1.内部に形成されたオブジェクトへの参照が、それに関連づけられたジェネレ ーションメンバーシップタグを有するような動的割り当てストレージと、 ジェネレーション間ポインタストアトラップマトリックスと、 ジェネレーション間ポインタストアに対するライトバリアとを含み、 前記ライトバリアは、ターゲットオブジェクト参照により識別されるターゲッ トオブジェクトにストアされる前記ターゲットオブジェクト参照及びオブジェク ト参照データのそれぞれのジェネレーションメンバーシップタグ間の選択された 対応関係に応答してストア命令をトラップし、前記選択された対応関係は、前記 ジェネレーション間ポインタストアトラップマトリックスによってエンコードさ れることを特徴とする装置。 2.前記ジェネレーションポインタ間ストアトラップマトリックスが、ストアタ ーゲットオブジェクト及びストア参照データジェネレーション対に対応する要素 を含み、前記バリアが対応するストア参照データのポインタストアを対応するス トアターゲットオブジェクトにトラップするべきか否かを、前記要素の各々が示 すことを特徴とする請求項1に記載の装置。 3.前記ライトバリアが、前記ジェネレーション間ポインタストアトラップマト リックスをエンコードするライトバリアベクタレジスタ及び、ターゲットオブジ ェクト参照及びオブジェクト参照データの前記ジェネレーションメンバーシップ タグをそれぞれエンコードするオブジェクト参照に応答するロジックを含んでお り、前記ロジックによって、前記ライトバリアベクタレジスタ内へのジェネレー ションメンバーシップタグ指向ルックアップが提供されることを特徴とする請求 項1に記載の装置。 4.前記ジェネレーションメンバーシップタグが、前記ターゲットオブ ジェクト参照及び前記オブジェクト参照データのマスク可能な部分を含み、 前記ライトバリアが、前記マスク可能な部分及び前記ジェネレーション間ポイ ンタストアトラップマトリックスをエンコードするライトバリアベクタレジスタ の状態に応答するロジックを含むことを特徴とする請求項1に記載の装置。 5. 前記ライトバリアがポインタストア依存ハードウエアライトバリアを含み 、そのポインタストア依存性が、ポインタ非依存ストア命令のストアタイプフィ ールドタイプの実行時間解決に基づいて、前記ポインタ非依存ストア命令をポイ ンタ依存ストア命令によって置き換えることによって与えられることを特徴とす る請求項1に記載の装置。 6. 前記ライトバリアが、前記ターゲットオブジェクト参照及び前記オブジェ クト参照データに関連づけられた前記ジェネレーションタグ及び前記ジェネレー ション間ポインタストアトラップマトリックスをエンコードするライトバリアベ クタレジスタに応答するロジックを含むことを特徴とする請求項1に記載の装置 。 7.前記動的配置ストレージがメモリ内で表現されたヒープを含んでおり、 前記オブジェクトのジェネレーションが前記メモリの隣接する領域に於いて表 されていることを特徴とする請求項1に記載の装置。 8.前記動的配置ストレージがメモリ内で表現されたヒープを含んでおり、前記 オブジェクトのジェネレーションが前記メモリの必ずしも隣接しない領域に於い て表現されており、 前記オブジェクトへの前記参照が、アドレス部とマスク可能ジェネレーション タグ部とを含んでおり、前記ライトバリアが前記マスク可能ジェネレーションタ グ部に応答することを特徴とする請求項1に記載の装 置。 9.ハードウエアプロセッサに於いて具現されていることを特徴とする請求項1 に記載の装置。 10.コンピュータが読むことのできる媒体にエンコードされハードウエアプロ セッサ上で実行可能な命令を含むコンピュータソフトウエアプログラム製品とし て具現されていることを特徴とする請求項1に記載の装置。 11.前記コンピュータで読むことが可能な媒体が、ディスク媒体、CDROM 媒体、アドレス可能なメモリ媒体及びネットワーク通信媒体を含む群から選択さ れることを特徴とする請求項10に記載の装置。 12.更に、前記ジェネレーション間ポインタストアトラップマトリックスの表 現を含む仮想マシーン命令プロセッサを含み、 ライトバリアが前記仮想マシーン命令プロセッサ上で実行可能なポインタ依存 ストア命令コードを含み、 前記ポインタ依存ストア命令コードの実行が、前記ターゲットオブジェクト参 照及び前記オブジェクト参照データにそれぞれ関連づけられたジェネレーション タグに基づいて、前記ジェネレーション間ポインタストアマトリックスによって トラップされるべきか否かについて指示されたジェネレーション間ポインタのス トアを、前記ポインタ依存ストア命令の1つの特定の実行が行うか否かを判定し 、もしそうであればガーベジコレクションフォールトハンドラにトラップするこ とを特徴とする請求項1に記載の装置。 13.前記仮想マシーン命令プロセッサが、それ自身によって実行可能な仮想マ シーン命令の少なくともサブセットを直接実行するハードウエアプロセッサを含 んでいることを特徴とする請求項12に記載の装置。 14.前記仮想マシーン命令プロセッサが、それ自身によって実行可能 な仮想マシーン命令の少なくともサブセットを直接実行するハードウエアプロセ ッサを含み、 前記ハードウエアプロセッサが、前記ジェネレーション間ポインタストアトラ ップマトリックスをエンコードするライトバリアベクタレジスタ及び、ターゲッ トオブジェクト参照及びオブジェクト参照データの前記ジェネレーションメンバ ーシップタグをそれぞれエンコードするオブジェクト参照に応答するロジックを 含んでおり、前記ロジックによって、前記ライトバリアベクタレジスタ内へのジ ェネレーションメンバーシップタグ指向ルックアップが有効に提供されることを 特徴とする請求項12に記載の装置。 15.前記仮想マシーン命令プロセッサがハードウエアプロセッサ上で実行可能 なインタプリタを含み、前記ジェネレーション間ポインタストアトラップマトリ ックスが前記ハードウエアプロセッサにアクセス可能なストレージ内で表現され ていることを特徴とする請求項12に記載の装置。 16.前記仮想マシーン命令プロセッサがハードウエアプロセッサ上で実行可能 なジャストインタイムコンパイラを含み、前記ジェネレーション間ポインタスト アトラップマトリックスが前記ハードウエアプロセッサにアクセス可能なストレ ージ内で表現されていることを特徴とする請求項12に記載の装置。 17.前記仮想マシーン命令プロセッサが、データタイプの第1の実行時間解決 に基づいて、ポインタ非依存ストア命令コードを前記ポインタ依存ストア命令コ ードに動的に置き換えることをもって、前記ライトバリアをポインタストアに制 限し、 前記ジェネレーション間ポインタストアトラップマトリックスが、前記ライト バリアによるトラップを、更にジェネレーション間ポインタス トアに制限することを特徴とする請求項12に記載の装置。 18.前記ライトバリアの実装と、前記ジェネレーション間ポインタストアトラ ップマトリックス表現とを含む仮想マシーン命令プロセッサと、 前記仮想マシーン命令プロセッサによって実行可能な命令を含むフォールトハ ンドラとを含み、 前記ライトバリアは、ジェネレーション間ポインタをストアするようなターゲ ットオブジェクト及びストアデータを有するストア命令の実行時に前記フォール トハンドラをトリガすることを特徴とする請求項1に記載の装置。 19.前記フォールトハンドラの前記命令が想起セットへのストアのための命令 を含むことを特徴とする請求項18に記載の装置。 20.前記仮想マシーン命令プロセッサによって実行可能な命令のジェネレーシ ョン的コレクタプロセスを更に含み、 前記フォールトハンドラが、前記ジェネレーション的コレクタプロセスによっ て使用されるように、想起セットの表現にトラップされたストアデータを識別す るための情報をストアするべく、前記仮想マシーン命令プロセッサによって実行 可能な命令を含んでいることを特徴とする請求項18に記載の装置。 21.前記ターゲットオブジェクト参照及び前記オブジェクト参照データが各々 前記動的割り当てストレージ内のオブジェクト構造を参照し、前記オブジェクト 構造が、方法及びインスタンス変数の表現を含んでいることを特徴とする請求項 1に記載の装置。 22.前記ターゲットオブジェクト参照及び前記オブジェクト参照データが各々 動的割り当てストレージ内で表現されたリテラルデータに対するポインタである ことを特徴とする請求項1に記載の装置。 23.前記選択された対応関係を評価するための論理回路を有する実行 ユニット及び前記ジェネレーション間ポインタストラップマトリックスのレジス タによる表現を含むハードウエアプロセッサを更に有することを特徴とする請求 項1に記載の装置。 24.ハードウエアプロセッサで実行可能なソフトウエア仮想マシーン命令プロ グラムを更に含み、前記ソフトウエア仮想マシーン命令プログラムはジェネレー ション間ポインタストアトラップマトリックスを表現するためのコンピュータに よって読むことができるストレージを定義すると共に、前記選択された対応関係 を評価するためのプロセッサ命令を含んでいることを特徴とする請求項1に記載 の装置。 25.ジェネレーション間ポインタストアをトラップするための方法であって、 コンピュータで読むことのできるストレージ内にジェネレーション間ポインタ ストアトラップマトリックスを形成する過程と、 ターゲットオブジェクト参照及び変異プロセスストアオペレーションによって 格納されるオブジェクト参照データにそれぞれ関連づけられたジェネレーション メンバーシップタグを用いて前記ジェネレーション間ポインタストアトラップマ トリックスへのインデックス付けを行う過程と、 そのようにインデックス付けされた前記ジェネレーション間ポインタストアト ラップマトリックスの要素に於いてエンコードされたトラップインディケーショ ンに基づいて選択的にトラップする過程とを含むことを特徴とする方法。 26.前記インデックス付けされた要素に於いてエンコードされたトラップイン ディケーションが無いことに応じてトラップすることなく前記変異プロセススト アオペレーションを完了する過程を含むことを特徴とする請求項25に記載の方 法。 27.前記トラップを取り扱う過程が、 前記変異プロセスストアオペレーションに対応する想起セットエントリをスト アする過程を含むことを特徴とする請求項25に記載の方法。 28.前記トラップを取り扱う過程が、前記変異プロセスストアオペレーション をエミュレートする過程を含むことを特徴とする請求項25に記載の方法。 29.ストアターゲットフィールドタイプの実行時間決定に基づいてポインタ非 依存変異ストアオペレーション命令をポインタ依存命令に選択的に変換する過程 と、 前記ジェネレーション間ポインタストアトラップマトリックスへのインデック ス付けを概ね前記ポインタ依存命令に対してのみ行う過程とを含むことを特徴と する請求項25に記載の方法。 30.ハードウエアプロセッサの動作によって具現されることを特徴とする請求 項25に記載の方法。 31.コンピュータが読むことのできる媒体にエンコードされたハードウエアプ ロセッサ上で実行可能な命令を含むコンピュータソフトウエアプログラム製品と して具現されたことを特徴とする請求項1に記載の方法。 32.前記コンピュータで読むことが可能な媒体が、ディスク媒体、CDROM 媒体、アドレス可能なメモリ媒体及びネットワーク通信媒体を含む群から選択さ れることを特徴とする請求項31に記載の方法。 33.変異及びガーベジコレクタプロセスを有する仮想マシーン命令プロセッサ に於いてジェネレーション間ポインタストアをトラップするためのアーキテクチ ャ的サポートであって、 ジェネレーション間ポインタストアトラップマトリックスと、 前記ジェネレーション間ポインタストアマトリックスに応答し、(1) 前記ストアのターゲットメモリオブジェクトが関連づけられた第1ジェネレーシ ョンタグを有し前記ストアのオブジェクト参照データが関連づけられた第2のジ ェネレーションタグを有し、かつ(2)前記ジェネレーション間ポインタストア トラップマトリックスが第1ジェネレーションターゲットメモリオブジェクト及 び第2ジェネレーションオブジェクト参照データ対に向けられたトラップをエン コードする場合、前記変異プロセスによるストアの評価によってガーベッジコレ クションフォルトハンドラがトリガされるようにすることを特徴とするライトバ リア手段とを有することを特徴とするアーキテクチャ的サポート。 34.前記ライトバリア手段が仮想マシーン命令プロセッサによって実行可能な ポインタ依存ストア命令を含んでおり、前記ポインタ依存ストア命令は有効に前 記ライトバリアをポインタストアに限定することを特徴とする請求項33に記載 のアーキテクチャ的サポート。 35.前記ポインタ依存ストア命令が非高速バイトコードの高速擬似命令を含ん でいることを特徴とする請求項34に記載のアーキテクチャ的サポート。 36.前記ライトバリア手段が論理回路を含んでおり、前記論理回路は前記第1 及び第2ジェネレーションタグを用いて前記ポインタ間ストアマトリクスへのイ ンデックス付けを行うと共に、そのようにインデクス付けされた前記ジェネレー ション間ポインタストアトラップマトリクスの要素においてエンコードされたト ラップインディケーションに基づいてトラップハンドラをトリガすることを特徴 とする請求項33に記載のアーキテクチャ的サポート。 37.前記ライトバリア手段がポインタストア依存ハードウエアライトバリアを 含んでおり、そのポインタストア依存性はポインタ非依存ストア命令を、該ポイ ンタ非依存ストア命令のストアターゲットフィールド タイプの実行時間解決に基づいてポインタ依存ストア命令で置き換えることによ って与えられることを特徴とする請求項33に記載のアーキテクチャ的サポート 。
JP10546157A 1997-04-23 1998-04-21 ジェネレーション分離システム及びガーベッジコレクションのための方法 Ceased JP2000513850A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/841,543 1997-04-23
US08/841,543 US6098089A (en) 1997-04-23 1997-04-23 Generation isolation system and method for garbage collection
PCT/US1998/007622 WO1998048351A1 (en) 1997-04-23 1998-04-21 Generation isolation system and method for garbage collection

Publications (1)

Publication Number Publication Date
JP2000513850A true JP2000513850A (ja) 2000-10-17

Family

ID=25285142

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10546157A Ceased JP2000513850A (ja) 1997-04-23 1998-04-21 ジェネレーション分離システム及びガーベッジコレクションのための方法

Country Status (5)

Country Link
US (1) US6098089A (ja)
EP (1) EP0914633B1 (ja)
JP (1) JP2000513850A (ja)
DE (1) DE69841132D1 (ja)
WO (1) WO1998048351A1 (ja)

Families Citing this family (111)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9721659D0 (en) * 1997-10-14 1997-12-10 Philips Electronics Nv Space-limited marking structure for tracing garbage collectors
JPH11259437A (ja) * 1998-03-12 1999-09-24 Hitachi Ltd 不要バリア命令の削減方式
US6272504B1 (en) * 1998-05-07 2001-08-07 International Business Machines Corporation Flexibly deleting objects in a resource constrained environment
CA2241865A1 (en) * 1998-06-29 1999-12-29 Object Technology International Inc. Mapping a stack in a stack machine environment
US6317756B1 (en) * 1998-10-07 2001-11-13 International Business Machines Corporation On-the-fly garbage collector
US6279148B1 (en) * 1998-10-13 2001-08-21 Sun Microsystems, Inc. Method and apparatus for supporting efficient programming in dynamic pointer-safe languages
US6836887B1 (en) * 1998-12-21 2004-12-28 Microsoft Corporation Recyclable locking for multi-threaded computing environments
US6327702B1 (en) * 1998-12-30 2001-12-04 Microsoft Corporation Generating a compiled language program for an interpretive runtime environment
US6308319B1 (en) * 1999-02-22 2001-10-23 Sun Microsystems, Inc. Thread suspension system and method using trapping instructions in delay slots
GB9906629D0 (en) * 1999-03-23 1999-05-19 Koninkl Philips Electronics Nv Memory reclamation method
US6701520B1 (en) * 1999-05-11 2004-03-02 International Business Machines Corporation Preventing garbage collection of objects in object oriented computer programming languages
US6381738B1 (en) * 1999-07-16 2002-04-30 International Business Machines Corporation Method for optimizing creation and destruction of objects in computer programs
US7096238B2 (en) 1999-08-19 2006-08-22 Sun Microsystems, Inc. Dynamic feedback for determining collection-set size
US6393440B1 (en) * 1999-12-13 2002-05-21 International Business Machines Corporation Data structure for keeping track of objects remaining to be traced by concurrent garbage collector
US6427154B1 (en) * 1999-12-16 2002-07-30 International Business Machines Corporation Method of delaying space allocation for parallel copying garbage collection
US6226653B1 (en) * 2000-01-10 2001-05-01 International Business Machines Corporation Method and apparatus for performing generational garbage collection using remembered set counter
US7127526B1 (en) * 2000-03-20 2006-10-24 Nortel Networks Limited Method and apparatus for dynamically loading and managing software services on a network device
US6675375B1 (en) * 2000-04-28 2004-01-06 Sun Microsystems, Inc. Method and apparatus for optimized multiprocessing in a safe language
US6675257B1 (en) * 2000-06-28 2004-01-06 Microsoft Corporation System and method for managing storage space on a sequential storage media
US20030115167A1 (en) * 2000-07-11 2003-06-19 Imran Sharif Web browser implemented in an Internet appliance
US20020078445A1 (en) * 2000-07-11 2002-06-20 Imran Sharif Internet appliance for interactive audio/video display using a remote control unit for user input
US6980313B2 (en) * 2000-07-11 2005-12-27 Imran Sharif Fax-compatible internet appliance
US7245291B2 (en) 2000-07-11 2007-07-17 Imran Sharif System and method for internet appliance data entry and navigation
WO2002023345A1 (en) 2000-09-13 2002-03-21 Geodesic Systems, Incorporated Conservative garbage collectors that can be used with general memory allocators
US6567905B2 (en) * 2001-01-23 2003-05-20 Gemstone Systems, Inc. Generational garbage collector with persistent object cache
US6598141B1 (en) * 2001-03-08 2003-07-22 Microsoft Corporation Manipulating interior pointers on a stack during garbage collection
US7194513B2 (en) * 2001-07-08 2007-03-20 Imran Sharif System and method for using an internet appliance to send/receive digital content files as E-mail attachments
GB2378778B (en) * 2001-08-13 2005-03-23 Ibm Computer system with heap and card table
US7181732B2 (en) * 2001-11-14 2007-02-20 Sun Microsystems, Inc. Method and apparatus for facilitating lazy type tagging for compiled activations
JP3939975B2 (ja) * 2001-12-14 2007-07-04 松下電器産業株式会社 ガベージコレクション装置、ガベージコレクション方法及びガベージコレクションプログラム
US6959297B2 (en) 2002-04-25 2005-10-25 Winnow Technology, Llc System and process for searching within a data stream using a pointer matrix and a trap matrix
US6928460B2 (en) * 2002-07-01 2005-08-09 Sun Microsystems, Inc. Method and apparatus for performing generational garbage collection in a segmented heap
EP1387253B1 (en) * 2002-07-31 2017-09-20 Texas Instruments Incorporated Dynamic translation and execution of instructions within a processor
EP1387252B1 (en) * 2002-07-31 2019-02-13 Texas Instruments Incorporated Instruction prefix to indicate system commands
EP1387247A3 (en) * 2002-07-31 2007-12-12 Texas Instruments Inc. System and method to automatically stack and unstack java local variables
EP1387250B8 (en) * 2002-07-31 2012-02-29 Texas Instruments Inc. Processor that accomodates multiple instruction sets and multiple decode modes
EP1387257B1 (en) * 2002-07-31 2017-08-23 Texas Instruments Inc. System to dispatch multiple instructions to available hardware resources
EP1387251B1 (en) * 2002-07-31 2017-09-06 Texas Instruments Incorporated Instruction for copying data of a stack storage
EP1387278A3 (en) * 2002-07-31 2005-03-23 Texas Instruments Inc. Methods and apparatuses for managing memory
EP1387256B1 (en) * 2002-07-31 2018-11-21 Texas Instruments Incorporated Program counter adjustment based on the detection of an instruction prefix
EP1387273B1 (en) * 2002-07-31 2010-07-21 Texas Instruments Incorporated Conditional garbage collection based on monitoring to improve real time performance
EP1391821A3 (en) * 2002-07-31 2007-06-06 Texas Instruments Inc. A multi processor computing system having a java stack machine and a risc based processor
US7631593B2 (en) * 2002-07-31 2009-12-15 Food Equipment Technologies Company, Inc. Food processing apparatus with auto-directive controller and method
EP1387275B1 (en) * 2002-07-31 2009-06-17 Texas Instruments Inc. Memory management of local variables upon a change of context
EP1387277B1 (en) * 2002-07-31 2009-07-15 Texas Instruments Incorporated Write back policy for memory
EP1387255B1 (en) * 2002-07-31 2020-04-08 Texas Instruments Incorporated Test and skip processor instruction having at least one register operand
EP1387258A3 (en) * 2002-07-31 2008-01-02 Texas Instruments Incorporated Processor-processor synchronization
EP1387249B1 (en) * 2002-07-31 2019-03-13 Texas Instruments Incorporated RISC processor having a stack and register architecture
US20040024969A1 (en) * 2002-07-31 2004-02-05 Texas Instruments Incorporated Methods and apparatuses for managing memory
EP1387254B1 (en) * 2002-07-31 2012-12-12 Texas Instruments Incorporated Skip instruction carrying out a test with immediate value
EP1387259B1 (en) 2002-07-31 2017-09-20 Texas Instruments Incorporated Inter-processor control
EP1387248B1 (en) * 2002-07-31 2017-08-16 Texas Instruments Inc. A processor with a split stack
EP1391820A3 (en) * 2002-07-31 2007-12-19 Texas Instruments Incorporated Concurrent task execution in a multi-processor, single operating system environment
EP1387279B1 (en) * 2002-07-31 2008-05-14 Texas Instruments Inc. Cache coherency in a multi-processor system
EP1387274A3 (en) * 2002-07-31 2004-08-11 Texas Instruments Incorporated Memory management for local variables
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
US7539713B2 (en) 2002-11-05 2009-05-26 Sun Microsystems, Inc. Allocation of likely popular objects 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
US7024437B2 (en) * 2002-12-06 2006-04-04 Sun Microsystems, Inc. Better placement of objects reachable from special objects during collection based on the train algorithm
US7069280B2 (en) 2002-12-06 2006-06-27 Sun Microsystems, Inc. Collection-tick mechanism for a collector based on the train algorithm
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
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
US7072905B2 (en) * 2002-12-06 2006-07-04 Sun Microsystems, Inc. Better placement of objects reachable from outside a generation managed by the train algorithm
US20040128329A1 (en) * 2002-12-31 2004-07-01 International Business Machines Corporation Parallel incremental compaction
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
US7062519B2 (en) * 2003-02-27 2006-06-13 Sun Microsystems, Inc. Incremental scanning of enormous objects to improve scheduling and pause-time behavior of garbage collection
US7096329B2 (en) * 2003-02-27 2006-08-22 Sun Microsystems, Inc. Better placement of objects promoted into a generation managed by the train algorithm
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
US7032126B2 (en) * 2003-07-08 2006-04-18 Softek Storage Solutions Corporation Method and apparatus for creating a storage pool by dynamically mapping replication schema to provisioned storage volumes
US7321908B2 (en) * 2003-07-23 2008-01-22 International Business Machines Corporational Mostly concurrent garbage collection
DE60328379D1 (de) * 2003-07-30 2009-08-27 Texas Instruments Inc Reformatier-logik-schaltung zur Reformatierung eines Speicherzugriffs auf ein Gerät
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
US7689782B1 (en) * 2003-08-04 2010-03-30 Azul Systems, Inc. Processor instruction used to determine whether to perform a memory-related trap
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
US8238696B2 (en) 2003-08-21 2012-08-07 Microsoft Corporation Systems and methods for the implementation of a digital images schema for organizing units of information manageable by a hardware/software interface system
US8166101B2 (en) 2003-08-21 2012-04-24 Microsoft Corporation Systems and methods for the implementation of a synchronization schemas for units of information manageable by a hardware/software interface system
US7404182B1 (en) 2003-10-03 2008-07-22 Sun Microsystems, Inc. Deferring and combining write barriers for a garbage-collected heap
US20050091181A1 (en) * 2003-10-23 2005-04-28 Mckee Timothy P. System and method for the presentation of items stored on a computer
US7730073B2 (en) * 2003-10-23 2010-06-01 Microsoft Corporation System and a method for presenting related items to a user
US7908562B2 (en) * 2003-10-23 2011-03-15 Microsoft Corporation System and a method for presenting items to a user with a contextual presentation
US7197521B2 (en) * 2003-11-21 2007-03-27 Intel Corporation Method and system performing concurrently mark-sweep garbage collection invoking garbage collection thread to track and mark live objects in heap block using bit vector
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
US20050246689A1 (en) * 2004-04-29 2005-11-03 Venkatesh Radhakrishnan Symbol table discarding
US7770169B2 (en) * 2004-05-17 2010-08-03 Oracle America, Inc. Thread rendezvous for read-only code in an object-oriented computing environment
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
US7293051B1 (en) * 2004-07-01 2007-11-06 Sun Microsystems, Inc. Collection-set selection using a small priority queue
US7676801B1 (en) 2004-08-31 2010-03-09 Sun Microsystems, Inc. Scanning of evacuated objects in a generation managed by the train algorithm
US7321909B1 (en) 2004-12-23 2008-01-22 Sun Microsystems, Inc. Method and apparatus for forwarding references to objects concurrently with space-incremental garbage collection
US7870170B2 (en) * 2005-05-03 2011-01-11 International Business Machines Corporation Method and apparatus for determining leaks in a Java heap
GB0512809D0 (en) * 2005-06-23 2005-08-03 Ibm Arrangement and method for garbage collection in a computer system
US7486673B2 (en) 2005-08-29 2009-02-03 Connect Technologies Corporation Method and system for reassembling packets prior to searching
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
US20070100919A1 (en) * 2005-11-01 2007-05-03 Electronics And Telecommunications Research Institute Garbage collection unit and method thereof
US7774389B2 (en) * 2007-01-17 2010-08-10 Microsoft Corporation Optimized garbage collection techniques
KR20080085574A (ko) * 2007-03-20 2008-09-24 삼성전자주식회사 비휘발성 메모리의 가비지 컬렉션을 위한 장치 및 방법
US7685182B2 (en) * 2007-05-08 2010-03-23 Microsoft Corporation Interleaved garbage collections
US7953711B2 (en) * 2008-04-30 2011-05-31 Oracle America, Inc. Method and system for hybrid garbage collection of multi-tasking systems
US8832403B2 (en) * 2009-11-13 2014-09-09 International Business Machines Corporation Generation-based memory synchronization in a multiprocessor system with weakly consistent memory accesses
US8601036B2 (en) 2011-03-23 2013-12-03 International Business Machines Corporation Handling persistent/long-lived objects to reduce garbage collection pause times
US9383448B2 (en) 2012-07-05 2016-07-05 Deca System Co., Ltd. Golf GPS device with automatic hole recognition and playing hole selection
JP6051733B2 (ja) * 2012-09-25 2016-12-27 日本電気株式会社 制御システム、制御方法、及び、制御プログラム
US9734052B2 (en) 2015-06-30 2017-08-15 International Business Machines Corporation Multi-section garbage collection
US10180902B2 (en) 2015-06-30 2019-01-15 International Business Machines Corporation Pauseless location and object handle based garbage collection
US10176093B2 (en) 2015-06-30 2019-01-08 International Business Machines Corporation Pauseless location and object handle based garbage collection
US9734053B2 (en) 2015-06-30 2017-08-15 International Business Machines Corporation Garbage collection handler to update object pointers
GB201704844D0 (en) 2017-03-27 2017-05-10 Microsoft Technology Licensing Llc Manual memory management using lazy patching

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4922414A (en) * 1982-12-17 1990-05-01 Symbolics Inc. Symbolic language data processing system
JPS59188879A (ja) * 1982-12-17 1984-10-26 シンボリツクス・インコ−ポレ−テツド デ−タプロセツサ
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
US4989134A (en) * 1987-03-20 1991-01-29 Hewlett-Packard Company Method and apparatus for enhancing data storage efficiency
US5136706A (en) * 1987-04-30 1992-08-04 Texas Instruments Incorporated Adaptive memory management system for collection of garbage in a digital computer
US4807120A (en) * 1987-04-30 1989-02-21 Texas Instruments Incorporated Temporal garbage collector with indirection cells
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
US5463778A (en) * 1989-11-16 1995-10-31 Texas Instruments Incorporated User controlled trap handler
US5321834A (en) * 1989-11-28 1994-06-14 Xerox Corporation Method and system for reclaiming unreferenced computer memory space
US5293614A (en) * 1991-04-08 1994-03-08 Texas Instruments Incorporated System and method for hard real-time garbage collection requiring a write barrier but no read barrier
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
US5367685A (en) * 1992-12-22 1994-11-22 Firstperson, Inc. Method and apparatus for resolving data references in generated code
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
US5619665A (en) * 1995-04-13 1997-04-08 Intrnational Business Machines Corporation Method and apparatus for the transparent emulation of an existing instruction-set architecture by an arbitrary underlying instruction-set architecture

Also Published As

Publication number Publication date
DE69841132D1 (de) 2009-10-22
US6098089A (en) 2000-08-01
EP0914633A1 (en) 1999-05-12
WO1998048351A1 (en) 1998-10-29
EP0914633B1 (en) 2009-09-09

Similar Documents

Publication Publication Date Title
JP4130481B2 (ja) ポインタ依存擬似命令置換機構を含むライトバリアシステム及び方法
JP2000513850A (ja) ジェネレーション分離システム及びガーベッジコレクションのための方法
JP4104668B2 (ja) ガーベッジコレクションページ境界横断ポインタストアをトラップするためのライトバリアシステム及び方法
US6424977B1 (en) Train-algorithm-based garbage collector employing reduced oversized-object threshold
US6185581B1 (en) Train-algorithm-based garbage collector employing fixed-size remembered sets
US6434577B1 (en) Scalable-remembered-set garbage collection
JP3881702B2 (ja) 部分的に再配置されたオブジェクトのソース及び目標インスタンスに関する書込みバリアを含む有界休止時間ガーベッジコレクションシステム及び方法
US6434576B1 (en) Popular-object handling in a train-algorithm-based garbage collector
US6415302B1 (en) Train-algorithm-based garbage collector employing farthest-forward-car indicator
US6449626B1 (en) Reduced-cost remembered-set processing in a train-algorithm-based garbage collector
US7069281B2 (en) Efficient collocation of evacuated objects in a copying garbage collector using variably filled local allocation buffers
KR19990007400A (ko) 일부 재배치된 오브젝트의 소오스 인스턴스와 결합된 기록 배리어를 포함하는 유계 정지 시간 폐영역 회수 시스템 및 방법
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
US6999979B2 (en) Efficient encoding of references into a collection set
US7062518B2 (en) Efficiently supporting the existence of long trains in a generation managed by the train algorithm
US7096329B2 (en) Better placement of objects promoted into a generation managed by the train algorithm
US20040186862A1 (en) Parallel caching of insertions into remembered-sets
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
KR100576904B1 (ko) 가비지수집페이지경계횡단포인터스토어를트랩하기위한기록배리어시스템및방법
KR100502380B1 (ko) 포인터-고유명령변형교환메카니즘을포함하는쓰기배리어시스템및방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050310

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20071030

A313 Final decision of rejection without a dissenting response from the applicant

Free format text: JAPANESE INTERMEDIATE CODE: A313

Effective date: 20080403

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20080513