JP4104668B2 - ガーベッジコレクションページ境界横断ポインタストアをトラップするためのライトバリアシステム及び方法 - Google Patents
ガーベッジコレクションページ境界横断ポインタストアをトラップするためのライトバリアシステム及び方法 Download PDFInfo
- Publication number
- JP4104668B2 JP4104668B2 JP54615898A JP54615898A JP4104668B2 JP 4104668 B2 JP4104668 B2 JP 4104668B2 JP 54615898 A JP54615898 A JP 54615898A JP 54615898 A JP54615898 A JP 54615898A JP 4104668 B2 JP4104668 B2 JP 4104668B2
- 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.)
- Expired - Lifetime
Links
- 230000004888 barrier function Effects 0.000 title claims description 83
- 238000000034 method Methods 0.000 title claims description 79
- 230000015654 memory Effects 0.000 claims description 102
- 230000001419 dependent effect Effects 0.000 claims description 43
- 230000008569 process Effects 0.000 claims description 31
- 230000004044 response Effects 0.000 claims description 14
- 230000035772 mutation Effects 0.000 claims description 8
- 230000000873 masking effect Effects 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 6
- 238000011156 evaluation Methods 0.000 claims description 4
- 230000001960 triggered effect Effects 0.000 claims 1
- 238000004422 calculation algorithm Methods 0.000 description 16
- 239000011159 matrix material Substances 0.000 description 14
- 230000008901 benefit Effects 0.000 description 9
- 238000001914 filtration Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 7
- 230000003068 static effect Effects 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 5
- 101100128278 Mus musculus Lins1 gene Proteins 0.000 description 3
- 238000013459 approach Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 230000001934 delay Effects 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 238000004904 shortening Methods 0.000 description 3
- 241000286819 Malo Species 0.000 description 2
- 238000007792 addition Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000013467 fragmentation Methods 0.000 description 2
- 238000006062 fragmentation reaction Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- PEDCQBHIVMGVHV-UHFFFAOYSA-N Glycerine Chemical compound OCC(O)CO PEDCQBHIVMGVHV-UHFFFAOYSA-N 0.000 description 1
- 238000012152 algorithmic method Methods 0.000 description 1
- 239000000872 buffer Substances 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000005056 compaction Methods 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 239000003471 mutagenic agent Substances 0.000 description 1
- 230000002000 scavenging effect Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 0.000 description 1
- 238000010408 sweeping Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
- G06F12/0269—Incremental or concurrent garbage collection, e.g. in real-time systems
- G06F12/0276—Generational garbage collection
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99944—Object-oriented database structure
- Y10S707/99945—Object-oriented database structure processing
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99956—File allocation
- Y10S707/99957—Garbage collection
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
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、Haskell、Miranda、Oberon等のアルゴリズム言語にとって特に魅力的である。これらの言語はデータ共有や、遅延実行などを行い、手続き型言語に比較して、より予測困難な実行順序を伴う。ガーベッジコレクション及びそのための古典的なアルゴリズムについては、Jones & Lins,“Garbage Collection:Algorithms for Automatic Dynamic Memory Manegement”,pp.1-41 Wiley(1996)を参照されたい。
3つの古典的なガーベッジコレクション方法として、参照カウンティング(reference counting)、マークスイープ(mark-sweep)、コピストレージ回復(copying storage reclamation)等の方法がある。第1の参照カウンティング法は、アクティブメモリオブジェクト或いはルート参照位置から各メモリオブジェクトへの参照即ちポインタの数のカウントを継続的に維持することに基づく。新たなメモリオブジェクトが割り当てられ、それに対してポインタが割り付けられると、メモリオブジェクトの参照カウントは1にセットされる。その後、このメモリオブジェクトにポインタが参照するようにセットされる度毎に、メモリオブジェクトの参照カウントが1ずつ増大させられる。メモリオブジェクトに対する参照が削除或いは上書きされると、参照カウントが1ずつ減らされる。参照カウントが0であるメモリオブジェクトは到達不能であって、ガーベッジとして収集される。参照カウント式のガーベッジコレクタの実施態様は、通常各メモリオブジェクトに参照カウントと呼ばれる追加のフィールドを有しており、新たなオブジェクト、オブジェクトの削除或いはポインタのアップデートの機能の一部としてのカウンタの増減を行う機能を有する。
それに対して、トレーシングコレクタ(tracing collector)法は、生きた即ち参照可能なメモリオブジェクトを特定するために、メモリの参照チェーンを横断することを含む。このようなトレーシングコレクタ法の一つとして、メモリの参照チェーンを横断して生きたメモリオブジェクトを識別しマークするようなマークスイープ法がある。マークされていないメモリはガーベッジであって、回収され、別のスイープフェイズの間にフリープールに戻される。マークスイープガーベッジコレクタ法は通常、各メモリオブジェクトにマークビットと呼ばれる追加のフィールドを有している。マークコンパクトコレクタ(mark-compact collector)は、伝統的なマークスイープ法に対して短縮(compaction)の機能を付加する。短縮は、生きたオブジェクトを再配置し、フラグメンテーションを削減する利点がある。参照カウント法も短縮を用いることができる。
他のトレーシング方法、即ちコピーコレクションは、メモリまたはその一部を2つの半空間に分割し、一方に現在のデータを記憶し。他方に古いデータを記憶する。コピーガーベッジコレクションは、これらの2つの半空間の役割を逆転することにより開始される。コピーコレクタは次に、古い半空間FromSpace内の生きたオブジェクトを横断して、到達可能なオブジェクトを新たな半空間ToSpaceにコピーする。FromSpace内の全ての生きたオブジェクトを横断して、かつコピーした後、データ構造のレプリカがToSpace内に存在する。要するに、コピーコレクタはガーベッジの中から生きたオブジェクトを探し出すことになる。コピーコレクションの有意義な副次的効果は、生きたオブジェクトがToSpace内に短縮され、フラグメンテーションを減少させることである。
ジェネレーション的な方法は次の2つの発見に基づくものである。(1)メモリオブジェクトは通常早死にする。(2)トレーシング方法は比較的長生きのオブジェクトを横断して、コピーし或いは再配置するためにかなりのリソースを消費する。ジェネレーション的なガーベッジコレクション方法は、ヒープを2つまたはそれ以上のジェネレーションに分け、オブジェクトを年齢によって区分し、若いジェネレーションに対して収集の努力を集中し或いは少なくともより熱心に収集する。若いジェネレーションは小さいものであるため、ガーベッジコレクションに関連する中断時間は平均的に短く保たれる。ジェネレーション内のガーベッジコレクションは、コピー、マークスイープ、その他のガーベッジコレクション方法によって行われる。ジェネレーション的なガーベッジコレクションを実施するためには、変異プロセス、ガーベッジコレクタ或いはこれら両者の組み合わせが、ジェネレーション間ポインタを識別し、それらをガーベッジコレクタによってルートセットの一部として取り扱い得るようにすることが重要である。変異とは、コンピュータシステムに於て、ガーベッジコレクションとは別に、有用な仕事を行うプロセスに於てメモリ内の参照チェーンのグラフを変更させるプロセスである。
ジェネレーション間ポインタは、通常変異プロセスポインタ記憶装置またはオブジェクトを含むポインタの昇進(promotion)によって引き起こされる。昇進したジェネレーション間ポインタは、昇進に際するコレクタプロセスによって容易に検出できる。しかしながら、古いジェネレーションをスキャンしてポインタを若いジェネレーションに移すような、多大なコストを要するプロセスを行わない限り、ジェネレーション間ポインタストアを検出するために、ポインタストアをトラップし、記録しなければならない。バリアが良く知られており、通常ページングシステムからなるオペレーティングシステムのサポートにより、ハードウェアとして或いはソフトウェアとして実施される。Jones & Lins,“Garbage Collection:Algorithms for Automatic Dynamic Memory Manegement”,pp.165-74 Wiley(1996)を参照されたい。特に、この文献は、ジェネレーション間ポインタ、ライトバリア、エントリーテーブル、想起されたセット(remembered set)、逐次的なストアバッファ、ハードウェアサポートを伴うページマーキング、仮想メモリサポートを伴うページマーキング及びカードマーキングについて議論している。
ポインタストアチェッキングのためのインラインコードなどのようなソフトウェア技術が用いられた場合、実行時間及びインラインコードスペースのオーバーヘッドが課題となる。ソフトウェアライトバリアの1つの例がUngar(David M.Ungar,“Generation Scavenging:A Non-distruptive High Performance Storage Reclamation Algorithm”,ACMSIGPLAN Notices,19(5),pp.157-67(1984))により提案されている。このライトバリアは、(1)ポインタがストアされつつあるか否か及び(2)ポインタが若いジェネレーションのオブジェクトに向けられ、古いジェネレーションのオブジェクト内にストアされているか否かをチェックするために、ストアをインターセプトする。そのような場合には、古いジェネレーションのオブジェクトのアドレスが、想起されたセットに加えられる。ソフトウェアバリアは、それらが適用される演算に対して、大きなオーバーヘッドを課す。例えば、インラインコードにより提供されるソフトウェアバリアは、ポインタがストアであるか否か、及びポインタがジェネレーション間であるか否かをチェックするための追加の命令レイテンシーを加え、コードの全量を増大させる。コードの増大はキャッシュの性能を損なう。
このようなソフトウェアバリアに代わるものとしては、オペレーティングシステムの仮想メモリページプロテクト機構を用いて、プロテクトされたページのアクセスをトラップしたり、アップデートされたジェネレーション間ポインタフィールドによってオブジェクトを含み得るページのマップとして、ページ変更汚れビット(dirty bits)を用いることがある。このような手法は、通常ポインタストアの識別を延期させ、特にジェネレーション間ポインタストアの識別を遅らせ、コレクションの時まで、全てのストアの中からの特にジェネレーション間ポインタストアの識別を遅れさせる。しかしながら仮想メモリページサイズはガーベッジコレクションサービスにあまり適していないのが一般的である。例えば、ページは、オブジェクトに比較して大きくなりがちであって、仮想メモリ汚れビットは、ポインタストアばかりでなく、関連するページに対するあらゆる変更を記憶する。その結果、ジェネレーション間ポインタを探すためにページをスキャンするためのコストが高くなる。
インラインコードソフトウェアライトバリアに代わる更に別の方法としては、ハードウェアバリアサポートがある。多くのライトバリア法は、ポインタ及び非ポインタストアを区別せず、全てのライトを記録し、コレクションの時までジェネレーション間ポインタについてのチェックを延期するにも拘らず、Symbolics 3600に於けるガーベッジコレクションのためのハードウェアサポートの大幅な使用により、ページマーキングスキームを効率的に実施することができた。Symbolics 3600の3つの特徴がこれを可能にした。第1に、ハードウェアライトバリアはジェネレーション的データに対するポインタでないあらゆるワードを無視した。ジェネレーション的メモリに対する参照をページにストアするときは、ライトバリアハードウェアが、対応するビットをガーベッジコレクションページテーブルに設定する。第2に、タグ付き構造は、オブジェクトの境界を考慮する必要を無くすと同時に、ポインタワードがタグを用いた非ポインタワードから常に区別できることにより、ジェネレーション的ポインタに対するチェックをコレクションの時に行うことができる。Symbolics 3600は2ビットメージャーデータタイプタグ、4ビットマイナータグ及び28ビットアドレスを、36ビットワード内に収容する。最後に、ページは256ワードであって、一般的な仮想メモリページよりも小さく、そのために、コレクションの時にページを高速でスキャンすることができた。Jones & Lins,“Garbage Collection:Algorithms for Automatic Dynamic Memory Manegement”,pp.169-70 Wiley(1996)を参照されたい。この文献は、Symbolics 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,“Incremental Collection of Mature Objects”,Proceedings of International Workshop on Memory Management,St.Malo,France(16-18 Septemper,1992)を参照されたい。
発明の開示
本発明は、ガーベッジコレクタの実施を容易に行い得るようにするようなシステム及び方法及び装置並びにそのようなシステム、方法及び装置を具現するようなコンピュータプログラム製品を提供するものである。特に、本発明は、ガーベッジコレクションページ境界横断ポインタストアをトラップするためのアーキテクチャ的サポート(architectural support)を提供する。ポインタストアが境界を横断するものであるとの識別は、ガーベッジコレクションページサイズを定義するべくプログラム可能にエンコードされるガーベッジコレクションページマスクに応答するストアバリアによってなされる。ライトバリア及びガーベッジコレクションページマスクによれば、ガーベッジコレクションページマスクの、従ってトラップされるべき境界横断ポインタストアプログラム可能な定義が提供され、さまざまなジェネレーション的ガーベッジコレクション方法のためのサポートを備えたガーベッジコレクタの実施態様が提供される。このような方法には、ジェネレーション的に収集されたメモリスペースの成熟した部分を管理するためのトレーンアルゴリズム式方法が含まれる。
ポインタ依存ストア命令置換手段によって、本発明に基づく実施態様において、ポインタストアに対してというだけでなく、プログラム可能に定義されたガーベッジコレクションページ境界を横断するポインタストアに対して、正確なバリアを提供することが可能となる。ここでいうポインタストアの正確な識別は、収集されたメモリ記憶領域に対してインラインにエンコードされたタグを必要とせず、このようなタグをサポートするための標準的でないワードのサイズを必要としない。
本発明は、ガーベッジコレクションページマスクのハードウェアレジスタによる実現及びそのようなハードウェアレジスタの内容に基づくガーベッジコレクショントラップトリが方程式の論理的な実現に特に影響を受ける。しかしながら、交互のストアまたはガーベッジコレクションページマスクのエンコード及びガーベッジコレクショントラップトリガ方程式のファームウェアまたはマイクロコードによる実現も適している。さらに、汎用または特定用途ソフトウェアによる具現も、特にハードウェアプロセッサ上での実行の代わりとなるソフトウェア仮想マシン命令プロセッサの実装において適している。ポインタ依存命令によるポインタ非依存命令の実行時間置き換え(execution 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 collection)のためのサポートを含み、プロセッサ構造に依存しないJAVA仮想マシン命令を直接的に実行する。仮想マシン命令を実行する上でのハードウェアプロセッサ100の性能は、インテルPENTIUMマイクロプロセッサやサンマイクロンステムのULTRASPARCプロセッサ等のハイエンドCPUよりも高い(ULTRASPARCは、カリフォルニア州Mountain Viewに所在するSun Mircrosystemsの商標であり、PENTIUMは、カリフォルニア州Sunnyvaleに所在するIntel Corpの商標である。)。更に、ハードウェアプロセッサ100の性能は、JAVAジャストインタイム(JIT)コンパイラを備えたハイエンドCPUよりも優れている。ハードウェアプロセッサ100は低コストであって、電力消費が少ない。そのため、ハードウェアプロセッサ100はポータブルの用途に示している。
ハードウェアプロセッサ100は、概ねハードウェアとしてJAVA仮想マシン命令プロセッサを構成するものであって、そうでない場合にはソフトウェアインタプリタによって必要とされるような25−50キロバイトの、リードオンリーメモリやランダムアクセスメモリ等のメモリが不要となり、或いは、それを他の用途に転用することができる。ガーベッジコレクションのためのハードウェアサポートは、さらにガーベッジコレクションのためのインラインコード(コンパイラにより提供されるリード及びまたはライトバリアサポート)を低減し、限定されたメモリの利用状況を改善し、ガーベッジコレクションに要するオーバーヘッド或いは休止時間を削減することにより、メモリを比較的必要としないJAVA仮想マシン構造のためのさらなる利点を提供するものである。ネットワーク製品のためのインターネットチップや、セルラーフォーンプロセッサ、その他の通信用集積回路或いは他の低電力、低コストの用途例えば埋め込み(embedded)プロセッサや、ポータブル装置など大きなメモリ伴う高コストが受け入れられないような環境に於いてハードウェアプロセッサ100が有利である。
大きなメモリが可能であるような環境に於いても、ガーベッジコレクションのためのハードウェアサポートは、バリアの実施に関連するオーバーヘッドを減少させ、メモリの有効利用を促進し、ガーベージコレクタの再配置のための休止時間を減少させることができる。特に、ハードウェアプロセッサ100は、JAVA仮想マシン構造の枠組みの中で、ガーベッジコレクション方法のための利点を提供する。しかしながら、本明細書の記載に基づき、当業者であれば、インタープリットされたJITコンパイラJAVA仮想マシン構造やその他の非JAVA仮想マシン構造を含む様々なJAVA仮想マシン構造の変形例に思い至るであろう。
本明細書に於いて、仮想マシンとは、命令セットを有し様々なメモリ領域を用いる、現実のコンピュータと同様な抽象的なコンピュータを意味する。仮想マシンの使用は、仮想マシン構造によって実行されるプロセッサ構造に依存しない仮想マシン命令のセットを規定する。一般に、仮想マシン構造はハードウェアプロセッサ100のようなハードウェアによって、インタープリットされたJITコンパイラ構造の場合のようにソフトウェアとして構成され、或いはハードウェア及びソフトウェアの組み合わせとして構成される。各仮想マシン命令は、実行されるべき特定の演算を規定する。仮想マシンは、仮想マシン命令を生成するために用いられる或いは仮想マシンの実現の基礎となるようなコンピュータ言語を理解する必要がない。仮想マシン命令のための特定のフォーマットを理解するのみでよい。ある実施例に於いては、仮想マシン命令はJAVA仮想マシン命令からなる。各JAVA仮想マシン命令は命令特定情報、オペランド、その他必要な情報をエンコードする1つまたは複数のバイトを含む。
ある実施例に於いては、図1のハードウェアプロセッサ100は、バイトコードを含むJAVA仮想マシン命令を処理する。ハードウェアプロセッサ100はバイトコードの多くを直接的に実行する。しかしながら、バイトコードのあるものの実行は、マイクロコードとして実行される。Lindholm & Yellen, “The JAVATM Virtual Machine Specification”(Addison-Wesley,1996), ISBN 0-201-63452-Xは、JAVA仮想マシン命令の例としてのセットを含み、この文献に言及することを以て、その内容の全てを本明細書の一部とするものとする。ハードウェアプロセッサ100によりサポートされた仮想マシン命令の特定のセットは、本発明の重要な要素ではない。しかしながら、仮想マシン命令に関して、当業者であれば仮想マシン命令の特定のセットを変更したり、JAVA仮想マシン使用を変更することができる。
ある実施例に於いては、ハードウェアプロセッサ100はI/Oバス及びメモリインターフェイスユニット110、命令キャッシュ125を含む命令キャッシュユニット120、非高速から高速トランスレータキャッシュ131を含む命令デコードユニット130、一体化された実行ユニット140、スタックキャッシュ155を含むスタック管理ユニット150、データキャッシュ165を含むデータキャッシュユニット160、及びプログラムカウンタ及びトラップコントロールロジック170を含む。本明細書に記載されているガーベッジコレクションのサポートの特徴は、主にプログラムカウンタ及びトラップコントロールロジック170に於けるある程度の追加のサポートを備えた実行ユニット140の整数ユニット142及びレジスタ144に見ることができ、ここで追加のサポートとしては、トラッピングストアに続き、プログラムカウンタに次のJAVA仮想マシン命令に進ませるためのサポートを含む。ある実施例に於いては、非高速から高速へのトランスレータキャッシュ131は、整数ユニット142のハードウェアライトバリアロジックのためのポインタ依存性を促進する。これらのユニットのそれぞれについて以下に詳しく説明する。
図2は、例えばハードウェアプロセッサ100上に部分的に規定され、かつ部分的に実行可能とされるようなJAVAアプリケーション環境のソフトウェア及びハードウェア要素の相互関係を示している。JAVAアプリケーション/アプレットソフトウェア210は、AWTクラス241、ネット及びI/Oクラス242、JAVA OSウィンドウズ243、JAVA OSグラフィックス248、TCP244、NFS245、UDP246、IP247、イーサーネット222、キーボード249、及びマウス221ソフトウェア要素を含むアプレット/アプリケーションプログラミングインターフェイス220を規定するソフトウェア要素を利用するもので、ある実施例に於いてはJAVAバイトコードを含む。図2に示された実施例に於いては、JAVA OSグラフィックス248及びイーサーネット222ソフトウェア要素はまた、ベースラインJAVA仮想マシン使用により規定されたものを越えた拡張バイトコードをも含む。埋め込みアプリケーションプログラミングインターフェイス(EAPI)230の要素は、ファンデーションクラス(foundation class)231、JAVA仮想マシン仕様(JAVA Virtual Machine Specification)に基づくJAVA仮想マシン構造250のハードウェア及びソフトウェア要素を含む。
JAVA仮想マシン構造250は、ハードウェアプロセッサ100と、JAVA仮想マシン命令を評価するために該プロセッサ上にて実行可能なトラップコードとを含む。さらに、JAVA仮想マシン構造250は、ガーベッジコレクションについて以下に記載されているようなポインタストアバイトコード及びメモリアクセスバリアを含むような拡張バイトコードのためのハードウェアサポートや、クラスローダ252、バイトコードベリファイア253、スレッドマネージャ254、ガーベッジコレクタ251ソフトウェア及びマイクロカーネル255を含む。JAVA仮想マシン構造250は、JAVA仮想マシン仕様に適合した部分250a及び構造に依存する部分を含む。JAVA仮想マシン仕様はガーベッジコレクションが提供されることを特定しているが、どのようなガーベッジコレクション方法を使うかはその構造に依存する。
JAVA仮想マシン構造250の実施例としてのハードウェアプロセッサ100に関して以下に記載されているガーベッジコレクションの構造的特徴は、特にジェネレーション的ガーベッジコレクション方法に適合している。しかしながら、本明細書の記載に基づき、当業者は、非ジェネレーション的コレクタ構造、インクリメント式マーク短縮コレクタ、コピーコレクタの再配置に対して制限された休止時間サポートの応用が可能であることに容易に思い至り得るものである。
図3Aは、より複雑なシステムを構成するためのハードウェアプロセッサ100に対するいくつかの可能なアドオンを示している。NTSCエンコーダ301、MPEG302、イーサーネットコントローラ303、VIS304、ISDN305、I/Oコントローラ306、ATMアセンブリ/リアセンブリ307及び無線リンク308からなる8つの機能のいずれをサポートする回路も、本発明のハードウェアプロセッサ100と同一のチップ内に集積化することができる。
さらに、当業者であれば容易に理解できるように、上記したアドオン回路のいずれかを備えたハードウェアプロセッサ100の実施例を含む、ハードウェアプロセッサ100が組み込まれた様々なコンピュータシステムに思い至り得ることができよう。例としてのコンピュータシステム100は、物理的なメモリ(RAM及びまたはROM)、コンピュータ読み取り可能なメディアのアクセスデバイス(ディスク、CD−ROM、テープ及びまたはメモリ技術に基づくコンピュータ読み取り可能メディアアクセスデバイスなど)、入出力インターフェイス(キーボード及びまたはポインティングデバイス或いはディスプレイデバイスなどのためのインターフェイス)及び通信デバイスまたはインターフェイスを含む。適当な通信デバイス及びまたはインターフェイスとしては、ネットワーク或いはテレフォニーに基づく通信、公共スイッチネットワークの有線または無線のものを含む通信ネットワークとのインターフェイス或いは専用ネットワークへのインターフェイスを含む。本発明のある実施例に於いては、JAVAバイトコードを含む命令ストリームが、ハードウェアプロセッサ100により実行されるべく、このような通信デバイスまたはインターフェイスを介して送信または受信される。
ガーベッジコレクションのための構造的サポート
ハードウェアプロセッサ100は、ガーベッジコレクションソフトウェアを実行可能なジェネレーション的コレクタ方法を含む様々なガーベッジコレクション方法のための構造的サポートを提供する。特に、ハードウェアプロセッサ100は、プログラマブルストアフィルタリング、タグ付オブジェクト参照及びオブジェクトヘッダフォーマット及び拡張バイトコードサポートを含む。
プログラマブルストアフィルタリング
図4は、ストアをヒープへとプログラマブルフィルタリングするためのサポートを行うスーパバイザライタブルレジスタGC_CONFIGの一実施例を示す。図1に於いて、レジスタGC_CONFIGはレジスタ144に含まれ、実行ユニット140に対してアクセス可能である。ある実施例に於いては、レジスタGC_CONFIGの12ビットは、ページ間ポインタストアチェックのためのページサイズを選択するために用いられるフィールドGC_PAGE_MASKを規定する。フィールドGC_PAGE_MASKの12ビットは、32ビットガーベッジコレクションページマスクのビット23:12として用いられ、追加のさらに8つの上位ビットは、0x3Fとして、さらに下位の12ビットは0x000として規定される。結果として得られる32ビットのガーベッジコレクションページマスクは、プログラマブルガーベッジコレクションページ境界を越えるポインタストアに対するストアバリアを形成するために用いられる。(スタックキャッシュ155により表されるオペランドスタックの最上部に位置するvalue及びobjectrefに対してオペレートするaputfield_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のジェネレーション間ポインタストアトラップマトリックス470の内容により提供される特定のプログラム可能に選択されたストアフィルタリングをサポートするガーベッジコレクショントラップハンドラ440のための適切な構成の種類を理解することができる。ジェネレーション間ポインタストアトラップマトリックス470の例として与えられた内容(図4)に基づく実施例に於いては、ガーベッジコレクショントラップハンドラ440は、ハードウエアプロセッサ100上で実行可能なバイトコードを含み、トラッピングに関する情報を想起セットデータ構造にストアする。この構造は、収集されたメモリスペース450のジェネレーション3,2及び1にそれぞれ対応する想起セット461,462及び463を含む。
別の実施例に於いては、ジェネレーション間ポインタストアマトリックス470の内容が、ジェネレーション間であるか否かを問わず、すべてのポインタストアにトラップするように、プログラム可能に規定される。関連するカードマーキング式の別実施例として与えられたガーベッジコレクショントラップハンドラ440は、ハードウエア100上で実行可能なバイトコードを含み、トラッピングストアに関する情報をカードテーブルデータ構造にストアする。従来のカードマーキング法の構造に比較して、本明細書に記載されたガーベッジコレクションのための構造的サポートによれば、ハードウエアプロセッサ100は、ポインタストアを一般的なストアから区別し、同じくジェネレーション間ポインタを一般的なポインタストアから区別することができる。このような理由により更に別のカードマーキング式実施例に於いては、ジェネレーション間ポインタストアトラップマトリックス470の内容が、ジェネレーション間ポインタストアのみをトラップするようにプログラム可能に規定される。
想起セット式実施例及びカードマーキング式実施例のいずれに於いても、拡張バイトコードサポートにより、ハードウエアプロセッサ100は、以下に詳しく説明するように非ポインタストアからポインタストアを正確に特定することができる。更に、ジェネレーション間ポインタストアトラップマトリックス470、即ちフィールドWB_VECTORによってヒープに対するストアのプログラム可能なフィルタリングが提供され、ライトバリア430によって、ハードウエアプロセッサ100は、コレクション時ではなく、変異プロセス410のストア時に於いて、ジェネレーション間であるようなポインタストアを特定することができる。そのためにカードマーキングなる用語は、コレクション時にコレクタプロセス420により用いられるガーベッジコレクショントラップハンドラ440の実施例により提供されるカードテーブルなどの記憶領域の種類について記述的である。カードマーキングなる用語の使用は、ポインタまたはリテラルデータがストアされているか否かを問わずすべてのストアがトラップされる必要があることを意味するものではない。
図4は、ポインタストアのトラッピングに基づくガーベッジへコレクションページのためのサポートを示す。フィールドGC_PAGE_MASKは、aputfield_quick等のポインタストア命令のストアデータポインタvalue及びターゲットobjectrefを比較するためのプログラマブルマスクを提供する。ライトバリア430は、ガーベッジコレクションページがマッチしない場合には、ポインタストアをトラップする。フィールドGC_PAGE_MASKにより提供される追加のストアフィルタリングは、コレクタプロセス420の実施例によって古いジェネレーションの中断を伴わない収集のために用いられるHudsonのトレーンアレゴリズムに於いて、ハードウエア上で実現されるコレクタプロセス420のために特に有用である。Hudson and Moss,“Incremental Collection of Mature Objects”,Proceedings of International Workshop on Memory Management,St.Malo,France(16-18 Septemper,1992)を参照されたい。当業者であれば、以上の記載から、フィールドGC_PAGE_MASKにより規定されるガーベッジコレクションページサイズが、Hudsonのトレーンアレゴリズムに於いて、列車の客車を規定するために用いられることが容易に理解できよう。
例として、aputfield_quickバイトコードのシンタックス及びそれによるハードウエアプロセッサ100の作動を以下に説明する。
操作内容 ガーベッジコレクションチェックについて、オブジェクトのフィールドを設定する。
フォーマット
スタック
詳細 参照型でなければならないobjectref及び同じく参照型でなければならないvalueがオペランドスタックからポップされる。valueは、objectrefにより参照されるクラスインスタンスへの特定のオフセットに書き込まれる。オフセットの値は、(offsetbyte1<<8)|offsetbyte2である。
実行時例外 objectrefがnullである場合、aputfield_quickはNullPointerExceptionをスローする。各objectref及びvalueの最上位2桁は、4ビットインデックスを構成するために連結される。このインデックスは、GC_CONFIGレジスタの16ビットWB_VECTORフィールドから1ビットを選択する。選択されたビットがセットであれば、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、multianewarray、newarray、putfield、putstatic,及びnewがある。これらの中で、aputfield_quick、aputstatic_quick、及びaastoreのみが上述したWB_VECTOR及び/又はGC_PAGE_MASKの内容に基づいた動的フィルタリングのようなガーベッジコレクションチェックの実行を必要とする。他のものは、例えば適切にジェネレーションメンバーシップタグを初期化するのに使用されるガーベッジコレクションメカニズムを認識していさえすればよい。一実施例では、aastoreバイトコードはエミュレーションルーチンへとトラップし、aastoreトラップハンドラが適切なガーベッジコレクションチェックを実行する。ある直接的なトラップハンドラの実現では、arrayrefは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ワード後に始まっており、オブジェクト600のインスタンス変数を格納する。objectrefの最下位ビットによって、参照が取り扱われる(==1)か又は取り扱われない(==0)かが特定される。一方の選択肢である“取り扱われる”場合のオブジェクトフォーマットが第6B図に示されている。オブジェクト600bが生成されるとき、取り扱われる参照が確立され、その後の全ての参照はオブジェクトにアクセスするべくハンドル、即ちストレージポインタ650bを通過する。このようなサポートは、下層に位置するオブジェクトストレージ(インスタンス変数に対するものを含む)ではなくハンドルをコピーすることによってオブジェクトのリロケーションに伴う代償を軽減するようなガーベッジコレクタに対して提供される。
ポインタ非依存バイトコードの動的置換のための拡張されたバイトコードサポート
ハードウエアプロセッサ100は、実行ユニットに供給されたバイトコードを、その高速擬似命令(quick variants)で動的に置き換えることによってJAVAバイトコードの実行を加速するための特徴を備えている。しかしながら、今から述べるように、高速擬似命令バイトコードによる置換という特徴をハードウエアプロセッサ100において利用して、ポインタ非依存ストアオペレーションバイトコードをポインタ依存ストアオペレーションバイトコードによって動的に置き換え、ガーベッジコレクションに対するライトバリアの実現をより容易にすることができる。
一実施例では、オブジェクト又はクラスにおけるフィールドの設定をするためのputfield及びputstaticバイトコードが、対応する高速擬似命令(例えば、putfield_quick、putfield2_quick、又はaputfield_quick、及びputstatic_quick、putstatic2_quick、又はaputstatic_quick)によって動的に置き換えられる。どのバイトコードで置換するかは、バイトコードがその上で処理されるフィールドのタイプに依存する。例えば、参照型(type reference)のフィールド上で動作するように決められたputfieldバイトコードは、aputfield_quickバイトコードによって動的に置換される。高速擬似命令バイトコードによる置換は、上記で示した引例に述べられているような関連する非高速バイトコードが初めて実行されるときになされるローディング(loading)及びリンキング(linking)を利用するが、ガーベッジコレクションにとってより重要なのは、ポインタ依存高速バイトコードによる動的な置換によって、ハードウエアプロセッサ100のような仮想マシン命令プロセッサがデータ型に依存しないストアバイトコードのポインタストア型プログラム出現(pointer storingprogram occurrence)と非ポインタストア型プログラム出現(non-pointer storing program occurrence)とを識別することが可能になるということである。ポインタ依存バイトコードによる置換により、ストアのトラッピングの回数が減少する。これは、ポインタストアバイトコード擬似命令(即ち、aputstatic_quick又はaputfield_quick)のみしかライトバリアの実行に関わる必要がないからである。
動的なバイトコードの置換の一実施例について第7図を参照して説明する。第7図は、ハードウエアプロセッサ100の一部のブロック図である。ハードウエアプロセッサ100は、一実施例ではスタックキャッシュ155(第1図参照)において表現されるオペランドスタック723、命令デコーダ135、非高速から高速へのトランスレータキャッシュ131、トラップ論理回路170、ソフトウエアサーチコード31、32及び33、及び実行ユニット140を含んでいる。非高速から高速へのトランスレータキャッシュ131は、命令及びデータプロセッサ12と関連メモリ(associative memory)14とを含んでいる。関連メモリ14は、命令識別子メモリ部18、データセットメモリ部20、入力回路22及び出力回路24を含んでいる。
命令デコーダ135は命令キャッシュユニット120から、例えばJAVAバイトコードのような命令ストリームを受信するように接続されている。本発明をJAVAバイトコードに関連して説明するが、本明細書の説明から当業者には理解されるように、別の仮想マシーン環境では、別のタイプの命令の動的な置換を行うための変更も可能である。本明細書中で述べるバイトコード置換という特徴は、上記で示した特許出願においてより一般的に述べられているように、命令パラメータの実行時間解決(execution time resolution)に基づいて命令実行の高速化に一般的に適用可能であるが、以下の説明はポインタ非依存非高速バイトコードをそのポインタ依存高速擬似命令で動的に置換することに焦点をあてると共に、そのような動的な置換の実行を容易にし、ライトバリアの実現を容易にするハードウエアプロセッサ100について特に重点をおいている。
第7図を参照されたい。命令デコーダ135はデコードされたバイトコードをバス11上に出力するとともに、デコードされたバイトコードに対応するプログラムカウンタ(PC)の値をバス13上に出力する。これらのバイトコード及びPC値は実行ユニット140及び命令及びデータプロセッサ12に渡される。更に、PC値は関連メモリ14の入力回路22にも入力される。一般に、PC値の各々はバイトコードの対応するプログラム出現を一意に特定する。オペランドスタック723のトップエントリは命令及びデータプロセッサ12に送られる。
関連メモリ14に於いて、命令識別子メモリ部18は複数(N個)のエントリを含んでいる。これらのN個のエントリの各々は、バイトコード識別子値PC_0,PC_1,PC_2,PC_3,...PC_Nのような対応するバイトコード識別子値をストアすることができる。命令識別子メモリ部18内にストアされたバイトコード識別子値の各々は異なるPC値に対応する。命令識別子メモリ部18の幅はプログラムカウンタの幅に対応して選択される。
データセットメモリ部20もN個のエントリを含んでおり、命令識別子メモリ部18内の各々のエントリがデータセット部20内において関連するエントリを有することができるようになっている。データセットメモリ部20のN個のエントリの各々はDATA_0,DATA_1,DATA_2,DATA_3,...DATA_Nのようなデータセットをストアすることができる。以下により詳細に説明するように、データセットメモリ部20内に格納されたデータセットの各々はバイトコードの対応するプログラム出現の高速擬似命令の実行用データを含む。一実施例では、データセットメモリ部20は4つの32ビットワードの幅を有する。しかしながら、データセットメモリ部20は別の実施例では別の幅を有してもよい。
命令及びデータプロセッサ12はバス11上に出力されたバイトコードをモニタし、バス11上のカレントバイトコードが、対応するデータセットがすぐにアクセス可能であれば高速化された方法で実行可能である非高速バイトコードであるかどうかを判定する。そうである場合、その非高速バイトコードの高速擬似命令が対応するデータセットと共に非高速から高速へのトランスレーターキャッシュ131内にキャッシュされる。一般に、非高速バイトコードは0,1,或いはそれ以上の高速擬似命令を有し得る。JAVA仮想マシン仕様は、以下の非高速バイトコードを記述している:anewarray,checkcast,getfield,getstatic,instanceof,invokeinterface,invokespecial,invokestatic,invokevirtual,ldc,ldc_w,ldc2_w,multianewarray,new,putfield,及びputstatic。これらのバイトコードは、ハードウェアプロセッサ100の一実施例では、高速擬似命令を有する。例えばputfield,putstatic及びaastoreのような非高速ストア指向バイトコードに対して、ターゲットオブジェクトフィールドに対応するコンスタントプールエントリの解決(resolution)により、その解決によってポインタストアオペレーションが示される場合は、例えばaputfield_quick(ガーベッジコレクションチェックと共にオブジェクト内に参照フィールドをセットする)又はaputstatic_quick(ガーベッジコレクションチェックと共にクラス内に静的な参照フィールドをセットする)による置き換えが可能となる。解決によって参照以外のタイプ(即ち非ポインタタイプ)のターゲットオブジェクトフィールドが示される場合、置換は別の高速擬似命令、例えば、putfield_quick(オブジェクト内にフィールドをセットする)、putfield2_quick(オブジェクト内にロング又はダブルフィールドをセットする)、putstatic_quick(クラス内に静的フィールドをセットする)又はputstatic2_quick(クラス内にロング又はダブルの静的フィールドをセットする)、によってなされる。
一般に、対応するデータセットがすぐにアクセス可能であれば高速化された実行が可能であるような非高速バイトコードを、以後、高速擬似命令を有する非高速バイトコードと呼ぶ。高速擬似命令を有する非高速バイトコードは、命令デコーダ135によって提供されるバイトコードのサブセットを形成する。命令及びデータプロセッサ12は、カレントバイトコードの識別部(又は複数の識別部)をデコードすることによりカレントバイトコードが高速擬似命令を有する非高速バイトコードであるかどうかを判定する。高速擬似命令を有する非高速バイトコードのN個までのプログラム出現に対し、命令識別子メモリ及びデータセットメモリ内のエントリによってサポートが与えられる。これらのエントリのいくつかは、対応するプログラム出現がポインタストアへと解決(resolve)される非高速ストア指向(しかしポインタ非依存)バイトコードのポインタ依存高速擬似命令のために使用することができる。
トランスレーターキャッシュ131は、カレントPC値を有するカレントバイトコードに応答して次のように動作する。命令デコーダ135はカレントPC値及びデコードされたカレントバイトコードを実行ユニット140及び命令及びデータプロセッサ12に送る。命令及びデータプロセッサ12はデコードされたバイトコードが高速擬似命令を有する非高速バイトコード、高速擬似命令ロードバイトコード(quick variant load bytecode)或いはリトライバイトコード(retry bytecoe)である場合に作動される。命令デコーダ135によってバス11上に送出されるカレントバイトコードが高速擬似命令を有する非高速バイトコード、高速擬似命令ロードバイトコード又はリトライバイトコードでない場合、命令及びデータプロセッサ12はそのバイトコードに応答せず、代わりにカレントバイトコード及びカレントPC値は実行ユニット140に渡されて実行される。
しかしながら、カレントバイトコードが高速擬似命令を有する非高速バイトコードの場合、命令及びデータプロセッサ12はカレント命令に応答して作動する。一実施例ではバイトコードputfield及びputstaticはデータプロセッサ12を作動させる。作動すると、命令及びデータプロセッサ12はライン21上の信号NO_MATCHの状態を判定する。最初、命令識別子メモリ部18にストアされた命令識別子の値PC_0,PC_1,PC_2,PC_3,...PC_Nが無効値に設定される。別の方法として、命令識別子値に関連づけられた有効なビットをクリアすることもできる。いずれの場合も、入力回路22に入力されたカレントPC値は命令識別子メモリ部18内に格納された命令識別子値のいずれとも一致しない。続いて信号NO_MATCHがアサートされる。カレントPC値と命令識別子値PC_0,PC_1,PC_2,PC_3,...及びPC_Nとの間に一致がないことにより、カレントバイトコードを実行するのに必要なデータセットがそのとき関連メモリ14に格納されていることが示される。そのため、命令及びデータプロセッサ12は、非高速バイトコードを適切な高速擬似命令によって置換するために、まずこのデータセットの位置を特定し取り出さなければならない。
アサートされた信号NO_MATCH及びカレントバイトコードが高速擬似命令を有する非高速バイトコードであるという判定に応答して、命令及びデータプロセッサ12は制御信号TRAPをアサートする。制御信号TRAPはトラップ論理170に送られる。制御信号TRAPに応答して、トラップ論理170は実行ユニット140の動作を一時的に停止し、対応するソフトウエア部分31,32または33がアクセスされるようにする。アクセスされるソフトウエアコード部分は、制御信号TRAPがアサートされるようにした非高速バイトコードに依存する。
一実施例では、トラップ論理170は制御信号TRAPがアサートされるようにしたバイトコードの特定のプログラム出現を確認するためカレントPC値を用いて命令キャッシュユニット120にアクセスする。ソフトウエアによって具現されるスイッチステートメントにより、実行が適切なソフトウエアコード部分に移される(識別されたバイトコードに応答してなされる)。別の実施例では、トラップベクタ(trap vector)のような別の方法により実行を適切なソフトウエアコード部分に移すこともできる。
このようにして、識別されたバイトコードが最初のバイトコードINST_0に対応する場合、スイッチステートメントによって対応するソフトウエア部分31がアクセスされる。同様に、識別されたバイトコードが第2のバイトコードINST_1に対応する場合、スイッチステートメントによって対応するソフトウエア部分32がアクセスされるようにされる。例示した実施例では、第1のバイトコードINST_0はputfieldであり、第2のバイトコードINST_1はputstaticである。識別されたバイトコードが他のバイトコード(説明のためINST_Nとする)に対応する場合、スイッチステートメントは対応するソフトウェアコード部分33がアクセスされるようにする。
ソフトウェアコード部分31,32,...33はそれぞれバイトコードINST_0(例えばputfield)、INST_1(例えばputstatic),...INST_Nを実行するのに必要なデータセットの位置を特定しそれを取り出す働きをする。別の言い方をすると、ソフトウエアコード部分31,32,...33はバイトコードINST_0,INST_1,...INST_Nのそれぞれのプログラム出現に対しコンスタントプールエントリを解決する。いくつかの非高速バイトコード(例えばputfield及びputstatic)は複数の高速擬似命令(例えばputfield_quick,putfield2_quick,aputfield_quick,putstatic_quick,putstatic2_quick及びaputstatic_quick)を有するため、対応するソフトウエアコード部分も適切な高速擬似命令を選択する。対応するコンスタントプールエントリの解決によってストア指向のバイトコード(例えばputfield)の特定のプログラム出現がポインタストアであることが示される場合(例えばストアターゲットオブジェックトフィールドが参照型である場合)は、ポインタ依存高速擬似命令(例えばaputfield_quick)による置き換えが適切である。
ソフトウェアコード部分31,32,...33は更に、取り出したデータセットがオペランドスタック723内にロードされるようにする。ソフトウエアコード部分31,32,...33は取り出されたデータセットがオペランドスタック723内にロードされた後、高速擬似命令ロードバイトコードを命令デコーダ135に出力する。命令デコーダ135は受け取った高速擬似命令ロードバイトコードをデコードする。デコードされた高速擬似命令ロードバイトコードはバス11上に於いて命令及びデータプロセッサ12に送られる。命令及びデータプロセッサ12はバス11上に存在する各高速擬似命令ロードバイトコードを識別し、応答として、前にオペランドスタック723にロードされた対応するデータセットを取り出す。
続いて命令及びデータプロセッサ12はカレントPC値及び取り出したデータセットを関連メモリ14にロードする。一例では、カレントPC値は命令識別子メモリ部18の第1エントリに命令識別子値PC_0として書き込まれ、対応する取り出されたデータセットはデータセットメモリ部20の第1エントリにデータセットDATA_0として書き込まれる。カレントPC値は命令及びデータプロセッサ12からメモリ部18へとバス15を介して送られる。データセットは命令及びデータプロセッサ12からデータセットメモリ部20へとバス17を通じて送られる。メモリ14内の特定のエントリを選択するのに使用されるメソッドは、例えば、ランダム、LRU(最も最近使用したもの)アルゴリズム又はファーストイン・ファーストアウト(FIFO)アルゴリズムとすることができる。
カレントPC値及び取り出されたデータセットがメモリ14に書き込まれた後、命令及びデータプロセッサ12は、ソフトウエアコードが制御信号がアサートされるようにした非高速命令をリトライするようにする。このとき、再度入力回路22に入力されるカレントPC値は、命令識別子メモリ部18内に格納された命令識別子値(例えば命令識別子値PC_0)に一致する。その結果、命令及びデータプロセッサ12はトラップ論理170及び対応するソフトウエアコード部分31,32,...33の1つを通じて対応するデータセットの場所を特定してそれを取り出すという試みをしない。
カレントPC値が命令識別子値PC_0と一致しているため、出力部24は対応するデータセットDATA_0を実行ユニット140へと渡す。実行ユニット140はカレントPC値及び関連するデータセットDATA_0(高速擬似命令バイトコードを含む)を非高速から高速へのトランスレータキャッシュ131から受け取る。それに応じて実行ユニット140は高速擬似命令バイトコードを実行する。
PC値及び高速擬似命令を有する非高速バイトコードに関連するデータセットが関連メモリ14にロードされると、高速擬似命令を有する非高速バイトコードの特定のプログラム出現が、コンスタントプールを解決したり、ソフトウエアコードにアクセスしたりする必要なく実行可能となる。更に、ストア指向バイトコードの特定のプログラム出現に対し、もしその特定のプログラム出現がポインタストアへと解決される場合はポインタ依存高速擬似命令(例えばaputfield_quick)が続いて実行され、もしその特定のプログラム出現が非ポインタ(又はリテラル値)ストアへと解決される場合は非ポインタ高速擬似命令(例えばputfield_quick又はputfield2_quick)が続いて実行される。更に、非高速バイトコードはプログラムイメージにおいてオーバライトされないため、非高速バイトコードはその元の形態で使用可能であり続ける。更に、非高速バイトコードはオーバライトされないため、それを呼み出し専用メモリに格納するようにすることもできる。
以下の例によってハードウエアプロセッサ100の動作がより明確になるだろう。特に、変異プロセス(mutator process)410(第4図)によりポインタストアを選択的にトラップするためのライトバリア430のポインタストア依存の実施例を容易にする上での非高速から高速へのトランスレータキャッシュ131の働きが明確になるだろう。命令デコーダ135は、まず高速擬似命令を有する非高速バイトコード(例えばputstatic)を受け取るが、その非高速バイトコードの特定のプログラム出現は対応するPC値として0x000100を有する。バイトコードputstaticの特定のプログラム出現が命令識別子メモリ部18内に於いて表現されていないとすると、カレントPC値0x000100は、入力回路22によって信号NO_MATCHがアサートされるようにする。信号NO_MATCH及びバイトコードputstaticが高速擬似命令を有する非高速バイトコードであるとの判定に応答して、命令及びデータプロセッサ12は制御信号TRAPをアサートする。トラップ論理170はPC値を用いてカレントバイトコードをバイトコードINST_1(即ち、putstatic)として識別する。カレントバイトコードがバイトコードINST_1として識別されるのに応答してソフトウエアスイッチステートメントにより、対応するソフトウェアコード部分32に実行が移される。
ソフトウエアコード部分32は、続いてストアターゲットオブジェクトフィールドに関連づけられたコンスタントプールエントリを解決し、バイトコードINST_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(即ちputstatic)及びカレントPC値0x000100がそれぞれバス11及び13上で再アサートされるようにする。一実施例では、命令及びデータプロセッサ12は制御信号TRAPがアサートされるようにしたバイトコードに制御を戻すリターンフロムトラップ(ret_from_trap)バイトコードを発行することによってこれを実現する。このとき、入力回路22はカレントPC値と命令識別子値PC_0との間に一致を検出する。それに応答して、関連メモリ14は命令識別子値PC_0に関連するデータセット(即ちポインタに依存する高速擬似命令バイトコードaputstatic_quickを含むデータセットDATA_0)を出力回路24へと供給する。この出力回路24はこのデータセットDATA_0を実行ユニット140に渡し、実行ユニット140はポインタ依存高速擬似命令バイトコードaputstatlc_quickを実行する。
高速擬似命令を有する他の非高速バイトコード及び続いて命令デコーダ135に渡される同じ非高速バイトコードの他のプログラムインスタンス(program instance)も、同様に取り扱われる。例えば、関連するPC値0x000200を有する非高速バイトコードINST_1(即ちputstatic)の別のプログラム出現は、0x000200のPC値が命令識別子メモリ部18にメモリ識別値PC_1として格納され、命令INST_1に関連するデータセットがデータセットメモリ部22データセットDATA_1として格納される結果となる。もしバイトコードputstaticのこの特定のプログラム出現がリテラル値ストアへと解決される場合、命令識別子値PC_1に関連するデータセット(即ちDATA_1)はポインタ依存高速擬似命令ではなく、putstatic2_quickのような高速擬似命令バイトコードINST_1を含むであろう。非高速バイトコードの最初のプログラム出現に関連づけられるデータセット(例えばデータセットDATA_0)は非高速バイトコードINST_1の第2のプログラム出現に関連づけられるデータセット(例えばデータセットDATA_1)とは同じでないようにすることができることに注意されたい。
バイトコードputstaticの2つのプログラム出現を解決することによって、第1のプログラム出現がポインタに依存するストアバイトコードaputstatic_quickに、第2のプログラム出現が非ポインタストアバイトコードputstatic2_quickへと解決され、それによってハードウエアプロセッサ100の非高速から高速へのトランスレータキャッシュ131はライトバリア430をポインタストアに限定する。一実施例では、バイトコードaputstatic_quickは、ガーベッジコレクションチェックと共にターゲットオブジェクト内に参照フィールドを設定する。ハードウエアプロセッサ100によるバイトコードaputfield_quickの評価に関連して上述したように、ライトバリア430(ポインタに依存する高速擬似命令バイトコードによって実現される)はobjectref及びvalueオペランドの各々の最上位の2ビットを繋げることによって4ビットのインデックスを形成する。このインデックスはレジスタGC_CONFIGの16ビットのフィールドWB_VECTORからビットを選択する。選択されたビットがセットされている場合、トラップgc_notifyが生成される。
実行ユニット140(第1図)の一実施例では、バイトコードの評価のための論理回路がレジスタGC_CONFIG(第4図)に接続しており、それによって上述した論理表現を実現している。当業者であれば様々な適切な実現方法が理解されるだろう。
別の実施例では、ライトバリア430(ポインタに依存する高速擬似命令バイトコードによって実現される)はジェネレーション間ストアトラッピングとガーベッジコレクションページ境界横断ポインタストアトラッピングの両方をサポートする。前と同様に、ライトバリア430のこの実施例もobjectref及びstore_dataオペランドの各々の上位2ビットを繋げることによって4ビットのインデックスを形成する。このインデックスはレジスタGC_CONFIGの16ビットフィールドWB_VECTORからビットを選択する。選択されたビットがセットされている場合、トラップgc_notifyが生成される。しかしながら、objectref及びstore_dataオペランドのマスクされた部分の比較によって第2のトリガーも生成される。マスクは、レジスタGC_CONFIGのフィールドGC_PAGE_MASK(即ちビット27:16)によってプログラム可能に定義される。この第2のトリガはプロセッサ状態レジスタPSRのガーベッジコレクションページイネーブルビットGCE(garbagecollection pages enabled bit)によりガードされている。
実行ユニット140(第1図)の一実施例では、レジスタGC_CONFIG(第4図)にバイトコードの評価のための論理回路が接続されており、それによって上記した論理表現が実現されている。当業者には様々な適切な実施方法が理解されるだろう。
ライトバリア430の別の実施例では、ガーベッジコレクションページ境界横断チェックを、集められたメモリスペースの特定の1ジェネレーション又は複数ジェネレーション(典型的には最も古いジェネレーション)に制限するメカニズムが提供される。変形されたページチェックトラッピングの式は、例えば以下の通りである。
このような式は、objectref及びstore_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_quickバイトコードではなく、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及びaputstatic_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.ストアに対するトラップ条件は、
であり、ここでがstore_dataはターゲットオブジェクトにストアされようとしている32ビットポインタであり、objectrefはストアがなされようとしているオブジェクトに対する32ビットポインタである。
5.ハードウエアプロセッサ100がトラップする場合(即ち、ライトバリア430がガーベッジコレクショントラップハンドラ440をトリガする場合)、ハードウエアプロセッサ100の実行はガーベッジコレクショントラップハンドラ440にジャンプする。ある実施例では、ガーベッジコレクショントラップハンドラ440が想起セット830についての情報をストアし、ポインタストアのトラッピングをエミュレートする。
6.ガーベッジコレクションの間、オブジェクトは若いジェネレーション810から古いジェネレーション820に昇格(promoted)するが、昇格したオブジェクトに対する全ての参照のフィールドGC_TAGが更新され、昇格したオブジェクトがより古いジェネレーションの一部であることが反映される。
カードテーブルに基づくジェネレーションコレクタ
カードに基づくジェネレーションコレクタの実施に対し、レジスタGC_CONFIGのフィールドWB_VECTORは0xFFFFにセットされる。これにより、ライトバリア430は全てのポインタストアをヒープへとトラップし、例えばガーベッジコレクショントラップハンドラ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,Multiprocessing Compactifying Garbge Collection,Communications of the ACM,18(9)(1975)参照)。
本発明を様々な実施例に基づいて説明してきたが、これらの実施例は例示的なものであり、発明の範囲はこれらの実施例に限定されないことが理解されるだろう。第1命令、第2命令、第3命令などのクレームで使用される用語は識別のためのものであって、命令の特定の順番を要求するものと理解されるべきではない。説明した実施例に対し様々な変形、変更、追加及び改良が可能である。例えば、本発明をJAVAプログラミング言語及びJAVA仮想マシンに関連する実施例に基づいて説明してきたが、本発明はそれらに限定されるものではなく、様々なプロセッサ環境に対するシステム、製品、方法、及び装置を包含するものである。
更に、いくつかの実施例は、ハードウエアとして説明してきたが、ソフトウエア(例えばインタープリタ、ジャストインタイムコンパイラ(just-in-time compiler)など)による仮想マシーン命令プロセッサの具現が可能であり、そのようなプロセッサは、ジェネレーション間ポインタストアトラップマトリクス、オブジェクト参照ジェネレーションタグ付け、ジェネレーション間ポインタストアトラップマトリクス及びオブジェクト参照ジェネレーションタグ付けに応答するライトバリア、ガーベッジコレクショントラップハンドラ、及び/又はライトバリアによりサポートされたポインタ非依存命令のポインタ依存命令による選択的動的置換のための機能を含むことができる。上述した又は他の変形、変更、追加、及び改良は特許請求の範囲に画定される本発明の範囲に入るものである。
Claims (26)
- 内部に形成されたオブジェクトに各オブジェクトへのオブジェクト参照を介してアクセス可能であるような動的割り当てストレージと、
ガーベッジコレクションページ境界横断ポインタストアをチェックする範囲を決定するための、プログラム可能に定義されたガーベッジコレクションページマスクと、
前記ガーベッジコレクションページ境界横断ポインタストアに対するライトバリアとを含み、
前記ライトバリアは、ストア命令に関連付けられた第1及び第2のポインタのそれぞれの選択された部分が異なる場合、前記ストア命令をトラップし、前記第1ポインタは前記ストア命令のターゲットオブジェクトを参照し、前記第2ポインタは前記ターゲットオブジェクト内へストアされるオブジェクト参照データであり、前記それぞれの選択された部分は、前記プログラム可能に定義されたガーベッジコレクションページマスクの内容によって定義されることを特徴とする装置。 - 前記プログラム可能に定義されたガーベッジコレクションページマスクがガーベッジコレクションページサイズを定義することを特徴とする請求項1に記載の装置。
- 前記プログラム可能に定義されたガーベッジコレクションページマスクが前記ターゲットオブジェクト参照及び前記オブジェクト参照データの前記それぞれの選択された部分の比較を、ビット単位の比較によって行うことを特徴とする請求項1に記載の装置。
- 前記第1及び第2のポインタが各々最上位部、最下位部、及びそれらの間の中間部を含み、
前記プログラム可能に定義されたガーベッジコレクションページマスクが、前記第1及び第2ポインタの前記最上位部を通過させるように定義された最上位部、及びプログラムによって定義可能な中間部を有する複合マスクの前記中間部を定義し、それによって前記上位部及び前記中間部のマスクされていない部分が前記ストア命令のトラップのために比較されることを特徴とする請求項1に記載の装置。 - 前記ライトバリアが、ガーベッジコレクションページレジスタフィールドに応答して前記ガーベッジコレクションページマスクをエンコードするマスク及び比較のための論理回路を含んでいることを特徴とする請求項1に記載の装置。
- 前記ライトバリアが、非ポインタのストアを無視してポインタのストアのみを選択的にトラップするポインタストア選択性を有するハードウエアライトバリアを含み、前記ポインタストア選択性を有するハードウエアライトバリアが、ポインタ非依存ストア命令のストアターゲットフィールドタイプの実行時間解決に基づいて、前記ポインタ非依存ストア命令をポインタ依存ストア命令によって置き換えることによって実現されることを特徴とする請求項1に記載の装置。
- 更に、前記プログラム可能に定義されたガーベッジコレクションページマスクの表現を含む仮想マシン命令プロセッサを含み、
前記ライトバリアが前記仮想マシーン命令プロセッサ上で実行可能なポインタ依存ストア命令コードを含み、
前記ポインタ依存ストア命令コードの実行が、前記ターゲットオブジェクト参照及び前記オブジェクト参照データのそれぞれのマスクされた部分のビット単位の比較に基づいて、前記ポインタ依存ストア命令の1つの特定の実行がガーベッジコレクションページ境界横断ポインタのストアを行うか否かを判定し、もしガーベッジコレクションページ境界横断ポインタのストアを行うのであればガーベジコレクションフォールトハンドラにトラップすることを特徴とする請求項1に記載の装置。 - 前記仮想マシーン命令プロセッサがハードウエアプロセッサを含んでおり、仮想マシーン命令の少なくともサブセットが前記ハードウエアプロセッサによって直接実行可能であることを特徴とする請求項7に記載の装置。
- 前記仮想マシーン命令プロセッサがハードウエアプロセッサ上で実行可能な前記仮想マシーン命令プロセッサのインタプリタによる実現を(interpreted implementation)含み、
前記ガーベッジコレクションページマスクが前記ハードウエアプロセッサにアクセス可能なストレージ内で表現されていることを特徴とする請求項7に記載の装置。 - 前記仮想マシーン命令プロセッサがハードウエアプロセッサ上で実行可能な前記仮想マシーン命令プロセッサのジャストインタイムコンパイラによる実現を含み、
前記ガーベッジコレクションページマスクが前記ハードウエアプロセッサにアクセス可能なストレージ内で表現されていることを特徴とする請求項7に記載の装置。 - 前記仮想マシーン命令プロセッサが、データタイプの実行時間解決に基づいて、ポインタ非依存ストア命令コードを前記ポインタ依存ストア命令コードに動的に置き換えることをもって、前記ライトバリアをポインタストアに制限し、
前記プログラム可能に定義されたガーベッジコレクションページマスクは、前記ライトバリアによるトラップを、更にガーベッジコレクションページ境界横断ポインタストアに制限することを特徴とする請求項7に記載の装置。 - 前記ライトバリアの実装と、前記プログラム可能に定義されたガーベッジコレクションページマスクの表現とを含む仮想マシーン命令プロセッサと、
前記仮想マシーン命令プロセッサによって実行可能な命令を含むフォールトハンドラとを含み、
前記ライトバリアは、実行することによってガーベッジコレクションページ境界横断ポインタをストアするようなターゲットオブジェクト及びストアデータを有するようなストア命令の実行時に前記フォールトハンドラをトリガすることを特徴とする請求項1に記載の装置。 - 前記フォールトハンドラに含められた前記仮想マシーン命令プロセッサによって実行可能な命令が想起セットへのストアのための命令を含むことを特徴とする請求項12に記載の装置。
- 前記仮想マシーン命令プロセッサによって実行可能な命令のジェネレーション的コレクタプロセスを更に含み、
前記フォールトハンドラが、前記ジェネレーション的コレクタプロセスによって使用されるように、想起セットの表現にトラップされたストアデータを識別するための情報をストアするべく、前記仮想マシーン命令プロセッサによって実行可能な命令を含んでいることを特徴とする請求項12に記載の装置。 - 前記ターゲットオブジェクト参照及び前記オブジェクト参照データの前記それぞれの選択された部分のマスキング及び比較のための論理回路を有する実行ユニット及び前記プログラム可能に定義されたガーベッジコレクションページマスクのレジスタによる表現を含むハードウエアプロセッサを更に有することを特徴とする請求項1に記載の装置。
- ハードウエアプロセッサ上で実行可能なソフトウエア仮想マシーン命令プロセッサプログラムを更に含み、前記ソフトウエア仮想マシーン命令プロセッサプログラムは前記プログラム可能に定義されたガーベッジコレクションページマスクを表現するためのコンピュータによって読み取り可能なストレージを定義すると共に、前記ターゲットオブジェクト参照及び前記オブジェクト参照データの前記それぞれの選択された部分のマスキング及び比較のためのプログラム命令を含んでいることを特徴とする請求項1に記載の装置。
- ガーベッジコレクションページ境界横断ポインタストアをトラップするための方法であって、
コンピュータで読取り可能なストレージ内に、ガーベッジコレクションページ境界横断ポインタストアをチェックする範囲を決定するためのガーベッジコレクションページマスクを形成する過程と、
ポインタ依存ストア命令の特定の実行に関連付けられた第1及び第2のポインタをマスキングする過程であって、前記第1ポインタは前記ポインタ依存ストア命令のターゲットオブジェクト参照であり、前記第2ポインタは前記ポインタ依存ストア命令のオブジェクト参照データであり、該マスキングは前記したガーベッジコレクションページマスクの内容に基づいてなされる該マスキング過程と、
前記第1及び第2ポインタのそれぞれのマスクされていない部分を比較し、前記第1及び第2ポインタが各々同じガーベッジコレクションページ上のそれぞれのストレージを参照しているか否か判定する過程と、
前記比較に於ける不一致結果に基づいてトラップハンドラをトリガする過程とを含むことを特徴とする方法。 - 前記比較に於ける一致結果に基づいてトラップすることなく前記ポインタ依存ストア命令の前記特定の実行を完了することを特徴とする請求項17に記載の方法。
- 前記トラップハンドラの動作が、
前記ポインタ依存ストア命令に対応する想起セットエントリをストアする過程を含むことを特徴とする請求項17に記載の方法。 - 前記トラップハンドラの動作が、
前記ポインタ依存ストア命令をエミュレートする過程を含むことを特徴とする請求項17に記載の方法。 - ストアターゲットフィールドタイプの実行時間決定に基づいてポインタ非依存命令のプログラム出現をポインタ依存命令に選択的に変換する過程と、
前記マスキング及び前記比較を前記ポインタ依存命令に対してのみ行う過程とを含むことを特徴とする請求項17に記載の方法。 - 仮想マシン命令プロセッサに於いてガーベッジコレクションページ境界横断ポインタストアをトラップするための装置を実装するためのコンピュータプログラムを格納した媒体であって、
前記仮想マシン命令プロセッサが、前記仮想マシン命令プロセッサ上で実行可能な変異プロセス及びガーベッジコレクタプロセスを有し、
前記装置が、
ガーベッジコレクションページ境界横断ポインタストアをチェックする範囲を決定するための、プログラム可能に定義されたガーベッジコレクションページマスクと、
前記プログラム可能に定義されたガーベッジコレクションページマスクに応答する、前記ガーベッジコレクションページ境界横断ポインタストアに対するライトバリア手段とを含み、
前記変異プロセスのストア命令の評価によって(1)前記ストア命令がポインタストアへと解決され、且つ(2)前記ストア命令のターゲットメモリオブジェクトと前記ストアのオブジェクト参照データによって識別されるメモリオブジェクトのいづれもが同じガーベッジコレクションページ内にある場合、ガーベッジコレクションフォールトハンドラーがトリガされ、
ガーベッジコレクションページ境界は前記プログラム可能に定義されたガーベッジコレクションページマスクによって定義されることを特徴とするコンピュータプログラムを格納した媒体。 - 前記ライトバリア手段が仮想マシーン命令プロセッサによって実行可能なポインタ依存ストア命令を含んでおり、前記ポインタ依存ストア命令は前記ライトバリアをポインタストアに限定することを特徴とする請求項22に記載のコンピュータプログラムを格納した媒体。
- 前記ポインタ依存ストア命令が非高速バイトコードの高速擬似命令を含んでいることを特徴とする請求項23に記載のコンピュータプログラムを格納した媒体。
- 前記ライトバリア手段が論理回路を含み、
前記論理回路は前記ストア命令の特定の実行に関連付けられた第1及び第2ポインタの部分を効果的にマスキングすると共に、前記第1及び第2ポインタのマスキングされていない部分をビット単位で比較し、
前記第1ポインタは前記ストア命令の前記ターゲットメモリオブジェクトを識別し、前記第2ポインタは前記ストア命令の前記データであり、
前記論理回路は前記比較の相違結果に基づいてトラップハンドラをトリガすることを特徴とする請求項22に記載のアーキテクチャ的サポート。 - 前記ライトバリア手段が、非ポインタのストアを無視して処理をポインタのストアのみに限定するポインタストア選択性を有するハードウエアライトバリアを含んでおり、前記ポインタストア選択性を有するハードウエアライトバリアは、ポインタ非依存ストア命令を、該ポインタ非依存ストア命令のストアターゲットフィールドタイプの実行時間解決に基づいてポインタ依存ストア命令で置き換えることによって実現されることを特徴とする請求項22に記載のコンピュータプログラムを格納した媒体。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/841,544 | 1997-04-23 | ||
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 |
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 JP2000513851A (ja) | 2000-10-17 |
JP4104668B2 true 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)
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 |
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 |
US7096238B2 (en) | 1999-08-19 | 2006-08-22 | Sun Microsystems, Inc. | Dynamic feedback for determining collection-set size |
US6434576B1 (en) | 1999-08-19 | 2002-08-13 | Sun Microsystems, Inc. | Popular-object handling in a train-algorithm-based garbage collector |
US6424977B1 (en) | 1999-08-19 | 2002-07-23 | Sun Microsystems, Inc. | Train-algorithm-based garbage collector employing reduced oversized-object threshold |
US6185581B1 (en) * | 1999-08-19 | 2001-02-06 | Sun Microsystems, Inc. | Train-algorithm-based garbage collector employing fixed-size remembered sets |
US6415302B1 (en) | 1999-08-19 | 2002-07-02 | Sun Microsystems, Inc. | Train-algorithm-based garbage collector employing farthest-forward-car indicator |
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 |
US7051056B2 (en) | 2000-09-13 | 2006-05-23 | Veritas Operating Corporation | 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 |
GB2369690B (en) * | 2000-11-29 | 2002-10-16 | Sun Microsystems Inc | Enhanced protection for memory modification tracking |
GB2369694B (en) * | 2000-11-29 | 2002-10-16 | Sun Microsystems Inc | Efficient 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 | 松下電器産業株式会社 | ガベージコレクション装置、ガベージコレクション方法及びガベージコレクションプログラム |
WO2003079196A2 (en) | 2002-03-20 | 2003-09-25 | Research In Motion Limited | System and method of secure garbage collection on a mobile device |
US8042189B2 (en) * | 2002-03-20 | 2011-10-18 | Research In Motion Limited | System and method to force a mobile device into a secure state |
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 |
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 |
US7085790B2 (en) * | 2002-12-06 | 2006-08-01 | Sun Microsystems, Inc. | Advancing cars in trains managed by a collector based on the train algorithm |
US7069280B2 (en) | 2002-12-06 | 2006-06-27 | Sun Microsystems, Inc. | Collection-tick mechanism for a collector based on the train algorithm |
US7024437B2 (en) * | 2002-12-06 | 2006-04-04 | Sun Microsystems, Inc. | Better placement of objects reachable from special objects during collection based on the train algorithm |
US7143124B2 (en) | 2002-12-06 | 2006-11-28 | Sun Microsystems, Inc. | Detection of dead regions during incremental collection |
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 |
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 |
US7062519B2 (en) * | 2003-02-27 | 2006-06-13 | Sun Microsystems, Inc. | Incremental scanning of enormous objects to improve scheduling and pause-time behavior of garbage collection |
US7096329B2 (en) * | 2003-02-27 | 2006-08-22 | Sun Microsystems, Inc. | Better placement of objects promoted into a generation managed by the train algorithm |
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 |
US20060271575A1 (en) * | 2005-05-25 | 2006-11-30 | Harris Steven T | Clustered object state using field set operations |
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 |
US8745315B2 (en) * | 2006-11-06 | 2014-06-03 | Rambus Inc. | Memory Systems and methods supporting volatile and wear-leveled 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)
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 |
-
1997
- 1997-04-23 US US08/841,544 patent/US5845298A/en not_active Expired - Lifetime
-
1998
- 1998-04-21 EP EP98915596A patent/EP0914632B1/en not_active Expired - Lifetime
- 1998-04-21 JP JP54615898A patent/JP4104668B2/ja not_active Expired - Lifetime
- 1998-04-21 WO PCT/US1998/007623 patent/WO1998048352A1/en active IP Right Grant
- 1998-04-21 DE DE69802652T patent/DE69802652D1/de not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
DE69802652D1 (de) | 2002-01-10 |
JP2000513851A (ja) | 2000-10-17 |
US5845298A (en) | 1998-12-01 |
WO1998048352A9 (en) | 1999-03-25 |
EP0914632A1 (en) | 1999-05-12 |
WO1998048352A1 (en) | 1998-10-29 |
EP0914632B1 (en) | 2001-11-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4104668B2 (ja) | ガーベッジコレクションページ境界横断ポインタストアをトラップするためのライトバリアシステム及び方法 | |
JP4130481B2 (ja) | ポインタ依存擬似命令置換機構を含むライトバリアシステム及び方法 | |
EP0914633B1 (en) | Generation isolation system and method for garbage collection | |
US6424977B1 (en) | Train-algorithm-based garbage collector employing reduced oversized-object threshold | |
JP3881702B2 (ja) | 部分的に再配置されたオブジェクトのソース及び目標インスタンスに関する書込みバリアを含む有界休止時間ガーベッジコレクションシステム及び方法 | |
JP3957770B2 (ja) | 部分的に再配置されたオブジェクトのソースインスタンスに関連する書き込みバリアを含む有界休止時間ガーベッジコレクションシステム及びその方法 | |
US6185581B1 (en) | Train-algorithm-based garbage collector employing fixed-size remembered sets | |
US6415302B1 (en) | Train-algorithm-based garbage collector employing farthest-forward-car indicator | |
US6434577B1 (en) | Scalable-remembered-set garbage collection | |
US6434576B1 (en) | Popular-object handling in a train-algorithm-based garbage collector | |
US6449626B1 (en) | Reduced-cost remembered-set processing in a train-algorithm-based garbage collector | |
US5930807A (en) | Apparatus and method for fast filtering read and write barrier operations in garbage collection system | |
US20040111445A1 (en) | Method and mechanism for finding references in a card in time linear in the size of the card in a garbage-collected heap | |
US7062518B2 (en) | Efficiently supporting the existence of long trains in a generation managed by the train algorithm | |
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 | |
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 |