(57)【特許請求の範囲】
【請求項１】
コンピュータシステムにおけるガーベッジコレクションに用いられる、特定のメモリオブジェクトの再配置時にメモリオブジェクトインスンタンスの整合性を維持し、かつその特定のメモリオブジェクトに対するアクセスを発生する他の処理の休止時間を有界とするように前記特定のメモリオブジェクトの再配置を行う装置であって、
中に形成されたオブジェクトがFromSpace（４２０）インスタンスからToSpace（４３０）インスタンスの各々へ再配置可能である、メモリストレージ（６３０）と、
再配置操作を不完全とする、前記オブジェクトの特定の１つのFromSpaceインスタンス（４５０）及びToSpaceインスタンス（４５０Ａ）を識別するために更新可能な部分的に再配置されたオブジェクト識別子ストア（１４４、４１０）と、
前記特定のオブジェクトのFromSpaceインスタンス及びToSpaceインスタンスのどちらかを目標とするストア指向（store-oriented）メモリアクセスのみを対象とする書込みバリア（１０４０、１１４０）であって、前記ストア指向メモリアクセスのためのオブジェクト識別子と部分的に再配置された前記オブジェクト識別子ストアのコンテンツとの一致に対して応答し、前記ToSpaceインスタンスと前記FromSpaceインスタンスの少なくともコピーされた部分（４５０Ａ）との間の整合性を保持し、かつ前記特定のオブジェクトに対するポインタのインクリメンタル更新を可能にする、該書込みバリアとを有することを特徴とする装置。
【請求項２】
前記書込みバリアが、前記ストア指向メモリアクセスのためのオブジェクト識別子と部分的に再配置された前記オブジェクト識別子ストアとの一致に応じて、前記FromSpace及びToSpaceインスタンスの両方に対して前記ストア指向メモリアクセスのためのストアデータをブロードキャストすることを特徴とする請求項１に記載の装置。
【請求項３】
前記ストア指向のメモリアクセスが前記FromSpaceインスタンスのコピーされていない部分を目標とする場合に、前記書込みバリアが選択的にストアデータのブロードキャストをせずに、その代わり前記ToSpaceインスタンスではなく、前記FromSpaceインスタンスに対して前記ストアデータを向けることを特徴とする請求項２に記載の装置。
【請求項４】
前記部分的に再配置されたオブジェクト識別子ストアが、前記FromSpaceインスタンスを特定するためのFROM field及び前記ToSpaceインスタンスを特定するためのTO fieldを含み、
前記書込みバリアが、前記メモリストレージに対するハードウェアプロセッサのストアパス（store path）に組込まれた書込みバリアロジックを含み、該書込みバリアロジックが、前記ストア指向メモリアクセスのためのオブジェクト識別子と前記FROM field及びTO fieldのどちらかのコンテンツとの一致に対して応答することを特徴とする請求項１に記載の装置。
【請求項５】
前記書込みバリアロジックが、前記特定のオブジェクトのFromSpace及びToSpaceインスタンスの両方に対して、前記ストア指向メモリアクセスのためのストアデータを与え、それ故、前記整合性を保持することを特徴とする請求項４に記載の装置。
【請求項６】
前記書込みバリアロジックが、前記特定のオブジェクトの前記FromSpaceインスタンスに対して、前記ストア指向メモリアクセスのためのストアデータを与え、前記ストア指向メモリアクセスによって目標とされた前記特定のオブジェクトの一部のToSpaceインスタンスへのコピーが完了した場合には、ToSpaceインスタンスに対しても前記ストアデータを与え、それ故、前記整合性を保持することを特徴とする請求項４に記載の装置。
【請求項７】
前記FromSpaceインスタンスの前記コピーされた部分とコピーされていない部分とを識別する部分的なコピー位置インディケータを含み、
前記書込みバリアが、前記コピーされた部分を目標とする第２のストア指向メモリアクセスを前記FromSpace及びToSpaceインスタンスの両方に対してブロードキャストし、
前記書込みバリアが、前記コピーされていない部分を目標とする第３のストア指向メモリアクセスを、前記ToSpaceインスタンスではなく前記FromSpaceに対して向けることを特徴とする請求項１に記載の装置。
【請求項８】
前記FromSpace及びToSpaceインスタンスのどちらかの前記コピーされた部分とコピーされていない部分とを識別する部分的なコピー位置インディケータを含み、
前記書込みバリアが、前記FromSpace及びToSpaceインスタンスのどちらかの前記コピーされた部分を目標とする第４のストア指向メモリアクセスを、前記FromSpace及びToSpaceインスタンスの両方に対してブロードキャストし、
前記書込みバリアが、前記コピーされていない部分を目標とする第５のストア指向メモリアクセスを、前記ToSpaceインスタンスではなく前記FromSpaceに対して向けることを特徴とする請求項１に記載の装置。
【請求項９】
前記特定のオブジェクトの再配置操作のコピー段階の間に、前記書込みバリアが、前記コピーされた部分を目標とする第６のストア指向メモリアクセスを、前記FromSpace及びToSpaceインスタンスの両方に対してブロードキャストし、
前記コピー段階の間に、前記書込みバリアが、前記FromSpaceインスタンスのコピーされていない部分を目標とする第７のストア指向メモリアクセスを、前記ToSpaceインスタンスではなく前記FromSpaceに対して向けて、
前記ポインタ更新段階の間において、前記書込みバリアが、前記FromSpace及びToSpaceインスタンスのどちらかを目標とする第８のストア指向メモリアクセスを、前記FromSpace及びToSpaceインスタンスの両方に対してブロードキャストすることを特徴とする請求項１に記載の装置。
【請求項１０】
前記コピーされた部分と前記コピーされていない部分とを識別する部分的なコピー位置インディケータと、
現在の再配置操作の段階を表示するための再配置モードインディケータ（relocation mode indicator）であって、前記コピー段階及び前記ポインタ更新段階を有し、かつ前記特定のオブジェクトのために前記再配置モードインディケータに応答する前記書込みバリアを有する前記再配置モードインディケータとを含むことを特徴とする請求項９に記載の装置。
【請求項１１】
前記コピーされた部分と前記コピーされていない部分とを識別する部分的なコピー位置インディケータであって、前記ポインタ更新段階が前記特定のオブジェクトの完全にコピーされた状態を示す部分的なコピー位置インディケータに対応することを特徴とする請求項９に記載の装置。
【請求項１２】
部分的に再配置された前記オブジェクト識別子ストア及び前記書込みバリアを具現化するプロセッサと、
前記プロセッサによって読み取り可能なメディアにコード化されたミューテータプロセス命令（mutator process instructions）を前記プロセッサに実行させることによって実現されるミューテータ手段であって、前記ミューテータプロセス命令が、前記ストア指向メモリアクセスに対応する命令を含む、該ミューテータ手段と、
前記プロセッサによって読み取り可能なメディアにコード化されたガーベッジコレクタプロセス命令を前記プロセッサに実行させることによって実現されるガーベッジコレクタ手段であって、前記ガーベッジコレクタプロセス命令が、特定のオブジェクトを前記FromSpaceインスタンスからToSpaceインスタンスへとインクリメンタルコピーする命令、前記ToSpaceインスタンスを参照するために前記FromSpaceインスタンスを参照するポインタをインクリメンタル更新する命令、及び部分的に再配置された前記オブジェクト識別子ストアが当該ガーベッジコレクタプロセスに対応するように保持する命令の命令シーケンスを含み、前記ガーベッジコレクタ手段による処理が、前記ミューテータ手段によって割り込み可能である、該ガーベッジコレクタ手段とを含むことを特徴とする請求項１に記載の装置。
【請求項１３】
部分的に再配置された前記オブジェクト識別子ストア及び前記書込みバリアを具現化するプロセッサと、
前記プロセッサによって読み取り可能なメディアにコード化されたミューテータプロセス命令を前記プロセッサに実行させることによって実現されるミューテータ手段であって、前記ミューテータプロセス命令が、前記ストア指向メモリアクセスに対応する命令を含む、該ミューテータ手段と、
前記プロセッサによって読み取り可能なメディアにコード化された再配置プロセス命令（relocator process instructions）を前記プロセッサに実行させることによって実現される再配置手段であって、前記再配置プロセス命令が、特定のオブジェクトを前記FromSpaceインスタンスからToSpaceインスタンスへとインクリメンタルコピーする命令、前記ToSpaceインスタンスを参照するために前記FromSpaceインスタンスを参照するポインタをインクリメンタル更新する命令、及び部分的に再配置された前記オブジェクト識別子ストアが当該再配置プロセスに対応するように保持する命令の命令シーケンスを含み、前記再配置手段による処理が、前記ミューテータ手段によって割り込み可能である、該再配置手段とを含むことを特徴とする請求項１に記載の装置。
【請求項１４】
前記再配置プロセス命令が、有界休止時間のヒープ短縮及び、世代別ガーベッジコレクション、マークスイープコンパクト（mark-sweep-compact）ガーベッジコレクション、コピーガーベッジコレクションの１つとして機能するために選択されることを特徴とする請求項１３に記載の装置。
【請求項１５】
前記特定のオブジェクトを参照する前記ポインタが、前記特定のオブジェクトを直接参照し、
前記再配置プロセス命令が、有界休止時間のヒープ短縮及び、世代別ガーベッジコレクション、マークスイープコンパクトガーベッジコレクション、コピーガーベッジコレクションの１つとして機能するために選択されることを特徴とする請求項１３に記載の装置。
【請求項１６】
前記プロセッサが、仮想マシン命令プロセッサを含むことを特徴とする請求項１３に記載の装置。
【請求項１７】
前記プロセッサが、前記部分的に再配置されたオブジェクト識別子ストアと前記書込みバリアを具現化するロジック及びレジスタストレージを有するハードウェアプロセッサを含むことを特徴とする請求項１３に記載の装置。
【請求項１８】
前記特定のオブジェクトが大形オブジェクト及び、アクセス頻度の高いオブジェクト（popular object）、大形オブジェクトとアクセス頻度の高いオブジェクトの１つを含むことを特徴とする請求項１に記載の装置。
【請求項１９】
前記書込みバリアが、前記FromSpaceインスタンスを目標にするストア指向メモリアクセスに対する第１の書込みバリア、及び前記ToSpaceインスタンスを目標にするストア指向メモリアクセスに対する第２の書込みバリアを含むことを特徴とする請求項１に記載の装置。
【請求項２０】
前記部分的に再配置されたオブジェクト識別子ストア及び前記書込みバリアを具現化するハードウェアプロセッサと、
前記ハードウェアプロセッサにおいて実行するためのミューテータプロセス命令を受信する前記ハードウェアプロセッサと組み合わされた通信デバイスであって、前記ミューテータプロセス命令が、前記ストア指向メモリアクセスに相当する第１の命令を含む、前記通信デバイスと、
実行可能なガーベッジコレクションプロセス命令をコード化するために前記ハードウェアプロセッサによって読み取り可能なメディアであって、前記ハードウェアプロセッサが、前記特定のオブジェクトをインクリメンタル（incremental）にコピーし、かつポインタをインクリメンタル更新する、メディアとを含むことを特徴とする請求項１に記載の装置。
【請求項２１】
前記部分的に再配置されたオブジェクト識別子ストアと前記メモリストレージに繋がれた第１及び第２のプロセッサを含み、前記第１のプロセッサが前記書込みバリアを有し、
前記再配置操作が、前記第２のプロセッサで実行可能なガーベッジコレクタプロセスによる前記特定のオブジェクトのインクリメンタルなコピーを含み、
前記ストア指向およびロード指向のメモリアクセスの各々が、前記第１のプロセッサで実行可能なミューテータプロセスによる書込み・読出しアクセスを含み、
前記部分的に再配置されたオブジェクト識別子ストアが、前記特定のオブジェクトの前記インクリメンタルなコピーに関する前記ガーベッジコレクタプロセスによって保持されることを特徴とする請求項１に記載の装置。
【請求項２２】
前記第２のプロセッサが、特定目的のガーベッジコレクションプロセッサを含むことを特徴とする請求項２１に記載の装置。
【請求項２３】
前記第２のプロセッサが、前記メモリストレージと一体であり、前記第２のプロセッサ及び前記メモリストレージがともにガーベッジ収集メモリモジュール（garbage collected memory module）を含むことを特徴とする請求項２１に記載の装置。
【請求項２４】
前記部分的に再配置されたオブジェクト識別子ストアが、再配置操作を不完全とする第２の前記オブジェクトを特定するためにさらに更新可能であり、
前記装置が、前記部分的に再配置されたオブジェクト識別子ストア及び前記メモリストレージと繋がった第１及び第２のガーベッジコレクションプロセスを含み、前記特定のオブジェクト及び第２のオブジェクトの再配置操作が、前記第１及び第２のガーベッジコレクションプロセス各々によるインクリメンタルなコピーを含むことを特徴とする請求項１に記載の装置。
【請求項２５】
コンピュータシステムにおけるガーベッジコレクションにおいて、メモリオブジェクトインスンタンスの一貫性を維持し、かつそのメモリオブジェクトにアクセスするミューテータプロセスの休止時間を有界とするように、該メモリオブジェクトを再配置する方法であって、
再配置が不完全な特定のメモリオブジェクトのFromインスタンス及びToインスタンスのどちらかを目標とする前記ミューテータプロセスのストア指向アクセスに対して応答し、その部分的に再配置された特定のメモリオブジェクトへのストア用メモリアクセスのみを対象とする書込みバリアを構成する過程と、
FromインスタンスからToインスタンスへ前記メモリオブジェクトをインクリメンタルにコピーする過程と、
前記インクリメンタルコピーの間に、第１の前記ストア指向アクセスに応答して、前記From及び前記Toインスタンスの両方に対して前記第１のストア指向アクセスをブロードキャストする過程とを含むことを特徴とする方法。
【請求項２６】
前記書込みバリアを構成する過程が、前記From及び前記Toインスタンスの特定のために部分的に再配置されたオブジェクト識別子ストアを更新する過程を含み、
前記ブロードキャストが、前記第１のストア指向アクセスのためのオブジェクト識別子と前記部分的に再配置されたオブジェクト識別子ストアのコンテンツとの間の一致に応答することを特徴とする請求項２５に記載の方法。
【請求項２７】
前記メモリオブジェクトのコピーされた部分とコピーされていない部分とを識別するための部分的なコピー位置インディケータを保守する過程と、
前記インクリメンタルコピーの間に、第１の前記ストア指向アクセスに応答して、前記Toインスタンスではなく前記Fromインスタンスに対して前記第２のストア指向アクセスを向ける過程とを含むことを特徴とする請求項２５に記載の方法。
【請求項２８】
前記ブロードキャストが、前記書込みバリア及び前記書込みバリアによるトラップに応答するトラップハンドラソフトウェアの１つによって実施されることを特徴とする請求項２５に記載の方法。
【請求項２９】
前記Fromインスタンスではなく前記Toインスタンスを参照するための前記メモリオブジェクトに対するポインタのインクリメンタル更新過程と、
前記ポインタのインクリメンタル更新の間に、第３の前記ストア指向アクセスに応答して、前記Fromインスタンス及び前記Toインスタンスの両方に対して前記第３の前記ストア指向アクセスをブロードキャストする過程とを含むことを特徴とする請求項２５に記載の方法。
【請求項３０】
前記ポインタのインクリメンタルコピー及びインクリメンタル更新を実施するガーベッジコレクションプロセスに保守された再配置モードインディケータを用いて、前記インクリメンタル更新と前記インクリメンタルコピーとを識別する過程を含むことを特徴とする請求項２９に記載の方法。
【請求項３１】
ガーベッジコレクションプロセスに保守された部分的なコピー位置インディケータを用いて、前記インクリメンタル更新と前記インクリメンタルコピーとを識別する過程を含むことを特徴とする請求項２９に記載の方法。
【発明の詳細な説明】
発明の背景
発明の技術分野
本発明はガーベッジコレクションに関し、特にガーベッジコレクタに於てジェネレーションを分離するためのシステム及び方法に関する。
関連技術の説明
多くのプログラム言語は、伝統的に、メモリの動的アロケーション（割り当て）及びディアロケーション（割り当て解除）の責任をプログラマの記憶に負わせていた。例えば、Ｃプログラム言語に於ては、mallocプロシージャによってまたはその擬似命令(variant)によってヒープからメモリを割り当てる。ポインタ変数ｐが与えられると、p=malloc(sizeof(SomeStruct))というステートメントに対応するマシン命令の実行により、SomeStructデータ構造を表すために必要なサイズのメモリオブジェクトのために新たに割り当てられた記憶領域にポインタ変数ｐをポイントさせる。使用後には、ポインタ変数ｐにより識別されるメモリオブジェクトは、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-41 Wiley(1996)を参照されたい。
３つの古典的なガーベッジコレクション方法として、参照カウンティング(reference counting)、マークスイープ(mark-sweep)、コピーストレージ回復(copying storage reclamation)等の方法がある。第１の参照カウンティング法は、アクティブメモリオブジェクト或いはルート参照位置から各メモリオブジェクトへの参照即ちポインタの数のカウントを継続的に維持することに基づく。新たなメモリオブジェクトが割り当てられ、それに対してポインタが割り付けられると、メモリオブジェクトの参照カウントは１にセットされる。その後、このメモリオブジェクトにポインタが参照するようにセットされる度に、メモリオブジェクトの参照カウントが１ずつ増大させられる。メモリオブジェクトに対する参照が削除或いは上書きされると、参照カウントが１ずつ減らされる。参照カウントが０であるメモリオブジェクトは到達不能であって、ガーベッジとして収集される。参照カウント式のガーベッジコレクタの実施態様は、通常各メモリオブジェクトに参照カウントと呼ばれる追加のフィールドを有しており、新たなオブジェクト、オブジェクトの削除或いはポインタのアップデートの機能としてのカウンタの増減を行うサポートを有する。
それに対して、トレーシングコレクタ(tracing collector)法は、生きた即ち参照可能なメモリオブジェクトを特定するために、メモリの参照チェーンを横断することを含む。このようなトレーシングコレクタ法の一つとして、メモリの参照チェーンを横断して生きたメモリオブジェクトを識別しマークするようなマークスイープ法がある。マークされていないメモリはガーベッジであって、回収され、別のスイープ段階の間にフリープール（free pool）に戻される。マークスイープガーベッジコレクタ法は通常、各メモリオブジェクトにマークビットと呼ばれる追加のフィールドを有している。マークコンパクトコレクタ(mark-compact collector)は、伝統的なマークスイープ法に対して短縮(compaction)の機能を付加する。短縮は、生きたオブジェクトを再配置し、断片化を削減する利点がある。参照カウント法も短縮を用いることができる。
他のトレーシング方法、即ちコピーコレクションは、メモリまたはその一部を２つの半空間に分割し、一方に現在のデータを記憶し、他方に古いデータを記憶する。コピーガーベッジコレクションは、これらの２つの半空間の役割を逆転することにより開始される。コピーコレクタは次に、古い半空間FromSpace内の生きたオブジェクトを横断して、到達可能なオブジェクトを新たな半空間ToSpaceにコピーする。FromSpace内の全ての生きたオブジェクトを横断して、かつコピーした後、データ構造のレプリカがToSpace内に存在する。要するに、コピーコレクタはガーベッジの中から生きたオブジェクトを取り出すのである。コピーコレクションの利点となる副次的効果は、生きたオブジェクトがToSpace内に短縮され、断片化を減少させることである。
ジェネレーション的な方法は次の２つの発見に基づくものである。(１)メモリオブジェクトは通常早死にする。(２)トレーシング方法は比較的長生きのオブジェクトを横断して、コピー即ち再配置操作するためにかなりのリソースを消費する。ジェネレーション的なガーベッジコレクション方法は、ヒープを２つまたはそれ以上のジェネレーションに分け、オブジェクトを年齢によって区分し、若いジェネレーションに対して収集の努力を集中し或いは少なくともより熱心に収集する。若いジェネレーションは小さいものであるため、ガーベッジコレクションに関連する休止時間は平均的に短く保たれる。ジェネレーション内のガーベッジコレクションは、コピーコレクション或いはマークスイープコレクションのどちらかの方法によって行われる。メモリオブジェクトの若いジェネレーションから古いジェネレーションへの格上げには、コピーを伴う。
大形オブジェクトをコピーするコストのために、ジェネレーション的な手法の中には、大形オブジェクト領域を伴うものがある。これについては、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の両氏は、３３０Ｋバイトを大形オブジェクト領域に割り当てることによって４つのファクターによって、休止時間を減らすことができることを発見した。
対話型アプリケーションまたはリアルタイムアプリケーションにとって、ガーベッジコレクションの休止時間が短いことは、重要な性能指数である。従来のガーベッジコレクタの定期的なトレーシングの実施は、使用されなくなったメモリを探すためにメモリを横断することにより、アプリケーションプログラムの実行が中断される。残念ながら、ハードなリアルタイムシステムは、オンタイム演算となるワーストケースの保証を必要とする。対話型システムでさえ、休止時間は有界で短くなければならない。いわゆるインクリメンタルガーベッジコレクション方法は、再利用の開始と停止時に起こる長い休止時間を避けようとするものであり、代わりにアプリケーションプログラム周期のインターリーブコレクションを用いる。この目的を達成するために、インクリメンタルコレクタは、コレクタ及びアプリケーションプログラム（一般には、ミューテータ（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)。
Symbolics３６００は、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の両氏は、米国特許第５，５６０，００３号においてハードウエア読み込みバリア及び書き込みバリアを実行するガーベッジ収集メモリモジュールについて記述している。
コレクタのその横断を中断するようなメモリオブジェクト参照グラフの連結性の変更を防ぐための、ミューテータアクセスの管理という基本的な要求に加え、有界休止時間再配置コレクタは、大形及びまたはアクセス頻度の高い（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は、ガーベッジコレクション変数、即ちｓｃａｎによって識別されるスキャンした／スキャンしなかった境界を用いて、書き込みアクセスを部分的にコピーされた大形オブジェクトに進めた。追加のヘッダーワードを別にしたBaker計画のコストは、大形オブジェクトのTopSpaceインスタンスの中の記憶装置に対するソフトウエア書き込みバリアであった。アドレスがｓｃａｎより大きい場合、書き込みは逆方向リンクを用いてOldSpaceインスタンスに実行される。そうでない場合は、NewSpaceインスタンスに書込みが実行される。
Nielsen及びSchmidtの両氏は、Bakerのコピーコレクタに基づいたハードウエアソリューションを提示した。特に、Nielsen及びSchmidtの両氏は、ハードウエア読み込みバリアが収集が完了したという錯覚を維持するガーベッジ収集メモリモジュールを提供した。ガーベッジ収集メモリモジュールのハードウエアアービタが、Bakerタイプのハードウエア読み込みバリアを提供し、さらにTopSpace内のオブジェクトインスタンスのコピーされていない部分にアクセスする読み込みバリア及び書き込みバリアを提供した。ガーベッジ収集メモリモジュールは、コピーされなかった部分の最初と最後を示すために、メモリアドレスレジスタ（memory address registers）を維持する。コピーされなかった部分への読み込みアクセス及び書き込みアクセスは、FromSpaceインスタンスに導かれる。
発明の要約
従って、部分的に再配置された大形メモリオブジェクト及び／またはアクセス頻度の高いメモリオブジェクト内のストアに対する書き込みバリアが、例えばコピーコレクタ、ジェネレーション的コレクタ、及び短縮コレクタを含むガーベッジコレクタの再配置の有界休止時間のインプリメンテーションを容易にすることが発見された。部分的に再配置されたオブジェクト識別子ストレージ及びそれに応答する書き込みバリアが、ミューテータプロセスに対する有界休止時間保証に一致するように中断されるガーベッジコレクタインプリメンテーションによって、大形メモリオブジェクト及び／またはアクセス頻度の高いメモリオブジェクトの再配置を可能とする。
書込みバリアロジックにアクセス可能な“copy from”識別子および“copy to”識別子ストレージを含む部分的に再配置されたオブジェクト識別子ストアによって、ソフトウェアトラップハンドラのオーバーヘッド（software trap handler overhead）なしに、書込みバリアによる部分的に再配置されたオブジェクトのFromSpace及びToSpaceインスタンスの間のの保持が容易になる。所望による“How far”指示ストレージは、書込みバリアロジックによって、部分的に再配置されたメモリオブジェクトのコピーされた部分とコピーされていない部分との区別を容易にする。所望による“モード（mode）”指示ストレージは、書込みバリアロジックによって、ガーベッジコレクタのインプリメンテーションによる再配置操作（relocation）のポインタ更新段階とコピー段階との区別を容易にする。いくつかの実施例においては、ポインタ更新段階およびコピー段階は重複することがある。“Copy to”識別子ストレージは、FromSpaceインスタンスに対するストア指向（store-oriented）メモリアクセスを古い空間（FromSpace）及び新たな空間ToSpaceインスタンスの両方に対してブロードキャストすることを容易にする。同様に、ポインタ更新の間に、“Copy to”及び“Copy from”識別子ストレージは、FromSpaceまたはToSpaceインスタンスどちらかに対するストア指向メモリアクセスをFromSpace及びToSpaceインスタンスの両方に対してブロードキャストすることを容易にする。
いくつかの実施例は、ポインタ更新段階及びコピー段階の間、またはコ部分的に再配置されたオブジェクトのコピーされた部分及びコピーされていない部分の間の区別をしなくても良い。さらに、“Copy to”及び“Copy From”識別子ストレージによって、ソフトウェアトラップハンドラのオーバヘッドなしに、書込みバリアロジックが部分的に再配置されたメモリオブジェクトのFromSpace及びToSpaceインスタンスの間の一貫性を保守することを可能にするが、いくつかの実施例は、そのようなソフトウエアトラップハンドラを含み得る。書き込みバリアロジックと部分的に再配置されたオブジェクトトラップハンドラとの間の他の様々な機能性割り付けがあるが、本明細書の請求の範囲内である。
【図面の簡単な説明】
本発明は、添付の図面を参照することにより、当業者であれば、その様々な目的、特徴及び利点と共に、より良く理解されるであろう。
第１Ａ図及び第１Ｂ図（総称して第１図と呼ぶ）は、本発明に基づく有界休止時間ガーベッジコレクタのインプリメンテーションのためのサポートを含む仮想マシンハードウェアプロセッサの実施例を示すブロック図である。
第２図は、第１図のハードウェアプロセッサ及び例として与えられたJAVA仮想マシン実施態様のソフトウェア要素を含むJAVAアプリケーション環境のソフトウェア及びハードウェア要素間の相互的な(builds upon)関係を示す。
第３図は、第１図のハードウェアプロセッサのいくつかの可能なアドオンを示す。
第４Ａ図及び第４Ｂ図（総称して第４図と呼ぶ）は、コピーする前のコピーガーベッジコレクタのための半空間メモリ編成に従った好適なメモリオブジェクト参照グラフ及び部分的に再配置されたオブジェクト識別子ストアの一実施例を示す。
第５図は、大形オブジェクトをFromSpaceからToSpaceにコピーする間の第４図の半空間メモリ編成及び部分的に再配置されたオブジェクト識別子ストアを示す。
第６図は、コピーコレクタプロセスのアクセス、及び部分的に再配置された大形オブジェクトを含む収集されたメモリ領域のFromSpace及びToSpace部分に対するミューテータプロセスのアクセスを示す。第６図はまた、第４図及び第５図の部分的に再配置されたオブジェクト識別子ストアに関連する第１図のハードウエアプロセッサの書き込みバリアの一部を例示する。
第７図は、部分的に再配置されたオブジェクトのcopy-fromインスタンスへのストアに対するバリアと、そのためのトラップハンドラとを含む有界休止時間ガーベッジコレクションシステムの一実施例を示す。
第８図は、部分的に再配置されたオブジェクトのcopy-fromインスタンスへのストアに対するハードウエアバリアを含み、さらにcopy-fromインスタンス識別子とcopy-toインスタンス識別子を有する部分的に再配置されたオブジェクト識別子ストアを含む有界休止時間ガーベッジコレクションシステムの一実施例を示す。この実施例によれば、ストアを部分的に再配置されたオブジェクトのcopy-fromインスタンスとcopy-toインスタンスの両方に選択的にブロードキャスト（broadcast）する。
第９図は、部分的に再配置されたオブジェクトのcopy-fromインスタンスへのストアに対するハードウエアバリアを含み、さらにcopy-fromインスタンス識別子とcopy-toインスタンス識別子とcopied/uncopied境界識別子とを有する部分的に再配置されたオブジェクト識別子ストアを含む有界休止時間ガーベッジコレクションシステムの一実施例を示す。この実施例は、部分的に再配置されたオブジェクトの部分的に再配置された状態によって、ストアを選択的に方向付けまたはブロードキャストしてインクリメンタルコピーを可能にする。
第１０図は、部分的に再配置されたオブジェクトのcopy-fromインスタンス及びcopy-toインスタンスへのストアに対するバリアを含み、さらにcopy-fromインスタンス識別子とcopy-toインスタンス識別子とを有する部分的に再配置されたオブジェクト識別子ストアを含む有界休止時間ガーベッジコレクションシステムの一実施例を示す。この実施例では、インクリメンタルコピー及びインクリメンタルポインタ更新が可能である。
第11図は、部分的に再配置されたオブジェクトのcopy-fromインスタンス及びcopy-toインスタンスへのストアに対するバリアを含み、さらにcopy-fromインスタンス識別子とcopy-toインスタンス識別子とcopied/uncopied境界識別子とガーベッジコレクション段階インディケータを有する部分的に再配置されたオブジェクト識別子ストアを含む有界休止時間ガーベッジコレクションシステムの一実施例を示す。この実施例は、ガーベッジコレクション段階及び部分的に再配置されたオブジェクトの部分的に再配置された状態によって、ストアを選択的に方向付けまたはブロードキャストしてインクリメンタルコピー及びインクリメンタルポインタ更新を可能にする。
第１２図は、部分的に再配置されたオブジェクトのcopy-fromインスタンスからのロードに対する及びcopy-fromインスタンスへのストアに対するバリアを含み、さらにcopy-fromインスタンス識別子とガーベッジコレクション段階インディケータと部分的に再配置されたオブジェクトトラップハンドラとを有する部分的に再配置されたオブジェクト識別子ストアを含む、有界休止時間ガーベッジコレクションシステムの一実施例を示す。この実施例は、ストアを選択的に方向付けし直しまたはブロードキャストし、ロードを選択的に方向付けし直すことにより、インクリメンタルコピー及びインクリメンタルポインタ更新を可能にし、他の実施例ではさらにオーバーラッピングcopy-fromインスタンス及びオーバーラッピングcopy-toインスタンスも可能にする。
第１３図は、部分的に再配置されたオブジェクトのcopy-fromインスタンスからのロードに対する及びcopy-fromインスタンスへのストアに対するバリアを含み、さらにcopy-fromインスタンス識別子とcopy-toインスタンス識別子とガーベッジコレクション段階インディケータとを有する部分的に再配置されたオブジェクト識別子ストアを含む、有界休止時間ガーベッジコレクションシステムの一実施例を示す。この実施例は、ストアを選択的に方向付けし直しまたはブロードキャストし、ロードを選択的に方向付けし直すことにより、インクリメンタルコピー及びインクリメンタルポインタ更新を可能にする。
第１４図は、部分的に再配置されたオブジェクトのcopy-fromインスタンスからのロードに対する及びcopy-fromインスタンスへのストアに対するバリアを含み、さらにcopy-fromインスタンス識別子とcopy-toインスタンス識別子とcopied/uncopied境界識別子とガーベッジコレクション段階インディケータとを有する部分的に再配置されたオブジェクト識別子ストアを含む、有界休止時間ガーベッジコレクションシステムの一実施例を示す。この実施例は、ストアを選択的に方向付けし直し、ロードを選択的に方向付けし直すことにより、インクリメンタルコピー、インクリメンタルポインタ更新、及びcopy-fromインスタンスとcopy-toインスタンスのオーバーラッピングを可能にする。
第15図は、部分的に再配置された大形オブジェクトのFromSpace部分とToSpace部分のオーバーラッピングを可能にする有界休止時間ガーベッジコレクションシステムのオペレーションを示す。
第16図は、本発明の一実施例に従ったオブジェクト参照（objectref）フォーマットを示す。
第17Ａ図は、本発明の一実施例に従ったオブジェクトフォーマットを示す。
第17Ｂ図は、本発明の一実施例に従って取り扱われた別のオブジェクトフォーマットを示す。
異なる図面に於ける同様の符合は、同様または同一の部分を示す。
好適実施例の説明
以下に、本発明を実施するための最良の形態と考えられる態様を詳しく説明する。この記載は、あくまでも本発明の例示であって、本発明の範囲を限定するものではないことを了解されたい。
再配置ガーベッジコレクタの有界休止時間のインプリメンテーションのための構造的サポートは、どの位置から（或る実施例ではどの位置に）大形オブジェクト及びまたはアクセス頻度の高いオブジェクトが再配置されたかを明確に示すストレージを含む。本明細書で用いる大形オブジェクトは、全てのサイズ、構造、または次ぎの内容のメモリオブジェクトである。その内容とは、それに対する参照の更新を含みうる完全なメモリオブジェクトの再配置が、ワーストケースの場合、ガーベッジコレクタインプリメンテーションの有界休止時間保証とコンパチブルでない。本発明に基づいた実施例は、大形オブジェクトの動作定義に対する保守性が広範囲に及ぶことを示す。例えば、或る実施例ではサイズのしきい値を用い、また別の実施例では大形オブジェクトの演算方法に参照カウントを含む。特に、かなりの部分がハードウエアに基づく別の実施例では、メモリオブジェクトのサイズに関係なく、ここに示す構造的サポートを用いる。本明細書で用いるアクセス頻度の高いオブジェクトは、それに対する参照の更新を含む完全なメモリオブジェクトの再配置が、最悪の場合、ガーベッジコレクタインプリメンテーションの有界休止時間保証とコンパチブルでない参照カウントをもつ全てのメモリオブジェクトである。以上のことから、本発明に基づいた実施例は、大形オブジェクトの動作定義に対する保守性が広範囲に及ぶことを示す。
一般に、本発明に基づく実施例は、大形オブジェクト及びアクセス頻度の高いオブジェクト並びに全てのオブジェクト（を含み大形オブジェクト及びまたはアクセス頻度の高いオブジェクトに限定されない）の再配置操作のために、ここに説明する構造的サポートを用いる。この構造的サポートは、ハードウエア、ソフトウエア、及びそれらの組み合わせに提供可能であるが、この構造的サポートを主にハードウエアに用いた実施例では通常、性能が向上し、かつメモリの要求の減少という優れた利点がある。このために、好適なハードウエアプロセッサの実施例をここに説明する。当業者は、本発明の説明に基づき、ここに記載しない別の実施例も後述の請求の範囲内であることを理解するであろう。
本明細書に於いて、再配置ガーベッジコレクタとは、オペレーションの一部としてメモリオブジェクトの再配置操作をする全てのガーベッジコレクタであり、例えば、コピーコレクタ、ジェネレーション的コレクタ、断片化の減少及び／または局所参照性の向上のための短縮を伴うコレクタまたはオブジェクト再配置操作を伴うコレクタを含む。このような再配置ガーベッジコレクタのリアルタイムまたは有界休止時間のインプリメンテーションは通常、このソフトウエアプロセスの演算がユーザープロセスアクティビティーを用いてインターリーブされるインクリメンタルガーベッジコレクション・ソフトウエアプロセスとして実施される。しかしながら、当業者は、ここでの説明に基づいたコンカレントガーベッジコレクションのインプリメンテーションを理解するであろう。さらに、並列コレクションのインプリメンテーションをサポートするために、多数の部分的に再配置されたオブジェクトを特定するストレージの実現を含む、好適な変更例を理解するであろう。
JAVA仮想マシン命令プロセッサの実施例
第１図は、仮想マシン命令プロセッサ１００のハードウェアとして構成された実施例を示すもので、このハードウェア１００は本発明に基づく有界休止時間再配置ガーベッジコレクションのためのサポートを含み、プロセッサ構造に依存しないJAVA仮想マシン命令を直接的に実行する。仮想マシン命令を実行する上でのハードウェアプロセッサ１００の性能は、インテルPENTIUMマイクロプロセッサやサンマイクロシステムのULTRASPARCプロセッサ等のハイエンドCPUよりも高い(ULTRASPARCは、カリフォルニア州Mountain Viewに所在するSun Mircrosystemsの商標であり、PENTIUMは、カリフォルニア州Sunnyvaleに所在するIntel Corpの商標である。)。更に、ハードウェアプロセッサ１００の性能は、JAVAジャストインタイム(JIT)コンパイラを備えたハイエンドCPUよりも優れている。ハードウェアプロセッサ１００は低コストであって、電力消費が少ない。そのため、ハードウェアプロセッサ１００はポータブルの用途に適している。
ハードウェアプロセッサ１００は、概ねハードウェアとしてＪＡＶＡ仮想マシン命令プロセッサを構成するものであって、普通ならソフトウェアインタプリタに必要な２５−５０キロバイトの、リードオンリーメモリやランダムアクセスメモリ等のメモリストレージが不要となり、それを他の用途に転用することもができる。ガーベッジコレクションのためのハードウェアサポートは、さらにガーベッジコレクションのためのインラインコード（例えば、コンパイラにより提供される読み込み及びまたは書き込みバリアサポート）を低減し、限定されたメモリの利用状況を改善し、ガーベッジコレクションに要するオーバーヘッド或いは休止時間を削減することにより、メモリを比較的必要としないＪＡＶＡ仮想マシン構造のためのさらなる利点を提供するものである。ネットワーク製品のためのインターネットチップや、携帯電話用プロセッサ、その他の通信用集積回路或いは他の低電力、低コストの用途例えば埋め込み(embedded)プロセッサや、ポータブル装置など大形メモリを伴う高コストが受け入れられないような環境に於いてハードウェアプロセッサ１００が有利である。
大形メモリが可能であるような環境に於いても、ガーベッジコレクションのためのハードウェアサポートは、バリアの実施に関連するオーバーヘッドを減少させ、メモリの有効利用を促進し、ガーベージコレクタの再配置操作のための休止時間を減少させることができる。特に、ハードウェアプロセッサ１００は、ＪＡＶＡ仮想マシン構造の枠組みの中で、ガーベッジコレクション方法のための利点を提供する。しかしながら、本明細書の記載に基づき、当業者であれば、インタープリットされたＪＩＴコンパイラＪＡＶＡ仮想マシン構造やその他の非ＪＡＶＡ仮想マシン構造を含む様々なＪＡＶＡ仮想マシン構造の変形例に思い至るであろう。
本明細書に於いて、仮想マシンとは、命令セットを有し様々なメモリ領域を用いる、現実のコンピュータと同様な抽象的なコンピュータを意味する。仮想マシンの仕様は、仮想マシン構造によって実行されるプロセッサ命令に依存しない仮想マシン構造のセットを規定する。一般に、仮想マシンはハードウェアプロセッサ１００のようなハードウェア、またはインタープリットされたＪＩＴコンパイラ構造の場合のようにソフトウェア、或いはハードウェア及びソフトウェアの両方に装備される。各仮想マシン命令は、実行されるべき特定の演算を規定する。仮想マシンは、仮想マシン命令を生成するために用いられる或いは仮想マシンの実現の基礎となるようなコンピュータ言語を理解する必要がない。仮想マシン命令のための特定のフォーマットを理解するのみでよい。ある実施例に於いては、仮想マシン命令はＪＡＶＡ仮想マシン命令からなる。各ＪＡＶＡ仮想マシン命令は命令特定情報、オペランド、その他必要な情報をコード化する１つまたは複数のバイトを含む。
ある実施例に於いては、第１図のハードウェアプロセッサ１００は、バイトコードを含むＪＡＶＡ仮想マシン命令を取り扱う。ハードウェアプロセッサ１００はバイトコードの多くを直接的に実行する。しかしながら、バイトコードのあるものの実行は、マイクロコードとして実行される。Lindholm & Yellen，”The JAVATM Virtual Machine Specification”(Addison-Wesley，1996)，ISBN 0-201-63452-Xは、ＪＡＶＡ仮想マシン命令の例としてのセットを含み、この文献に言及することを以って、その内容の全てを本明細書の一部とするものとする。ハードウェアプロセッサ１００によりサポートされた仮想マシン命令の特定のセットは、本発明の重要な要素ではない。しかしながら、仮想マシン命令に関して、当業者であれば仮想マシン命令の特定のセットを変更したり、ＪＡＶＡ仮想マシン使用を変更することができる。
ある実施例に於いては、ハードウェアプロセッサ１００はＩ／Ｏバス及びメモリインターフェイスユニット１１０、命令キャッシュ１２５を含む命令キャッシュユニット１２０、非高速から高速トランスレータキャッシュ１３１を含む命令デコードユニット１３０、一体化された実行ユニット１４０、スタックキャッシュ１５５を含むスタック管理ユニット１５０、データキャッシュ１６５を含むデータキャッシュユニット１６０、及びプログラムカウンタ及びトラップ制御ロジック１７０を含む。本明細書に記載されているガーベッジコレクションのサポートの特徴は、主にプログラムカウンタ及びトラップ制御ロジック１７０に於けるある程度の追加のサポートを備えた実行ユニット１４０の整数ユニット１４２及びレジスタ１４４に見ることができ、ここで追加のサポートとしては、トラッピングストアに続き、プログラムカウンタに次のＪＡＶＡ仮想マシン命令に進ませるためのサポートを含む。ある実施例に於いては、非高速から高速へのトランスレータキャッシュ１３１は、整数ユニット１４２のハードウェア書き込みバリアロジックのためのポインタ依存性を促進する。これらのユニットのそれぞれについて以下に詳しく説明する。
第２図は、例えばハードウェアプロセッサ１００上に部分的に規定され、かつ部分的に実行可能とされるようなＪＡＶＡアプリケーション環境のソフトウェア及びハードウェア要素の相互関係を示している。ＪＡＶＡアプリケーション／アプレットソフトウェア２１０は、ＡＷＴクラス２４１、ネット及びＩ／Ｏクラス２４２、ＪＡＶＡ ＯＳウィンドウズ２４３、ＪＡＶＡ ＯＳグラフィックス２４８、ＴＣＰ２４４、ＮＦＳ２４５、ＵＤＰ２４６、ＩＰ２４７、イーサーネット２２２、キーボード２４９、及びマウス２２１ソフトウェア要素を含むアプレット／アプリケーションプログラミングインターフェイス２２０を規定するソフトウェア要素を利用するもので、ある実施例に於いてはＪＡＶＡバイトコードを含む。第２図に示された実施例に於いては、ＪＡＶＡ ＯＳグラフィックス２４８及びイーサーネット２２２ソフトウェア要素はまた、ベースラインＪＡＶＡ仮想マシン使用により規定されたものを越えた拡張バイトコードをも含む。埋め込みアプリケーションプログラミングインターフェイス（ＥＡＰＩ）２３０の要素は、ファンデーションクラス(foundation class)２３１、ＪＡＶＡ仮想マシン仕様(JAVA Virtual Machine Specification)に基づくＪＡＶＡ仮想マシン構造２５０のハードウェア及びソフトウェア要素を含む。
ＪＡＶＡ仮想マシン構造２５０は、ハードウェアプロセッサ１００と、ＪＡＶＡ仮想マシン命令を評価するために該プロセッサ上にて実行可能なトラップコードとを含む。さらに、ＪＡＶＡ仮想マシン構造２５０は、ガーベッジコレクションについて以下に記載されているようなポインタストアバイトコード及びメモリアクセスバリアを含むような拡張バイトコードのためのハードウェアサポートや、クラスローダ２５２、バイトコードベリファイア２５３、スレッドマネージャ２５４、ガーベッジコレクタ２５１ソフトウェア及びマイクロカーネル（micro kernel）２５５を含む。ＪＡＶＡ仮想マシン構造２５０は、ＪＡＶＡ仮想マシン仕様に適合した部分２５０ａ及び構造に依存する部分を含む。ＪＡＶＡ仮想マシン仕様はガーベッジコレクションが提供されることを特定しているが、どのようなガーベッジコレクション方法を使うかはその構造に依存する。
ＪＡＶＡ仮想マシン構造２５０の実施例としてのハードウェアプロセッサ１００に関して以下に記載されているガーベッジコレクションの構造的特徴は、特にジェネレーション的ガーベッジコレクション方法に適合している。しかしながら、本明細書の記載に基づき、当業者は、非ジェネレーション的コレクタ構造、インクリメント式マーク短縮コレクタ、コピーコレクタの再配置操作に対して制限された休止時間サポートの応用が可能であることに容易に思い至り得るものである。
第３図は、より複雑なシステムを構成するためのハードウェアプロセッサ１００に対するいくつかの可能なアドオンを示している。ＮＴＳＣエンコーダ５０１、ＭＰＥＧ５０２、イーサーネットコントローラ５０３、ＶＩＳ５０４、ＩＳＤＮ５０５、Ｉ／Ｏコントローラ５０６、ＡＴＭアセンブリ／リアセンブリ５０７及び無線リンク５０８からなる８つの機能のいずれをサポートする回路も、本発明のハードウェアプロセッサ１００と同一のチップ内に集積化することができる。
さらに、当業者であれば容易に理解できるように、上記したアドオン回路のいずれかを備えたハードウェアプロセッサ１００の実施例を含む、ハードウェアプロセッサ１００が組み込まれた様々なコンピュータシステムに思い至り得ることができよう。例としてのコンピュータシステム１００は、物理的なメモリ（ＲＡＭ及びまたはＲＯＭ）、コンピュータ読み取り可能なメディアのアクセスデバイス（ディスク、ＣＤ−ＲＯＭ、テープ及びまたはメモリ技術に基づくコンピュータ読み取り可能メディアアクセスデバイスなど）、入出力インターフェイス（キーボード及びまたはポインティングデバイス或いはディスプレイデバイスなどのためのインターフェイス）及び通信デバイスまたはインターフェイスを含む。適当な通信デバイス及びまたはインターフェイスとしては、ネットワーク或いはテレフォニー(telephony)に基づく通信、公共スイッチネットワークの有線または無線のものを含む通信ネットワークとのインターフェイス或いは専用ネットワークへのインターフェイスを含む。本発明のある実施例に於いては、ＪＡＶＡバイトコードを含む命令ストリームが、ハードウェアプロセッサ１００により実行されるべく、このような通信デバイスまたはインターフェイスを介して送信または受信される。
ガーベッジコレクションのための構造的サポート
ハードウェアプロセッサ１００は、該プロセッサ上で実行可能なガーベッジコレクションソフトウェアトして実現される再配置コレクタ方法を含む様々なガーベッジコレクション方法のための構造的サポートを提供する。特に、ハードウエアプロセッサ１００は、部分的に再配置されたオブジェクト識別子ストア及びバリアサポートを含む。或る実施例に於いては、このようなバリアサポートは、プログラマが選択可能なストアのフィルタリングのバリアサポート及びまたはポインタストアトラッピングを促進するポインタ特定バイトコードに対するストアバイトコードの実行時間解決のサポートを含む。詳細については、ＰＣＴ国際出願番号ＰＣＴ／ＵＳ９８／０７６２２、名称「ＧＥＮＥＲＡＴＩＯＮ  ＩＳＯＬＡＴＩＯＮ  ＳＹＳＴＥＭ  ＡＮＤ  ＭＥＴＨＯＤ  ＦＯＲ  ＧＡＲＢＡＧＥ  ＣＯＬＬＥＣＴＩＯＮ」を参照されたい、またこの文献に言及することを以って、その内容の全てを本明細書の一部とするものとする。
部分的に再配置されたオブジェクト識別子ストア
第４Ａ図は、fromフィールド４１０、toフィールド４１２及びhow farフィールド４１３を含む部分的に再配置されたオブジェクト識別子ストア４１０の一実施例を示す。第４Ｂ図は、コピーコレクタ方法に従ったメモリストレージのFromSpace４２０及びToSpace４３０部分を示す。ジェネレーション的コレクタインプリメンテーションに於いて、FromSpace４２０及びToSpace４３０部分は、単一ジェネレーションの半空間、または若い及び古いジェネレーション空間のそれぞれの部分であり得る。別法では、FromSpace４２０及びToSpace４３０部分は、非ジェネレーション的コレクション空間の半空間であり得る。さらに、オーバーラップするまたは隣接する或いは隣接しないFromSpace４２０及びToSpace４３０部分は、必ずしも一定のサイズまたはメモリストレージ内の一定の位置にある必要はない。さらに別の実施例では、多数のFromSpace及びToSpace部分は、好適に変更された部分的に再配置されたオブジェクト識別子ストア４１０及び本明細書で説明する各バリアによってサポートされる。第４Ｂ図は、ToSpace４３０にコピーされる前の大形オブジェクト４５０及び生きたメモリオブジェクトＡ，Ｂ、Ｃの第１の参照状態を示す。ルートポインタセット４４０は、スタックキャッシュ１５５に表されるローカル変数ストレージまたは及びオペランドスタックのエントリからのポインタを含む、参照構造の中の全てのルートポインタセットを表す。
第５図は、大形オブジェクト４５０の再配置操作が中断中の部分的に再配置されたオブジェクト識別子ストア４１０、FromSpace４２０、及びToSpace４３０の第２の参照状態を示す。生きたメモリオブジェクトＡ及びＢは、対応するToSpace４３０のインスタンスＡ’及びＢ’にコピーされる。コピーを中断すると、大形オブジェクト４５０は、コピーされた部分５５１及び完全にはコピーされていない部分５５２を含む。大形オブジェクト４５０のコピーされた部分５５１の内容は、大形オブジェクト４５０のインスタンスであるToSpace４３０の対応する部分５５１ａにコピーされる。大形オブジェクト４５０の完全にはコピーされないで残った部分のためのToSpace４３０ストレージが部分５５２ａとして示される。fromフィールド４１１がFromSpace４２０の大形オブジェクト４５０を識別し、toフィールド４１２が大形オブジェクト４５０の対応する部分的に再配置されたインスタンス４５０ａを識別し、howfarフィールド４１３が大形オブジェクト４５０のコピーされた部分５５１とコピーされなかった部分５５２との間の境界を特定する。オーバーラッピングコピー方向フィールド（図示せず）は、随意選択である。一実施例に於いて、このコピー方向フィールドは、オーバーラップしたfromフィールド４１１とtoフィールド４１２のコピーの順方向または逆方向を示す状態のコピー方向ビットを含む。別の実施例に於いては、コピー方向は、fromフィールド４１１とtoフィールド４１２の相対値によって求められることが当業者には理解できよう。
howfarフィールド４１３は、大形オブジェクトコピーの進捗状態を示し、及びまたは、書きこみバリアハードウエアと部分的に再配置されたオブジェクトトラップハンドラが、部分的にコピーされた大形オブジェクトへのミューテータアクセスを適切に取り扱う（handle）ことを可能にする。第５図の実施例に於いて、howfarフィールド４１３は、コピーされた部分５５１とコピーされなかった部分５５２間の境界のメモリのアドレスを示す。当業者はこの説明から、例えば、fromフィールド４１１によって示されるメモリ位置のインデックスオフ（index off）、大形オブジェクト４５０のToSpaceインスタンス５５０ａの対応する境界の表示を含む種々の別のコード化が可能なことを理解するであろう。
ここで第６図を参照すると、部分的に再配置されたオブジェクト識別子ストア４１０が、ミューテータプロセス６１０及びガーベッジコレクタプロセス６２０のコンテキストに示されている。第６図の実施例において、ミューテータプロセス６１０及びガーベッジコレクタプロセス６２０のそれぞれが、ハードウエアプロセス１００によって実行可能なＪＡＶＡ仮想マシン命令によって規定される。ガーベッジコレクタプロセス６２０は全ての再配置コレクタを含む。後続の説明は、第５図を参照して上記のとおり説明した半空間コピーコレクタであるが、当業者は他の再配置コレクタへの適用性も理解するであろう。大形オブジェクト４５０をFromSpace４２０からToSpace４３０にコピーする間に、ガーベッジコレクタプロセス６２０が収集されたスペース６３０から読み込み、またコレクション空間６３０に書き込む。
一実施例において、ガーベッジコレクタプロセス６２０が、大形オブジェクト４５０のコピーの始めにfromフィールド４１１及びtoフィールド４１２を更新し、コピー中にhowfarフィールド４１３も更新することにより、ミューテータプロセス６１０によって中断されると、howfarフィールド４１３がコピーされた部分５５１とコピーされなかった部分５５２との間の境界を示す。コンカレントミューテータプロセス６１０及びガーベッジコレクタプロセス６２０の実行（例、マルチプロセッサ上での）の実施例に於いては、howfarフィールド４１３のロック機能を備える。従って、当業者は好適な方法を理解するであろう。別の実施例では、中断時の更新を選択してhowfarフィールド４１３のインクリメンタル更新を備えないこともある。
ミューテータプロセス６１０は、収集されたスペース６３０を含むメモリから読み込み、及びそのメモリに書き込みをする。一実施例において、ハードウエアプロセス１００は、fromフィールド４１１、toフィールド４１２またはその両方の内容に対してオブジェクト参照情報（例、objectref）を比較するバリア６６０のための整数ユニット１４２サポートを含む。fromフィールド４１１の内容との一致が、参照したオブジェクトが部分的に再配置された大形オブジェクト４５０のFromSpace４２０であることを示す。toフィールド４１２の内容との一致が、参照したオブジェクトが部分的にコピーされたToSpace４３０のインスタンス４５０ａであることを示す。或る実施例に於いては、参照したオブジェクト内の特定のフィールドオフセットの評価は、参照したオブジェクトのコピーされた及びコピーされなかった部分のバリア６６０取り扱いを洗練するためのhowfarフィールド４１３の内容と比較される。
後述の種々の実施例に於いて、バリア６６０は、部分的に再配置されたオブジェクト識別子ストア４１０に応答する書きこみバリアサポートを含む。或る実施例に於いて、バリア６６０はまた、部分的に再配置されたオブジェクト識別子ストア４１０に応答する読み込みバリアサポートを含む。或る実施例に於いて、バリア６６０は、好適にトラッピングアクセスを取り扱う（例、書きこみアクセスのブロードキャスト、書き込みアクセスの方向付けのし直し、読み込みアクセスの方向付けのし直し、または通常のアクセスを許可することによる）部分的に再配置されたオブジェクトトラップハンドラソフトウエアにトラッピングするためのハードウエア読み込み及びまたは書き込みバリアサポートを含む。別の実施例においては、ハードウエア読み込み及びまたは書きこみバリア自体が、ソフトウエアトラップハンドラのオーバーヘッドなしに、そのような適切な取り扱いを提供する。
或る実施例に於いて、有界休止時間再配置は、それに対するポインタ更新がオブジェクト参照取り扱いを介している間に、大形及びまたはアクセス頻度の高いオブジェクトのインクリメンタルコピーを可能にするバリア６６０の要素によって提供される。このような実施例に於いて、アクセス頻度の高いオブジェクトへのポインタ更新でさえ、シングルポインタ即ちオブジェクト参照取り扱いの更新によって単に提供される。別の実施例に於いて、バリア６６０の要素によって提供される有界休止時間再配置は、アクセス頻度の高いオブジェクト（及び可能性としては大形オブジェクトも）に対するポインタのインクリメンタル更新のためのサポートを含む。ここで用いる有界休止時間は、コピー及びポインタ更新を含む。当業者は、大形オブジェクトの有界休止時間の再配置、アクセス頻度の高いオブジェクトの有界休止時間の再配置、及びこの両方のオブジェクトの有界休止時間再配置に上記した実施例が適用できることを理解するであろう。取り扱われた及び取り扱われないオブジェクト参照を以下に詳述する。
ハードウエアプロセッサ１００の特定の一実施例によってサポートされるガーベッジコレクション方法によって、書き込み及びまたは読み込みバリアサポートが、そのコレクタの横断を中断するようにメモリオブジェクト参照グラフの連結性を変えることによりミューテータプロセス６１０がガーベッジコレクタプロセス６２０を中断しないように提供される。例えば、ハードウエアプロセッサ１００の一実施例に於いて、ジェネレーション間ポインタストア、全てのポインタストア、及び全てのポインタストア（それぞれのフィルターされた擬似バリアのサポートを含む）に対するプログラマが選択可能なハードウエア書き込みバリアが、前述した下記の文献に詳述されるように提供される。ＰＣＴ国際出願番号ＰＣＴ／ＵＳ９８／０７６２２、名称「ＧＥＮＥＲＡＴＩＯＮ  ＩＳＯＬＡＴＩＯＮ  ＳＹＳＴＥＭ  ＡＮＤ  ＭＥＴＨＯＤ  ＦＯＲ  ＧＡＲＢＡＧＥ  ＣＯＬＬＥＣＴＩＯＮ」。バリア６６０の一実施例に於いて、このような追加のバリアのためのサポートが、部分的に再配置された大形オブジェクトのストアの中に上記したバリアとともに集積化される。
第１図に従った実施例に於いて、部分的に再配置されたオブジェクトトラップハンドラは、ハードウエアプロセッサ１００上で実行可能で、かつプログラムカウンタ及びトラップ制御ロジック１７０によって開始される、ＪＡＶＡ仮想マシン命令バイトコードを含む。例えば部分的に再配置されたオブジェクトトラップを含むガーベッジコレクショントラップは、トラッピング書き込みがそれ自体を評価する前に、トリガされる。したがって、プロセッサが無限にトラッピングするのを防ぐために、部分的に再配置されたオブジェクトトラップハンドラ６５０が、追加のガーベッジコレクション関連機能と共にトラッピング書き込みをエミュレートする。一実施例に於いて、プログラムカウンタ及びトラップ制御ロジック１７０によって、プログラムカウンタがトラッピング書き込みの後ＪＡＶＡ仮想マシンの次ぎなる命令に強制される。詳細な説明に基づき、当業者は、強制される一貫性次第で、部分的に再配置されたオブジェクトトラップハンドラのための種々の有効な形態があることを理解するであろう。
ガーベッジコレクションは、fromフィールド４１１、toフィールド４１２及びhowfarフィールド４１３を含む部分的に再配置されたオブジェクト識別子ストア４１０の第６図の実施例に関連して、及び部分的に再配置されたオブジェクトトラップハンドラを含みうるバリア６６０のコンテキストの中で上記の通り説明したが、他にも様々な好適な実施例がある。これらの多くの他の実施例において、部分的に再配置されたオブジェクトトラップハンドラを排除可能であり、かつハードウエアバリアサポートによるミューテータプロセスアクセスの適切な取り扱いも可能であり、トラップハンドラに関連するオーバーヘッドを減少できる。実施例の説明に基づき、当業者は、その他の変更例、組み合わせ等が本請求項の範囲内であることを理解するであろう。
Copy-Fromインスタンス識別子ストアに関連する書き込みバリア
第７図は、書き込みバリアに関連するCopy-Fromレジスタフィールドを有する実施例を示す。詳述すると、第７図の実施例は、部分的に再配置されたオブジェクト識別子ストア４１０（第４図参照）のfromフィールド４１１、ハードウェア書き込みバリア７４０、及び部分的に再配置されたオブジェクトトラップハンドラ７５０を有する。第７図の実施例では、fromフィールド４１１が、ハードウェアプロセッサ１００のレジスタ１４４に表現される。ミューテータプロセス６１０、ガーベッジコレクタプロセス６２０、及び部分的に再配置されたオブジェクトトラップハンドラ６５０は、ハードウェアプロセッサ１００上で実行可能なソフトウェアを含む。この実施例では、大形のオブジェクトのインクリメンタルコピーが容易である。しかし、追加のサポートがないと、この実施例は、アクセス頻度が高い、再配置されたオブジェクトのToSpace４３０インスタンスに対する多数のポインタのインクリメンタル更新には適さない。それにも関わらず、例えば後に第１７Ｂ図に関連して説明するような取り扱いを介してオブジェクトが参照されるガーベッジコレクションシステムにおいては、このような実施例によってハードウェアに対する要求が少なくなり、この実施例を有界休止時間再配置操作のために用いることができる。ToSpace４３０インスタンスに対する１回の取り扱いの更新が非常に少ない場合が多いからである。
ミューテータプロセス６１０は、収集された空間６３０からの読み込みアクセス及びそこへの書き込みアクセスを行う。読み込みアクセスは、ガーベッジコレクションサポートによる影響を受けない。しかし、書き込みアクセスは、ハードウェア書き込みバリア７４０によって選択的にトラップをかけられる。ハードウェア書き込みバリア７４０は、fromフィールド４１１のコンテンツと、書き込みアクセス７０１に関連する目標objectrefとの間の一致に応じて部分的に再配置されたオブジェクトトラップハンドラ７５０を起動する。この実施例では、部分的に再配置されたオブジェクトトラップハンドラ７５０が、例えば他の場合にはtoフィールド４１２にストアされるようなCopy-To先行情報に対するメモリストレージを決定し、必要に応じてそれを維持する。更に、ガーベッジコレクションソフトウェアは、他の場合にはhowfarフィールド４１３にストアされるようなhowfar情報に対するストレージを必要に応じて維持し得る。ミューテータプロセス６１０が、大形のオブジェクトのFromSpace４２０インスタンスにデータをストアする時、ストアデータは、copy-fromインスタンス４５０とcopy-toインスタンス４５０Ａの双方にブロードキャストされるか、或いは、HowFar情報に対するメモリストレージが与えられるような実施例では、howfarストレージを調べて、大形のオブジェクトのストア済みのtoフィールドがすでにコピーされている場合にはこのストアは両インスタンスにブロードキャストされ、そうでない場合にはcopy-fromインスタンス４５０のみに向けられる。部分的に再配置されたオブジェクトトラップハンドラ７５０が使用可能なtoフィールド及びhowfarフィールドにストアされる変数７５１の更新を、ガーベッジコレクタプロセス６２０が行う際に利用できる様々な方法を当業者は理解できよう。更新７０１は、そのような適切な方法の何れかによって行われる。
上述のように、ガーベッジコレクタプロセス６２０は、部分的に再配置されたオブジェクト識別子ストア４１０のfromフィールド４１１を更新して、大形オブジェクトのcopy-fromインスタンス４５０を指定する。この実施例では、コピーの終了後大形オブジェクトに対する取り扱いが更新されるまで、ミューテータプロセス６１０がcopy-toインスタンスに対するポインタのいずれも使用できない。従って、copy-toインスタンス４５０Ａへのアクセスに対するバリアを維持する必要はない。この実施例は、重複したcopy-from及びcopy-toインスタンス用には構成されていないが、重複インスタンスに対するサポートは、多くの再配置操作によるコレクタメソッド（relocating collector method）、例えばジェネレーション式のガーベッジ除去、つまりコピーによるコレクタメソッド（generational scavenging or copying collector method）では、重複インスタンスに対するサポートは不要である。
或る実施例では、ハードウェア書き込みバリア７４７が、ストア指向バイトコード（例えばputfield_quick，putfield，aastore等）の評価を行う整数ユニット１４２（第１図）ロジックによって構成される。このような実施例では、ロジックで実現したハードウェア書き込みバリア７４０がfromフィールド４１１のコンテンツによって識別されたCopy-Fromインスタンスへの書き込みにトラップを入れる。例えば、ハードウェア書き込みバリア６４０Ａの所望の挙動は以下の論理式で記述される。
0003881702.tif 000002
ここでgc_notifyはトラップハンドラの一例である。上述したようなジェネレーション間ポインタストアトラップのような他の書き込みバリア機能を組込んでいるロジックインプリメンテーションを含む、種々の適切なロジックインプリメンテーションを、当業者は理解されよう。How far情報は必要に応じてレジスタ１４４（第４図参照、第７図には示されていない）におけるhowfarフィールド４１３として提供され得、このHow far情報によって、ハードウェア書き込みバリア７４０によるトラップをブロードキャストが必要であるような状況のみに対してより良く適合させることができ、もって部分的に再配置されたオブジェクトトラップハンドラ７５０の起動に関連するオーバーヘッドを減らすことができる。
第８図は、書き込みバリア８４０に関連するCopy-Fromレジスタフィールド（例えばfromフィールド４１１）に加えてCopy-Toレジスタフィールド（例えばtoフィールド４１２）を備えた実施例を示す。第８図の実施例は、fromフィールド４１１のコンテンツによって識別されたオブジェクトのフィールドへのストアに対する書き込みバリアを提供し、且つ部分的に再配置されたオブジェクトトラップハンドラ７５０が取り除かれ、それに関連するオーバーヘッドが無くなるという利点を有する。この実施例では、大形のオブジェクトのインクリメンタル（有界休止時間）コピーが容易であるが、第７図の実施例のように、コピーされたオブジェクトのToSpace４３０インスタンスに対する数多くのポインタの有界休止時間更新には適さない。前の実施例のように、取り扱われるオブジェクト参照はこの制限を緩和することができ、追加のレベルの間接化技法（an additional level of indirection）の負担があるにも関わらず、たとえアクセス頻度の高い大形のオブジェクトであってもその全体の有界休止時間再配置ができるようになる。
例えばレジスタ１４４におけるtoフィールド４１２のように、ハードウェアにおけるCopy-Toレジスタフィールドを維持することにより、Copy-Fromインスタンスへの書き込みアクセスは、ソフトウェアトラップハンドラの介入なしに、ハードウェア書き込みバリア８４０によりCopy-FromインスタンスとCopy-Toインスタンスの双方にブロードキャストできる。或る実施例では、ハードウェア書き込みバリア８４０は、ストア指向バイトコードの評価を行う整数ユニット１４２（第１図）ロジックにより提供される。このような実施例では、ロジックで実現したハードウェア書き込みバリア８４０が、toフィールド４１２のコンテンツ及びobjectrefによりそれぞれ特定されたCopy-Toインスタンス及びCopy-Fromインスタンスの双方にstore_detaをブロードキャストする。ハードウェア書き込みバリア８４０の一例は、以下の論理式により記述される。
0003881702.tif 000003
ここでoffsetは、そのストア指向バイトコードに関連する目標フィールドの大形のオブジェクトへのオフセットである。上述のような、ジェネレーション間ポインタストアトラップのような他の書き込みバリア機能を組込んでいるロジックインプリメンテーションを含む、種々の適切なロジックインプリメンテーションを、当業者は理解されよう。ハードウェア書き込みバリア８４０がtoフィールド４１２を使用可能であることから、このブロードキャストはハードウェアで行うことができ、ソフトウェアトラップオーバーヘッドはなくなる。
第９図は、ハードウェア書き込みバリア９４０に関連するCopy-Fromレジスタフィールド（例えばfromフィールド４１１）に加えてCopy-To及びHow-Farレジスタフィールド（toフィールド４１２及びhowfarフィールド４１３）を備える実施例を示す。第９図の実施例は、fromフィールド４１１のコンテンツにより識別されるオブジェクトのフィールドへのストアに対する書き込みバリアを提供し、部分的に再配置されたオブジェクトトラップハンドラ６５０を取り除き、それに関連するオーバーヘッドをなくすと共に、ハードウェア書き込みバリア４９０が大形のオブジェクトのまだコピーされていない部分へのストアのブロードキャストなしで済ませることできるという利点を有する。上述の実施例のように、この実施例では、大形のオブジェクトのインクリメンタルコピーが容易であるが、コピーされたオブジェクトのToSpace４３０インスタンスに対する多数のポインタの有界休止時間更新には適さない。上述のように、取り扱われるオブジェクト参照は、この制限を緩和することができ、追加のレベルの間接化技法の負担があるにも関わらず、たとえアクセス頻度の高い大形のオブジェクトであってもその全体の有界休止時間再配置ができるようになる。
例えばレジスタ１４４におけるtoフィールド４１２のようなハードウェアにおけるCopy-Toレジスタフィールドを維持することにより、Copy-Fromインスタンスへの書き込みアクセスは、ハードウェア書き込みバリア４９０によりCopy-Fromインスタンス及びCopy-Toインスタンスの双方にブロードキャストすることができる。更に、例えばレジスタ１４４におけるhowfarフィールド４１３のようなハードウェアにおけるHow-Farレジスタフィールドを維持することにより、ブロードキャストを、その書き込みアクセスのために書き込みアクセスの特定の目標フィールドが既にToSpace４３０にコピーされた書き込みアクセスに制限され得る。何れの場合でも、部分的に再配置されたオブジェクトへの書き込みアクセスの取り扱いは、ソフトウェアトラップハンドラの介入なしに行うことができる。或る実施例では、ハードウェア書き込みバリア４９０が、ストア指向バイトコードの評価を行う整数ユニット１４２（第１図）ロジックにより提供される。ロジックで実現したハードウェア書き込みバリア４９０は、目標オブジェクトフィールドが大形のオブジェクトの既にコピーされた部分である場合にはstore_detaをCopy-FromインスタンスとCopy-Toインスタンスの双方にブロードキャストし、目標オブジェクトフィールドが大形のオブジェクトのまだコピーされていない部分である場合にはstore_detaをCopy-Fromインスタンスへ向ける。ハードウェア書き込みバリア９４０の一例は、以下の論理式で記述される。
0003881702.tif 000004
ここでoffsetは、そのストア指向バイトコードに関連する目標フィールドの大形のオブジェクトへのオフセットである。幾つかの実施例では、store_detaをCopy-Fromインスタンスに向けることは、通常ハードウェア書き込みバリア４９０の介入なしに、単に書き込みアクセスを終了できるようにすることによって行うことができる。上述のような、ジェネレーション間ポインタストアトラップのような他の書き込みバリア機能を組込んでいるロジックインプリメンテーションを含む、種々の適切なロジックインプリメンテーションを、当業者は理解されよう。ハードウェア書き込みバリア９４０がhowfarフィールド４１３を使用可能であることから、ハードウェア書き込みバリア９４０は、store_detaのCopy-Toインスタンスへの書き込みを、選択的に行わずに済ませることができる。このような簡単な最適化によって、２つの書き込みをブロードキャストするのではなくただ１つの書き込みを行うようにすることにより処理能力を高めることができる。
Copy-From及びCopy-Toインスタンス識別子ストアの双方に関連する書き込みバリア
ここで第１０図及び第１１図を参照して別の実施例について説明する。前述した幾つかの実施例と同様に、これらの実施例も、ソフトウェアトラップハンドラの介入なしに、部分的に再配置された大形のオブジェクトのFromSpace４２０インスタンスへの適切な書き込みを取り扱うために、ハードウェアサポート（例えばハードウェア書き込みバリアや部分的に再配置されたオブジェクト識別子ストア４１０）を利用する。しかし、更に、これらの実施例では、部分的に再配置された大形のオブジェクトのToSpace４３０インスタンスへの書き込みに対するバリアも提供する。このようにして、これらの実施例は、取り扱われるオブジェクト参照なしに、大形で及び／またはアクセス頻度の高いオブジェクトの全体の有界休止時間再配置のための、大形のオブジェクトのインクリメンタルコピーと、アクセス頻度の高いオブジェクトに対するポインタのインクリメンタル更新の双方をサポートしている。
第１０図及び第１１図の実施例では、ガーベッジコレクタプロセス６２０が大形のオブジェクトに対するポインタ（即ちobjectrefs）のインクリメンタル更新を行う。FromSpace４２０インスタンスかToSpace４３０インスタンスの何れかへのミューテータプロセス６１０書き込みアクセスは、ハードウェア書き込みバリア、例えばハードウェア書き込みバリア１０４０かハードウェア書き込みバリア１１４０によってブロードキャスト（つまり適切な方向づけ）されて、この２つのインスタンスが“in sync（同期した状態）”に維持されると共にobjectrefsが更新される。この２つのインスタンスがin syncに維持されることから、メモリ参照の構造体は、objectrefsの或るものがFromSpace４２０インスタンスを参照し、或るものは対応するToSpace４３０インスタンスを参照するような参照状態に対して頑強（robust）である。大形のオブジェクトを参照するobjectrefsの有界休止時間更新では、そのようなobjectrefsが、（FromSpace４２０インスタンスではなく）ToSpace４３０インスタンスを参照することになるようなインクリメンタル更新が行われる。第１０図及び第１１図の実施例では、FromSpace４２０インスタンスとToSpace４３０インスタンスが重複し得ないということに注意されたい。
第１０図では、ハードウェア書き込みバリア１０４０がcopy-fromインスタンス４５０かcopy-toインスタンス４５０Ａの何れかへの書き込みアクセスに対するバリアを提供する。ハードウェア書き込みバリア１０４０は、ハードウェア書き込みバリア８４０について前に説明したようなインクリメンタル有界休止時間コピーをサポートする。しかし、ハードウェア書き込みバリア１０４０は、Copy-Toレジスタフィールド（例えばtoフィールド４１２）にも応答する。Copy-fromインスタンス４５０かcopy-toインスタンス４５０Ａの何れかへの書き込みアクセスを、copy-fromインスタンス４５０とcopy-toインスタンス４５０Ａの双方にブロードキャストし、この２つのインスタンスのデータ状態を同期させる。このようにして、部分的に再配置された大形のオブジェクトに対するobjectrefsをインクリメンタル更新することができる。何れかのインスタンスへの読み込みアクセスが同じフィールド状態に解決することになるからである。
或る実施例では、ハードウェア書き込みバリア１０４０が、ストア指向バイトコードの評価を行う整数ユニット１４２（第１図）ロジックにより提供される。このような実施例では、ロジックで実現したハードウェア書き込みバリア１０４０が、それぞれfromフィールド４１１とtoフィールド４１２のコンテンツによって特定されたcopy-fromインスタンス及びcopy-toインスタンスの双方にstore_detaをブロードキャストする。ハードウェア書き込みバリア１０４０の一例は、以下の論理式で記述される。
0003881702.tif 000005
ここでoffsetは、そのストア指向バイトコードに関連する目標フィールドの大形のオブジェクトへのオフセットである。上述のようなジェネレーション間ポインタストアトラップのような他の書き込みバリア機能を組み込んでいるロジックインプリメンテーションを含む、種々の適切なロジックインプリメンテーションを、当業者は理解されよう。ハードウェア書き込みバリア１０４０がfromフィールド４１１及びtoフィールド４１２を使用可能であることから、それによって特定されたcopy-fromインスタンス４５０又はcopy-toインスタンス４５０Ａのそれぞれへのストアが認識可能となり、両インスタンスへのブロードキャストを、ソフトウェアトラップオーバーヘッドなしでハードウェアにおいて行うことが可能になる。
第１１図は、How-Farレジスタフィールド（例えばhowfarフィールド４１３）及びMode表示（例えばレジスタ１４４のmodeフィールド１１１４）を加えた実施例を示す。第１０図の実施例の場合のように、ハードウェア書き込みバリア１１４０は、copy-fromインスタンス４５０かcopy-toインスタンス４５０Ａの何れかへの書き込みアクセスに対するバリアを提供する。ハードウェア書き込みバリア１１４０は、FromSpace４２０インスタンス及びToSpace４３０インスタンスのコピーされた部分をin syncの状態に維持することにより、インクリメンタル有界休止時間コピーをサポートする。第１１図の実施例では、ハードウェア書き込みバリア１１４０によって、modeフィールド１１１４のCOPY状態によって表示されるコピー段階の間に、ハードウェアプロセッサ１００が、大形のオブジェクトのまだコピーされていない部分へのストアのブロードキャストを行わなくて済むようになるという利点がある。しかし、modeフィールド１１１４のPTR_UPDATE状態によって表示されるポインタ更新段階の間においては、copy-fromインスタンス４５０かcopy-toインスタンス４５０Ａの何れかへの書き込みアクセスは、copy-fromインスタンス４５０及びcopy-to４５０Ａの双方にブロードキャストされる。ガーベッジコレクタプロセス６２０は、その時点での大形オブジェクト再配置操作の段階に対応するようにmodeフィールド１１１４の表示を更新する。
或る実施例では、ハードウェア書き込みバリア１１４０が、ストア指向バイトコードの評価を行う整数ユニット１４２（第１図）ロジックにより提供される。このような実施例では、目標オブジェクトフィールドが大形のオブジェクトの既にコピーされた部分にある場合、或いは大形のオブジェクトが完全にコピーされて再配置操作がポインタ更新段階に入っている場合には、ロジックで実現したハードウェア書き込みバリア１１４０はstore_detaをCopy-FromインスタンスとCopy-Toインスタンスの双方にブロードキャストする。コピー段階の間では、目標オブジェクトフィールドが大形のオブジェクトのまだコピーされていない部分にある場合には、ロジックで実現したハードウェア書き込みバリア１１４０が、store_detaをCopy-Fromインスタンスに向ける。ハードウェア書き込みバリア１１４０の一例は、以下の論理式で記述される。
0003881702.tif 000006
ここでmodeフィールド１１１４の状態、MODEは、再配置操作の段階（例えばCOPY又はPTR_UPDATE）を表示し、offsetは、そのストア指向バイトコードに関連する目標フィールドの大形のオブジェクトへのオフセットである。上述したものようなジェネレーション間ポインタストアトラップのような他の書き込みバリア機能を組込んでいるロジックインプリメンテーションを含む、種々の適切なロジックインプリメンテーションを、当業者は理解されよう。ハードウェア書き込みバリア１１４０がhowfarフィールド４１３とmodeフィールド１１１４を使用可能であることから、ハードウェア書き込みバリア１１４０は、ポインタ更新段階の間に書き込みをブロードキャストすると共に、大形のオブジェクトの再配置操作のコピー段階の間にstore_detaのCopy-Toインスタンスへの書き込みを選択的に行わないで済ますことが可能である。この簡単な最適化によって、コピー段階の間に２つの書き込みをブロードキャストするのではなく、書き込みを１つだけ行うことによって処理能力を改善することができる。更に、再配置操作モードは、ガーベッジコレクタプロセス６２０が、howfarフィールド４１３の状態におけるコピー段階の終了をコード化できるようにすることによって表示することができる。上述の論理式において、howfarフィールド４１３の値をゼロ（０）以下とすることでコピー段階の完了をコード化し、これによりmodeフィールド１１１４を不要にすることができることを、当業者は理解されよう。
Copy-Fromインスタンス識別子ストアに関連する読み込み及び書き込みバリア
ここで第１２図〜第１４図を参照して別の実施例について説明する。前述した幾つかの実施例と同様に、これらの実施例では、部分的に再配置された大形のオブジェクトのFromSpace４２０インスタンスへの書き込みを適切に取り扱うためのハードウェアサポート（例えばハードウェア書き込みバリア及び部分的に再配置されたオブジェクト識別子ストア４１０）を利用する。しかし、これらの実施例は、部分的に再配置された大形のオブジェクトのFromSpace４２０インスタンスからの読み込みに対するバリアも提供する。このようにして、これらの実施例は、取り扱われるオブジェクト参照なしの大形のオブジェクトへのポインタの有界休止時間更新と共に有界休止時間コピーをサポートしている。
第１２図〜第１４図の実施例では、ガーベッジコレクタプロセス６２０が、コピー段階（MODE=COPY）の間に大形のオブジェクトのFromSpace４２０インスタンスからToSpace４３０インスタンスへのインクリメンタルコピーを行い、ポインタ更新段階（MODE=PTR_UPDATE）の間に大形のオブジェクトに対するポインタ（objectrefs）のインクリメンタル更新を行う。大形のオブジェクト再配置操作のコピー段階の間に、FromSpace４２０インスタンスへのミューテータプロセス６１０の書き込みアクセスは、部分的に再配置されたオブジェクトトラップハンドラ、例えば部分的に再配置されたオブジェクトトラップハンドラ１２５０（第１２図）か、ハードウェア書き込みバリア、例えばハードウェア書き込みバリア１３４０（第１３図）又はハードウェア書き込みバリア１４４０（第１４図）によってブロードキャスト、即ち適切に方向付けられる。大形オブジェクトの再配置操作のポインタ更新段階の間に、FromSpace４２０インスタンスへのミューテータプロセス６１０の書き込み及び読み込みアクセスは、ToSpace４３０インスタンスへ向け直される。
第１２図は、読み込み及び書き込みバリアに関連するCopy-Fromレジスタフィールドを含む実施例を示す。第１２図の実施例は、fromフィールド４１１，ハードウェア読み込みバリア１２４２、ハードウェア書き込みバリア１２４１、及び部分的に再配置されたオブジェクトトラップハンドラ１２５０を有する。ハードウェア読み込みバリア１２４２及びハードウェア書き込みバリア１２４１は、読み込み及び書き込みバリアハードウェア１２４０として図示されている。しかし、インプリメンテーションによっては、ハードウェア書き込みバリア１２４１及びハードウェア読み込みバリア１２４２は、ハードウェアを共有する形、或いは独立したハードウェアベースの形で実現されることもある。或る実施例では、ストア指向バイトコードの評価を行う整数ユニット４２０（第１図）ロジックがハードウェア書き込みバリア１２４１を提供し、ロード指向バイトコード（例えばgetfield_quick,getfield,aaload等）の評価を行う整数ユニット４２０ロジックがハードウェア読み込みバリア１２４２を提供する。
ミューテータプロセス６１０は、収集された空間６３０への書き込みアクセス及びそこからの読み込みアクセスを行う。所定の読み込み又は書き込みアクセスは、その読み込み又は書き込みアクセスが、部分的に再配置されたオブジェクトのFromSpace４２０インスタンスを標的とする場合には、読み込み及び書き込みバリアハードウェア１２４０によって選択的にトラップをかけられる。読み込み及び書き込みバリアハードウェア１２４０は、fromフィールド４１１のコンテンツと書き込みアクセス７０１又は読み込みアクセス１２０２に関連する目標objectrefとの間の一致に応じて、部分的に再配置されたオブジェクトトラップハンドラ１２５０を起動する。或る実施例では、読み込み及び書き込みバリアハードウェア１２４０が、レジスタ１４４のmodeフィールド１１４に応答する。このフィールドは、modeフィールド１１１４の状態に基づいてハードウェア読み込みバリア１２４２の動作のし方、つまり挙動を変える。このような実施例では、ハードウェア読み込みバリア１２４２が、大形オブジェクトの再配置操作のポインタ更新段階の間にのみ選択的なトラップをかける。
ハードウェア書き込みバリア１２４１の一例は、以下の論理式で記述される。
0003881702.tif 000007
ここでgc_notifyは、部分的に再配置されたオブジェクトトラップハンドラ１２５０のようなトラップハンドラである。上述のような、ジェネレーション間ポインタストアトラップのような他の書き込みバリア機能を組込んでいるロジックインプリメンテーションを含む、種々の適切なロジックインプリメンテーションを、当業者は理解されよう。ハードウェア読み込みバリア１２４２の一例は、以下の論理式で記述される。
0003881702.tif 000008
別の実施例は、より大形のトラップハンドラオーバーヘッドの負担があるにも関わらず、部分的に再配置されたオブジェクトトラップハンドラ１２５０による適切な取り扱いによって、大形オブジェクトの再配置操作のコピー段階及びポインタ更新段階の双方の間に選択的にトラップをかけることができる。
コピー段階の間に、部分的に再配置されたオブジェクトトラップハンドラ１２５０は、別の場合にはtoフィールド４１２にストアされるようなCopy-To先行情報のためのメモリストレージを確保し、或いは必要に応じて維持する。更に、部分的に再配置されたオブジェクトトラップハンドラ１２５０は、別の場合にはhowfarフィールド４１３にストアされるようなHowFar情報のためのストレージを必要に応じて維持することができる。ミューテータプロセス６１０が、大形のオブジェクトのFromSpace４２０インスタンスにストアする場合には、ストアデータは、copy-fromインスタンス４５０とcopy-toインスタンス４５０Ａの双方にブロードキャストされるか、或いは、howfar情報に対するストレージを提供するような実施例では、howfarストレージが検査されて、大形のオブジェクトのstored-toフィールドが既にコピーされている場合にはストアが両インスタンスにブロードキャストされ、そうでない場合にはcopy-fromインスタンス４５０に向けられる。
ポインタ更新段階の間に、部分的に再配置されたオブジェクトトラップハンドラ１２５０は、部分的に再配置された大形のオブジェクトのFromSpace４２０インスタンスを目標にした読み込み及び書き込みアクセスを、そのToSpace４３０インスタンスに向ける。前述の場合のように、部分的に再配置されたオブジェクトトラップハンドラ１２５０は、別の場合にはtoフィールド４１２にストアされるようなCopy-To行先情報のためのメモリストレージを確保し、或いは必要に応じて維持する。何れの場合にも、部分的に再配置されたオブジェクトトラップハンドラ１２５０は、ToSpace４３０インスタンスへの読み込み及び書き込みアクセスの双方を方向付けしなおす。このようにして、部分的に再配置されたオブジェクトへの読み込みアクセスは、最新の状態への更新が保証されているToSpace４３０インスタンスに解決する。
部分的に再配置されたオブジェクトトラップハンドラ１２５０のための書き込みトラップ及び読み込みトラップ機能の例は、以下のようなものである。
0003881702.tif 000009
ここで、read_destinationは、ロード指向バイトコードの行先である。
一般に、読み込みバリアに対するトラップによってオーバーヘッドが生ずるケースは、書き込みバリアのみが提供されている場合より起こりやすい。読み込みアクセスは、通常所定の命令ストリームにおいては書き込みアクセスより一般的で、何れの場合も書き込みアクセスに伴って生ずるからである。これを一つの理由として、ハードウェア書き込みバリア１２４２は、ポインタ更新段階における部分的に再配置された大形のオブジェクトのFromSpace４２０インスタンスからの読み込みに対して選択的となっている。しかし、ハードウェア書き込みバリア１２４２は、再配置操作の段階とは無関係に、部分的に再配置された大形のオブジェクトのFromSpace４２０インスタンスからの読み込みに対して、所望に応じてトラップをかけられる。このような実施例では、部分的に再配置されたオブジェクトトラップハンドラ１２５０は、重複するcopy-fromインスタンス４５０とcopy-toインスタンス４５０Ａのインテリジェントな取り扱いが可能であるように構成することができる。第１５図は、fromインスタンス１５６０とtoインスタンス１５７０の重複を示す。ここではコピー済み部分１５６１が、toインスタンス１５７０の部分１５７１にコピーされている。fromフィールド４１１、toフィールド４１２、及びhowfarフィールド４１３は、上述のように、部分的に再配置されたオブジェクトの状態をコード化する。第１５図の実施例では、ガーベッジコレクタプロセス６２０が、fromインスタンス１５６０とtoインスタンス１５７０の相対的な重複に応じて、大形のオブジェクトを後ろから前へ（又は前から後ろへ）コピーする。重複したfromインスタンスとtoインスタンスの取り扱いを容易にするために、部分的に再配置されたオブジェクトトラップハンドラ１５５０は、書き込みのブロードキャストは行わず、代わりにコピーされていない部分１５６２を目標とする書き込みをfromインスタンス１５６０に向け、コピー済み部分１５６１を目標とする書き込みをtoインスタンス１５７０に向ける。部分的に再配置されたオブジェクトトラップハンドラ１２５０の書き込みトラップファンクションの適切な改変形態は、以下の通りである。
0003881702.tif 000010
ここでCOPY_DIRECTIONは、それぞれfromフィールド４１１及びtoフィールド４１２によってコード化されている、fromインスタンス１５６１とtoインスタンス１５７０の相対的な位置から確認することができる。ロード指向アクセスを適切に方向付けし直すための、部分的に再配置されたオブジェクトトラップハンドラ１２５０の読み込みトラップファンクションの改変も、類似の方式で行うことができる。
第１３図に示す実施例は、読出し・書込みバリアハードウェア１３４０に関連するCopy-Fromレジスタフィールド（例えば、from field４１１）に加えてCopy-Toレジスタフィールド（例えば、to field４１２）を含む。前述のように、この実施例は、読出し・書込みバリアハードウェア１３４０が、コピー段階と大形オブジェクト再配置操作のポインタ更新段階との間の識別が可能となるように、ガーベッジコレクタプロセス６２０によって保守されたモード表示（例えば、レジスタ１４４のモードフィールド１１１４）を含む。第１２図の実施例と比較して、第１３図は、ハードウェア（例えば、from field４１１のコンテンツによって特定されるオブジェクトのフィールドへのストアに対するハードウェア書込みバリア１３４２及び読出しバリア１３４１）において、読出しバリア及び書込みバリアサポート（barrier support）の両方を具備し、その結果、部分的に再配置されたオブジェクトトラップハンドラ１２５０及びそれに関連するオーバヘッドを都合よく消去する。
ハードウェアの中のCopy-Toレジスタフィールド（例えば、レジスタ１４４の中のto field４１２）の保守によって、Copy-Toインスタンスへの書込みアクセスは、ソフトウェアトラップハンドラ介入なしに、ハードウェア書込みバリア１３４１によって、Copy-From及びCopy-Toインスタンスの両方に対するコピー段階（MODE=COPY）の間において、ブロードキャストであり得る。ポインタ更新段階（MODE=PTR_UPDATE）の間において、Copy-Fromインスタンスに対する書込みアクセスは、再びソフトウェアトラップハンドラ介入なしに、ハードウェア書込みバリア１３４１によってCopy-Toインスタンスに対し再び向けられる。また、Copy-Fromインスタンスからの読出しアクセスは、ポインタ更新段階の間において、ソフトウェアトラップハンドラ介入なしに、ハードウェア読出しバリア１３４２によって、Copy-Toインスタンスに再び向けられる。Copy-Fromインスタンスに対するコピー段階読出しアクセスは正常に終了する。
一実施例において、読出し・書込みバリアハードウェア１３４０は、バイトコードの評価を行なう整数ユニット１４２（第１図）ロジックによって具備される。ハードウェア書込みバリア１３４１は、ストア指向（store-oriented）バイトコードの評価を行なう整数ユニット１４２ロジックによって具備され、ハードウェア読出しバリア１３４２は、ロード指向（load-oriented）バイトコードの評価を行なう整数ユニット１４２ロジックによって具備される。
コピー段階の間において、ロジック実行ハードウェア書込みバリア１３４２は、to field４１２のコンテンツ及びオブジェクト参照（objectref）によって各々特定されるCopy-From及びCopy-Toインスタンスの両方に対するストアデータ（store_deta）をブロードキャストし、一方、ポインタ更新段階において、ロジック実行ハードウェア書込みバリア１３４２は、Copy-Toインスタンスのみに対して記憶データを再び向ける。典型的なハードウェア書込みバリア１３４２は、以下の論理式で示される。
0003881702.tif 000011
同様に、典型的なハードウェア読出しバリア１３４１は、以下の論理式で示される。
0003881702.tif 000012
ここで、各々の場合における“offset”は、ストアまたはロード指向バイトコードに関する目標フィールドの大形オブジェクトにおけるオフセットである。前述のように、先行技術は、ハードウェア書込みバリア１３４２と、ジェネレーション間ポインタストアトラップのような機能を有する別の書込みバリアとを組合せたインプリメンテーションと同様に、ハードウェア読出しバリア１３４１と、ハードウェア書込みバリア１３４２とを組合せたロジックのインプリメンテーションを含め、様々な好適なロジックのインプリメンテーションを認識するであろう。to field４１２はハードウェア書込みバリア１３４２に使用可能なため、ハードウェアにおいてブロードキャスト及び向け直し（redirection）が可能であり、ソフトウェアトラップオーバヘッドが削除される。
How-farレジスタフィールド（例えば、howfar field４１３）を追加する実施例を第１４図に示す。第１３図の実施例のように、読出し・書込みバリアハードウェア１４４０は、copy-fromインスタンス４５０から、或いはcopy-fromインスタンス４５０への読出し・書込みアクセスに対するバリアを具備する。さらに、読出し・書込みバリアハードウェア１４４０は、既にToSpace４３０インスタンスにコピーされたストアまたはロード指向バイトコードによってそのフィールドが参照されるかどうかによって、好適なFromSpace４２０またはToSpace４３０インスタンスに対して読出し・書込みアクセスを向ける（steers）。howfar field４１３に関する操作によって、ハードウェア書込みバリア１４４１は、モードフィールド１１１４のコピー状態によって示されるコピー段階の間に、ハードウェアプロセッサ１００が、大形オブジェクトの未だコピーされていない部分に対するストアのブロードキャストを見合わせることを都合よく許容する。ポインタ更新段階の間に、ToSpace４３０インスタンスは、最新への更新を補償され、故に、そこへ読出しアクセスの向け直しによって、ハードウェア読出しバリア１４４２は、ポインタ更新段階の間において、ハードウェアプロセッサ１００のストアのブロードキャストを見合わせることを都合よく許容する。ブロードキャストストアは削除されるので、第１４図の実施例は、FromSpace４２０及びToSpace４３０インスタンスのオーバラップのサポートに特に都合が良い。
一実施例において、読出し・書込みハードウェア１４４０は、バイトコードの評価を行なう整数ユニット１４２（第１図）ロジックによって具備される。ハードウェア書込みバリア１４４１は、ストア指向バイトコードの評価を行なう整数ユニット１４２ロジックによって具備され、ハードウェア読出しバリア１４４２は、ロード指向バイトコードの評価を行なう整数ユニット１４２ロジックによって具備される。典型的なハードウェア書込みバリア１４４２は、以下の論理式で示される。
0003881702.tif 000013
同様に、典型的なハードウェア読出しバリア１３４１は、以下の論理式で示される。
0003881702.tif 000014
ここで“read_destination”は、ロード指向バイトコードのための宛先（destination）であり、各々において“offset”は、ストアまたはロード指向バイトコードに関係する目標フィールドの大形オブジェクトにおけるオフセットである。前述のように、先行技術は、ハードウェア書込みバリア１４４２と、ジェネレーション間ポインタストアトラップのような機能を有する別の書込みバリアとを組合せたインプリメンテーションと同様に、ハードウェア読出しバリア１４４１と、ハードウェア書込みバリア１４４２とを組合せたロジックのインプリメンテーションを含め、様々な好適なロジックのインプリメンテーションを認識するであろう。
Copy-Toインスタンス識別子ストアに関する読出し・書込みバリア
第１２図から第１４図の一連の種々の実施例は、Copy-Fromインスタンス識別子ストアではなく、Copy-Toインスタンス識別子ストアに関する読出し・書込みバリアを含む。前述のように、これらの実施例は、ソフトウェアトラップハンドラオーバヘッド（software trap handleroverhead）を削除し、copy-fromインスタンス４５０及びcopy-toインスタンス４５０Ａのオーバラップを考慮するために、逐次的レベルの付加的ハードウェアサポート（例えば、from field４１１及びhawfarフィールド４１３サポート）を加える。その様々な実施例は、部分的に再配置された大形オブジェクトに対するポインタの有界休止時間更新及び有界休止時間コピーの両方をサポートする。これらの様々な実施例は、第１２図から第１４図の実施例の類推によって示され、それらの先行技術は、この明細書に基づく好適な改変の真価を認めるだろう。
オブジェクトデータのコピーの前に、ガーベッジコレクタプロセス６２０は大形オブジェクトに対しポインタを更新する（即ち、FromSpace４２０インスタンスからToSpace４３０インスタンスへ）。この方法において、ポインタ更新とコピー段階のオーダは逆になる。読出し・書込みバリアの後の読出し・書込みアクセスは、copy-toインスタンス４５０Ａの変わりにcopy-fromインスタンス４５０に向ける。一実施例において、ハードウェア読出し・書込みバリアトラップは、copy-toインスタンス４５０Ａにアクセスし、それは、Copy-Fromインスタンスに対する実際の取次を行なう部分的に再配置されたオブジェクトトラップハンドラのソフトウェアを呼び出す。部分的に再配置されたオブジェクトトラップハンドラは、そうでなければhowfar field４１３にストアされるように、所望によりHowFarインフォメーションのためのストレージを保持しても良い。ミューテータプロセス６１０が大形オブジェクトToSpace４２０インスタンスにストアする際に、大形オブジェクトのストアされたto fieldが既にコピーされている場合は、ストアデータはcopy-toインスタンス４５０Ａに向けられ、そうでない場合はcopy-fromインスタンス４５０に向けられる。同様に、ミューテータプロセス６１０が大形オブジェクトのToSpace４２０インスタンスからロードするとき大形オブジェクトのストアされたto fieldが既にコピーされている場合は、ロードは、copy-toインスタンス４５０Ａから行なわれ、そうでない場合はcopy-fromインスタンス４５０から行なわれる。前述のように第１２図および第１４図に関して、オーバーラップしたFromSpace４３０及びToSpace４３０インスタンスのためのサポートが具備される。別法として、オーバーラップ領域のためのサポートが不要な場合、読出しバリアはロードをCopy-Fromインスタンスに向けて、書込みバリアはCopy-From及びCopy-Toインスタンスの両方に対してストアをブロードキャストし得る。
上述のように、ソフトウェアトラップオーバーヘッドは、より多くのレジスタ及び複雑動作をハードウェアに置くことによって消去され得る。例えば、一実施例ではto field４１２及びfrom field４１１を含む。ハードウェア書込みバリアは、ストアをcopy-toインスタンス４５０Ａとcopy-fromインスタンス４５０の両方に対してブロードキャストするto field４１２及びストア目標の間の一致に応答する。ハードウェア読出しバリアは、ロードをcopy-fromインスタンス４５０に対して向け直すto field４１２及びロードソース（load source）の間の一致に応答する。別の実施例では、to field４１２及びfrom field４１１に加えてhowfar field４１３を含む。ハードウェア書込みバリア及び読出しバリアは、copy-toインスタンス４５０Ａのコピーされた部分及びcopy-fromインスタンス４５０のコピーされていない部分にストア及びロードを向ける。これらの先行技術は、前述に基づく各々の実施例のための好適なロジックを認識するであろう。
オブジェクト参照フォーマット（object referencing formats）
第１６図は、ハードウエアプロセッサ１００において表現されているようなオブジェクト参照（objectref）の一実施例を示している。objectrefの３つのビットを上述に織込まれたPCT国際出願番号第PCT／US98／07622号（ガーベッジコレクションのためのジェネレーション離隔（generation isolation）システム及び方法）に記載のガーベッジコレクションヒント（garbage collection hints）のために使用することができる。別のハンドルビットＨは、オブジェクトがobjectrefによって直接参照されているか、又はハンドル（handle）を通して間接的に参照されているかを示す。ハンドルは、別のレベルの間接的手続きが発生するという代償はあるが、メモリオブジェクトの再配置操作を、それらを指定するポインタ（またはobjectrefs）の大量の更新なしに容易に実現する参照メソッド（referencing method）を提供する。これらのフィールドはどちらもハードウエアプロセッサ１００の整数ユニット１４２（第１図）に与えられる前にマスクしてなくなる（mask out）。
ハードウエアプロセッサ１００及び収集された空間６３０（第６〜１４図）の一実施例では、オブジェクト１７００はヘッダ部１７１０及びインスタンス変数ストレージ部１７２０を含むメモリにおいて表現される。第１７Ａ図は、そのような実施例の１つを示している。ヘッダ部１７１０は３２ビットワードを含んでおり、この３２ビットワードそれ自身はオブジェクトのクラスを表すためのメソッドベクタテーブルベース部（method vector table base portion）１７１２と、オブジェクトの同期状態及びガーベッジコレクタ用の情報のために確保された追加的なストレージ（storage）１７１４の５つのビットを含んでいる。所望に応じて、第２のヘッダワード（例えばモニタポインタ１７１６）に、オブジェクトに割り当てられたモニタのアドレスを格納し、それによって第１のヘッダワード内の追加的なストレージ１７１４の５つのビット全てをガーベッジコレクション情報に使用可能とすることもできる。第１７Ａ図の実施例では、オブジェクト参照（objectref）はメソッドの呼び出しのオーバヘッドを最小化するべく、メソッドベクタテーブルベース部１７１２の場所を示している。
ヘッダ部１７１０の３つのビットは、例えばコレクタプロセス６２０のようなガーベッジコレクタによって使用可能である。ヘッダ部１７１０において、３つの下位ビット（header[2:0]）及び２つの上位ビット（header[31:30]）はヘッダがポインタとして処理されるときはマスクしてなくなる（mask off）。これらのビットの内３つ（header[31:30,2]）は、オブジェクト１７００に関する情報をストアすべくガーベッジコレクタによって使用可能である。オブジェクトの同期のため、LOCK及びWANTビットを保持すべくビット１及び０を用いることができる。別の方法として、例えばモニタポインタ１７１６のような第２のヘッダワードをオブジェクト１７００の同期状態を保持するのに用い、５つのビット全てをガーベッジコレクションのサポートのために残すこともできる。ガーベッジコレクションのサポートのためのビットがどのように用いられるかは、コレクタプロセス６２０及びガーベッジコレクショントラップハンドラによって実現されるガーベッジコレクションメソッドの特定のタイプに依存する。可能な使用方法には、マークビット、所定のジェネレーションのオブジェクトの年齢を決定するためのカウンタビット等として使用することが含まれる。上述したように、所望に応じてなされるヘッダ部１７１０の第２のヘッダワードを使用した実施態様では、５つのビットが例えばコレクタプロセス６２０のようなガーベッジコレクションに対して使用可能となる。
第１７Ａ図の実施例において、インスタンス変数ストレージ部１７２０はメソッドベクタテーブルベース部１７１２の１ワード後に始まっており、オブジェクト１７００のインスタンス変数を格納する。objectrefの最下位ビットによって、参照が取り扱われる（＝＝１）か又は取り扱われない（＝＝０）かが指定される。一方の選択肢である“取り扱われる”場合のオブジェクトフォーマットが第１７Ｂ図に示されている。オブジェクト１７００ｂが生成されるとき、取り扱われる参照が確立され、その後の全ての参照はオブジェクトにアクセスすべくハンドル、即ちストレージポインタ１７５０ｂを通過する。このようなサポートは、下層に位置するオブジェクトストレージ（インスタンス変数に対するものを含む）ではなくハンドルをコピーすることによってオブジェクトの再配置操作に伴うポインタの更新の代償を軽減するようなガーベッジコレクタに対して提供される。
取扱われるオブジェクト参照は、前述の第７〜９図のように、ガーベッジコレクションシステムが、コピーされたオブジェクトに対しポインタ更新のための有界休止時間動作を示すことを可能にする。別のガーベッジコレクションシステムにおいては、多数の参照ポインタの有界休止時間ポインタが、それによって備えられたバリア構造によってサポートされるが、例えば、上述の第１０〜１４図の実施例においては、直接のオブジェクト参照が好ましい。
本発明を様々な実施例に基づいて説明してきたが、これらの実施例は例示的なものであり、発明の範囲はこれらの実施例に限定されないことを理解されたい。請求の範囲で使用される第１命令、第２命令、第３命令などの用語は特定のためのものであって、命令の特定の順番を要求すると解釈されるべきでものではない。説明した実施例に対して様々な変形、変更、追加及び改良が可能である。例えば、本発明をＪＡＶＡプログラミング言語及びＪＡＶＡ仮想マシンに関連する実施例に基づいて説明してきたが、本発明はそれらに限定されるものではなく、様々なプロセッサ環境（仮想及び物理的なものの両方）に対するシステム、製品、方法、及び装置を包含するものである。更に、いくつかの実施例は、ハードウエアとして説明してきたが、上述に従って応答する部分的に再配置されたオブジェクト識別子ストア及びバリアに組込まれた好適な仮想マシンの具現（ＪＡＶＡに関するもの、或いはその他のもの）は、バイトコードインタプリタ（bytecode interpreter）またはジャストインタイムコンパイラ（just-in-time compiler）のようなソフトウエアによる仮想マシーン命令プロセッサの具現を含む。上述した或いはその他の変形および、変更、追加、改良は特許請求の範囲に画定される本発明の範囲に入るものである。
【図１】
0003881702.tif 000015
【図１Ａ】
0003881702.tif 000016
【図１Ｂ】
0003881702.tif 000017
【図２】
0003881702.tif 000018
【図３】
0003881702.tif 000019
【図４Ａ】
0003881702.tif 000020
【図４Ｂ】
0003881702.tif 000021
【図５】
0003881702.tif 000022
【図６】
0003881702.tif 000023
【図７】
0003881702.tif 000024
【図８】
0003881702.tif 000025
【図９】
0003881702.tif 000026
【図１０】
0003881702.tif 000027
【図１１】
0003881702.tif 000028
【図１２】
0003881702.tif 000029
【図１３】
0003881702.tif 000030
【図１４】
0003881702.tif 000031
【図１５】
0003881702.tif 000032
【図１６】
0003881702.tif 000033
【図１７Ａ】
0003881702.tif 000034
【図１７Ｂ】
0003881702.tif 000035