JP2000513851A - ガーベッジコレクションページ境界横断ポインタストアをトラップするためのライトバリアシステム及び方法 - Google Patents

ガーベッジコレクションページ境界横断ポインタストアをトラップするためのライトバリアシステム及び方法

Info

Publication number
JP2000513851A
JP2000513851A JP10546158A JP54615898A JP2000513851A JP 2000513851 A JP2000513851 A JP 2000513851A JP 10546158 A JP10546158 A JP 10546158A JP 54615898 A JP54615898 A JP 54615898A JP 2000513851 A JP2000513851 A JP 2000513851A
Authority
JP
Japan
Prior art keywords
pointer
store
garbage collection
instruction
collection page
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP10546158A
Other languages
English (en)
Other versions
JP4104668B2 (ja
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
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=25285147&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=JP2000513851(A) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JP2000513851A publication Critical patent/JP2000513851A/ja
Application granted granted Critical
Publication of JP4104668B2 publication Critical patent/JP4104668B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime 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/99941Database schema or data structure
    • Y10S707/99944Object-oriented database structure
    • Y10S707/99945Object-oriented database structure processing
    • 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、ML 、Haskel、Miranda、Oberon等のアルゴリズム言語にとって特に魅力的である。 これらの言語はデータ共有や、遅延実行などを行い、手続き型言語に比較して、 より予測困難な実行順序を伴う。ガーベッジコレクション及びそのための古典的 なアルゴリズムについては、Jones & Lins,"Garbage Collection:Algorithms fo r 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,"GarbageCollection:Algorithms for Automatic Dynamic Memory Mane gement",pp.165-74 Wiley(1996)を参照されたい。特に、この文献は、ジェネレ ーション間ポインタ、ライトバリア、エントリーテーブル、想起されたセツト(r emembered set)、逐次的なストアバッファ、ハードウェアサポートを伴うページ マーキング、仮想メモリサポートを伴うページマーキング及びカードマーキング について議論している。 ポインタストアチェッキングのためのインラインコードなどのようなソフトウ ェア技術が用いられた場合、実行時間及びインラインコードスペースのオーバー ヘッドが課題となる。ソフトウェアライトバリアの1つの例がUngar(David M.Un gar,"GenerationScavenging:A Non-distruptive High Performance Storage Rec lamation 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 Memo ry Manegement",pp.169-70 Wiley(1996)を参照されたい。この文献は、Symboli cs 3600上でのハードウェアサポートを伴うページマーキングについての記載を 含む。また、Moon,"Architecture of the Symbolics 3600",In Proceedings of the 12th Annual International Symposium on Computer Architecture,pp.76- 83(1985)も参照されたい。この文献は、オブジェクトのストアされた表現につい ての記載を含む。 ジェネレーション間ポインタを識別するプロセスは、かなりのコレクション時 スキャニングを必要とする。1つの改良方法では、収集されたメモリスペース、 即ちヒープを、カードと呼ばれる小さな領域にセグメント化することである。カ ードマーキングは、カードが適正なサイズであれぱ幾つもの利点をもたらす。こ れらは仮想メモリページよりも小さいことから、コレクション時スキャニングの 量が削減される。その一方、カードテーブルにより占められるスペースの大きさ は、ワード毎のマー キング方法のために必要な量よりも小さい。一般に、カード内のワードか変更さ れる度毎に、カードテーブルに1ビットが無条件にセットされる。カードマーキ ングコレクタは、コレクション時にジェネレーション間ポインタを求めて汚れた カードをスキャンしなければならない。カードをスキャンするためのコストは、 実行されたストアの数よりも、むしろマークされたカードの数及びサイズに比例 する。なぜなら、繰り返しが発生することがないからである。Wilson and Moher ,"Design of the Opportunistic Garbage Collector",ACM SIGPLAN Notices,24( 10),pp.23-35(1989)を参照されたい。 ジェネレーション的な方法は、ガーベッジコレクションに要する時間を効果的 に削減することができ、コレクションの多くが仕事即ちジョブの中断を伴わない ものであるのに対し、古いジェネレーションのコレクションはジョブを中断させ る。ジョブの中断を伴うことなくオブジェクトの古いジェネレーションを収集す るために、Hudson及びMossの両氏は、各コレクション時に、成熟したオブジェク トスペースの境界の定められたサイズの領域を処理するアルゴリズムを提案した 。アルゴリズムは本質的に歩進的なものであって、最終的には必ず全てのガーベ ッジを収集する。Hudson及びMossの両氏は、問題の解決方法を記述するために、 列車の例えを用いており、客車は境界の定められたサイズの領域を表し、列車は 客車を含む連結構造のグループを表す。このシステムは、特定のハードウェア即 ち仮想メモリ機構に依存しない点で効率的である。Hudson and Moss,"Incremen tal Collection of Mature Object",Proceedings of International Workshop o n Memory Management,St.Malo,France(16-18 Septemper,1992)を参照されたい。発明の開示 本発明は、ガーベッジコレクタの実施を容易に行い得るようにするよ うなシステム及び方法及び装置並びにそのようなシステム、方法及び装置を具現 するようなコンピュータプログラム製品を提供するものである。特に、本発明は 、ガーベッジコレクションページ境界横断ポインタストアをトラップするための アーキテクチャ的サポート(architecturalsupport)を提供する。ポインタスト アが境界を横断するものであるとの識別は、ガーベッジコレクションページサイ ズを定義するべくプログラム可能にエンコードされるガーベッジコレクションペ ージマスクに応答するストアバリアによってなされる。ライトバリア及びガーベ ッジコレクションページマスクによれば、ガーベッジコレクションページマスク の、従ってトラップされるべき境界横断ポインタストアプログラム可能な定義が 提供され、さまざまなジェネレーション的ガーベッジコレクション方法のための サポートを備えたガーベッジコレクタの実施態様が提供される。このような方法 には、ジェネレーション的に収集されたメモリスペースの成熟した部分を管理す るためのトレーンアルゴリズム式方法が含まれる。 ポインタ依存ストア命令置換手段によって、本発明に基づく実施態様において 、ポインタストアに対してというだけでなく、プログラム可能に定義されたガー ベッジコレクションページ境界を横断するポインタストアに対して、正確なバリ アを提供することが可能となる。ここでいうポインタストアの正確な識別は、収 集されたメモリ記憶領域に対してインラインにエンコードされたタグを必要とせ ず、このようなタグをサポートするための標準的でないワードのサイズを必要と しない。 本発明は、ガーベッジコレクションページマスクのハードウェアレジスタによ る実現及びそのようなハードウェアレジスタの内容に基づくガーベッジコレクシ ョントラップトリガ方程式の論理的な実現に特に影響を受ける。しかしながら、 交互のストアまたはガーベッジコレクション ページマスクのエンコード及びガーベッジコレクショントラップトリガ方程式の ファームウェアまたはマイクロコードによる実現も適している。さらに、汎用ま たは特定用途ソフトウェアによる具現も、特にハードウェアプロセッサ上での実 行の代わりとなるソフトウェア仮想マシン命令プロセッサの実装において適して いる。ポインタ依存命令によるポインタ非依存命令の実行時間置き換え(execut ion time replacement)は、非ポインタストア命令がジェネレーション間ポイン タストアトラップチェックをバイパスすることを可能とするが、実施例によって はこの利点が生じないこともあり得る。これらの及び他の変形例は本願の請求の 範囲に入るものである。 本発明に基づく一実施例による装置は、内部に形成されたオブジェクトにそれ へのオブジェクト参照を介してアクセス可能であるような動的割り当てストレー ジと、プログラム可能に定義されたガーベッジコレクションページマスクと、ガ ーベッジコレクションページ境界横断ポインタストアに対するライトバリアとを 含む。ライトバリアは、それに関連付けられた第1及び第2のポインタのそれぞ れの選択された部分が異なる場合、ストア命令をトラップする。前記第1ポイン タは前記ストア命令のターゲットオブジェクトを参照し、前記第2ポインタはそ こへストアされるオブジェクト参照データである。前記したそれぞれ選択された 部分は、前記プログラム可能に定義されたガーベッジコレクションページマスク の内容によって定義される。別の実施例では、プログラム可能に定義されたガー ベッジコレクションページマスクはガーベッジコレクションページサイズを定義 する。 本発明に基づく更に別の実施例によると、前記ライトバリアは、ガーベッジコ レクションページレジスタフィールドに応答して前記ガーベッジコレクションペ ージマスクをエンコードするマスク及び比較論理を含 む。更に別の実施例では、当該装置は、前記プログラム可能に定義されたガーベ ッジコレクションページマスクの表現を含む仮想マシン命令プロセッサを含む。 前記ライトバリアは、前記仮想マシーン命令プロセッサ上で実行可能なポインタ 依存ストア命令コードを含む。ポインタ依存ストア命令コードの実行は、前記タ ーゲットオブジェクト参照及び前記オブジェクト参照データのそれぞれのマスク された部分のビット単位の比較に基づいて、前記ポインタ依存ストア命令の1つ の特定の実行がガーベッジコレクションページ境界横断ポインタのストアを行う か否かを判定し、もしそうであればガーベジコレクションフォールトハンドラに トラップする。 様々な他の実施例において、前記仮想マシーン命令プロセッサはハードウエア プロセッサを含んでおり、仮想マシーン命令の少なくともサブセットがそれによ って直接実行可能であるか、あるいは、ハードウエアプロセッサ上で実行可能な そのインタプリタによる実現を(interpreted implementation)含むか、あるい はハードウエアプロセッサ上で実行可能なそのジャストインタイムコンパイラに よる実現を含む。インタプリタによる実現及びジャストインインタイムコンパイ ラによる実現では、ガーベッジコレクションページマスクは前記ハードウエアプ ロセッサにアクセス可能なストレージ内で表現される。 本発明に基づく別の実施例によると、ガーベッジコレクションページ境界横断 ポインタストアをトラップするための方法であって、コンピュータで読取り可能 なストレージ内にガーベッジコレクションページマスクを形成する過程と、ポイ ンタ依存ストア命令の特定の実行に関連付けられた第1及び第2のポインタをマ スキングする過程と、前記第1及び第2ポインタのそれぞれのマスクされていな い部分を比較し、前記第1及び第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 は低コストであって、電力消費が少ない。そのため、ハードウェアプロセッサ1 00はポータブルの用途に示している。 ハードウェアプロセッサ100は、概ねハードウェアとしてJAVA仮想マシ ン命令プロセッサを構成するものであって、そうでない場合にはソフトウェアイ ンタプリタによって必要とされるような25−50キロバイトの、リードオンリ ーメモリやランダムアクセスメモリ等のメモリが不要となり、或いは、それを他 の用途に転用することができる。ガーベッジコレクションのためのハードウェア サポートは、さらにガーベッジコレクションのためのインラインコード(コンパ イラにより提供されるリード及びまたはライトバリアサポート)を低減し、限定 されたメモリの利用状況を改善し、ガーベッジコレクションに要するオーバーヘ ッド或いは休止時間を削減することにより、メモリを比較的必要としないJAV A仮想マシン構造のためのさらなる利点を提供するものである。ネットワーク製 品のためのインターネットチップや、セルラーフォーンプロセッサ、その他の通 信用集積回路或いは他の低電力、低コストの用途例えば埋め込み(embedded)プロ セッサや、ポータブル装置など大きなメモリ伴う高コストが受け入れられないよ うな環境に於いてハードウェアプロセッサ100が有利である。 大きなメモリが可能であるような環境に於いても、ガーベッジコレクションの ためのハードウェアサポートは、バリアの実施に関連するオーバーヘッドを減少 させ、メモリの有効利用を促進し、ガーベージコレクタの再配置のための休止時 間を減少させることができる。特に、ハードウェアプロセッサ100は、JAV A仮想マシン構造の枠組みの中で、ガーベッジコレクション方法のための利点を 提供する。しかしながら、本明細書の記載に基づき、当業者であれば、インター プリットされたJ ITコンパイラJAVA仮想マシン構造やその他の非JAVA仮想マシン構造を 含む様々なJAVA仮想マシン構造の変形例に思い至るであろう。 本明細書に於いて、仮想マシンとは、命令セットを有し様々なメモリ領域を用 いる、現実のコンピュータと同様な抽象的なコンピュータを意味する。仮想マシ ンの使用は、仮想マシン構造によって実行されるプロセッサ構造に依存しない仮 想マシン命令のセットを規定する。一般に、仮想マシン構造はハードウェアプロ セッサ100のようなハードウェアによって、インタープリットされたJITコ ンパイラ構造の場合のようにソフトウェアとして構成され、或いはハードウェア 及びソフトウェアの組み合わせとして構成される。各仮想マシン命令は、実行さ れるべき特定の演算を規定する。仮想マシンは、仮想マシン命令を生成するため に用いられる或いは仮想マシンの実現の基礎となるようなコンピュータ言語を理 解する必要がない。仮想マシン命令のための特定のフォーマットを理解するのみ でよい。ある実施例に於いては、仮想マシン命令はJAVA仮想マシン命令から なる。各JAVA仮想マシン命令は命令特定情報、オペランド、その他必要な情 報をエンコードする1つまたは複数のバイトを含む。 ある実施例に於いては、図1のハードウェアプロセッサ100は、バイトコー ドを含むJAVA仮想マシン命令を処理する。ハードウェアプロセッサ100は バイトコードの多くを直接的に実行する。しかしながら、バイトコードのあるも のの実行は、マイクロコードとして実行される。Lindholm & Yellen,"The JAVATM Virtual Machine Specificatlon"(Addison-Wesley,1996),ISBN0-201-63452 -Xは、JAVA仮想マシン命令の例としてのセットを含み、この文献に言及する ことを以て、その内容の全てを本明細書の一部とするものとする。ハードウェア プロセッ サ100によりサポートされた仮想マシン命令の特定のセットは、本発明の重要 な要素ではない。しかしながら、仮想マシン命令に関して、当業者であれば仮想 マシン命令の特定のセットを変更したり、JAVA仮想マシン使用を変更するこ とができる。 ある実施例に於いては、ハードウェアプロセッサ100はI/Oバス及びメモ リインターフェイスユニット110、命令キャッシュ125を含む命令キャッシ ュユニット120、非高速から高速トランスレータキャッシュ131を含む命令 デコードユニット130、一体化された実行ユニット140、スタックキャッシ ュ155を含むスタック管理ユニット150、データキャッシュ165を含むデ ータキャッシュユニット160、及びプログラムカウンタ及びトラップコントロ ールロジック170を含む。本明細書に記載されているガーベッジコレクション のサポートの特徴は、主にプログラムカウンタ及びトラップコントロールロジッ ク170に於けるある程度の追加のサポートを備えた実行ユニット140の整数 ユニット142及びレジスタ144に見ることができ、ここで追加のサポートと しては、トラッピングストアに続き、プログラムカウンタに次のJAVA仮想マ シン命令に進ませるためのサポートを含む。ある実施例に於いては、非高速から 高速へのトランスレータキャッシュ131は、整数ユニット142のハードウェ アライトバリアロジックのためのポインタ依存性を促進する。これらのユニット のそれぞれについて以下に詳しく説明する。 図2は、例えばハードウェアプロセッサ100上に部分的に規定され、かつ部 分的に実行可能とされるようなJAVAアプリケーション環境のソフトウェア及 びハードウェア要素の相互関係を示している。JAVAアプリケーション/アプ レットソフトウェア210は、AWTクラス241、ネット及びI/Oクラス2 42、JAVA OSウィンドウズ24 3、JAVA OSグラフィックス248、TCP244、NFS245、UD P246、IP247、イーサーネット222、キーボード249、及びマウス 221ソフトウェア要素を含むアプレット/アプリケーションプログラミングイ ンターフェイス220を規定するソフトウェア要素を利用するもので、ある実施 例に於いてはJAVAバイトコードを含む。図2に示された実施例に於いては、 JAVA OSグラフィックス248及びイーサーネット222ソフトウェア要 素はまた、ベースラインJAVA仮想マシン使用により規定されたものを越えた 拡張バイトコードをも含む。埋め込みアプリケーションプログラミングインター フェイス(EAPI)230の要素は、ファンデーションクラス(foundation cl ass)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の実施例としてのハードウェアプロセ ッサ100に関して以下に記載されているガーベッジコレクションの構造的特徴 は、特にジェネレーション的ガーベッジコレクション方法に適合している。しか しながら、本明細書の記載に基づき、当業者は、非ジェネレーション的コレクタ 構造、インクリメント式マーク短縮コレクタ、コピーコレクタの再配置に対して 制限された休止時間サポートの応用が可能であることに容易に思い至り得るもの である。 図3Aは、より複雑なシステムを構成するためのハードウェアプロセッサ10 0に対するいくつかの可能なアドオンを示している。NTSCエンコーダ30、 MPEG302、イーサーネットコントローラ303、VIS304、ISDN 305、I/Oコントローラ306、ATMアセンブリ/リアセンブリ307及 び無線リンク308からなる8つの機能のいずれをサポートする回路も、本発明 のハードウェアプロセッサ100と同一のチップ内に集積化することができる。 さらに、当業者であれば容易に理解できるように、上記したアドオン回路のい ずれかを備えたハードウェアプロセッサ100の実施例を含むハードウェアプロ セッサ100が組み込まれた様々なコンピュータシステムに思い至り得ることが できよう。例としてのコンピュータシステム100は、物理的なメモリ(RAM 及びまたはROM)、コンピュータ読み取り可能なメディアのアクセスデバイス (ディスク、CD−ROM、テープ及びまたはメモリ技術に基づくコンピュータ 読み取り可能メディアアクセスデバイスなど)、入出力インターフェイス(キー ボード及びまたはポインティングデバイス或いはディスプレイデバイスなどのた めのインターフェイス)及び通信デバイスまたはインターフェイスを含む。適当 な通信デバイス及びまたはインターフェイスとしては、ネットワーク或いはテレ フォニーに基づく通信、公共スイッチネットワークの有線または無線のものを含 む通信ネットワークとのインターフェイス或いは 専用ネットワークへのインターフェイスを含む。本発明のある実施例に於いては 、JAVAバイトコードを含む命令ストリームが、ハードウェアプロセッサ10 0により実行されるべく、このような通信デバイスまたはインターフェイスを介 して送信または受信される。ガーベッジコレクションのための構造的サポート ハードウェアプロセッサ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に対してオペレートするaputfleld quick命令などの)ポインタストア のストアデータvalue及びobjectrefターゲットは、32ビットガーベッジコレク ションページマスクにより効果的にマスクされ、それ自身objectrefであるvalue が、ターゲットオブジェクトが存在するのとは異なるガーベッジコレクションペ ージに向けられているか否かを決定するために比較される。このようにガーベッ ジコレクションページのサイズは仮想メモリページサイズに依存しない。さらに 、ガーベッジコレクションページは、仮想的なメモリのサポートを伴わないよう な低コスト、低電力消費ポータブルデバイスの用途やインターネット装置の用途 などのようなコンピュータシステムやオペレーティングシステム環境に於いて提 供することが可能である。図4の実施例に於いては、レジスタGC CONFIGは、4 キロバイトから8メガバイトの範囲のガーベッジコレクションページサイズのプ ログラマブルな定義を可能にするが、当業者であれば、このような記載に基づき 、様々に異なるページサイズのガーベッジコレクションが構成可能であることが 容易に理解できよう。 レジスタGC CONFIGはまた、ジェネレーション間ポインタストアトラップマト リックスをプログラム可能に規定するためのフィールドWB VECTORを含む。フ ィールドWB VECTORは、ストアデータvalueに対応するポインタデータジェネレー ション及びそのobjectrefターゲットに対応するターゲットオブジェクトジェネ レーションを有するポインタストアがトラップするであろうジェネレーションの 対をエンコードする。図4の実施例に於いては、フィールドWB VECTORは、ガー ベッジコレクショントラップが望まれるようなポインタデータ及びターゲットオ ブジェクトジェネレーション対の1ビット表示の4×4マトリックスを有効に規 定する。他の実施例として、より大きな或いはより小さなマトリックスを規定し たり、(no trap,gc notifyl,gc notify2及びgc notify3 等の)他の状態をエンコードすることも可能である。 図4の実施例に於いて、ターゲットオブジェクトのobjectrefの2ビットタグ は、それにストアされるべきvalueの2タグビットと連結されることによりフィ ールドWB VECTOR内への4ビットインデックスを形成する。2ビットタグのそれ ぞれは、以下に説明するようなジェネレーションメンバーシップ情報をエンコー ドする。フィールドWB VECTORのインデックス付けされたビットは、ライトバリ アが対応するポインタストアをトラップすべきか否かをエンコードする。フィー ルドWB VECTORは、(ポインタデータジェネレーション及びターゲットオブジェク トジェネレーションが等しくないすべてのポインタストアとしての)全てのジェ ネレーション間ポインタストア、(ジェネレーション間及びジェネレーション内 を問わず)あらゆるポインタストア、或い(古いジェネレーションオブジェクトへ の若いジェネレーションのポインタのストアとしての)より若いジェネレーショ ンストア等のトラップをエンコードするためにプログラム可能にコンフィギュア することができる。一般に、任意な度合いを以て複雑化されたジェネレーション 対のトラッピングがサポートされる。図4に示された実施例では、4ジェネレー ションまでがサポートされているが、当業者であれば、この記載に基づき、より 多数のジェネレーションのための必要な変更に思い至ることができよう。 ある実施例に於いては、フィールドGC PAGE MASK及びフィールドWB VECTORは 、ポインタストアに対するライトバリアの挙動をプログラム可能に規定する。特 に、以下に記載されるように、ハードウェアプロセッサ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_VECT0Rによってヒープに対するストアのプログラム可能なフ ィルタリングが提供され、ライトバリア430によって、ハードウエアプロセッ サ100は、コレクション時ではなく、変異プロセス410のストア時に於いて 、ジェネレーション間であるようなポインタストアを特定することができる。そ のためにカードマーキングなる用語は、コレクション時にコレクタプロセス42 0により用いられるガーベッジコレクショントラップハンドラ440の実施例に より提供されるカードテーブルなどの記憶領域の種類について記述的である。カ ードマーキングなる用語の使用は、ポインタまたはリテラルデータがストアされ ているか否かを問わずすべてのストアがトラップされる必要があることを意味す るものではない。 図4は、ポインタストアのトラッピングに基づくガーベッジヘコレクションペ ージのためのサポートを示す。フィールドGC_PAGE_MASKは、aputfield_quick等 のポインタストア命令のストアデータポインタvalue及びターゲットobjectrefを 比較するためのプログラマブルマスクを提供する。ライトバリア430は、ガー ベッジコレクションページがマッチしない場合には、ポインタストアをトラップ する。フィールドGC_PAGE_MASKにより提供される追加のストアフィルタリングは 、コレクタプロセス420の実施例によって古いジェネレーションの中断を伴わ ない収集のために用いられるHudsonのトレーンアレゴリズムに於いて、ハードウ エア上で実現されるコレクタプロセス420のために特に有用 である。Hudson and Moss,"Incremental Collection of Mature Objects",Proc eedings of International Workshop on Memory Management,St.Malo,France( 16-18 Septemper,1992)を参照されたい。当業者であれば、以上の記載から、フ ィールドGC_PAGE_MASKにより規定されるガーベッジコレクションページサイズが 、Hudsonのトレーンアレゴリズムに於いて、列車の客車を規定するために用いら れることが容易に理解できよう。 例として、aputfield_quickバイトコードのシンタックス及びそれによるハー ドウエアプロセッサ100の作動を以下に説明する。 操作内容 ガーベッジコレクションチェックについて、オブジェクトのフィ ールドを設定する。 フォーマットスタック ,objectref,value 詳細 参照型でなければならないobjectref及び同じく参照型でなけれ ばならないvalueがオペランドスタックからポップされる。valueは、ob jectrefにより参照されるクラスインスタンスへの特定のオフセットに 書き込まれる。オフセットの値は、(offsetbytel<<8)|offsetbyte2で ある。 実行時例外 objectrefがnullである場合、aputfield_quickはNullPointerExc eptionをスローする。各objectref及びvalueの最上位2桁は、4ビット インデックスを構成するために連結される。このインデックスは、GC_C ONFIG レジスタの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オペランドバイトを 置換する。フィールドのタイプは、putfield_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トラップハンドラが適切なガー ベッジコレク ションチェックを実行する。ある直接的なトラップハンドラの実現では、arrayr efはaastoreトラップハンドラ内のオペランドスタックの一番上にストアされ、 バイトコードシーケンス:dup、getfield_quick #0、aputfield_quick #0が実行 され、適切なチェックがなされ、必要であればトラップがなされる。タグ付けされた参照及びオブジェクトのフォーマット 第5図は、ハードウエアプロセッサ100において表現されているようなオブ ジェクト参照(objectref)の一実施例を示している。objectrefの3つのビット をガーベッジコレクションの指示のために使用することができる。特に、フィー ルドGC_TAGは、上述したように、ライトバリア430がポインタストアをトラッ プするかどうかを決定するため、レジスタフィールドGC_CONFIG.WB_VECTORへの インデックスの一部を形成する。第5図の実施例において、フィールドGC_TAGは 、上述したように、ライトバリア430によって使用されるジェネレーションメ ンバーシップ情報をエンコードする。別のハンドルビットHは、オブジェクトが objectrefによって直接参照されているか、又はハンドル(handle)を通して間 接的に参照されているかを示す。ハンドルは、別のレベルの間接的手続きが発生 するという代償はあるが、メモリオブジェクトのリロケーションをそれらを指定 するポインタ(又はobjectrefs)を大量に更新することなく容易に実現する参照 メソッド(referencing method)を提供する。これらのフィールドはどちらもハ ードウエアプロセッサ100の整数ユニット142(第1図)に与えられる前は マスキングされている。 ハードウエアプロセッサ100の一実施例では、オブジェクト600はヘッダ 部610及びインスタンス変数ストレージ部620を含むメモリにおいて表現さ れる。第6A図は、そのような実施例の1つを示して いる。ヘッダ部610は32ビットワードを含んでおり、この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及びWANTビ ットを保持するべくビット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バイトコードが、対応する高速擬似命令(例えば、put field_quick、putfield2_quick、又はaputfield_quick、及びputstatic_quick、 putstatic2_quick、又はaputstatic_quick)によって動的に置き換えられる。ど のバイトコードで置換するかは、バイトコードがその上で処理されるフィールド のタイプに依存する。例えば、参照型(type reference)のフィールド上で動作 するように決められたputfieldバイトコードは、aputfield_quickバイトコード によって動的に置換される。高速擬似命令バイトコードによる置換は、上記で示 した引例に述べられているような関連する非高速バイトコードが初めて実行され るときになされるローディング(loading)及びリンキング(linking)を利用す るが、ガーベッジコレクションにとってより重要なのは、ポインタ依存高速バイ トコードによる動的な置換によって、ハードウエアプロセッサ100のような仮 想マシン命令プロセッサがデータ型に依存しないストアバイトコードのポインタ ストア型プログラム出現(pointer storing program occurrence)と非ポインタ ストア型プログラム出現(non-pointer storing program occurrence)とを識別 することが可能になるということである。ポインタ依存バイトコードによる置換 により、ストアのトラッピングの回数が減少する。これは、ポインタストアバイ トコード擬似命令(即ち、aputstatic_quick又はaputfield_quick)のみしかライ トバリアの実行に関わる必要がないからである。 動的なバイトコードの置換の一実施例について第7図を参照して説明する。第 7図は、ハードウエアプロセッサ100の一部のブロック図である。ハードウエ アプロセッサ100は、一実施例ではスタックキャッ シュ155(第1図参照)において表現されるオペランドスタック723、命令 デコーダ135、非高速から高速へのトランスレータキャッシュ131、トラッ プ論理回路170、ソフトウエアサーチコード31、32及び33、及び実行ユ ニット140を含んでいる。非高速から高速へのトランスレータキャッシュ13 1は、命令及びデータプロセッサ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,invokeinterfa ce,invokespecial,invokestatic,invokevirtual,ldc,ldc_w,ldc2_w,mult ianewarray,new,putfield,及びputstatic。これらのバイトコードは、ハード ウェアプロセッサ100の一実施例では、高速擬似命令を有する。例えばputfie ld,putstatic及びaastoreのような非高速ストア指向バイトコードに対して、タ ーゲットオブジェクトフィールドに対応するコンスタントプールエントリの解決 (resolution)により、その解決によってポインタストアオペレーションが示さ れる場合は、例えばaputfield_quick(ガーベッジコレクションチェックと共に オブジェクト内に参照フィールドをセットする)又はaputstatic_quick(ガーベ ッジコレクションチェックと共にクラス内に静的な参照フィールドをセットする )による置き換えが可能となる。解決によって参照以外のタイプ(即ち非ポイン タタイプ)のターゲットオブジェクトフィールドが示される場合、置換は別の高 速擬似命令、例えば、putfield_quick(オブジェクト内にフィールドをセットす る)、putfield2_quick(オブジェクト内にロング又はダブルフィールドをセッ トする)、putstatic_quick(クラス内に静的フィールドをセットする)又はput static2_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,...及びP C_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 に対応する場合、スイッチステートメントによって対応するソフトウエア部分3 1がアクセスされる。同様に、識別されたバイトコードが第2のバイトコードI NST_1に対応する場合、スイッチステートメントによって対応するソフトウ エア部分32がアクセスされるようにされる。例示した実施例では、第1のバイ トコードINST_0はputfieldであり、第2のバイトコードINST_1はputsta ticである。識別されたバイトコードが他のバイトコード(説明のため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,putf ield2_quick,aputfield_quick,putstatic_quick,putstatic2_quick及びaputs tatic_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へと渡す。実行ユニット14 0はカレント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はストアターゲッ トオブジェクトフィールドが参照型であり(即ち、putstaticの特定のプログラ ム出現がポインタストアである)、データセットDATA_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 instance)も、同様に取り扱われる。例えば、関連するPC値0 x000200を有する非高速バイトコード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及びstor_da taオペランドの各々の上位2ビットを繋げることによって4ビットのインデック スを形成する。このインデックスはレジスタGC_CONFIGの16ビットフィールドW B_VECTORからビットを選択する。選択されたビットがセットされている場合、ト ラップgc_notifyが生成される。しかしながら、objectref及びstore_dataオペラ ンドのマスクされた部分の比較によって第2のトリガーも生成される。マスクは 、レジスタGC_CONFIGのフィールドGC_PAGE_MASK(即ちビット27:16)によ ってプログラム可能に定義される。この第2のトリガはプロセッサ状態レジスタ PSRのガーベ ッジコレクションページイネーブルビットGCE(garbagecollection pages en abled 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及びstor_dataオペランドのジェネレーションタグ ビット(例えばビット31:30)が等しいことを要求する。最も古いジェネレ ーションのエンコーディングに対するフレキシビリティーを実現するため、レジ スタGC_CONFIGのそのような目的がなければ使用されない4つのビット (例えば31:28)を用いて、フィールドGEN_PAGE_CHECK_ENABLEをエンコー ドすることもできる。このファイルされた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はobjectrefが古いジェネレ ーション820のオブジェクトを示しているものとして識別する。この実施例で は、ビット31は効果的に無視され得る。より多くの数のジェネレーションに対 する実施例は当業者には明らかであろう。フィールドWB_VECTORの内容に基づき 、ライトバリア430は古いジェネレーション820のオブジェクトから若いジ ェネレーション810のオブジェクトへのポインタがストアされるときは常にガ ーベッジコレクショントラップハンドラ440をトリガする。この実施例では、 PSR.GCEビツトは0にセットされ、フィールドGC_PAGE_MASKの内容に基づくライ トバリア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)集めることができるた め、よく使用される。このアルゴリズムは、ライトバリアを用いて、最も古いジ ェネレーション内の異なるメモリ領域(“車両(cars)”)間の参照を追跡する ことにより作動する。ハードウエアプロセッサ100による実現においては、こ れらの“車両”は2の累乗個の境界において整合された固定された2の累乗個の 大きさの定められた領域として定義される。フィールドGC_PAGE_MASKはこのクラ スのガーベッジコレクションアルゴリズムに対するライトバリア430の動作を 定義する。プロセッサ状態レジスタビットPSR.GCEが1にセットされている場合 、ガーベッジコレクションページ境界(フィールドGC_PAGE_MASKによって定義さ れる)を横切るポインタストアは全て、ライトバリア430によるガーベッジコ レクショントラップハンドラ440のトリガーを引き起こす。そのような実施例 では、ガーベッジコレクショントラップハンドラ440は管理を行う。ページ( “車両”)の大きさはレジスタGC_CONFIGのフィールドGC_PAGE_MASKに基づいて プログラム可能に定義される。4Kバイト乃至8Mバイトのページ範囲が上述し た実施例においてサポートされる。他のコレクタ ライトバリアに依存するいくつかのリアルタイムガーベッジコレクタが開発さ れている。これらのガーベッジコレクタの実装は、ライトバリア430のポイン タに依存する特徴を有効に利用することを可能とする。Steeleによって提 案されているようなインクリメント的マスクスイープコレクタも、ライトバリア 430のポインタ依存特性を有効に利用し得る(Guy L.Steele,Multiprocessi ng Compactifylng Garbge Collection,Communications of the ACM,18(9)(197 5)参照)。 本発明を様々な実施例に基づいて説明してきたが、これらの実施例は例示的な ものであり、発明の範囲はこれらの実施例に限定されないことが理解されるだろ う。第1命令、第2命令、第3命令などのクレームで使用される用語は識別のた めのものであって、命令の特定の順番を要求するものと理解されるべきではない 。説明した実施例に対し様々な変形、変更、追加及び改良が可能である。例えば 、本発明をJAVAプログラミング言語及びJAVA仮想マシンに関連する実施 例に基づいて説明してきたが、本発明はそれらに限定されるものではなく、様々 なプロセッサ環境に対するシステム、製品、方法、及び装置を包含するものであ る。 更に、いくつかの実施例は、ハードウエアとして説明してきたが、ソフトウエ ア(例えばインタープリタ、ジャストインタイムコンパイラ(just-in-time com piler)など)による仮想マシーン命令プロセッサの具現が可能であり、そのよ うなプロセッサは、ジェネレーション間ポインタストアトラップマトリクス、オ ブジェクト参照ジェネレーションタグ付け、ジェネレーション間ポインタストア トラップマトリクス及びオブジェクト参照ジェネレーションタグ付けに応答する ライトバリア、ガーベッジコレクショントラップハンドラ、及び/又はライトバ リアによりサポートされたポインタ非依存命令のポインタ依存命令による選択的 動的置換のための機能を含むことができる。上述した又は他の変形、変更、追加 、及び改良は特許請求の範囲に画定される本発明の範囲に入るものである。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ビシン、サンジェイ アメリカ合衆国カリフォルニア州94087・ サニーベイル・マネアベニュー 1055・ア パートメント #89 【要約の続き】 アを提供することが可能となる。

Claims (1)

  1. 【特許請求の範囲】 1.内部に形成されたオブジェクトにそれへのオブジェクト参照を介してアクセ ス可能であるような動的割り当てストレージと、 プログラム可能に定義されたガーベッジコレクションページマスクと、 ガーベッジコレクションページ境界横断ポインタストアに対するライトバリア とを含み、 前記ライトバリアは、それに関連付けられた第1及び第2のポインタのそれぞ れの選択された部分が異なる場合、ストア命令をトラップし、前記第1ポインタ は前記ストア命令のターゲットオブジェクトを参照し、前記第2ポインタはそこ へストアされるオブジェクト参照データであり、前記それぞれ選択された部分は 、前記プログラム可能に定義されたガーベッジコレクションページマスクの内容 によって定義されることを特徴とする装置。 2.前記プログラム可能に定義されたガーベッジコレクションページマスクがガ ーベッジコレクションページサイズを定義することを特徴とする請求項1に記載 の装置。 3.前記プログラム可能に定義されたガーベッジコレクションページマスクが前 記ターゲットオブジェクト参照及び前記オブジェクト参照データの前記それぞれ の選択された部分の比較のためのビット状の比較窓を定義することを特徴とする 請求項1に記載の装置。 4.前記第1及び第2のポインタが各々最上位部、最下位部、及びそれらの間の 中間部を含み、 前記プログラム可能に定義されたガーベッジコレクションページマスクが、前 記第1及び第2ポインタの前記最上位部を通過させるように定義された最上位部 を有する複合マスクのプログラム可能に定義可能な中間部分を定義し、それによ って前記上部及び前記中間部のマスクされて いない部分が前記ストアオペレーションのトラップのために比較されることを特 徴とする請求項1に記載の装置。 5.前記ライトバリアが、ガーベッジコレクションページレジスタフィールドに 応答して前記ガーベッジコレクションページマスクをエンコードするマスク及び 比較論理を含んでいることを特徴とする請求項1に記載の装置。 6.前記ライトバリアがポインタストア依存ハードウエアライトバリアを含み、 そのポインタストア依存性が、ポインタ非依存ストア命令のストアターゲットフ ィールドタイプの実行時間解決に基づいて、前記ポインタ非依存ストア命令をポ インタ依存ストア命令によって置き換えることによって与えられることを特徴と する請求項1に記載の装置。 7.更に、前記プログラム可能に定義されたガーベッジコレクションページマス クの表現を含む仮想マシン命令プロセッサを含み、 前記ライトバリアが前記仮想マシーン命令プロセッサ上で実行可能なポインタ 依存ストア命令コードを含み、 前記ポインタ依存ストア命令コードの実行が、前記ターゲットオブジェクト参 照及び前記オブジェクト参照データのそれぞれのマスクされた部分のビット状比 較に基づいて、前記ポインタ依存ストア命令の1つの特定の実行がガーベッジコ レクションページ境界横断ポインタのストアを行うか否かを判定し、もしそうで あればガーベジコレクションフォールトハンドラにトラップすることを特徴とす る請求項1に記載の装置。 8.前記仮想マシーン命令プロセッサがハードウエアプロセッサを含んでおり、 仮想マシーン命令の少なくともサブセットがそれによって直接実行可能であるこ とを特徴とする請求項7に記載の装置。 9.前記仮想マシーン命令プロセッサがハードウエアプロセッサ上で実行可能な そのインタプリタによる実現を(interpreted implementation) 含み、 前記ガーベッジコレクションページマスクが前記ハードウエアプロセッサにア クセス可能なストレージ内で表現されていることを特徴とする請求項7に記載の 装置。 10.前記仮想マシーン命令プロセッサがハードウエアプロセッサ上で実行可能 なそのジャストインタイムコンパイラによる実現を含み、 前記ガーベッジコレクションページマスクが前記ハードウエアプロセッサにア クセス可能なストレージ内で表現されていることを特徴とする請求項12に記載 の装置。 11.前記仮想マシーン命令プロセッサが、データタイプの実行時間解決に基づ いて、ポインタ非依存ストア命令コードを前記ポインタ依存ストア命令コードに 動的に置き換えることをもって、前記ライトバリアをポインタストアに制限し、 前記プログラム可能に定義されたガーベッジコレクションページマスクは、前 記ライトバリアによるトラップを、更にガーベッジコレクションページ境界横断 ポインタストアに制限することを特徴とする請求項7に記載の装置。 12.前記ライトバリアの実装と、前記プログラム可能に定義されたガーベッジ コレクションページマスクの表現とを含む仮想マシーン命令プロセッサと、 前記仮想マシーン命令プロセッサによって実行可能な命令を含むフォールトハ ンドラとを含み、 前記ライトバリアは、実行することによってガーベッジコレクションページ境 界横断ポインタをストアするようなターゲットオブジェクト及びストアデータを 有するようなストア命令の実行時に前記フォールトハンドラをトリガすることを 特徴とする請求項1に記載の装置。 13.前記フォールトハンドラの前記命令が想起セットへのストアのための命 令を含むことを特徴とする請求項12に記載の装置。 14.前記仮想マシーン命令プロセッサによって実行可能な命令のジェネレーシ ョン的コレクタプロセスを更に含み、 前記フォールトハンドラが、前記ジェネレーション的コレクタプロセスによっ て使用されるように、想起セットの表現にトラップされたストアデータを識別す るための情報をストアするべく、前記仮想マシーン命令プロセッサによって実行 可能な命令を含んでいることを特徴とする請求項12に記載の装置。 15.前記ターゲットオブジェクト参照及び前記オブジェクト参照データの前記 それぞれ選択された部分のマスキング及び比較のための論理回路を有する実行ユ ニット及び前記プログラム可能に定義されたガーベッジコレクションページマス クのレジスタによる表現を含むハードウエアプロセッサを更に有することを特徴 とする請求項1に記載の装置。 16.ハードウエアプロセッサ上で実行可能なソフトウエア仮想マシーン命令プ ロセッサプログラムを更に含み、前記ソフトウエア仮想マシーン命令プロセッサ プログラムは前記プログラム可能に定義されたガーベッジコレクションページマ スクを表現するためのコンピュータによって読み取り可能なストレージを定義す ると共に、前記ターゲットオブジェクト参照及び前記オブジェクト参照データの 前記それぞれ選択された部分のマスキング及び比較のためのプログラム命令を含 んでいることを特徴とする請求項1に記載の装置。 17.ガーベッジコレクションページ境界横断ポインタストアをトラップするた めの方法であって、 コンピュータで読取り可能なストレージ内にガーベッジコレクションページマ スクを形成する過程と、 ポインタ依存ストア命令の特定の実行に関連付けられた第1及び第2 のポインタをマスキングする過程であって、前記第1ポインタは前記ポインタ依 存ストア命令のターゲットオブジェクト参照であり、前記第2ポインタは前記ポ インタ依存ストア命令のオブジェクト参照データであり、該マスキングは前記し たガーベッジコレクションページマスクの内容に基づいてなされる該マスキング 過程と、 前記第1及び第2ポインタのそれぞれのマスクされていない部分を比較し、前 記第1及び第2ポインタが各々同じガーベッジコレクションページ上のそれぞれ のストレージを参照しているか否か判定する過程と、 前記比較に於ける不一致結果に基づいてトラップハンドラをトリガする過程と を含むことを特徴とする方法。 18.前記比較に於ける一致結果に基づいてトラップすることなく前記ポインタ 依存ストア命令の前記特定の実行を完了することを特徴とする請求項17に記載 の方法。 19.前記トラップハンドラの動作が、 前記ポインタ依存ストア命令に対応する想起セットエントリをストアする過程 を含むことを特徴とする請求項17に記載の方法。 20.前記トラップハンドラの動作が、 前記ポインタ依存ストア命令をエミュレートする過程を含むことを特徴とする 請求項17に記載の方法。 21.ストアターゲットフィールドタイプの実行時間決定に基づいてポインタ非 依存命令のプログラム出現をポインタ依存命令に選択的に変換する過程と、 前記マスキング及び前記比較を概ね前記ポインタ依存命令に対してのみ行う過 程とを含むことを特徴とする請求項17に記載の方法。 22.その上で実行可能な変異及びガーベッジコレクタプロセスを有する仮想マ シン命令プロセッサに於いてガーベッジコレクションページ境 界横断ポインタストアをトラップするためのアーキテクチャ的サポートであって 、 プログラム可能に定義されたガーベッジコレクションページマスクと、前記プ ログラム可能に定義されたガーベッジコレクションページマスクに応答するライ トバリア手段とを含み、 前記変異プロセスのストア命令の評価によって(1)前記ストア命令がポイン タストアへと解決され、且つ(2)前記ストア命令のターゲットメモリオブジェ クトと前記ストアのオブジェクト参照データによって識別されるメモリオブジェ クトのいづれもが同じガーベッジコレクションページ内にある場合、ガーベッジ コレクションフォールトハンドラーがトリガされ、 ガーベッジコレクションページ境界は前記プログラム可能に定義されたガーベ ッジコレクションページマスクによって定義されることを特徴とするアーキテク チャ的サポート。 23.前記ライトバリア手段が仮想マシーン命令プロセッサによって実行可能な ポインタ依存ストア命令を含んでおり、前記ポインタ依存ストア命令は前記ライ トバリアをポインタストアに限定することを特徴とする請求項22に記載のアー キテクチャ的サポート。 24.前記ポインタ依存ストア命令が非高速バイトコードの高速擬似命令を含ん でいることを特徴とする請求項23に記載のアーキテクチャ的サポート。 25.前記ライトバリア手段が論理回路を含み、 前記論理回路は前記ストア命令の特定の実行に関連付けられた第1及び第2ポ インタの部分を効果的にマスキングすると共に、前記第1及び第2ポインタのマ スキングされていない部分をビット単位で比較し、 前記第1ポインタは前記ストア命令の前記ターゲットメモリオブジェ クトを識別し、前記第2ポインタは前記ストア命令の前記データであり、 前記論理回路は前記比較の相違結果に基づいてトラップハンドラをトリガする ことを特徴とする請求項22に記載のアーキテクチャ的サポート。 26.前記ライトバリア手段がポインタストア依存ハードウエアライトバリアを 含んでおり、そのポインタストア依存性はポインタ非依存ストア命令を、該ポイ ンタ非依存ストア命令のストアターゲットフィールドタイプの実行時間解決に基 づいてポインタ依存ストア命令で置き換えることによって与えられることを特徴 とする請求項22に記載のアーキテクチャ的サポート。
JP54615898A 1997-04-23 1998-04-21 ガーベッジコレクションページ境界横断ポインタストアをトラップするためのライトバリアシステム及び方法 Expired - Lifetime JP4104668B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/841,544 US5845298A (en) 1997-04-23 1997-04-23 Write barrier system and method for trapping garbage collection page boundary crossing pointer stores
US08/841,544 1997-04-23
PCT/US1998/007623 WO1998048352A1 (en) 1997-04-23 1998-04-21 Write barrier system and method for trapping garbage collection page boundary crossing pointer stores

Publications (2)

Publication Number Publication Date
JP2000513851A true JP2000513851A (ja) 2000-10-17
JP4104668B2 JP4104668B2 (ja) 2008-06-18

Family

ID=25285147

Family Applications (1)

Application Number Title Priority Date Filing Date
JP54615898A Expired - Lifetime JP4104668B2 (ja) 1997-04-23 1998-04-21 ガーベッジコレクションページ境界横断ポインタストアをトラップするためのライトバリアシステム及び方法

Country Status (5)

Country Link
US (1) US5845298A (ja)
EP (1) EP0914632B1 (ja)
JP (1) JP4104668B2 (ja)
DE (1) DE69802652D1 (ja)
WO (1) WO1998048352A1 (ja)

Families Citing this family (93)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6049810A (en) * 1997-04-23 2000-04-11 Sun Microsystems, Inc. Method and apparatus for implementing a write barrier of a garbage collected heap
US5930807A (en) * 1997-04-23 1999-07-27 Sun Microsystems Apparatus and method for fast filtering read and write barrier operations in garbage collection system
US6199075B1 (en) * 1997-05-30 2001-03-06 Sun Microsystems, Inc. Method and apparatus for generational garbage collection of a heap memory shared by multiple processors
US6513156B2 (en) * 1997-06-30 2003-01-28 Sun Microsystems, Inc. Interpreting functions utilizing a hybrid of virtual and native machine instructions
US6144965A (en) * 1997-09-24 2000-11-07 Sony Corporation Performing memory management in an object-oriented programming environment
US6317796B1 (en) * 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
US6021415A (en) * 1997-10-29 2000-02-01 International Business Machines Corporation Storage management system with file aggregation and space reclamation within aggregated files
US6070173A (en) * 1997-11-26 2000-05-30 International Business Machines Corporation Method and apparatus for assisting garbage collection process within a java virtual machine
US6247020B1 (en) * 1997-12-17 2001-06-12 Borland Software Corporation Development system with application browser user interface
US6308185B1 (en) * 1998-03-06 2001-10-23 Sun Microsystems, Inc. Methods and apparatus for generational dynamic management of computer memory
US6093216A (en) 1998-05-29 2000-07-25 Intel Corporation Method of run-time tracking of object references in Java programs
US6421689B1 (en) * 1998-06-30 2002-07-16 Oracle Corporation Moderately conservative, mostly copying 2 space garbage collector in the nursery of a generational memory manager
US6131191A (en) * 1998-07-21 2000-10-10 Intel Corporation Code implants for compilers
US6327701B2 (en) * 1998-09-15 2001-12-04 Sun Microsystems, Inc. Method and apparatus for finding bugs related to garbage collection in a virtual machine
US6279148B1 (en) * 1998-10-13 2001-08-21 Sun Microsystems, Inc. Method and apparatus for supporting efficient programming in dynamic pointer-safe languages
GB2345355A (en) * 1998-12-30 2000-07-05 Ibm Garbage collection in a Java virtual machine
US6629113B1 (en) 1999-06-30 2003-09-30 International Business Machines Corporation Method and system for dynamically adjustable and configurable garbage collector
US6725241B1 (en) * 1999-03-31 2004-04-20 International Business Machines Corporation Method and apparatus for freeing memory in a data processing system
US6701520B1 (en) * 1999-05-11 2004-03-02 International Business Machines Corporation Preventing garbage collection of objects in object oriented computer programming languages
US7389305B1 (en) * 1999-06-01 2008-06-17 Fair Isaac Corporation System and method for managing a database
US6424977B1 (en) 1999-08-19 2002-07-23 Sun Microsystems, Inc. Train-algorithm-based garbage collector employing reduced oversized-object threshold
US7096238B2 (en) 1999-08-19 2006-08-22 Sun Microsystems, Inc. Dynamic feedback for determining collection-set size
US6434577B1 (en) 1999-08-19 2002-08-13 Sun Microsystems, Inc. Scalable-remembered-set garbage collection
US6449626B1 (en) 1999-08-19 2002-09-10 Sun Microsystems, Inc. Reduced-cost remembered-set processing in a train-algorithm-based garbage collector
US6434576B1 (en) 1999-08-19 2002-08-13 Sun Microsystems, Inc. Popular-object handling in a train-algorithm-based garbage collector
US6415302B1 (en) 1999-08-19 2002-07-02 Sun Microsystems, Inc. Train-algorithm-based garbage collector employing farthest-forward-car indicator
US6185581B1 (en) * 1999-08-19 2001-02-06 Sun Microsystems, Inc. Train-algorithm-based garbage collector employing fixed-size remembered sets
US6349314B1 (en) 1999-09-29 2002-02-19 Motorola, Inc. Adaptive scheduler for mark and sweep garbage collection in interactive systems
WO2001044947A1 (en) * 1999-12-17 2001-06-21 Sun Microsystems, Inc. Method and apparatus for monitoring a cache for 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
US6529919B1 (en) 2000-02-15 2003-03-04 Sun Microsystems, Inc. Incremental class unloading in a train-algorithm-based garbage collector
US6836782B1 (en) * 2000-06-12 2004-12-28 Sun Microsystems, Inc. Method and apparatus for implementing modular garbage collectors
US6738875B1 (en) 2000-07-31 2004-05-18 Microsoft Corporation Efficient write-watch mechanism useful for garbage collection in a computer system
US6865585B1 (en) * 2000-07-31 2005-03-08 Microsoft Corporation Method and system for multiprocessor garbage collection
CA2421591C (en) 2000-09-13 2011-08-23 Geodesic Systems, Incorporated Conservative garbage collectors that can be used with general memory allocators
US6874074B1 (en) * 2000-11-13 2005-03-29 Wind River Systems, Inc. System and method for memory reclamation
GB2369694B (en) * 2000-11-29 2002-10-16 Sun Microsystems Inc Efficient memory modification tracking
GB2369690B (en) * 2000-11-29 2002-10-16 Sun Microsystems Inc Enhanced protection for memory modification tracking
US7350200B2 (en) * 2001-03-29 2008-03-25 Intel Corporation Method and system of controlling dynamically compiled native code size
CA2346766A1 (en) * 2001-05-07 2002-11-07 Ibm Canada Limited-Ibm Canada Limitee Efficient locking for thread-safe self-modifying code
GB2378778B (en) * 2001-08-13 2005-03-23 Ibm Computer system with heap and card table
US6912554B2 (en) * 2001-11-14 2005-06-28 Omron Corporation Method and apparatus for garbage collection using advanced marking techniques and restricted barrier to protect the data
JP3939975B2 (ja) * 2001-12-14 2007-07-04 松下電器産業株式会社 ガベージコレクション装置、ガベージコレクション方法及びガベージコレクションプログラム
US8042189B2 (en) * 2002-03-20 2011-10-18 Research In Motion Limited System and method to force a mobile device into a secure state
WO2003079196A2 (en) 2002-03-20 2003-09-25 Research In Motion Limited System and method of secure garbage collection on a mobile device
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
US7539713B2 (en) 2002-11-05 2009-05-26 Sun Microsystems, Inc. Allocation of likely popular objects in the train algorithm
US7035884B2 (en) * 2002-11-05 2006-04-25 Sun Microsystems, Inc. Placement of allocation trains in the train algorithm
US6999979B2 (en) * 2002-11-05 2006-02-14 Sun Microsystems, Inc. Efficient encoding of references into a collection set
US7188129B2 (en) 2002-11-15 2007-03-06 Sun Microsystems, Inc. Merging trains in a collector based on the train algorithm
US7209935B2 (en) * 2002-11-27 2007-04-24 Sun Microsystems, Inc. Avoiding remembered-set maintenance overhead for memory segments known to be in a collection set
US7069280B2 (en) 2002-12-06 2006-06-27 Sun Microsystems, Inc. Collection-tick mechanism for a collector based on the train algorithm
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
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
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
JP4116877B2 (ja) * 2002-12-26 2008-07-09 富士通株式会社 ヒープサイズ自動最適化処理方法,ヒープサイズ自動最適化装置およびそのプログラム
US7069281B2 (en) 2003-02-24 2006-06-27 Sun Microsystems, Inc. Efficient collocation of evacuated objects in a copying garbage collector using variably filled local allocation buffers
US7146390B2 (en) 2003-02-24 2006-12-05 Sun Microsystems, Inc. Staging the processing of remembered-set entries as part of collection based on the train algorithm
US7096329B2 (en) * 2003-02-27 2006-08-22 Sun Microsystems, Inc. Better placement of objects promoted into a generation managed by the train algorithm
US7062519B2 (en) * 2003-02-27 2006-06-13 Sun Microsystems, Inc. Incremental scanning of enormous objects to improve scheduling and pause-time behavior of garbage collection
US20040181782A1 (en) * 2003-03-13 2004-09-16 Piotr Findeisen System and method for optimizing memory usage by locating lingering objects
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
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
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
US20050081190A1 (en) * 2003-09-30 2005-04-14 International Business Machines Corporation Autonomic memory leak detection and remediation
US7404182B1 (en) 2003-10-03 2008-07-22 Sun Microsystems, Inc. Deferring and combining write barriers for a garbage-collected heap
US7702663B2 (en) * 2004-01-05 2010-04-20 International Business Machines Corporation Breaking read barrier to apply optimizations
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
US8131955B2 (en) * 2004-04-15 2012-03-06 Microsoft Corporation Ephemeral garbage collection using a tracking mechanism on a card table to determine marked bundles
US7620943B1 (en) * 2004-06-30 2009-11-17 Sun Microsystems, Inc. Using class properties to segregate objects in a generation managed by the train algorithm
US7519640B1 (en) * 2004-06-30 2009-04-14 Sun Microsystems, Inc. Better placement of dying objects in a generation managed by the train algorithm
US7483930B1 (en) * 2004-07-29 2009-01-27 Sun Microsystems, Inc. Method and apparatus for maintaining an object-based write barrier to facilitate garbage-collection operations
US7676801B1 (en) 2004-08-31 2010-03-09 Sun Microsystems, Inc. Scanning of evacuated objects in a generation managed by the train algorithm
US7191307B1 (en) * 2004-12-14 2007-03-13 Sun Microsystems, Inc. Memory management unit technique to detect cross-region pointer stores
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
US7647458B1 (en) * 2004-12-30 2010-01-12 Azul Systems, Inc. Garbage collection
US8452938B1 (en) 2004-12-30 2013-05-28 Azul Systems, Inc. Garbage collection with memory quick release
WO2006128112A2 (en) * 2005-05-25 2006-11-30 Terracotta, Inc. Clustering server providing virtual machine data sharing
US7548940B2 (en) * 2005-06-10 2009-06-16 International Business Machines Corporation Generational real-time garbage collection
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
US7840950B2 (en) * 2006-03-09 2010-11-23 International Business Machines Corporation Programmatic compiler optimization of glacial constants
US7840612B2 (en) * 2006-10-23 2010-11-23 Research In Motion Limited Methods and apparatus for concurrently executing a garbage collection process during execution of a primary application program
WO2008057557A2 (en) * 2006-11-06 2008-05-15 Rambus Inc. Memory system supporting nonvolatile physical memory
KR20080085574A (ko) * 2007-03-20 2008-09-24 삼성전자주식회사 비휘발성 메모리의 가비지 컬렉션을 위한 장치 및 방법
US20090006507A1 (en) * 2007-06-27 2009-01-01 Mingnan Guo System and method for ordering reclamation of unreachable objects
US20120072638A1 (en) * 2010-09-16 2012-03-22 Unisys Corp. Single step processing of memory mapped accesses in a hypervisor
US8447793B2 (en) * 2011-06-04 2013-05-21 International Business Machines Corporation Efficient remembered set for region-based garbage collectors
US10089235B1 (en) 2017-07-28 2018-10-02 Citrix Systems, Inc. Dynamic trim processing with disk caching

Family Cites Families (10)

* 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
US4775932A (en) * 1984-07-31 1988-10-04 Texas Instruments Incorporated Computer memory system with parallel garbage collection independent from an associated user processor
US4989134A (en) * 1987-03-20 1991-01-29 Hewlett-Packard Company Method and apparatus for enhancing data storage efficiency
US5136706A (en) * 1987-04-30 1992-08-04 Texas Instruments Incorporated Adaptive memory management system for collection of garbage in a digital computer
US4907151A (en) * 1988-09-30 1990-03-06 Digital Equipment Corporation System and method for garbage collection with ambiguous roots
US5088036A (en) * 1989-01-17 1992-02-11 Digital Equipment Corporation Real time, concurrent garbage collection system and method
US5321834A (en) * 1989-11-28 1994-06-14 Xerox Corporation Method and system for reclaiming unreferenced computer memory space
US5218698A (en) * 1991-11-22 1993-06-08 Aerojet-General Corporation Garbage collection system for a symbolic digital processor
US5560003A (en) * 1992-12-21 1996-09-24 Iowa State University Research Foundation, Inc. System and hardware module for incremental real time garbage collection and memory management
US5367685A (en) * 1992-12-22 1994-11-22 Firstperson, Inc. Method and apparatus for resolving data references in generated code

Also Published As

Publication number Publication date
WO1998048352A1 (en) 1998-10-29
EP0914632B1 (en) 2001-11-28
WO1998048352A9 (en) 1999-03-25
US5845298A (en) 1998-12-01
JP4104668B2 (ja) 2008-06-18
EP0914632A1 (en) 1999-05-12
DE69802652D1 (de) 2002-01-10

Similar Documents

Publication Publication Date Title
JP4104668B2 (ja) ガーベッジコレクションページ境界横断ポインタストアをトラップするためのライトバリアシステム及び方法
JP4130481B2 (ja) ポインタ依存擬似命令置換機構を含むライトバリアシステム及び方法
EP0914633B1 (en) Generation isolation system and method for garbage collection
JP3881702B2 (ja) 部分的に再配置されたオブジェクトのソース及び目標インスタンスに関する書込みバリアを含む有界休止時間ガーベッジコレクションシステム及び方法
JP3957770B2 (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
US6415302B1 (en) Train-algorithm-based garbage collector employing farthest-forward-car indicator
US5930807A (en) Apparatus and method for fast filtering read and write barrier operations in garbage collection system
US6434577B1 (en) Scalable-remembered-set garbage collection
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
US7035884B2 (en) Placement of allocation trains in the train algorithm
US20020161792A1 (en) Garbage collector employing multiple-car collection sets
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
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

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20071019

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080129

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20080318

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080326

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110404

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120404

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120404

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130404

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130404

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140404

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term