JP2022519169A - ガベージコレクションのマーキングにおける同期依存の軽減 - Google Patents

ガベージコレクションのマーキングにおける同期依存の軽減 Download PDF

Info

Publication number
JP2022519169A
JP2022519169A JP2021539121A JP2021539121A JP2022519169A JP 2022519169 A JP2022519169 A JP 2022519169A JP 2021539121 A JP2021539121 A JP 2021539121A JP 2021539121 A JP2021539121 A JP 2021539121A JP 2022519169 A JP2022519169 A JP 2022519169A
Authority
JP
Japan
Prior art keywords
pointer
garbage collection
address
memory
cas
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.)
Pending
Application number
JP2021539121A
Other languages
English (en)
Inventor
チャン スティーブンス,マオニ
ヘンリ ダスッド,パトリック
Original Assignee
マイクロソフト テクノロジー ライセンシング,エルエルシー
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by マイクロソフト テクノロジー ライセンシング,エルエルシー filed Critical マイクロソフト テクノロジー ライセンシング,エルエルシー
Publication of JP2022519169A publication Critical patent/JP2022519169A/ja
Pending legal-status Critical Current

Links

Images

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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Memory System (AREA)
  • Synchronisation In Digital Transmission Systems (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

メモリの再利用は、ある特定の同期命令を回避するように調整され、データの整合性及び可用性を保持しながら、同時実行ガベージコレクションを高速化する。ガベージコレクションは、もはや使用されていないオブジェクト、又はメモリの他の未使用領域を再利用する。ポインタは、アドレス値を保持するアドレス部分と、特別ビットを有するガベージコレクション部分とに分割される。マーキング・コードは、ガベージコレクション部分のみを書き込み、特別ビットをマーク参照の再配置候補などにセットする。ミューテータ・スレッドは、アドレスを更新するのにポインタ全体を同時に変化させてもよいが、ミューテーションによって、間違った再利用、又は再配置などの動作の失敗が引き起こされることはない。ガベージコレクタにおいて特定の同期命令を回避し、その代わりに異なるアトミック書込みを使用することによって、実行速度が上がる。ミューテータは、ユーザ又はカーネルのアドレス空間内で実行される。ガベージコレクタは、参照が標準の非分割形式であることを予想するコードによって、実行時エラーを回避するために、分割されたポインタとその使用を含んでもよい。

Description

背景
[0001] コンピュータ・プログラミングにおいては、ガベージコレクション(GC)が、自動的なメモリ管理を実現するのに役立つ。当該の「ガベージ」とは、使用するためにプログラムに割り当てられ、そのプログラムでは不要になったが、他のプログラムではまだ使用できないメモリ空間のことである。ガベージコレクタは、後で再割当てするために、メモリのこのような領域を再利用できるよう、こうした領域を識別しようと試みる。
[0002] ガベージコレクションによって、プログラマは不要になったデータ・オブジェクトを手動で解放する必要がなくなり、プログラミングがこれまでよりも容易になる。ガベージコレクションは、何らかの実行時エラーの防止にも役立ち、それにより、データの整合性及び可用性を改善することによってサイバーセキュリティを強化する。多くのプログラミング言語では、ガベージコレクションを必要とするか、それとも選択肢としてガベージコレクションを可能にする。ソフトウェア開発環境によっては、所与のプログラムにおいてガベージコレクションと手動によるメモリ管理との両方が可能になる場合がある。
[0003] ガベージコレクタは、頻繁に若しくは予測できない時点で、又はその両方で実行される場合があり、ユーザ・プログラムの実行が著しく遅くなる可能性があるので、ガベージコレクションの効率的な実装形態は、その優先度を高くすることができる。実際、すべてのガベージコレクタではなくても、ほとんどのガベージコレクタは、ユーザ・プログラムがガベージコレクタと同時に実行されないようにする「ストップ・ザ・ワールド」の手法を利用する場合がある。しかし、ガベージコレクションに費やす時間を単に短縮するだけでは、再利用されるメモリの量を減少させることもあり、したがって、たとえば揮発性メモリ・デバイスと不揮発性メモリ・デバイスとの間でデータを交換するのに費やされる時間が長くなるなど、別の面でユーザ・プログラムの実行性能が低下する可能性がある。
概要
[0004] 本明細書において教示するように、一部のメモリ再利用のツール及びプロセスは、コンピューティング・システムのメモリ管理機能を改善するように調整されている。こうして調整することによって、コンペア・アンド・スワップ命令など、特定の比較的遅い同期命令の使用が削減又は排除される。同時実行ガベージコレクションは、依然として使用されているデータの整合性及び可用性に対するリスクを増やすことなく、測定できる程度に比較的高速に実行することができる。
[0005] 本明細書に提示されるガベージコレクションのいくつかの実施形態は、ガベージコレクション・マーキングのためのプロセッサCAS命令への依存を回避する。回避されるCAS命令には、1つ又は複数のコンペア・アンド・スワップ命令、又はコンペア・アンド・セット命令が含まれ得る。実施形態によっては、アドレス可能ユニット、たとえばバイトを有するデジタル・メモリを含む場合があり、各アドレス可能ユニットは、それぞれのアドレス値を使用して個別にアドレス指定可能である。1つ又は複数のポインタがメモリ内に存在し、各ポインタが、少なくとも2つの隣接するアドレス可能ユニット内に存在する。各ポインタは、アドレス値を保持するアドレス部分、及びこのアドレス部分を除外したガベージコレクション部分を有する。プロセッサは、メモリとの通信動作が可能である。プロセッサは、実行されると、少なくとも1つのアドレス可能ユニットに、ある値をアトミックに書き込む、少なくとも1つの書込み命令を含む命令セットを有する。この書込み命令は、CAS命令を除外する。すなわち、CAS命令の回避について念押しするため、CAS命令の実行が値の書込みを含む場合があっても、CAS命令は、本明細書で使用されるような「書込み命令」とはみなされない。
[0006] 対象となる各実施形態はまた、実行されると、1つ又は複数のそれぞれのポインタの、少なくとも1つ又は複数のアドレス値を変化させるミューテータ・スレッドを含む。一般に、ミューテータ・スレッドを実行すると、ユーザ・プログラムの一部として(又は、カーネルの一部として)何らかの有用な動作を実行することになるが、その作業の本質は、本明細書における教示を理解することを主眼とするものではない。ガベージコレクタとのその潜在的な相互作用について、又具体的には、ガベージコレクタ及びミューテータ・スレッド(又は、複数のミューテータ・スレッド)が、その同時実行中にアドレス値を介してどのように相互作用するかについて、ミューテータ・スレッドがここで最も関連性がある。
[0007] 対象となる各実施形態はまた、ガベージコレクタを含み、これは、ガベージコレクション・マーキング・フェーズにおいて、ミューテータ・スレッドと同時に実行される。ここで使用されているように「同時実行」とは、「時間が少なくとも部分的にオーバラップすること」を意味し、同時実行においては、完全な同時性も可能ではあるが、必要とはされない。ポインタのアドレス部分が、最後にチェックされたときには再利用可能であることが知られていなかったメモリのある領域を特定したことを示すものとして、ガベージコレクタは、書込み命令を使用して、ポインタのガベージコレクション部分に参照マーク・ビットをアトミックにセットする。動作にあたっては、ガベージコレクションは、マーキング・フェーズを含む。本明細書における教示に従って次のフェーズに移ることによって、マーキング・フェーズは、ミューテータ・スレッドによって書き込まれるアドレス値の整合性を保持し、ミューテータ・スレッドとガベージコレクタが互いに同時に実行されても、CAS命令に依存することなくこれを行う。
[0008] 本明細書において提示される実施形態又は実施形態の環境はよっては、ガベージコレクション中に、コンピューティング・システム内のメモリの領域をマーキングする動作を提供又は利用することがある。こうした動作は、コンピューティング・システムのデジタル・メモリ内に存在する1つ又は複数のポインタの位置をガベージコレクタが受信することを含んでもよく、各ポインタは、アドレス値を保持するアドレス部分、及びこのアドレス部分を除外したガベージコレクション部分を有する。こうした動作はまた、ミューテータ・スレッドが、ガベージコレクタと同時に実行され、ポインタのうち少なくとも1つのポインタのアドレス部分にアクセスすることを含んでもよい。こうした動作はまた、ガベージコレクタが非CAS書込み命令を使用して、そのアドレスがメモリの領域を識別するポインタのガベージコレクション部分に、参照マーク・ビットをアトミックにセットすることによって、メモリの領域をマーキングすることを含んでもよく、前記セットはアドレスを上書きしない。こうした動作はまた、少なくとも1つのユーザ空間スレッドによって依然として使用されているメモリの任意の領域を、再利用可能なメモリとして扱うことを回避すること、たとえば、メモリの領域が依然として使用されているかどうか判定するときに偽陰性を回避することを含んでもよい。したがって、こうした動作は、CAS命令に依存することなく、ガベージコレクション・マーキング・フェーズを実行することができる。
[0009] 本明細書での教示に関係する他の技術的なメカニズム、構造、及びアクティビティも、当業者には明らかとなろう。所与の各例は、単に例示的なものに過ぎない。この発明の概要は、特許請求される主題の重要な特徴又は本質的な特徴を識別するものではなく、特許請求される主題の範囲を限定するために使用されるものでもない。むしろ、この発明の概要は、発明を実施するための形態において以下でさらに説明されるいくつかの技術的な考え方を、簡略化した形で紹介するために提示されている。革新的な考え方は、特許請求の範囲で定義されており、この発明の概要が特許請求の範囲と矛盾する範囲内では、特許請求の範囲を優先すべきである。
図面の簡単な説明
[0010] 添付図面を参照して、さらに具体的に説明する。これらの図面は、選択された態様のみを示しており、したがって、対象又は範囲を完全に確定するものではない。
[0011]コンピュータ・システムを全体的に示し、また構成された記憶媒体を概略的に示すブロック図である。 [0012]CAS回避ガベージコレクション機能を含む、機能強化されたコンピューティング・システムの態様を示すブロック図である。 [0013]ガベージコレクション中の様々な時点における、メモリステータスの態様を示すブロック図である。 [0014]ガベージコレクション・スレッドとミューテータ・スレッドとの同時実行を示す図である。 [0015]ガベージコレクションのマーキング・フェーズ中のアドレスのミューテーションを示す図である。 [0015]ガベージコレクションのマーキング・フェーズ中のアドレスのミューテーションを示す図である。 [0016]64ビット・ポインタ内の特定のビット及び特定の部分の識別表示を示す図である。 [0017]プロセッサの態様、具体的にはプロセッサ命令セットの態様を示すブロック図である。 [0018]ガベージコレクション・サイクルの態様を示すブロック図である。 [0019]ガベージコレクションについてのメモリステータスの態様を示すブロック図である。 [0020]いくつかのガベージコレクション・プロセスを示す流れ図である。 [0021]いくつかのガベージコレクション又は他のメモリ管理プロセスでの各ステップをさらに示す流れ図である。
詳細な説明
[0022] 概要
[0023] 数多くの革新が、その原点を超えて拡大するが、革新の原点を理解することは、その革新をさらに完全に理解するのに役立つことがある。今回のケースでは、本明細書に提示されるいくつかの教示は、ユーザ・スレッド用の適切なメモリ再利用を依然として実現しながら、「ストップ・ザ・ワールド」ステータスでガベージコレクションを実行するのに費やす時間を短縮するという技術的な課題によって動機付けられた。この課題は、ガベージコレクションの頻度/トリガ、ガベージコレクションとユーザ・スレッド実行との同時実行、ガベージコレクタの生成とフローティング・ガベージの取扱い、スイープ・アルゴリズム対圧縮アルゴリズムなどの特性に起こり得る技術的変化の考察につながった。しかし、目下の目的のためには、この着眼点は比較的狭い。発明者らは、ガベージコレクション・マーキング・フェーズ中に、ガベージコレクタ・コードが相対的に費用のかかる特定の同期命令(たとえば、コンペア・アンド・スワップ、コンペア・アンド・セット)に依存するのを軽減することができ、ガベージコレクション・コードの外側で同時に実行されるアドレス・ミューテーションの整合性を損なうことなくそうすることができる、技術的な変更を思い付いた。ここで教示される革新によって取り組まれる他の技術的課題も、以下に提示する考察から当業者には明らかとなろう。
[0024] プログラミング言語Java(登録商標)(Oracle America, Inc.のマーク)を実装するためのガベージコレクションは動機付けの一例であったが、本明細書に記載のツール及び技法は、その言語をサポートする際の使用に限定されない。各実施形態は、他の言語で開発されたプログラムを使用して割り当てられたメモリのガベージコレクションを、同様に、又は代替的にサポートしてもよい。同様に、オブジェクトのガベージコレクションは動機付けの一例であって、本明細書に記載のいくつかの例においてオブジェクトが使用されるが、各実施形態は、オブジェクト指向プログラミング・パラダイムに従わないプログラムにおいて割り当てられるデータ構造を含む、他のデータ構造のガベージコレクションを、同様に又は代替的にサポートしてもよい。ガベージコレクションを使用して、オブジェクト指向プログラミング言語オブジェクト以外のアイテム用のメモリを再利用する場合があることを当業者は認識することになり、たとえば、FORTRANの実装形態によっては、BASICやLogoなど、数多くの初心者用言語と同様に、ガベージコレクタを有するものがある。
[0025] 実施形態によっては、プログラムの仮想アドレス空間に情報を記憶し、この情報を使用して、圧縮操作においてアイテムが移動できるかどうかを検出する。これにより、システムによっては、ガベージコレクションの速度向上が15%以上まで改善することがある。
[0026] 本明細書に記載のいくつかの実施形態は、人によっては、比較的広い文脈において見ることができる。たとえば、アドレス指定、同時実行、メモリ、再利用、及び使用法などの概念は、特定の実施形態に関連するものとみなされてもよい。しかし、抽象的な考えについて本明細書において排他的権利が求められていることは、広い文脈の可用性から導かれるものではなく、実際そうではない。むしろ、本開示は、同期命令に起因するプログラム実行遅延をどのようにして安全に短縮するかなどの特定の技術的問題を、その技術的効果が完全に又は部分的に解決する特定の実施形態を、適切に提供することに焦点が当てられている。アドレス指定、同時実行、メモリ、再利用、又は使用法を含め、構成済みの他の記憶媒体、システム、及び方法は、この範囲外である。したがって、本開示の適切な理解の下で、漠然性、単なる抽象性、技術的特徴の欠如、及び付随するプルーフ問題も回避される。
[0027] より一般には、本開示のあらゆる部分、又は本開示内でのどんな特定の詳細も、実施可能性、書面での説明、又は最良の形態などの法的基準を必ずしも満たす必要がないことを、当業者には認識されよう。また、各実施形態は、本明細書に記載の、特定のプログラミング言語、ツール、コンテキスト、識別子、フィールド、プロパティ、ファイル、データ構造、表記法、又は他の実装形態の選択に限定されるものではない。たとえ本発明の所有者からであっても、他の任意の特許開示とのどんな明白な競合も、本特許開示において提示される特許請求の範囲を解釈する上で何ら役割をもたない。
[0028] 技術的特徴
[0029] 本明細書に記載の実施形態の技術的特徴は、当業者には明らかとなり、広範囲の注意深い読者にもいくつかの点で明らかとなろう。実施形態によっては、メモリの割当て、メモリ・アドレスの更新、使用後のメモリの再割当て、特定の種類のプロセッサ命令の選択又は除外などの技術的なアクティビティを扱っており、これらはすべてコンピューティング技術に深く根ざしたアクティビティである。具体的には、「メモリ」とはビットを記憶するデジタル・メモリを意味し、「プロセッサ」とはビットを処理する集積回路又は他の回路を意味し、したがって純粋に精神的なプロセスは除外される。実施形態によっては、メモリに記憶されるデータへのリスクを高めることなく、メモリを再利用するのに費やす時間を短縮することによって、コンピューティング・システムの機能を改善する。ガベージコレクションは、コンペア・アンド・スワップ命令を使用して広く実装されてきたが、本明細書において教示されるいくつかの実施形態が、選択肢を提示し、したがって、プロセッサ・アーキテクチャがコンペア・アンド・スワップ命令を欠いているコンピューティング・システム上で、安全なガベージコレクションを同時に実行できるようになる。各教示の技術的特徴に基づく他の利点はまた、提示される説明から当業者には明らかとなろう。
[0030] 頭辞語、略語、及び名前
[0031] いくつかの頭辞語、略語、及び名前を以下に定義する。他のものは、本明細書の別の箇所で定義されるか、又は当業者が理解するようにここで定義する必要はない。
[0032] ALU:算術論理演算装置
[0033] API:アプリケーション・プログラム・インターフェース、別名アプリケーション・プログラミング・インターフェース
[0034] BIOS:基本入出力システム
[0035] CD:コンパクト・ディスク
[0036] CPU:中央処理装置
[0037] DVD:デジタル多用途ディスク又はデジタル・ビデオ・ディスク
[0038] FPGA:フィールド・プログラマブル・ゲート・アレイ
[0039] FPU:浮動小数点処理装置
[0040] GPU:グラフィック処理装置
[0041] GUI:グラフィカル・ユーザ・インターフェース
[0042] ID:識別子
[0043] OS:オペレーティング・システム
[0044] RAM:ランダム・アクセス・メモリ
[0045] ROM:リード・オンリ・メモリ
[0046] いくつかの追加の専門用語
[0047] 本明細書においては、各図面に示すような例示的な実施形態を参照し、又、本明細書において具体的な文言を使用してそれらを説明する。しかし、本明細書において示す特徴の改変及びさらなる修正、並びに本明細書における特定の実施形態によって示す抽象的原理の追加の技術的適用例は、(1つ又は複数の)関連する技術分野にあって本開示を受けた当業者には思い浮かぶはずであり、特許請求の範囲に記載の範囲内とみなされるべきである。
[0048] 各用語の意味は、本開示において明確にされ、したがって、特許請求の範囲は、こうした説明に注意を払って読まれるべきである。具体例が提示されているが、他の例もまた、使用される用語の意味の範囲内、及び1つ又は複数の請求項の範囲内に含まれる場合があることを、当業者には理解されよう。各用語は、一般的な用法(特に非技術的な用法)、又は特定の産業界での用法、又は特定の辞書若しくは辞書の特定のセットにおいて有する意味と、ここで必ずしも同じ意味を有するとは限らない。参照番号を様々な言い回しで使用して、用語の幅を示す助けとしてもよい。所与のテキストから参照番号を省略することは、図の内容がそのテキストによって考察されていないことを必ずしも意味しない。発明者は、特定の選ばれた辞書編集に対する権利を主張し、且つ行使する。引用符の付いた用語は明示的に定義されているが、引用符を使用することなく暗黙的に用語を定義することもできる。各用語は、明示的又は暗黙的に、ここでは、発明を実施するための形態及び/又は出願ファイル内のどこかに定義されてもよい。
[0049] 本明細書では、「コンピュータ・システム」には、たとえば、1つ若しくは複数のサーバ、マザーボード、処理ノード、ラップトップ、タブレット、パーソナル・コンピュータ(携帯用か否か)、携帯型情報端末、スマートフォン、スマートウォッチ、スマートバンド、セル・フォンすなわち携帯電話、少なくともプロセッサ及びメモリを有する他のモバイル装置、ビデオ・ゲーム・システム、拡張現実システム、ホログラフィック投影システム、テレビ、ウェアラブル・コンピューティング・システム、及び/又は少なくとも部分的には命令によって制御される1つ若しくは複数のプロセッサを設ける(1つ若しくは複数の)他の装置が含まれ得る。各命令は、メモリ及び/又は専用回路内のファームウェア又は他のソフトウェアの形態でもよい。
[0050] 「マルチスレッド」コンピュータ・システムとは、複数の実行スレッドをサポートするコンピュータ・システムである。「スレッド」という用語は、スケジューリング可能であるか、又はスケジューリングの対象となる(場合によっては同期する)任意のコードを含むと理解すべきであり、システムによっては、たとえば「タスク」、「プロセス」、「コルーチン」、又は「割込みハンドラ」など、別の名前で知られている場合もある。他のシステムでは、「プロセス」及び「スレッド」は、互いに異なる意味を有し、たとえば、プロセスは1つ又は複数のスレッドを含んでもよい。所与のシステムでは、各スレッドは、並列に、順次に、又は並列実行(たとえば、マルチプロセッシング)と順次実行(たとえば、タイムスライスされた)の組合せで実行できる。具体的には、各スレッドは「同時に」実行される可能性があり、これは、その実行が少なくとも部分的にオーバラップすることを意味し、たとえば、各スレッドは、同期又は別のメカニズムを必要とする方式で他のリソースの同じ記憶場所にそれぞれアクセスして、発生する可能性のあるアクセスの、互いに異なる順序による弊害を防止することができる。
[0051] 「プロセッサ」とは、同時マルチスレッディング実装でのコアなど、スレッド処理ユニットである。プロセッサは、ハードウェアを備える。所与のチップは、1つ又は複数のプロセッサを保持してもよい。プロセッサは、汎用のものでもよく、又は、ベクトル処理、グラフィックス処理、信号処理、浮動小数点数演算処理、暗号化、I/O処理など、特定の使用法に調整されてもよい。
[0052] 「カーネル」は、オペレーティング・システム、ハイパーバイザ、仮想マシン、BIOSコード、及び同様のハードウェア・インターフェース・ソフトウェアを含む。
[0053] 「コード」とは、プロセッサ命令、データ(これには、定数、変数、及びデータ構造が含まれる)、又は命令とデータの両方を意味する。「コード」それ自体、及び「ソフトウェア」は、本明細書においては区別なく使用される。コードの例には、実行可能コード、解釈済みコード、及びファームウェアがある。実行するために解釈又はコンパイルしなければならないコードは、「ソース・コード」と呼ばれる。
[0054] 「プログラム」は、本明細書において広く使用されていて、アプリケーション、カーネル、ドライバ、割込みハンドラ、ファームウェア、状態マシン、ライブラリ、サービス、クラウド・インフラストラクチャ・コンポーネント、ミドルウェア、及び(開発者とも呼ばれる)プログラマによって書かれた、及び/又は自動生成された他のコードを含む。
[0055] 「ルーチン」とは、呼び出されることによって非順次的に制御を受けることができ、次いで、たとえば呼出しスタック上にプッシュされるアドレスを介して戻ることができる関数、方法、手順、又は他のコードを意味する。パラメータを受け付けず、値を返さない、パラメータなしの無効ルーチンとは異なり、各ルーチンはまた、スタックを使用して、(1つ又は複数の)値を受け取り、(1つ又は複数の)値を返し、又はその両方を実行する。
[0056] 「関数」は、呼び出された時点での値を返すルーチンである。
[0057] 「サービス」とは、クラウド・コンピューティング環境、又は他のネットワーク環境若しくはコンピューティング・システム環境において提供する、消耗性のプログラムを意味する。
[0058] 「クラウド」とは、よく考えられたオンデマンド・サービスにおいて弾力的に利用可能な、コンピューティング、記憶装置、及びネットワーキング用にプールされたリソースを意味する。クラウドは、プライベート(たとえば業務用)、パブリック、コミュニティ、又はハイブリッドでもよく、クラウド・サービスは、インフラストラクチャ・アズ・ア・サービス、プラットフォーム・アズ・ア・サービス、ソフトウェア・アズ・ア・サービス、又は別のサービスの形態で提供されてもよい。別段の記載がない限り、ファイルからの読取り又はファイルへの書込みについてのいかなる考察も、ローカル・ファイルの読取り/書込み、又はネットワークを介した読取り/書込み、又はその両方(ローカル及びネットワークでの読取り/書込み)を含み、ここでのネットワークとは、クラウド・ネットワーク又は他のネットワークでもよい。
[0059] 本明細書では、特に記載のない限り、「含む(include)」は追加の要素を認める(すなわち、含む(include)は、特許法での意味において「含む(comprises)」を意味する)。
[0060] 「最適化する(Optimize)」とは、「改善する」ことを意味し、必ずしも「完璧にする」ことを意味するものではない。たとえば、最適化されたプログラム又はアルゴリズムにおいてさらに改良を加えることが可能でもよい。
[0061] 「プロセス」は、本明細書では電子計算学の技術用語として使用されることがあり、その技術的な意味において、リソース・ユーザ、すなわち、たとえばコルーチン、スレッド、タスク、割込みハンドラ、アプリケーション・プロセス、カーネル・プロセス、手順、オブジェクト・メソッドを包含する。たとえば、システム・クレーム又は製品(構成された記憶媒体)クレームとは対照的に、プロセス・クレームを説明する際に、本明細書においては、特許法での技術用語として「プロセス」も使用される。同様に、電子計算学の技術用語(一種の「ルーチン」)として、また特許法での技術用語(「プロセス」)として、本明細書では「方法」が使用される場合もある。当業者であれば、具体的な場合において、いずれの意味が意図されているかを理解することができ、また(特許法での意味において)特許請求の範囲に記載されている所与のプロセス又は方法が、(電子計算学の意味において)1つ又は複数のプロセス又は方法を使用して実施される場合があってもよいことが理解できよう。
[0062] 「自動的に」とは、自動化されていない場合とは対照的に、自動化(たとえば、本明細書において述べる特定の動作及び技術的効果のためにソフトウェアによって構成された汎用のコンピューティング・ハードウェア)を使用することを意味する。具体的には、「自動的に」実行されるステップは、人間によって開始されてもよく、又は人間によって双方向に誘導されてもよいが、人手によって書類上又は人の心の中で実行されるものではない。自動ステップをマシンを用いて実行して、このように提供される技術的相互作用なしでは実現することのない、1つ又は複数の技術的効果を得る。
[0063] 技術的効果が技術的な実施形態の推定に基づく目的であることを、当業者は理解する。たとえば、計算が一実施形態に関わり、また何らかの計算が技術的な構成要素(たとえば、紙と鉛筆によって、さらには精神的なステップとして)なしで実行することもできるという単なる事実は、技術的効果の存在を排除するものではなく、又は実施形態の具体的且つ技術的な性質を変更するものではない。ビットのセット、アドレスの追跡、1バイトのメモリの読出し又は書込み、及びプロセッサ命令の実行などの動作はそれぞれ、本明細書においては本質的にデジタルであると理解される。人間の心は、CPU若しくは他のプロセッサ、又はRAM若しくは他のデジタル記憶装置と直接インターフェースして、必要なデータを読み書きし、ビットやバイトなどのデジタル値に必要な操作を実行して、本明細書において教示されるメモリ管理ステップを実行することができない。このことは、本開示に鑑みると、当業者にはよく理解されるはずであるが、他者には、この事実を知らせるか、又は想起させなければならない場合がある。
[0064] 別段の記載がない限り、少なくともいくつかの実施形態はまた、単なる思考実験なのとは対照的に、適切に配置され、且つ構成されているとき、実働環境において、又は実働環境向けの試験ラボにおいて、大規模に動作することができると想定される。目下の目的のためには、「大規模に動作する」とは、以下の状態、すなわちサイズが少なくとも1GB(1ギガバイト)のヒープ内のメモリを再利用すること、少なくとも2つのユーザ・スレッドと同時にメモリを再利用すること、プロセッサが少なくとも4つのコアを有するシステム内でメモリを再利用すること、又はメモリ・アドレスが少なくとも48ビットを含むメモリを再利用することのうち、少なくとも1つの状態において動作することを意味する。
[0065] 同様に、「コンピュータ的に」とは、コンピューティング装置(少なくとも、プロセッサに加えてメモリ)が使用されていることを意味し、単なる人間の思考又は人間の行動だけで結果を得ることを含まない。たとえば、紙と鉛筆を用いて算術を行うことは、本明細書において理解されるように算術をコンピュータ的に行うことではない。計算結果は、より速く、より広く、より深く、より正確であり、より一貫しており、より包括的であり、及び/又は人間の能力単独の範囲を超えた技術的効果を他の方法で提供する。「計算ステップ」は、コンピュータ的に実行されるステップである。「自動的に」も「コンピュータ的に」も、必ずしも「直ちに」を意味するものではない。「コンピュータ的に」及び「自動的に」は、本明細書において区別なく使用される。
[0066] 「プロアクティブに(Proactively)」とは、ユーザからの直接の要求がないことを意味する。確かに、ユーザは、ステップの結果がユーザに提示されるまで、一実施形態によるプロアクティブなステップが可能であったことに気付かないことさえあってもよい。別段の記載がある場合を除き、本明細書に記載の任意の計算及び/又は自動ステップもまた、プロアクティブに実行されてもよい。
[0067] この文書全体を通して、任意の複数の「(s)」、「(es)」、又は「(ies)」の使用は、示された特徴のうち1つ又は複数が存在することを意味する。たとえば、「プロセッサ(s)」は、「1つ又は複数のプロセッサ」、或いは同じことであるが「少なくとも1つのプロセッサ」を意味する。
[0068] 米国の法律及び実務のためには、本明細書において、特許請求の範囲又は他の箇所において「ステップ」という用語を使用することは、ミーンズ・プラス・ファンクション、ステップ・プラス・ファンクション、又は米国特許法第112条、第6段落/第112項(f)のクレーム解釈を援用するものではない。その影響のいかなる推定も、ここに明示的に反論される。
[0069] 米国の法律及び実務のためには、特許請求の範囲は、「のための手段」という語句を使用しない限り、ミーンズ・プラス・ファンクションの解釈を援用するものではない。ミーンズ・プラス・ファンクション言語として解釈されることを意図されたクレーム文言は、もしあれば、「のための手段」という語句を使用して、その意図を明示的に述べることになる。ミーンズ・プラス・ファンクションの解釈が適用されるとき、「のための手段」によるか、及び/又はクレーム文言の裁判所での法的解釈によるかにかかわらず、所与の名詞又は所与の動詞について明細書に記載された手段は、クレーム文言にリンクされていると理解すべきであり、又以下のもの、すなわち各図のブロック図における同じブロック内の外観、同じ又は同様の名称による表示、同じ参照番号による表示、各図のいずれかに示してある機能的関係、本開示の本文に述べる機能的関係のいずれかによって、本明細書において互いにリンクされていると理解すべきである。たとえば、クレームの限定が「zacウィジェット」を列挙し、そのクレームの限定が、ミーンズ・プラス・ファンクション解釈の対象となった場合、少なくとも、「zacウィジェット」に言及する任意の図のブロック、段落、又は例における明細書のどこかで識別された、又はzacウィジェットに割り当てられた任意の参照番号によってともに結び付けられた、又はzacウィジェットの構造若しくは動作と機能的な関係を有するものとして開示されたあらゆる構造が、zacウィジェット用に本出願において識別される構造の一部分とみなされるはずであり、又zacウィジェット構造の均等物のセットを定義するのに役立つはずである。
[0070] この文書全体を通して、別段明示的な言及がない限り、プロセスにおけるステップへの任意の言及は、このステップが、対象となる当事者によって直接的に実行されてもよく、及び/又は介在メカニズム及び/又は介在エンティティを介してその当事者によって間接的に実行されてもよく、依然としてそのステップの範囲内にあることを想定する。すなわち、直接的な実行が、明示的に述べられた要求条件でない限り、対象となる当事者によるステップの直接的な実行は必要とされない。たとえば、アドレス指定、支援、割当て、回避、チェック、圧縮、比較及びセット、比較及び交換、作成、定義、実行(別名、作動すること)、保持、識別、無視(たとえば、廃棄)、実施、表示、マーキング、修正、ミューテーション実行、OR接続、実行、到達、読取り、受信、再利用、記録、依存、常駐、セット、符号拡張、スイープ、同期、処理、使用、書込み、宛先又は他の対象についての出力ゼロ化(及び、アドレス、アドレス済みなど)など、対象となる当事者による動作を含むステップは、転送、コピー、アップロード、ダウンロード、符号化、復号、圧縮、解凍、暗号化、暗号解読、認証、呼出しなど、他の何らかの当事者による介在行為に関与してもよく、しかも依然として、対象となる当事者が直接実行されるものとして理解されてもよい。
[0071] データ又は命令が参照されるときはいつでも、こうしたアイテムが、たとえばコンピュータ読取り可能なメモリ及び/又はコンピュータ読取り可能な記憶媒体を構成し、それにより、書類上や人の心の中、又は有線上で伝搬される単なる信号として単に存在するのとは違って、特定のものに変換されることが理解される。米国での特許保護のためには、メモリ又は他のコンピュータ読取り可能な記憶媒体は、In re Nuijten事件での米国特許商標庁(USPTO)の解釈の下では、特許性のある主題の範囲外の伝搬信号又は搬送波又は単なるエネルギーではない。米国においては、いかなるクレームも、信号それ自体又は単なるエネルギーを対象として含んではおらず、本開示に鑑みて他の方法で表明する任意のクレーム解釈は、文面上は不合理である。米国外で授与されたクレームにおいて別段明示的な言及がない限り、クレームは、信号それ自体又は単なるエネルギーを対象として含まない。
[0072] さらに、本明細書において他の箇所で明白に逆のことがあるとしても、(a)一方で、コンピュータ読取り可能な記憶媒体及びコンピュータ読取り可能なメモリと、(b)他方で、信号媒体とも呼ばれる伝送媒体との間での明確な違いを理解すべきである。伝送媒体は、伝搬信号、又は搬送波のコンピュータ読取り可能な媒体である。対照的に、コンピュータ読取り可能な記憶媒体及びコンピュータ読取り可能なメモリは、伝搬信号又は搬送波のコンピュータ読取り可能な媒体ではない。特許請求の範囲に別段明示的な言及がない限り、「コンピュータ読取り可能な媒体」とは、コンピュータ読取り可能な記憶媒体を意味し、伝搬信号それ自体ではなく、又単なるエネルギーでもない。
[0073] 本明細書において「実施形態」とは一例である。「実施形態」という用語は、「本発明」と交換可能ではない。実施形態は、結果として得られる各態様の組合せそれ自体が、本明細書において明示的に記載されていない場合でも、(結果が動作可能であれば)他の実施形態を作り出すために各態様を自由に共有又は借用してもよい。許可された組合せを、どれもこれも明示的且つ個別に説明するように要求することは、当業者には不要なことであり、当業者である読者向けに特許明細書が書かれていることを認識する方針に反するはずである。公式の組合せ計算、及び少数の組合せ可能な特徴からも生じる実現可能な組合せの数に関する非公式な共通の直観はまた、本明細書に記載の各態様について多数の態様の組合せが存在することを示すことになる。したがって、組合せをどれもこれも明示的に述べることを要求するのは、特許明細書が簡潔になり、読者が当該技術分野に精通していることを求める方針に反するはずである。
[0074] 参照番号のリスト
[0075] 便宜上、且つ各図面をサポートして、又複数のアイテムを参照することによる革新を説明する明細書の本文の一部分として、以下のリストが提示される。ここでリストに記載されていないアイテムは、それにもかかわらず、所与の実施形態の一部分でもよい。本文をさらに読みやすくするために、本文中の参照済みアイテムのあらゆる列挙の近くではなく、いくつかの列挙の近くに、所与の参照番号が記述される。所与のアイテムの様々な例又は様々な場合を参照して、同じ参照番号を使用してもよい。参照番号のリストは以下の通りである。
[0076] 100 コンピューティング環境とも呼ばれる動作環境であり、状況によっては、たとえば開発環境又は実働環境としてさらに特徴付けられてもよい。
[0077] 102 計算システム又はコンピューティング・システムとも呼ばれるコンピュータ・システム。
[0078] 104 ユーザ。
[0079] 106 周辺装置。
[0080] 108 一般にはネットワーク。
[0081] 110 プロセッサ。
[0082] 112 たとえば、RAM、ハード・ディスクなどのコンピュータ読取り可能な記憶媒体。
[0083] 114 取外し可能なように構成されたコンピュータ読取り可能な記憶媒体。
[0084] 116 プロセッサで実行可能な命令であり、本明細書において述べるように、取外し可能な記憶媒体上、又は他のメモリ上(揮発性若しくは不揮発性、又はその両方)にあってもよく、具体的には、CAS命令及び非CAS命令を含む。
[0085] 118 たとえば、データ・ロケーションに記憶される(1つ又は複数の)データ値などのデータ。
[0086] 120 たとえば、(1つ又は複数の)オペレーティング・システム、BIOS、デバイス・ドライバなど、(1つ又は複数の)カーネル。
[0087] 122 たとえば、アンチウイルス・ソフトウェア、ファイアウォール、パケット・スニッファ・ソフトウェア、侵入検知システム(IDS)、侵入防止システム(IPS)、ソフトウェア開発のツール及びツール・スイート、ハードウェア開発のツール及びツール・スイートなどのツール。
[0088] 124 たとえば、ワード・プロセッサ、ウェブ・ブラウザ、スプレッドシート、ゲーム、eメール・ツール、ウエブ・アプリなどのアプリケーション。
[0089] 126 「ディスプレイ」とも呼ばれる表示画面。
[0090] 128 普通なら参照番号106、108、110、112、114と関連付けられていないコンピューティング・ハードウェア。
[0091] 200 CASなしのガベージコレクション・マーキング機能によって機能強化されたシステム。
[0092] 202 本明細書に記載の任意の形式での、CASなしのガベージコレクション・マーキング機能。
[0093] 204 プロセッサ命令セット。
[0094] 206 「GC」又は「ガベージコレクタ・コード」とも呼ばれるガベージコレクタ。
[0095] 208 GCスレッド、すなわち、少なくとも主に(命令の50%超)ガベージコレクタ・コード専用であるスレッド。
[0096] 210 ミューテータ・スレッド、すなわち、少なくとも主に(命令の50%超)、ガベージコレクタ・コード以外のコード専用であるスレッドであり、ミューテータ・スレッドは、しばしばユーザ・スレッドであるが、カーネル・スレッドでもよく、用語での「ミューテータ」は、このミューテータ・スレッドが、ガベージコレクション中に使用されるアドレスを変化させて(すなわち、変更して)もよいことを示す。
[0097] 212 読取りバリアであり、たとえばこれは、プロセッサが読取りバリアの後に位置する読取り操作を実行する前に、指定された読取り操作を実行したことを保証するコード又は別のメカニズムであり、「読取りバリア」は、より一般には、読取りバリアの対象となるか、又はそれを利用するコードを指してもよい。
[0098] 214 たとえば、それ自体のメモリ・アドレスを有するバイト又はワードなど、メモリのアドレス可能ユニット。
[0099] 216 ポインタ。「ポインタ」及び「アドレス」を同義語として使用する他の文書とは異なり、本明細書においては「ポインタ」の特定の定義が使用されることに留意されたい。図2、図7、及び本明細書において提示される他の説明によると、「ポインタ」は、アドレス部分を有し、又別個のガベージコレクション部分を有し、本明細書においては「ポインタ」及び「参照」が同義語として使用される。
[00100] 218 ポインタのガベージコレクション部分。
[00101] 220 ガベージコレクション(GC)に使用される分割ポインタ内の参照マーク・ビット又は他の特別ビット。この参照マーク・ビットは、さらなるGC処理が要求されることを示すようにセットされてもよく、たとえば、圧縮されるオブジェクトにポインタをマーキングしてもよく、いくつかの圧縮ガベージコレクタでの参照マーク・ビット220の1つの代替名は、「ニーズ再配置ビット」すなわち「NRB」であって、マーキング後にGCの後期段階で再配置をチェックすることを示す。
[00102] 222 ポインタのアドレス部分。
[00103] 224 たとえば、ポインタのアドレス部分に記憶された、物理アドレス値又は仮想アドレス値などのアドレス値。
[00104] 226 単に「ヒープ」と呼ばれることが多い、メモリのヒープ部分。
[00105] 228 ヒープ内の何かあるものに加えられた修正の記録であり、この記録は、加えられた厳密な修正又はその修正が加えられた厳密な場所を必ずしも指定するものではないが、ヒープ内の何かあるものが修正されたことを示す。修正は「mods」とも呼ばれる。
[00106] 230 カーネル・アドレス空間。
[00107] 232 ユーザ(非カーネル)アドレス空間。
[00108] 234 ヒープ修正記録228を作成又は更新することによって、ヒープ修正を記録する記録器。
[00109] 236 ガベージコレクタのマーキング・フェーズ・コード。
[00110] 300 たとえば、ガベージコレクションによって少なくとも部分的に管理される、メモリの領域、ページ、ブロック、又は他の領域である、メモリのセグメント。
[00111] 302 割り当てられたメモリの連続領域であり、使用中であるか、又は再利用可能であることが知られていないか(図3にv(チェックマーク)で示す)、或いは、それを割り当てたプログラムによってもはや使用中ではないことが知られているので、再利用可能であると知られている(図3にXで示す)。
[00112] 304 圧縮の結果として生じる、再利用可能なメモリの連続領域。
[00113] 400 一般にはスレッド。
[00114] 402 ガベージコレクションのフェーズ及びサブフェーズ。
[00115] 500 たとえば、オブジェクト指向プログラミング・パラダイムを実装するプログラムに割り当てられた、オブジェクト・データ構造などのオブジェクト。
[00116] 700 ビット(すなわち、容量が1つの2進数字である記憶場所)。
[00117] 800 デジタル・プロセッサの態様。
[00118] 802 CAS命令、すなわち、コンペア・アンド・スワップ命令、コンペア・アンド・セット命令、又はその両方であり、様々な名称を有するが、それにもかかわらずCAS命令の役割を果たし、CAS機能を実装する単一の命令、又は定義された一連の命令でもよく、各サイクルでの実行コストが、認められたCAS命令のプラスマイナス10%以内になる。
[00119] 804 プロセッサのサイクル・カウントであり、たとえば、プロセッサのベンダの技術文書を参照することによって、又は独立した試験若しくは業界で認められたベンチマークによって決定されてもよく、正確でもよく、又はある範囲として指定されてもよく、平均値として指定されてもよい。
[00120] 806 非CAS命令、すなわち、CAS命令ではないプロセッサ命令である。
[00121] 808 論理和命令。
[00122] 810 特定の個々のビットをセットするための命令であり、このビットを含むアドレス可能ユニットにおいては必ずしも最上位ビットではない。
[00123] 812 アドレス可能ユニットでの最上位ビットをセットするための命令。
[00124] 814 非CASだが、それにもかかわらずアトミック書込み命令である。ある命令が所与のインスタンスにおいてアトミックであるかどうか、したがって命令814として適格であるかどうかは、その命令が書き込む(1つ又は複数の)ユニットがNバイト境界(たとえば、所与のシステムにおいて32ビット境界又は64ビット境界)に位置合せされているかどうかに依存してもよく、すなわち、この演算コードは、書込みによってはアトミックであり、又書込みによっては非アトミックである命令に生じてもよい。
[00125] 900 ガベージコレクション・サイクルの態様。
[00126] 902 ガベージコレクション・サイクル。
[00127] 904 ガベージコレクションのマーキング・フェーズ。
[00128] 906 ガベージコレクションのスイープ・フェーズ。
[00129] 908 ガベージコレクションの圧縮フェーズ。
[00130] 1000 ガベージコレクションについてのメモリステータスの態様。
[00131] 1002 ガベージコレクションについてのメモリのある領域のステータス。
[00132] 1004 メモリが到達可能であり、使用中であることが知られている。
[00133] 1006 メモリが到達不能である。
[00134] 1008 メモリが、少なくとも使用中の可能性があるとしてマーキングされている。
[00135] 1010 メモリが、少なくとも使用中の可能性があるとしてマーキングされていない。
[00136] 1012 メモリが使用されている。
[00137] 1014 メモリが使用されていない。
[00138] 1016 メモリがフローティング・ガベージである。
[00139] 1100 図11に示すステップを含むプロセス(別名、方法)であり、こうしたプロセスを示す図11の流れ図にも言及する。
[00140] 1102 たとえば、アドレスを追跡して到達可能性を評価するコードから、ポインタ位置を受け取る。
[00141] 1104 たとえば、ポインタが位置しているアドレスである、ポインタ位置。
[00142] 1106 参照マーク・ビットをセットする。別段明示的な言及がない限り、これは、アトミックに実行されるものと想定される。
[00143] 1108 非CAS命令を使用する。すなわち、1つ又は複数の非CAS命令を実行し、どんなCAS命令も実行しない。
[00144] 1110 同時に実行する。
[00145] 1112 マーキングに加えてガベージコレクション処理、たとえばスイープ又は圧縮を実行する。
[00146] 1114 マーキングに加えてのガベージコレクション処理、たとえばスイープ又は圧縮。
[00147] 1116 使用中のメモリを再利用可能の場合と同様に扱うことを回避する。たとえば、割当てに利用可能になるメモリのプールに、使用中のメモリを追加するのを回避する。
[00148] 1118 マーキング・フェーズ中にCAS命令に依存することを回避する。すなわち、マーキング・フェーズ中に、CAS命令を含まないGCコードを実行するか、又は実際には実行されないCAS命令のみを含むGCコードを実行するか、又はCAS命令を実行しないGCコードを実行して、アドレスの整合性を保護する。
[00149] 1120 ガベージコレクション・サイクルの任意のフェーズ中又はサブフェーズ中にCAS命令に依存することを回避する。すなわち、ガベージコレクション中のすべてにおいて、CAS命令を含まないGCコードを実行するか、又は実際には実行されないCAS命令のみを含むGCコードを実行するか、又はCAS命令を実行しないGCコードを実行して、アドレスの整合性を保護する。
[00150] 1122 ポインタのガベージコレクション部分に参照マーク・ビット(RMB)をセットするとき、たとえば、ガベージコレクション部分に属する(1つ又は複数の)バイトにのみ書き込むことによって、ポインタのアドレス部分を上書きすることを回避する。
[00151] 1200 図12又は図11に示すステップを含むプロセス(別名、方法)であり、こうしたプロセスを示す図12の流れ図(及び、それが組み込まれた図11の流れ図)をも指す。
[00152] 1202 少なくともポインタのアドレス部分を変化させる。
[00153] 1204 メモリの1つ又は複数のバイトに、アトミックに書き込む。
[00154] 1206 メモリの1つ又は複数のバイトから、アトミックに読み取る。
[00155] 1208 たとえば、再割当てされるメモリの集合にそれを含めないことによって、メモリの領域が再利用可能であると知られていないことを示す。
[00156] 1210 少なくともマーキング中は、ミューテータ・スレッドによって書き込まれるアドレスを上書きしないか、又はこのそれぞれのアドレス値のみを用いて上書きすることにより、このアドレスの整合性を保持する(GCは、たとえば圧縮中に、後でアドレスを変更してもよい)。
[00157] 1212 1つの動作ごとに費やされる時間、たとえば、同期動作ごと、又はメモリ領域マーキング動作ごとに費やされる時間を短縮することによって、実行の速度向上を実現する。
[00158] 1214 実行の速度向上。
[00159] 1216 指定されたスレッドに存在する。
[00160] 1218 指定されたアドレス空間で作動する(すなわち、実行する)。
[00161] 1220 ガベージコレクション中に作成されるヒープ修正の存在を(少なくとも)記録する。
[00162] 1222 ガベージコレクション中に作成されるヒープ修正。
[00163] 1224 指定されたステータス1002を有するメモリの領域を識別し、又は指定されたステータス1002を、メモリの識別された領域に関連付ける。
[00164] 1226 たとえば、オブジェクトを宣言し、このオブジェクトの(1つ又は複数の)値を保持するようにメモリを割り当てることによって、オブジェクトを定義する。
[00165] 1228 プログラミング言語。
[00166] 1230 メモリの領域が再利用について偽陽性として、たとえば、使用中とマーキングされているが、実際には使用中ではないとしてマーキングされるかどうか判定する。
[00167] 1232 利用についての偽陽性。すなわち、使用中とみなされるが、実際には使用中ではない(偽陰性とは、使用中ではないとみなされるが、実際には使用中であることを意味する)。
[00168] 1234 フローティング・ガベージを作成する。
[00169] 1236 フローティング・ガベージを検出する。
[00170] 1238 メモリのある領域、特にポインタ内のある特定のビットをゼロにする。
[00171] 1240 メモリのある領域、特にポインタ内のある特定のビットを、ゼロにする場合と同様に扱う。
[00172] 1242 ポインタの符号拡張部分であり、たとえば、64ビットのポインタでの符号拡張ビット47は、ビット48~63にビット47と同じ値を与える。
[00173] 1244 たとえば、6バイトのアドレス値を保持する8バイトの変数での符号拡張を予測するソフトウェアとの互換性のために、ポインタの最上位部分がこのように符号拡張された場合と同様にポインタを扱う。
[00174] 1246 ポインタの最上位部分(たとえば、最高位バイト)の値を無視する。
[00175] 1248 何らかの他の参照番号に割り当てられなかった、本開示において考察する任意のステップ。
[00176] 動作環境
[00177] 図1を参照すると、一実施形態による動作環境100は、少なくとも1つのコンピュータ・システム102を含む。このコンピュータ・システム102は、マルチプロセッサのコンピュータ・システムでもよく、そうでなくてもよい。動作環境は、クラウド内でクラスタ化され、クライアント/サーバ・ネットワーク化され、及び/又はピアツーピア・ネットワーク化されてもよい、所与のコンピュータ・システム内での1つ又は複数のマシンを含んでもよい。個々のマシンは、コンピュータ・システムであり、協働する一群のマシンもコンピュータ・システムである。所与のコンピュータ・システム102は、エンドユーザ向けには、たとえばアプリケーションとともに、管理者向けには、サーバとして、分散処理ノードとして、及び/又は他の方法で構成されてもよい。
[00178] 人間のユーザ104は、表示装置、キーボード、及び他の周辺装置106を使用することによって、タイプされたテキスト、タッチ、音声、動き、コンピュータ・ビジョン、ジェスチャ、及び/又は他の形態のI/Oを介してコンピュータ・システム102と対話することができる。画面126は、取外し可能な周辺装置106でもよく、又はシステム102の不可欠な部分でもよい。ユーザ・インターフェースは、一実施形態と、1人又は複数人の人間のユーザとの間の対話をサポートすることができる。ユーザ・インターフェースには、コマンドライン・インターフェース、グラフィカル・ユーザ・インターフェース(GUI)、ナチュラル・ユーザ・インターフェース(NUI)、音声コマンド・インターフェース、及び/又は他のユーザ・インターフェース(UI)での提示が含まれてもよく、これらは、別個の選択肢として提示されてもよく、又は統合されてもよい。
[00179] ソフトウェア開発者、品質保証試験者、及び機能強化されたデバッガの実証を行うユーザは、それぞれ特定のタイプのユーザ104であるが、多くのユーザは、ソフトウェア開発者である可能性が高くなり、多くは、自動メモリ管理用のガベージコレクションを利用するプログラムのエンドユーザになると考えられる。1人又は複数人の代わりに動作する、自動化されたエージェント、スクリプト、プレイバック・ソフトウェアなどは、たとえばシステム102の試験を容易にするためのユーザ104でもよいが、別段明記されない限り、ユーザは人である(プロセスではない)。記憶装置及び/又はネットワーキング装置は、いくつかの実施形態では周辺機器とみなされてもよく、他の実施形態ではシステム102の一部とみなされてもよく、これは、プロセッサ110からのその取外し可能性による。図1に示していない他のコンピュータ・システムは、たとえば、ネットワーク・インターフェース機器を介したネットワーク108への1つ又は複数の接続を使用して、コンピュータ・システム102又は別のシステムの実施形態と技術的な方式で対話してもよい。
[00180] 各コンピュータ・システム102は、少なくとも1つのプロセッサ110を備える。このコンピュータ・システム102は、他の適切なシステムと同様に、1つ又は複数のコンピュータ読取り可能な記憶媒体112も備える。記憶媒体112は、様々な物理タイプのものでもよい。記憶媒体112は、揮発性メモリ、不揮発性メモリ、所定位置に固定された媒体、取外し可能な媒体、磁気媒体、光媒体、ソリッドステート媒体、及び/又は他のタイプの物理的に耐久性のある記憶媒体(単に伝播される信号又は単なるエネルギーとは異なる)でもよい。具体的には、携帯用の(すなわち、外部用の)ハード・ドライブ、CD、DVD、メモリ・スティック、又は他の取外し可能な不揮発性メモリ媒体など、構成された記憶媒体114は、挿入され、又は他の方法でインストールされると、機能的にコンピュータ・システムの技術的部分となってもよく、その内容をプロセッサ110との対話及びプロセッサ110による使用のためにアクセス可能となる。取外し可能な構成済み記憶媒体114は、コンピュータ読取り可能な記憶媒体112の一例である。コンピュータ読取り可能な記憶媒体112の他のいくつかの例には、内蔵のRAM、ROM、ハード・ディスク、及びユーザ104が容易には取り外せない他のメモリ記憶装置が含まれる。現行の米国特許要件を遵守するには、コンピュータ読取り可能な媒体も、コンピュータ読取り可能な記憶媒体も、コンピュータ読取り可能なメモリも、米国において係属中又は授与されたいかなるクレームの下でも、信号それ自体又は単なるエネルギーではない。
[00181] 記憶媒体114は、プロセッサ110によって実行可能なバイナリ命令116で構成される。「実行可能」は、本明細書においては広義に使用されていて、たとえば、マシン・コード、解釈可能コード、バイトコード、及び/又は仮想マシン上で実行されるコードを含む。記憶媒体114はまた、命令116の実行によって作成され、修正され、参照され、及び/又は技術的効果のために他の方法で使用されるデータ118で構成される。命令116及びデータ118は、それらが存在するメモリ又は他の記憶媒体114を構成し、そのメモリ又は他のコンピュータ読取り可能な記憶媒体が所与のコンピュータ・システムの機能部分であるとき、この命令116及びデータ118は、そのコンピュータ・システムをも構成する。実施形態によっては、データ118の一部分は、製品特性、在庫、物理的測定値、セット、画像、読取り値、ターゲット、大きさなど、実世界のアイテムを表す。このようなデータはまた、バックアップ、復元、完遂、中止、再フォーマット、及び/又は他の技術的操作によって変換される。
[00182] 一実施形態は、コンピューティング装置(たとえば、汎用コンピュータ、サーバ、又はクラスタ)内の1つ又は複数のプロセッサによって実行されるソフトウェア命令として実施されるものとして説明されてもよいが、このような説明は、実現可能なあらゆる実施形態を検討し尽くすことを意味するものではない。同じ又は同様の機能も、全体的又は部分的に、ハードウェア論理内にしばしば直接実装して、同じ又は同様の技術的効果を実現できることが、当業者には理解されよう。別法として、又はソフトウェア実装に加えて、本明細書に記載の技術的な機能は、少なくとも部分的に、1つ又は複数のハードウェア論理構成要素によって実行することができる。たとえば、他の実装形態を除外することなく、一実施形態は、フィールド・プログラマブル・ゲート・アレイ(FPGA)、特定用途向け集積回路(ASIC)、特定用途向け標準製品(ASSP)、システムオンチップ構成要素(SOC)、複合プログラム可能論理デバイス(CPLD)、同様の構成要素など、ハードウェア論理構成要素110、128を含んでもよい。一実施形態の各構成要素は、たとえば、その入力、出力、及び/又はその技術的効果に基づいて、対話する機能モジュールにグループ化されてもよい。
[00183] プロセッサ110(たとえば、CPU、ALU、FPU、及び/又はGPU)、メモリ/記憶媒体112、並びに表示装置126に加えて、動作環境はまた、たとえば、電池、バス、電源、有線及び無線のネットワーク・インターフェース・カードなど、他のハードウェア128を備えてもよい。本明細書において、名詞「画面(screen)」と「表示装置(display)」とは区別なく使用される。表示装置126は、1つ又は複数のタッチ・スクリーン、ペン若しくはタブレットからの入力に応答する画面、又は、もっぱら出力するために動作する画面を備えてもよい。実施形態によっては、人間のユーザI/O装置(画面、キーボード、マウス、タブレット、マイクロホン、スピーカ、モーション・センサなど)などの周辺装置106が、1つ又は複数のプロセッサ110及びメモリとの通信動作が可能になる。ソフトウェア・プロセスは、ユーザ104でもよいが、別段明記されない限り、エンドユーザは人間である。
[00184] 実施形態によっては、このシステムは、ネットワーク108によって接続された複数のコンピュータを含む。ネットワーク・インターフェース機器128は、たとえば、パケット交換ネットワーク・インターフェース・カード、無線送受信機、又は電話ネットワーク・インターフェースなどの構成要素を使用して、ネットワーク108にアクセスすることができ、これらの構成要素は、所与のコンピュータ・システムに存在してもよい。しかし、一実施形態はまた、直接メモリ・アクセス、取外し可能な不揮発性記憶媒体、又は他の情報記憶/検索手法、及び/又は伝送手法を介して、技術的データ及び/又は技術的命令を伝達してもよい。
[00185] 「動作環境」の下で本明細書に提示された前述の態様及び他の態様が、所与の実施形態の一部分を形成してもよいことが、当業者には理解されよう。この文書の見出しは、実施形態の機能セットと非実施形態の機能セットとに、各機能を厳密に分類することを意図するものではない。
[00186] 1つ又は複数のアイテムが、各図に略図の形で示してあるか、又は括弧内に一覧表示されていて、それらが必ずしも、例示された動作環境又はあらゆる実施形態の一部ではなく、その動作環境又は本明細書において述べるようないくつかの実施形態のアイテムと相互運用してもよいことを念押しする。任意の図又は任意の実施形態において、略図でなく、又は括弧で囲まれた形ではないアイテムが必然的に求められることにはならない。具体的には、便宜上、図1が提示されており、図1にアイテムが含まれていることが、そのアイテム又はそのアイテムの記載済みの使用法が、現在の技術革新の前に知られていたことを意味するものではない。
[00187] システムについての詳細
[00188] 本明細書において各例が例示されて、技術の各態様を説明するのに役立っているが、この文書内で与えられる各例は、実現可能な実施形態のすべてを説明するものではない。各実施形態は、本明細書において提示される具体的な構成、実装形態、配置、表示装置、機能、グループ化、手法、言語、又はシナリオには限定されない。所与の実施形態は、たとえば、追加の又は互いに異なる技術的特徴、機構、シーケンス、構成要素、又はデータ構造を含んでもよく、そうでなければ、本明細書において提示される各例から逸脱してもよい。
[00189] 図2には、本明細書において教示されるいくつかの実施形態に適した、いくつかのアーキテクチャの態様が示してある。機能強化されたシステム200とは、本明細書に記載のように、CASなしのガベージコレクション機能202の追加によって機能強化されたシステム102である。具体的には、図示してある機能強化されたシステム200は、ガベージコレクション・サイクルの少なくとも一部分を実行するのに、プロセッサ命令セット204のCAS命令に依存しないガベージコレクタ206を、GCスレッド208若しくは読取りバリア212、又はその両方に含む。これにより、ガベージコレクタ206は、1つ又は複数のミューテータ・スレッド210と同時に実行され、CAS命令の実行オーバヘッドなしに、ただしポインタ216内のアドレス値224の整合性を危険に曝すこともなく、再利用のためにメモリを収集することができる。少なくとも部分的に、非CASアトミック書込みによってこれを遂行して、GCのアドレス部分222とオーバラップしないポインタのGC部分218に参照マーク・ビット220をセットする。ミューテータ・スレッド210は、多くの場合、ユーザ・スレッド、すなわちユーザ・アドレス空間232で実行されるレッドであるが、本明細書において教示される同じ技法を、カーネル・アドレス空間230で実行されるスレッド上で実行されるガベージコレクションに適用することができる。
[00190] 図3~図6には、ガベージコレクションの態様が示してある。こうした態様の一部は、馴染みがあるか、又は馴染みのあるガベージコレクション・アクティビティにおいて生じるが、本明細書での教示とのその関連性は、革新的な非CASガベージコレクションを理解した後にのみ明らかになる。
[00191] 図3に示すように、ガベージコレクション・コードは、プログラム実行によって連続領域302に分割される、メモリ112のセグメント300上で動作する。所与の領域302は、図3でのチェック・マーク記号が示すように、1つ又は複数のミューテータ・スレッドによって明らかに使用されていてもよく、したがって、再利用は禁止される。所定の領域302はまた、図3でのXマークが示すように、明らかに使用されていないので、再利用可能である可能性がある。領域302の再利用可能性もまた、決定されない場合がある。
[00192] ガベージコレクションは一般に、アドレスを追跡するか、又は別の方法でメモリ領域の使用中又は未使用のステータスを判定し、それに応じてメモリ領域(又は、領域を表すデータ構造)にマーキングする。一部のガベージコレクタは、マーキングされた領域を見つかった場所に残し、プログラムは、再利用可能な領域からメモリを割り当てられる。この手法は、いわゆるマーク・スイープ・ガベージコレクションのアルゴリズムで採用されている。他のガベージコレクタは、同じ再利用可能性ステータスを持つ複数の領域をともに圧縮するために、使用されている領域を再配置し、若しくは再利用可能な領域を再配置し、又はその両方を実行する。マーク圧縮として知られているこの手法は、マーク・スイープ手法よりも大きい再利用可能領域304を生成することが多いが、圧縮結果に一致するようにアドレスを正確に更新する必要があるので、比較的複雑である。
[00193] 図4には、ガベージコレクションのフェーズ又はサブフェーズ402、及び何らかの同時実行が存在するときの同時実行とのその関係が示してある。ガベージコレクションへの単純な取組みは、ガベージコレクタが、メモリ領域を使用中又は再利用可能としてメモリ領域をマーキングしている間、ガベージコレクタ以外のあらゆることを単に中断することである。しかし、このような徹底した「ストップ・ザ・ワールド」の手法は、ユーザ・プログラムの性能を極めて著しく低下させるので、ほとんどのシステムでは受入れ不可能である。したがって、ガベージコレクション・スレッド208及び任意の(1つ又は複数の)ミューテータ・スレッド210の同時実行を可能にすることによって、任意の「ストップ・ザ・ワールド」のサブフェーズ402を制限することを目標にガベージコレクタを設計してもよい。マーキング・フェーズは、同時部分と非同時部分にサブ分割されてもよい。CAS命令の使用は、非同時マーキングに費やされる時間を増加させる傾向があるが、本明細書において教示するような非CASのアトミック書込みの使用は、マーキング中の同時実行を増加させる傾向があり、したがって、ガベージコレクションの対象となるユーザ・コードの性能を改善する傾向がある。
[00194] 同時実行では、少なくとも一部の時間の実行で重複する少なくとも2つのスレッドが含まれるが、同時実行では、両方のスレッドが常に、ともに開始したり、又はともに中断したり、又はともに停止したりする必要はない。一般に、スレッドが同時に実行される場合、少なくとも2つのプロセッサ・コアが存在する。しかし、プロセッサが1つしかない場合でも、マーキング・スレッド208が、ポインタ全体に書き込む場合、たとえば、64ビット・ポインタ全体に書き込む場合、たとえば、[address | NRB]として書き込む場合、同時実行の問題が生じる場合がある。マーク・スレッド208が完全な参照値を参照216に書き戻す限り、マーク・スレッドは、やはり参照を修正するミューテータ・スレッドと競合することがある。たとえば、以下を考えてみる。
uint8_t* ref = *address_of_ref
*address_of_ref = (ref | NRB)
こうした2つの行は、まとめてアトミックではないため、シングルプロセッサ・マシンであっても、その間に書込みが生じる可能性がある。
[00195] 図5及び図6には、マーキング・フェーズ中のアドレスのミューテーションが示してある。こうした2つの図において、メモリ領域302は、「obj」、「a」、及び「b」という名称の3つのオブジェクト500を含む。オブジェクト「obj」は、f0という名称のポインタを含む。図5では、f0のアドレス部分がオブジェクト「a」を指す。次いで、図6に示すように、アドレスが、たとえばミューテータ・スレッドによって変化し、その結果、f0のアドレスがオブジェクト「b」を指す。
[00196] 余談ながら、ここで使用されている言い回しは、ポインタをGC部分とアドレス部分に分割することを反映していることが、当業者には理解されよう。馴染みのシステムで生じるように、機能的なGC部分がない場合は、ポインタとそのアドレスが結合されるはずである。「f0がオブジェクト「a」を指す」と言う人もいれば、その代わりに「f0のアドレス部分がオブジェクト「a」を指す」と言う人もいる。
[00197] 別の余談として、図5及び図6には、所与のオブジェクトの1つのエッジを指す矢印があるが、これは、このオブジェクトを識別するのに使用されるアドレスが、このオブジェクトの第1のバイトのアドレスであることを示しており、実際には、オブジェクト指向プログラミングのいくつかの実装形態が、オブジェクトに割り当てられる領域302へのゼロ以外のオフセットを識別するアドレスを使用することが、当業者には認識されよう。たとえば、このアドレスは、タイプ情報又は他のメタデータを含む、既定のヘッダ・セクションに続くバイトを指してもよい。本明細書における各教示は、したがって当業者によって適応されてもよい。
[00198] 図7には、ポインタが64ビットを有し、48ビットが、ポインタに記憶されたアドレス値を保持するための専用であるとき、GC部分218及びアドレス部分222へのポインタ216の分割が示してある。図7には、左端での最上位ビット63から右端での最下位ビット0まで、ビットの重要度が絶えず減少する構成が示してあるが、バイト、若しくはバイト内のビット、又はそのいずれか、若しくはその両方について、ビッグエンディアン形式又はリトルエンディアン形式のいずれにシステムが従うかにかかわらず、本明細書における各教示が適用されることが、当業者には認識されよう。アドレス部分222が、複数のアドレス可能ユニット214、たとえば64ビット・ポインタの上位2バイトを有するとき、マーキング・フェーズ・コード236は、そうしたユニット214のうち任意の1つ又は複数上に書き込むことができ、たとえば、コード236は、最上位16ビットのいずれかを使用して、参照マーク・ビット220を保持することができるとき、64ビット・ポインタの上位バイトのいずれか1つに書き込むことができることが、やはり当業者には認識されよう。より一般には、特定の実施形態では、アドレス部分222は、1つ又は複数のアドレス可能ユニット214(たとえば、1つ又は複数のバイト)を含んでもよく、GC部分220も、1つ又は複数のアドレス可能ユニット214(たとえば、1つ又は複数のバイト)を含んでもよい。
[00199] 図8には、特にCASなしのガベージコレクションに関連するプロセッサ110のいくつかの態様800が示してある。プロセッサは、CAS命令802及び非CAS命令806を含んでもよい。たとえば、数多くのx86及びItanium(登録商標)(Intel Corporationの商標)のプロセッサ・アーキテクチャでは、CAS命令がCMPXCHG命令を含む。LOCK XCHGは、CAS命令の別の例である。コンペア・アンド・スワップ(及び、コンペア・アンド・スワップ・ダブル)命令は、1970年から、IBM 370アーキテクチャの後継アーキテクチャの一部となってきた。これらは、単にいくつかの例である。しかし、あらゆるプロセッサ・アーキテクチャが、CASプロセッサ命令をサポートしているわけではない。SPARC 32及びPA-RISCアーキテクチャは、ハードウェア命令の形式ではCASをサポートしない。
[00200] 非CAS命令は、具体的にはアトミック書込み命令814を含む。これらは、アトミックに(少なくとも、適切なバイト境界合せが使用されるとき)1つ又は複数のバイトに書き込む命令である(書き込まれるバイトの数は、具体的な命令及びオペランドに依存する)。適切な境界合せにより、所与のシステムにおける非CASアトミック書込み命令814のいくつかの例は、IA-64 ST(ストア)命令及びx86 MOV命令を含んでもよい。これらは、単にいくつかの例であり、他のアトミック書込み命令814を排除することを意図するものではない。
[00201] 当業者には、少なくとも2種類のアトミック命令が認識されよう。第1の種類は、CAS命令802であり、実施形態によっては、マーキング用の使用から除外される。第2の種類は、「CAS命令を除外した」他の何らかの書込み命令814である。この第2の種類は、同期能力に関係なく規定通りに使用される書込みを意味する「標準書込み」と呼ばれることがある。この第2の種類のアトミック書込み814は、「書込みを許可することなく1つ又は複数のバイトを書き込む任意の非CAS命令」と記述してもよい。
[00202] 対象となる他のいくつかの命令は、論理和命令80、ビット・セッティング命令810、たとえばx86 BTS(ビットのテスト及びセット)命令、並びにアドレス可能ユニット214の高ビットをセットする命令812を含む。
[00203] 図9には、マーキング・フェーズ904、スイープ・フェーズ906、及び圧縮フェーズ908を含む、ガベージコレクション・サイクル902でのいくつかの具体的なフェーズが示してある。マーキング904の間、到達可能なオブジェクト500又はメモリの他の再利用不可能な領域が、適位置に、又はそれを表すデータ構造内のいずれかにマーキングされる。スイープ906の間、再利用可能なオブジェクトは、たとえば、再配置用のプールに配置されるなど、ヒープから除外される。圧縮908の間、再利用可能な領域がともに配置され、これは、使用される領域をともに配置するものと見なすこともできる。所与のガベージコレクタは、必ずしも各フェーズを実行するわけではなく、たとえば、圧縮908が省略される場合がある。
[00204] 図10には、ガベージコレクションに関連するメモリステータス1002の例をいくつか示してある。メモリの領域は、到達可能であり(1004)、したがって使用中であり(1012)、又そのようにマーキングされてもよい(1008)。メモリの別の領域は、到達不能でもよく(1006)、したがって使用中ではない(1014)。フローティング・ガベージ1016は、使用されていない(1014)メモリの領域であるが、まだ再利用可能であると具体的に識別されてはいない。
[00205] 実施形態によっては、ガベージコレクション・マーキングのためのプロセッサCAS命令802への依存を回避するシステム200を使用又は提供する。回避されたこのCAS命令は、1つ又は複数のコンペア・アンド・スワップ命令、又はコンペア・アンド・セット命令を含む。このシステムは、アドレス可能ユニット214を有するメモリ112を備え、各アドレス可能ユニットは、それぞれのアドレス値224を使用して個別にアドレス指定可能である。1つ又は複数のポインタ216は、メモリ112内に存在し、各ポインタは、少なくとも2つのアドレス可能ユニット214内に存在し、たとえば、ポインタ216は一般に、少なくとも2つのバイトを占有し、さらに占有することがある。各ポインタ216は、アドレス値を保持するアドレス部分222、及びこのアドレス部分を除外したガベージコレクション部分218を有する。
[00206] こうした実施形態では、プロセッサ110は、メモリ112との通信動作が可能である。プロセッサ110は、少なくとも1つの書込み命令814を含む、命令セット204を有する。実行すると、この書込み命令814は、少なくとも1つのアドレス可能ユニットに、たとえば、ポインタ216のガベージコレクション部分218に値をアトミックに書き込む。この書込み命令814は、任意のCAS命令を除外し、すなわちCAS命令802ではなく、すなわち非CAS命令806である。
[00207] こうした実施形態では、ミューテータ・スレッド210が実行される。実行されると、ミューテータ・スレッド210は、1つ又は複数のそれぞれのポインタのうち、少なくとも1つ又は複数のアドレス値を変化させる。アドレスを変化させることに加えて、ミューテータ・スレッド210は、たとえば、48ビットのアドレス値を保持するポインタに、64ビットのデータを書き込むことによって、ポインタ216のガベージコレクション部分218を変化させてもよい。
[00208] こうした実施形態では、ガベージコレクタ206は、ガベージコレクション・マーキング・フェーズ904の間、ミューテータ・スレッド210と同時に実行される。再利用可能性が最後に検査されたときに再利用向けに利用できなかったメモリ112の領域302を、ポインタのアドレス部分222が識別したことを示すものとして、ガベージコレクタ206は、書込み命令814を使用して、ポインタ216のガベージコレクション部分218に参照マーク・ビット220をアトミックにセットする。システム200は、ミューテータ・スレッド210によって書き込まれるアドレス値224の整合性を保持しながら、ガベージコレクション・マーキング・フェーズ904を実行し、ミューテータ・スレッド210とガベージコレクタ206が互いに同時に実行されたとしても、同期のためのCAS命令802に依存することなく実行する。実施形態によっては、参照マーク・ビット220は、再利用を目的としては必ずしも使用されないが、使用することもできる。これは、この参照(すなわち、ポインタ)が、たとえば再配置すべき追加の処理を受けなければならないことを、GCの後の(マーキングの後の)フェーズに通知するビットでもよい。
[00209] 実施形態によっては、参照マーク・ビットをアトミックにセットするのに使用される書込み命令814は、ここでは書込み平均として示してある平均プロセッサ・サイクル・カウント804を有する。プロセッサ命令セット204の回避されたCAS命令は、ここではCAS平均として示してある平均プロセッサ・サイクル・カウント804を有する、最速の回避されたCAS命令802を含む。本明細書における各教示によって非CAS命令をCAS命令で置き換えることによって得られる実行効率の一指標として、システムによっては、CAS平均は、書込み平均の少なくとも2倍である。場合によっては、CAS平均は、書込み平均の少なくとも3倍である。場合によっては、CAS平均は、書込み平均の少なくとも5倍である。したがって、システムによっては、数パーセント・ポイントの実行効率向上を示すことがある。実装形態次第では、実行は、CASベースのマーキング・フェーズ、又はCASベースのガベージコレクション全体よりも、5%、10%、15%、又はさらに一層高速でもよい。
[00210] 実施形態によっては、ガベージコレクタ206は、ミューテータ・スレッド読取りバリア212内に存在するマーキング・フェーズ・コード236を含む。場合によっては、ガベージコレクタは、ガベージコレクタ・スレッド208内に存在するマーキング・フェーズ・コード236を含む。実施形態によっては、ガベージコレクタ206の一部分は、1つ又は複数のガベージコレクタ・スレッド208内に存在し、ガベージコレクタ206の別の部分は、1つ又は複数のミューテータ・スレッド読取りバリア212内に存在する。すなわち、GCによっては、GC作業を実行する読取りバリア212を有してもよく、したがって、GC作業のいくらかは、ミューテータ・スレッド210に分散されることになる。
[00211] 実施形態によっては、ポインタ216は、少なくとも64個のビット700を含む。場合によっては、ポインタのガベージコレクション部分218は、少なくとも8個のビットを含み、場合によっては、ポインタのガベージコレクション部分218は、少なくとも16個のビットを含む。より一般には、少なくとも1つのアドレス可能ユニット214が、各アドレスに必要とされず、参照マーク・ビット220を保持するのに使用できる限り、有利には、本明細書における教示が適用されてもよい。たとえば、32ビット・システムでのアドレス値224が24ビットしか必要としない場合、残りのバイトはGC部分218として使用することもできる。
[00212] 実施形態によっては、システム200は、少なくとも2つのミューテータ・スレッド210を含み、スレッドのそれぞれが、ガベージコレクション・マーキング・フェーズ中に、ガベージコレクタと同時に実行される。このうちのいくつかでは、実行されると、2つ以上のミューテータ・スレッド210が、1つ又は複数のそれぞれのポインタ216の1つ又は複数のアドレス値224を変化させる。ガベージコレクタ・スレッドも存在する場合、1つのミューテータ・スレッドだけだとしても、同時実行が可能であることが当業者には理解されよう。やはり、シングル・プロセッサのみが存在し、そのプロセッサを共有する2つのスレッドがポインタ216へのアクセスをも共有するとき、同時実行性の問題が生じることがある。
[00213] 実施形態によっては、ミューテータ・スレッド210は、カーネル・アドレス空間230内で実行される。場合によっては、ミューテータ・スレッド210は、ユーザ・アドレス空間232内で実行される。実施形態によっては、システム200は、実行されると、それぞれのアドレスがガベージコレクション・マーキング・フェーズ中にミューテータ・スレッドによって変化したときに、1つ又は複数のポインタ216のそれぞれの識別子を記録する、変化したポインタ記録器234を含む。変化したポインタ記録器は、たとえば、フローティング・ガベージの所在を突き止めるための処理をサポートすることによって、メモリのマーキングされていない到達不能領域の識別を支援することができる。変化したポインタ記録器234は、ヒープ修正のメモリ再利用の影響を軽減するために、書込みバリアを使用して所与のシステムに実装することもできる。変化したポインタ記録器234は、ロギング、ビットマップ、仮想メモリ・マネージャ、及びWin32 API GetWriteWatch()コードのうち1つ又は複数を使用して実装することもできる。記録することの目的の1つは、ヒープ修正が後で処理されるときに、状況によって要求される場合には、参照マーク・ビット220をセットする機会が設けられるようにすることであると、当業者には認識されよう。
[00214] 実施形態によっては、ポインタ216のアドレス部分222は、オブジェクト指向プログラミング言語1228において実装されるプログラム124によって定義されたオブジェクト500を保持したか、又は保持するメモリ112の領域302を識別した。
[00215] 他のシステムの実施形態はまた、本明細書に記載されており、記載された方法又は構成された媒体のシステム・バージョンとして、直接又は派生可能のいずれかで、コンピューティング・ハードウェアの本明細書での広範な考察によって知らされる。
[00216] 方法
[00217] 各図に示すか、又は他の方法で開示される技術的方法は、別段の定めがない限り、たとえば、分割されたポインタ216及びCASなしのマーキング・フェーズ・コード236を利用する、機能強化されたシステム200によって自動的に実行されることになる。各方法はまた、たとえば、システム200内のガベージコレクションに依存することが知られているプログラム124を起動することによって、人間の管理者又は他の人間による動作が関係する範囲内で、部分的には自動的に、又部分的には手動で実行されてもよい。本明細書において革新的と企図されるいかなる方法も、完全な手動ではない。所与の実施形態では、場合によっては、動作するための様々なパラメータ又はデータを用いて、方法の図示された0以上のステップを繰り返してもよい。一実施形態における各ステップはまた、図11及び図12に示す上から下までの順序とは異なる順序で実行されてもよい。各ステップは、連続的に、部分的に重複するように、又は完全に並列に実行してもよい。具体的には、流れ図1200を横断して、ある方法の間に実行される各ステップを示す順序は、この方法のある実行から、この方法の別の実行まで変化してもよい。流れ図の横断順序はまた、ある1つの方法の実施形態から別の方法の実施形態まで変化してもよい。実行される方法が動作可能であり、少なくとも1つのクレームに適合するならば、各ステップはまた、省略され、結合され、名称変更され、再グループ化され、1つ又は複数のマシン上で実行され、又は他の方法で、図示された流れから逸脱してもよい。
[00218] 実施形態によっては、マーキング・フェーズ904中にプロセッサCAS命令802への依存を回避する、ガベージコレクション・プロセスを提供又は使用する。回避されたこのCAS命令802は、1つ又は複数のコンペア・アンド・スワップ命令、又はコンペア・アンド・セット命令を含む。このプロセスは、コンピューティング・システム200において実行されるコード206、208によって実行され、コンピューティング・システム200のデジタル・メモリ112内に存在する1つ又は複数のポインタ216の位置1104を受信する(1102)ガベージコレクタ206を含む。対象となる各ポインタ216は、アドレス値224を保持するアドレス部分222、及びこのアドレス部分を除外したガベージコレクション部分218を有する。ミューテータ・スレッド210は、ガベージコレクタと同時に実行しており(1110)、少なくとも、ポインタのうち少なくとも1つのポインタのアドレス部分にアクセスする。ガベージコレクタは、非CAS書込み命令814を使用して(1108)、ポインタのアドレス部分を上書きする(1122)ことなく、ポインタのガベージコレクション部分に参照マーク・ビット220をアトミックにセットする(1106)。セットされた参照マーク・ビットは、ポインタのアドレス部分が現在、後続のガベージコレクション処理のためにメモリの領域を識別していること、又はこのアドレス部分が少なくとも最近そのような領域を(このアドレスが、マーキング・コード236の知らないうちに変更された可能性があるため)識別したことを示す。このプロセスは、ミューテータ・スレッド210とガベージコレクタ206が互いに同時実行する(1110)にもかかわらず、CAS命令に依存する(1118)ことなく、アドレス値224の整合性を保持(1210)しながら、ガベージコレクション・マーキング・フェーズ904を実行する。同様に、CAS命令802によるアドレスの操作を、操作されたアドレス値224を保持するのに必要ではない1つ又は複数のビット700を使用する非CAS命令814に置き換えることによって、たとえば、圧縮フェーズ908の間に、いくつかの実施形態においては、ガベージコレクタ206全体を通して同様の実行効率改善及び他の最適化を得ることができる。
[00219] 実施形態によっては、非CAS書込み命令を使用して(1108)、ポインタのガベージコレクション部分において参照マーク・ビットをアトミックにセットする(1106)ガベージコレクタは、ポインタのガベージコレクション部分からのバイト値を、ここではGCportionと示す変数へとアトミックに読み込む(1206)ことと、GCportionにおいて参照マーク・ビットをセットする(1106)ことと、次いで、非CAS書込み命令を使用して(1108)、GCportionからの値を、ポインタ216のガベージコレクション部分へとアトミックに書き戻す(1204)こととを含む。場合によっては、図5及び図6、又は他の構成において示すように、ミューテータ・スレッドは、バイト値を前記アトミックに読み込んだ(1206)後に、且つ非CAS書込み命令を前記使用して、この値をアトミックに書き戻す(1204)前に、少なくともポインタのアドレス部分を変化させ(1202)、このプロセスはさらに、変化したポインタが後続の処理を実際に必要とするかどうかの後続の決定(1114)をサポートするために、ポインタの識別子を記録すること(1220)を含む。記録された識別子228は、たとえば、メモリ・アドレス、オフセット、ページ識別情報、ブロック識別子、又は別のメモリ・セグメント300若しくは領域302の識別子を含んでもよい。ミューテータはアドレス部分のみを書き込むのではなく、その代わりにポインタ全体を書き込むことが、当業者には認識されよう。したがって、ミューテータが、アドレス部分を「少なくとも」書き込むと記述することで、GC部分がミューテータによって上書きされないことを意味することによって、混乱が生じることもある。しかし、「変化させる(mutate)」は「値を変更する」ことを意味し、GC部分へのミューテータ書込みは(意図せずに、且つ信頼できずに)参照マーク・ビット(又は、GC部分全体)の値を変更しないままにすることもあるので、ミューテータは「少なくとも」アドレス部分を変化させることを適切に示してもよい。
[00220] ガベージコレクタ内で安全な動作は、一般には必ずしも安全ではない。本明細書において提示される各教示によって、その設計及び実装が通知されていない任意のコードに、本明細書でのポインタ216を単純に暴露することによって、データの整合性及び可用性に対する実質的なリスクが生じる場合のあることが、当業者には認識されよう。本明細書において教示するようなポインタ216は、GC部分とアドレス部分とに物理的に分割される。本明細書において述べるように、GCコード236は、このような分割を認識し、ポインタのいずれかの部分の有害な上書きを回避するように調整される。一般に、この調整がコード内に存在する可能性は高くない。したがって、ポインタ216を、一般に所与のシステム上にあるコードによるエラーなしに受け入れられることになるフォーマットに変換することが賢明になるか、又は必要にさえなることがある。実行制御が、GCコード236からコード一般に(すなわち、コード120、122、124、又は210)に渡される前に、ステップ1238~1246のうちの1つ又は複数のステップなどの各ステップを実行することによって、この変換を遂行してもよい。
[00221] 具体的には、実施形態によっては、ステップ1238~1246のうちの1つ又は複数は、ポインタ216及びコード236の実行範囲を安全に囲い込むのに賢明になるか、又は必要になることがある。このような囲い込みは、ガベージコレクタ206によってもたらされて、セットされた参照マーク・ビットを、アドレス値の一部分と間違え、したがって、対象となっているシステムでの最大許容アドレス値よりも大きいアドレス値で命令実行を試みる、コードの何か他の部分から生じることになる実行時エラーを回避してもよい。
[00222] したがって、実施形態によっては、このプロセスは、コンピューティング・システム200において実行されているコード一般(たとえば、コード120、122、124、又は210)に制御を渡す前に実行される以下の動作、すなわち、ポインタのガベージコレクション部分がすべてのゼロを含む場合と同様に、このポインタのガベージコレクション部分を処理する(1240)ことと、ポインタのガベージコレクション部分を出力ゼロ化する(1238)ことと、ポインタのガベージコレクション部分がポインタのアドレス部分の最上位ビットによって符号拡張される場合と同様に、このポインタのガベージコレクション部分を処理する(1244)ことと、ポインタのガベージコレクション部分を介して、このポインタのアドレス部分の最上位ビットを符号拡張する(1242)ことと、又はポインタのアドレス部分を使用するときに、このポインタのガベージコレクション部分を無視する(1246)こととのうちの少なくとも1つをさらに含む。符号拡張が、標準形でポインタを置くための1つの方式であることを、当業者は認識されよう。
[00223] 実施形態によっては、1つ又は複数のポインタのそれぞれの識別子228を記録する(1220)コンピューティング・システムにおいて実行するコード234を含み、そのそれぞれのアドレスが、ガベージコレクション・マーキング・フェーズ904の間に、ミューテータ・スレッドによって変化した(1202)。このような記録は、メモリのマーキングされていない到達不能領域の自動識別1114を支援する。
[00224] 実施形態によっては、ミューテータ・スレッドは、ユーザ・アドレス空間232において実行される(1110)。場合によっては、ミューテータ・スレッドは、カーネル・アドレス空間230において実行される(1110)。場合によっては、少なくとも1つのミューテータ・スレッドが、それぞれの種類のアドレス空間230及び232において実行される(1110)。
[00225] 実施形態によっては、ある特定のビットを書き込むときには、別の特定のビットを書き込むときよりも効率的であるプロセッサ110を備えてもよい。たとえば、最上位ビットをセットする書込み命令814は、下位ビットを設定する同じ命令又は別の命令よりも効率的になる場合がある。この理由又は他の理由により、実施形態によっては、ガベージコレクタは、非CAS書込み命令を使用して(1108)、ポインタ216の最上位ビットを、参照マーク・ビット220としてアトミックにセットする(1106)。
[00226] 構成された記憶媒体
[00227] 実施形態によっては、構成されたコンピュータ読取り可能な記憶媒体112を備える。記憶媒体112には、ディスク(磁気、光学、又は他の方式)、RAM、EEPROM、又は他のROM、及び/又は他の構成可能なメモリが含まれてもよく、具体的には、(単なる伝搬信号ではない)コンピュータ読取り可能な記憶媒体が含まれる。構成される記憶媒体は、具体的には、CD、DVD、又はフラッシュ・メモリなどの取外し可能な記憶媒体114でもよい。取外し可能でもそうでなくてもよく、揮発性でもそうでなくてもよい汎用メモリは、取外し可能な記憶媒体114及び/又はネットワーク接続などの別のソースから読み取られて、構成された記憶媒体を形成するデータ118及び命令116の形で、分割ポインタ216、CASなしマーキング・フェーズ・コード236、参照マーク・ビット220などのアイテムを使用して、一実施形態に構成することができる。構成された記憶媒体112は、本明細書に開示されているように、コンピュータ・システムが、CASなしのガベージコレクション動作のための技術的プロセス・ステップを実行できるようにすることができる。したがって、各図は、構成された記憶媒体の実施形態及びプロセスの実施形態、並びに、システム及びプロセスの実施形態を例示するのに役立つ。具体的には、図11又は図12に示されるか、又は他の方法で本明細書において教示されるプロセス・ステップのいずれかを使用して、構成された記憶媒体の実施形態を形成するように記憶媒体を構成するのに役立ってもよい。
[00228] 実施形態によっては、1つ又は複数のプロセッサ110によって実行されると、コンピューティング・システムにおけるマーキング・フェーズ904中に、プロセッサCAS命令802への依存を回避するガベージコレクション・プロセスを実行するコードで構成された、記憶媒体114を提供又は使用する。回避されたこのCAS命令は、1つ又は複数のコンペア・アンド・スワップ命令、又はコンペア・アンド・セット命令を含む。このプロセスは、コンピューティング・システムのデジタル・メモリ内に存在する1つ又は複数のポインタの位置をガベージコレクタが受信すること(1102)であって、各ポインタが、アドレス値を保持するアドレス部分、及びこのアドレス部分を除外したガベージコレクション部分を有することと、ミューテータ・スレッドが、ガベージコレクタと同時に実行され(1110)、ポインタのうち少なくとも1つの少なくともアドレス部分にアクセスすることと、ガベージコレクタが、非CAS書込み命令を使用して(1108)、そのアドレスがメモリの領域を識別するポインタのガベージコレクション部分での参照マーク・ビットをアトミックにセットする(1106)ことによって、前記セットすることがアドレスを上書きすること(1122)なく、メモリの領域にマーキングすることと、少なくとも1つのユーザ空間スレッドによって依然として使用されているメモリの任意の領域を、再利用可能なメモリとして扱うことを回避する(1116)こととを含む。このプロセスは、CAS命令に依存することなく、ガベージコレクション・マーキング・フェーズを実行する。ここで使用されているように、「アクセス」とは、読取りアクセス、若しくは書込みアクセス、又はその両方を意味する。
[00229] 実施形態によっては、非CAS書込み命令を使用して(1108)、参照マーク・ビットをアトミックにセットすることは、ポインタのガベージコレクション部分からのバイト値を、ここではGCportionと示す変数へとアトミックに読み込む(1206)ことと、GCportionにおいて参照マーク・ビットをセットする(1106)ことと、次いで、非CAS書込み命令を使用して、GCportionからの値を、ポインタのガベージコレクション部分へとアトミックに書き戻す(1204)こととを含む。
[00230] 実施形態によっては、参照マーク・ビットをアトミックにセットする(1106)ことは、ここでは書込みカウントと示すいくつかのプロセッサ・サイクル804を必要とし、回避されたCAS命令は、ここではCASカウントと示す、公表されたプロセッサ・サイクル・カウント804を有する最速の回避されたCAS命令を含み、CASカウントは、少なくとも書込みカウントの3倍である。
[00231] 実施形態によっては、このプロセスは、所与のガベージコレクション・サイクル902中にメモリのフローティング・ガベージ領域1016を生成する(1234)ことと、次いで、それに続くガベージコレクション・サイクル中に再利用するために、メモリのフローティング・ガベージ領域を再利用する(1114)こととを含む。
[00232] 実施形態によっては、参照マーク・ビットをセットする(1106)ことは、論理和演算を実行するプロセッサ命令808を実行する(1110)こと、又はメモリのアドレス可能ユニットの最上位ビットをセットする演算を実行するプロセッサ命令812を実行する(1110)ことのうち少なくとも一方を含む。
[00233] 特別ビット220についての追加の考察
[00234] 参照マーク・ビット220は、様々な実施形態で名称が異なっていてもよく、又特別ビットの意味及び機能は、各実施形態間で異なってもよいことが、当業者には認識されよう。たとえば、いくつかの圧縮ガベージコレクタにおける参照マーク・ビット220の1つの代替名は、「ニーズ再配置ビット」すなわち「NRB」である。この使用法は、活動性それ自体のためのものではなく、むしろGCの後期段階1114である再配置をチェックするためのものである。
[00235] 別の実施形態では、「活動性ビット」を指してもよい。この「活動性ビット」がセットされるということは、オブジェクト全体が動作中である(依然として使用中(1012)である)ことを意味している可能性がある。ガベージコレクタが、ガベージコレクション・マーキング・フェーズ中にミューテータ・スレッドと同時に実行され、書込み命令を使用して、ポインタのガベージコレクション部分において活動性ビットをアトミックにセットするものと仮定する。いくつかの実施形態では、オブジェクトは、それが含む参照のいずれかのために動作していて、このビットがともかくオンになっていなければならないので、これは、活動性それ自体のみではなくそれ以上のものを意味するはずである。同時実行の圧縮GCの場合では、この参照を再配置する必要があることを意味する。すなわち、このビットは、GCの後の部分において追加の処理1114を実行しなければならないことを示すことになる。
[00236] 実施形態によっては、RMB/NRB/活動性ビット220は、フローティング・ガベージ1016及び使用中の偽陽性に関する情報を提示する。フローティング・ガベージは、到達不能である(すなわち、Xがもはや使用されておらず、したがって再利用可能である)ことと、マーキングされていない(すなわち、その活動性ビットがセットされ、そのアドレスが領域Xのアドレスであるポインタが存在しない)ことの両方である、メモリの領域Xである。図5及び図6を参照すると、ガベージコレクタは、f0のガベージコレクション部分を読み取るときに、ポインタf0がオブジェクトaのアドレスを含み、次いで、ミューテータ・スレッドは、f0を変化させて、f0のアドレスがオブジェクトbのアドレスとなり、次いでガベージコレクタは、ビット220がセットされたf0のガベージコレクション部分を書き込むものと仮定する。この場合、オブジェクトaは、フローティング・ガベージになり、それを指すものが何もないので(ミューテーションの前のf0が、オブジェクトaを指す唯一のポインタであったと仮定すれば)、ガベージコレクタによって後のある時点で再利用されることになる。オブジェクトbは、(f0を介して)実際に到達可能なので、f0がオブジェクトbを指した後に、ビット220をf0にセットすることは問題ない。次いで、f0がbを含むときに、f0が実際にはこのビット220のセットを必要としないとき、使用中の偽陽性が生じる。
[00237] 1つのシナリオにおいて
// mutator sets f0 to a
obj.f0 = a;
// GC thread marks and sees obj.f0
uint8_t* ref = obj.f0;
// GC figures out that the mark ref bit should be on for this reference.
// but before GC could set it, mutator changes obj.f0.
// mutator sets f0 to b which doesn’t need this bit on
obj.f0 = b;
// this function sets the bit in the GC portion of f0 but it doesn’t need to be set.
[00238] set_gc_mark_ref_bit (&(obj.f0));
[00239] 動作中を維持することによって、この場合のフローティング・ガベージが生じることになるが、それというのも、obj.f0がそれを指していた(過去時制)からである。aを指すものが他に何もなく、したがって、aを再利用することもできるが再利用されないと仮定するが、それというのも、obj.f0がそれを指しており、GCがすでに動作中とみなしたからである。フローティング・ガベージがオブジェクトを指すという点で、ビット220のこの使用は、参照のための本明細書における他の箇所で説明されるマーク参照ビット220の使用とは異なる。非圧縮GCにおいても、フローティング・ガベージは、これまでに知られている同時実行のGCにおいて生じることがある。ここでの関連する1つの態様は、いくつかの実施形態が、ヒープへの修正1222を記録し(1220)、したがって、obj.f0が修正される結果として、続いてやはりGCがobj.f0を目にすることができることである。その時点で、GCは、obj.f0がこのビットを必要としていないことを認識してもよく、そのビットをクリアすることができる。実施形態によっては、GCはもっぱら、マーク・フェーズ中にこのビット220をセットするが、たとえば、性能又は他の理由でこれをクリアしないことが起こり得る。この状況は、単に偽陽性であり、これは、偽陰性に起因するデータ整合性又は可用性の問題のような、何らかの機能上の問題を引き起こすことはないはずである。
[00240] 本明細書において他の箇所で述べるように、実施形態によっては、ビット220をアトミックにセットすることは、ポインタのGC部分からのバイト値を、単一のバイト変数GCportion(便宜上、ここでは単にこのような名称にする)へとアトミックに読み込み、論理和演算を使用して、GCportionにビット220をセットし、次いで、GC部分のバイトに、GCportionからの値をアトミックに書き戻すことを含む。アトミックな読み込みは、普通の(非CAS)読取りとして実行される。実装形態によっては、64ビット境界に位置合せされた64ビット・アドレスを読み取ることなど、プロセッサによってサポートされているユニットを読み取ることは、自動的にアトミックである。
[00241] このシーケンスを表すための1つの表記は以下の通りである。
バイトb = VA[idx]
VA[idx] = b|0x100....0
ここで、VAは「仮想アドレス」を表し、idxは、GC部分のバイト位置でのポインタへのインデックスである。
別の表記は以下の通りになる。
VA[idx] = 0x100...0
VA[idx]はゼロにされたと仮定する。
[00242] 他の表記を使用してもよい。「f0 | 0x100..0」若しくは「f0 | 参照マーク・ビット」などの表記を使用し、又はGCマーク参照ビット(&(obj.f0))をセットして、ビット220がセットされたことを示す。また、比較的短い表記を使用してもよく、ここで、「f0」単独では、ビット220がセットされていないf0を意味し、アポストロフィ「f0’」付きのf0は、ビット220がセットされているf0を意味する。この表記では、対象となる状態又は事象の1セットは以下の通りである。
obj.f0 == a // The value of obj.f0 is a
<determine to mark> // The marking phase code determines that obj.f0 should be marked obj.f0 = b // The mutator overwrites a with b (note“==” for equality vs“=”for assignment
obj.f0 = b’ // The marking phase code sets the reference mark bit in obj.f0
[00243] しかし、このような表記を使用する際には、(1つ又は複数の)どのバイトを書き込んでいるのかについて明確にしなければならない。たとえば、マーク・フェーズが1バイトのobj.f0を書き込むことによって、ビット220をセットするだけの場合、obj.f0 = b’という表記は、64ビットの値b’をobj.f0に書き込むことを意味するものと誤解されることもあるが、これは正しくない。誤解を防ぐには、たとえば、ビット220をセットするときにポインタの最上位バイトのみが書き込まれるように明記することによって、特定のどのバイトが書き込まれているのか、考察又は実装を具体的且つ明確にすべきである。
[00244] いくつかの追加の例及び考察
[00245] 対象となる参照(別名、ポインタ216)がobj.f0であると仮定する。次いで、そのobj.f0が空白であるという1つの可能性。この場合、マーキング・フェーズ・コード236は、マーキングするためのobj.f0を与えられないか、或いは、マーキング・フェーズ・コード236は、obj.f0を受け取るが、obj.f0をマーキングせず、マーキング用に受け取った次のポインタへと移動する。
[00246] 別の可能性は、ミューテータ・スレッドがobj.f0を上書きしないという点で、同時実行が影響しないことである。すなわち、マーキング・フェーズ・コードは、obj.f0をレジスタ(又は他の場所)に読み込み、参照マーク・ビットをセットし、標準の書込みを使用して、ミューテータによるobj.f0への何らかの書込みを介在させることなく、アトミックに値[obj.f0 | 参照マーク・ビット]をobj.f0に戻す。この結果として、フローティング・ガベージ及び偽陽性がなくなる。しかし、実際には、マーキング・フェーズ・コードは、ミューテータがobj.f0を変化させるかどうかをあらかじめ知らないことになり、したがって、コード236は、たとえば図5及び図6に関連して図示及び考察するように、同時変化を処理するように設計され、実装されなければならない。マーキング中にミューテータを実行できないことを明記しない限り、マーキング・コードは、ミューテータからの書込みが存在する場合があることを予測しなければならない。具体的には、どのマーキング・コード236が、ポインタ216のあらゆるビットに破壊的な書込みを実行すべきではないかである。マーキング・コードは、ポインタのGC部分を変更するだけである。
[00247] したがって、同時実行性が影響する場合を考慮する。obj.f0の値がaであると仮定する。次に、マーキング・フェーズ・コードは、値aに基づいて、obj.f0をマーキングすべきであると決定する。しかし、次いで、ミューテータは、obj.f0を上書きし、したがってobj.f0の値はbになる。次いで、マーキング・フェーズ・コードはbをマーキングする。すなわち、マーキング・フェーズ・コードは、obj.f0に参照マーク・ビットをセットし、その結果、obj.f0は値[b | 参照マーク・ビット]を有する。この状況には2つの可能性があり、すなわち、bをマーキングすべきか、それともbをマーキングすべきでないかのいずれかである。bをマーキングすべきである場合、bはマーキングされ、したがってマーキングされたbは偽陽性ではない。しかし、aでのメモリが、フローティング・ガベージになることもある。bをマーキングすべきでない場合、bはマーキングされ、したがってbは偽陽性である。やはり、aでのメモリは、フローティング・ガベージになることもある(フローティング・ガベージを作成するのは参照マーキング・コード236ではないが)。1つ注意すべき点は、偽陰性が存在しないことであり、すなわち、依然として使用中のものが再利用向けにマーキングされることがないことである。
[00248] 本明細書におけるいくつかの教示は、同時実行の圧縮GC用のマーク・フェーズ中に、CAS命令を回避するのをサポートするか、それに関与するか、又は他の方法で関連する。同時実行の圧縮GCの同時実行マーク・フェーズ904の間、このGCは、圧縮されている領域302を指す参照値をマーキングする。これを、以下の通りに表してもよい。
obj.f = obj.f | special_bit
[00249] GCスレッド208は、ミューテータ210と同時に実行されるので、このGCは、確実にミューテータの書込みが失われないようにする。馴染みのGCによっては、これは、CASを実行するGCスレッド又は読取りバリアを含み、コストがかかる。
[00250] コストのかかるこうした動作を削減又は回避するための何らかの方式を理解するには、64ビット参照において、仮想アドレスには64ビットすべてが使用されるわけではないことに留意されたい。下位のNビットのみが使用され、Nビットは通常≦48である。GC又は読取りバリアは、この仮想アドレス用の64ビット全体を上書きしようとする代わりに、このビットのみをセットすることができるという点で、実施形態によっては、特別ビットとして最上位バイトのうちの1つのバイト中のビット220を使用する。この書込みを、ログに記録するか、又は他の方法で記録する(1220)ことができて、この特別ビットを依然としてセットする必要があるかどうかを見いだすための処理(1114)を後に可能とする。このようにして、GCは、マーキング中にCASを回避する。
[00251] いくつかの追加の組合せ及び変形形態
[00252] コード、データ構造、論理、構成要素、通信、及び/又はその機能的均等物のこうした組合せのいずれも、前述のシステム及びその変形形態のいずれと組み合わせてもよい。プロセスは、動作可能な任意のサブセット又は組合せ又はシーケンスにおいて、本明細書に記載の任意のステップを含んでもよい。各変形形態は、単独で、又は他の変形形態のいずれか1つ若しくは複数と組み合わせて存在してもよい。各変形形態は、プロセスのいずれかとともに存在してもよく、各プロセスは、他のプロセスのいずれか1つ又は複数のプロセスと組み合わせてもよい。各プロセス又はプロセスの組合せ(変形形態を含む)は、前述の構成された記憶媒体の組合せ及び変形形態のいずれと組み合わせてもよい。
[00253] 結論
[00254] 要するに、本明細書において提示される各教示によれば、メモリの再利用は、ある特定の同期命令を回避するように調整され、データの整合性及び可用性を保持しながら、同時実行ガベージコレクションを高速化する。ガベージコレクションは、もはや使用されていないオブジェクト500、又はメモリ112の他の未使用領域302を再利用する。ポインタ216は、アドレス値224を保持するアドレス部分222と、特別ビット220を有するガベージコレクション部分218とに分割される。マーキング・コード236は、ガベージコレクション部分218のみを書き込み、特別ビット220をマーク参照の再配置候補などにセットする。ミューテータ・スレッド210は、アドレス224を更新するのにポインタ216全体を同時に変化させてもよいが、ミューテーションによって、間違った再利用が引き起こされることはない。その間に、ガベージコレクション206において、CAS(コンペア・アンド・スワップ命令又はコンペア・アンド・セット)の同期命令802を回避することによって実行速度が向上する。非CASだが、それにもかかわらずアトミック書込み814が代わりに使用される。ミューテータ210が、ユーザ・アドレス空間232又はカーネル・アドレス空間230で実行される。1つ又は複数の変換アクティビティ1238~1246を実行するコードを使用して、参照が標準の非分割形式にあることを予想する一般コード(120、122、124、210)によって実行時エラーを回避するために、分割されたポインタ216とその使用がガベージコレクタに含まれてもよい。
[00255] 特定の実施形態が、プロセスとして、構成された記憶媒体として、又はシステムとして、本明細書ではっきりと図示及び説明されているが、あるタイプの実施形態の考察がまた、一般に他の実施形態のタイプにまで及ぶことが認識されよう。たとえば、図11及び図12に関連するプロセスの説明はまた、構成された記憶媒体を説明するのに役立ち、又他の図に関連して考察されるようなシステム及び製造の技術的な効果及び運用を説明するのに役立つ。ある実施形態による限定が必ずしも別の実施形態にも解釈されることにはならない。具体的には、プロセスは、構成されたメモリなどのシステム又は製造を説明しながら提示されるデータの構造及び構成に必ずしも限定されるわけではない。
[00256] 実装の詳細は、特定のAPIなど、特定のコード、特定の分野、及び特定のサンプル・プログラムに関係してもよく、したがって、あらゆる実施形態に見受けられるわけではないことを当業者は理解することになる。また、詳細を説明するのに使用されるプログラムの識別子及び他のいくつかの専門用語は、実装時に固有のものであり、したがって、あらゆる実施形態に関係する必要があるわけではないことを当業者は理解することになる。それにもかかわらず、それらは、ここに存在するように必ずしも要求されるわけではないが、そうした詳細は、文脈を提供することにより一部の読者の役に立ち、及び/又は本明細書で説明する技術の実現可能な多くの実装のうちのいくつかを図示することができる。
[00257] 次のような除外が本明細書に明確に記載されていない限り、いくつかの特徴Xを有する一実施形態を本明細書で参照すること、及びいくつかの特徴Yを有する一実施形態を本明細書のどこかで参照することによって、特徴Xも特徴Yもどちらも有する本開示の実施形態から除外されることにはならい。その特定の除外が本明細書の任意の例に与えられていないにもかかわらず、一実施形態の一部であると記載された任意の特徴が、別の実施形態において明らかに包含されなくてもよいという意味において、起こり得るあらゆる否定的なクレームの限定は本開示の範囲内にある。「実施形態」という用語は、「プロセス、システム、製品、構成されたコンピュータ読取り可能な記憶媒体、及び/又は適用される法律と矛盾のないやり方で適用されるように本明細書で教示する他の例」の使い勝手がよりよい形式として本明細書で単に使用される。したがって、所与の「実施形態」は、その実施形態が少なくとも1つのクレームと矛盾しない場合は、本明細書に開示する特徴の任意の組合せを含んでもよい。
[00258] 各図に示すあらゆるアイテムが、あらゆる実施形態に存在している必要があるわけではない。その反対に、一実施形態が、各図に明確に示してはいない(1つ又は複数の)アイテムを含んでもよい。いくつかの可能性が、ここで特定の例によって本文及び図面に図示されているが、各実施形態は、これらの例から逸脱してもよい。たとえば、ある例の特定の技術的効果又は技術的特徴が、省略され、名称変更され、別々にグループ化され、繰り返され、ハードウェア及び/又はソフトウェアに別々にインスタンス化されてもよく、又は各例のうち2つ以上に現れる効果若しくは特徴の混合であってもよい。実施形態によっては、ある場所に示す機能はまた、異なる場所で提供されてもよく、機能モジュールは、全体として見れば相互作用するモジュールの集合から所望の技術的効果を必ずしも省略することなく、所与の実装形態において様々な方式で定義できることを当業者は認識する。
[00259] 参照番号によって全体を通して図面に対して参照してきた。所与の参照番号と関連付けられる言い回し、各図、又は本文の中の明らかな矛盾はいずれも、その番号によって参照されるものの範囲を単に広げるものと理解すべきである。同じ参照番号が使用されているにもかかわらず、所与の参照番号の異なる例は、異なる実施形態に言及してもよい。同様に、所与の参照番号を使用して、動詞、名詞、及び/又は対応する各例に言及してもよく、たとえば、プロセッサ110は、それらを実行することによって命令を処理(110)してもよい。
[00260] 本明細書では、「a」及び「the」などの用語は、示されるアイテム又はステップのうち1つ又は複数を含む。具体的には、特許請求の範囲において、アイテムを参照することは一般に、少なくとも1つのそのようなアイテムが存在することを意味し、ステップを参照することは、ステップのうちの少なくとも1つの例が実行されることを意味する。
[00261] 見出しは便宜的であるだけで、所与のトピックに関する情報は、見出しがそのトピックを示すセクション以外で認められてもよい。
[00262] 出願されたすべての特許請求の範囲及び要約書は明細書の一部である。
[00263] 例示的な実施形態を各図面に示し、先に述べてきたが、特許請求の範囲で説明する原理及び概念から逸脱することなく数多くの修正を加えることができ、又そのような修正には抽象概念全体を包含する必要はないことが当業者には明らかになろう。主題は、構造的特徴及び/又は手順に関する行為に特有の言語で記載されているが、添付の特許請求の範囲に定義されるその主題は、特許請求の範囲の前に記載された特定の技術的な特徴又は行為に必ずしも限定されるわけではないことが理解されるべきである。所与の定義又は例において特定されるあらゆる意味又は態様又は技術的効果が、必ずしも、あらゆる実施形態に存在し、又はあらゆる実施形態で利用されるわけではない。むしろ、説明される特定の特徴及び行為及び効果が特許請求の範囲を実装するとき、考察するための例として開示される。
[00264] 抽象的なアイデア全体を網羅するには不十分ではあるが、特許請求の範囲の同等性の意味及び範囲内で実現するあらゆる変更が、その範囲内で法が認める最大限の範囲まで包含されるべきである。

Claims (15)

  1. ガベージコレクション・マーキング用のプロセッサCAS命令への依存を回避するシステムであって、前記回避されたCAS命令が、1つ又は複数のコンペア・アンド・スワップ命令及びコンペア・アンド・セット命令を含み、前記システムが、
    アドレス可能ユニットを有するメモリであって、それぞれのアドレス可能ユニットが、それぞれのアドレス値を使用して個別にアドレス指定可能であるメモリと、
    前記メモリ内に存在する1つ又は複数のポインタであって、各ポインタが、少なくとも2つのアドレス可能ユニット内に存在し、各ポインタが、アドレス値を保持するアドレス部分、及び前記アドレス部分を除外したガベージコレクション部分を有する、1つ又は複数のポインタと、
    前記メモリとの通信動作が可能であるプロセッサであって、命令セットを有し、前記プロセッサの命令セットが、実行されると、少なくとも1つのアドレス可能ユニットに、ある値をアトミックに書き込む、少なくとも1つの書込み命令を含み、前記書込み命令が任意のCAS命令を除外する、プロセッサと、
    実行されると、1つ又は複数のそれぞれのポインタの、少なくとも1つ又は複数のアドレス値を変化させるミューテータ・スレッドと、
    ガベージコレクション・マーキング・フェーズ中に、前記ミューテータ・スレッドと同時に実行され、前記ポインタの前記アドレス部分が、最後にチェックされたときには再利用可能でなかったメモリのある領域を特定したことを示すものとして、前記書込み命令を使用して、ポインタの前記ガベージコレクション部分に参照マーク・ビットをアトミックにセットする、ガベージコレクタと
    を備え、
    前記システムが、前記ミューテータ・スレッドによって書き込まれるアドレス値の整合性を保持しながら、前記ガベージコレクション・マーキング・フェーズを実行し、前記ミューテータ・スレッドと前記ガベージコレクタが互いに同時に実行されている場合でも、CAS命令に依存することなく実行する、システム。
  2. 前記参照マーク・ビットをアトミックにセットするのに使用される前記書込み命令が、ここでは書込み平均として示してある平均プロセッサ・サイクル・カウントを有し、前記プロセッサ命令セットの前記回避されたCAS命令が、ここではCAS平均として示してある平均プロセッサ・サイクル・カウントを有する、最速の回避されたCAS命令を含み、CAS平均が、書込み平均の少なくとも2倍である、請求項1に記載のシステム。
  3. 前記ガベージコレクタが、ミューテータ・スレッド読取りバリア内に存在するマーキング・フェーズ・コードを含む、請求項1に記載のシステム。
  4. 前記ガベージコレクタが、ガベージコレクタ・スレッド内に存在するマーキング・フェーズ・コードを含む、請求項1に記載のシステム。
  5. 前記ポインタが、少なくとも64個のビットを含み、前記ポインタの前記ガベージコレクション部分が、少なくとも8個のビットを含み、
    前記システムが、少なくとも2つのミューテータ・スレッドを含み、各スレッドは、前記ガベージコレクション・マーキング・フェーズ中に、前記ガベージコレクタと同時に実行され、そのそれぞれが、実行されると、1つ又は複数のそれぞれのポインタの、1つ又は複数のアドレス値を変化させる、請求項1に記載のシステム。
  6. 前記ミューテータ・スレッドが、カーネル・アドレス空間内で実行される、請求項1に記載のシステム。
  7. 実行されると、それぞれのアドレスが前記ガベージコレクション・マーキング・フェーズ中に前記ミューテータ・スレッドによって変化した、1つ又は複数のポインタのそれぞれの識別子を記録する、変化したポインタ記録器をさらに含み、前記変化したポインタ記録器が、メモリのマーキングされていない到達不能領域の識別を支援する、請求項1に記載のシステム。
  8. 前記ポインタの前記アドレス部分が、オブジェクト指向プログラミング言語において実装されるプログラムによって定義されたオブジェクトを保持したか、又は保持するメモリの領域を識別した、請求項1に記載のシステム。
  9. マーキング・フェーズ中にプロセッサCAS命令への依存を回避するガベージコレクション・プロセスであって、前記回避されたCAS命令が、1つ又は複数のコンペア・アンド・スワップ命令又はコンペア・アンド・セット命令を含み、前記プロセスが、コンピューティング・システムにおいて実行されるコードによって実行され、前記プロセスが、
    前記コンピューティング・システムのデジタル・メモリ内に存在する1つ又は複数のポインタの位置をガベージコレクタが受信することであって、各ポインタが、アドレス値を保持するアドレス部分、及び前記アドレス部分を除外したガベージコレクション部分を有することと、
    ミューテータ・スレッドが、前記ガベージコレクタと同時に実行され、少なくとも、前記ポインタのうち少なくとも1つのポインタの前記アドレス部分にアクセスすることと
    を含み、
    前記ガベージコレクタが、非CAS書込み命令を使用して、前記ポインタの前記アドレス部分を上書きすることなく、ポインタの前記ガベージコレクション部分に参照マーク・ビットをアトミックにセットし、前記セットされた参照マーク・ビットは、前記ポインタの前記アドレス部分が、後続のガベージコレクション処理用の前記メモリの領域を識別し、又は識別したことを示し、
    前記プロセスが、前記ミューテータ・スレッドと前記ガベージコレクタが互いに同時実行するにもかかわらず、CAS命令に依存することなく、アドレス値の整合性を保持しながら、前記ガベージコレクション・マーキング・フェーズを実行する、プロセス。
  10. 非CAS書込み命令を使用して、ポインタの前記ガベージコレクション部分において前記参照マーク・ビットをアトミックにセットする前記ガベージコレクタが、
    前記ポインタの前記ガベージコレクション部分からのバイト値を、ここではGCportionと示す変数へとアトミックに読み込むことと、
    GCportionにおいて前記参照マーク・ビットをセットすることと、
    次いで、前記非CAS書込み命令を使用して、GCportionからの前記値を、前記ポインタの前記ガベージコレクション部分へとアトミックに書き戻すことと
    を含む、請求項9に記載のプロセス。
  11. 前記ミューテータ・スレッドが、バイト値を前記アトミックに読み込んだ後に、且つ前記非CAS書込み命令を前記使用して、前記値をアトミックに書き戻す前に、少なくとも前記ポインタの前記アドレス部分を変化させ、前記プロセスがさらに、前記変化したポインタが再利用可能なメモリの偽陽性であるかどうかの後続の決定をサポートするために、前記ポインタの識別子を記録することを含む、請求項10に記載のプロセス。
  12. 前記コンピューティング・システムにおいて実行されるコードによって実行される以下の動作、すなわち、
    前記ポインタの前記ガベージコレクション部分がすべてのゼロを含む場合と同様に、前記ポインタの前記ガベージコレクション部分を処理することと、
    前記ポインタの前記ガベージコレクション部分を出力ゼロ化することと、
    前記ポインタの前記ガベージコレクション部分が前記ポインタの前記アドレス部分の前記最上位ビットによって符号拡張される場合と同様に、前記ポインタの前記ガベージコレクション部分を処理することと、
    前記ポインタの前記ガベージコレクション部分を介して、前記ポインタの前記アドレス部分の前記最上位ビットを符号拡張することと、又は、
    前記ポインタの前記アドレス部分を使用するときに、ポインタの前記ガベージコレクション部分を無視することと
    のうちの少なくとも1つをさらに含む、請求項9に記載のプロセス。
  13. 1つ又は複数のポインタのそれぞれの識別子を記録する前記コンピューティング・システムにおいて実行されるコードをさらに含み、そのそれぞれのアドレスが、前記ガベージコレクション・マーキング・フェーズ中に、前記ミューテータ・スレッドによって変化し、前記記録することが、前記メモリの、到達不能なマークされていない領域の自動識別を支援する、請求項9に記載のプロセス。
  14. 前記ミューテータ・スレッドが、ユーザ・アドレス空間において実行される、請求項9に記載のプロセス。
  15. 前記ガベージコレクタが、前記非CAS書込み命令を使用して、前記参照マーク・ビットとして、前記ポインタの前記最上位ビットをアトミックにセットする、請求項9に記載のプロセス。
JP2021539121A 2019-02-05 2020-01-22 ガベージコレクションのマーキングにおける同期依存の軽減 Pending JP2022519169A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/268,041 US10802965B2 (en) 2019-02-05 2019-02-05 Reducing synchronization reliance in garbage collection marking
US16/268,041 2019-02-05
PCT/US2020/014535 WO2020163080A1 (en) 2019-02-05 2020-01-22 Reducing synchronization reliance in garbage collection marking

Publications (1)

Publication Number Publication Date
JP2022519169A true JP2022519169A (ja) 2022-03-22

Family

ID=69726738

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021539121A Pending JP2022519169A (ja) 2019-02-05 2020-01-22 ガベージコレクションのマーキングにおける同期依存の軽減

Country Status (13)

Country Link
US (2) US10802965B2 (ja)
EP (1) EP3921736B1 (ja)
JP (1) JP2022519169A (ja)
KR (1) KR20210122832A (ja)
CN (1) CN113383318A (ja)
AU (1) AU2020217643A1 (ja)
BR (1) BR112021012888A2 (ja)
CA (1) CA3128016A1 (ja)
IL (1) IL284970A (ja)
MX (1) MX2021009362A (ja)
SG (1) SG11202107184XA (ja)
WO (1) WO2020163080A1 (ja)
ZA (1) ZA202104813B (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9710165B1 (en) * 2015-02-18 2017-07-18 Pure Storage, Inc. Identifying volume candidates for space reclamation
US11899576B2 (en) * 2019-06-11 2024-02-13 Micron Technology, Inc. Dynamically modifying garbage collection rates for a memory subsystem in a closed-loop system
US11392427B2 (en) 2020-01-06 2022-07-19 Microsoft Technology Licensing, Llc Lock-free reading of unitary value sets
US11288186B2 (en) * 2020-04-23 2022-03-29 Netapp, Inc. Adjustment of garbage collection parameters in a storage system
US11687449B2 (en) * 2020-09-10 2023-06-27 International Business Machines Corporation Concurrent marking garbage collection
US11875193B2 (en) 2021-03-25 2024-01-16 Oracle International Corporation Tracking frame states of call stack frames including colorless roots
US11734171B2 (en) * 2021-05-19 2023-08-22 Oracle International Corporation Snapshot at the beginning marking in Z garbage collector
US20230121841A1 (en) * 2021-10-19 2023-04-20 EMC IP Holding Company LLC Facilitating per-cpu reference counting for multi-core systems with a long-lived reference
US11835990B2 (en) 2021-11-16 2023-12-05 Netapp, Inc. Use of cluster-level redundancy within a cluster of a distributed storage management system to address node-level errors
CN114239918B (zh) * 2021-11-19 2022-05-24 哈尔滨工业大学 基于e2sfca可达分析的移动式压缩装备巡逻寻优方法
TW202334821A (zh) 2022-02-18 2023-09-01 慧榮科技股份有限公司 資料儲存裝置以及非揮發式記憶體控制方法
TWI805231B (zh) 2022-02-18 2023-06-11 慧榮科技股份有限公司 資料儲存裝置以及非揮發式記憶體控制方法
US11954023B2 (en) 2022-07-20 2024-04-09 Microsoft Technology Licensing, Llc Garbage collection prefetching state machine

Family Cites Families (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4662657B2 (ja) 2000-07-10 2011-03-30 マイクロソフト コーポレーション 統一データ型システムおよび方法
US6865585B1 (en) * 2000-07-31 2005-03-08 Microsoft Corporation Method and system for multiprocessor garbage collection
US6502111B1 (en) 2000-07-31 2002-12-31 Microsoft Corporation Method and system for concurrent garbage collection
US6598141B1 (en) 2001-03-08 2003-07-22 Microsoft Corporation Manipulating interior pointers on a stack during garbage collection
US6980997B1 (en) 2001-06-28 2005-12-27 Microsoft Corporation System and method providing inlined stub
US6973554B2 (en) 2003-04-23 2005-12-06 Microsoft Corporation Systems and methods for multiprocessor scalable write barrier
US7529775B2 (en) 2003-08-20 2009-05-05 Microsoft Corporation Method and system for collecting information about applications on a computer system
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
US7665077B2 (en) 2004-10-18 2010-02-16 Microsoft Corporation System and method for sharing objects between applications in a virtual runtime environment
US7822938B2 (en) 2004-10-20 2010-10-26 Microsoft Corporation System and method for performing garbage collection based on unmanaged memory allocations
US7610579B2 (en) 2004-12-10 2009-10-27 Microsoft Corporation Critical finalizers
US7937709B2 (en) * 2004-12-29 2011-05-03 Intel Corporation Synchronizing multiple threads efficiently
US8713524B2 (en) 2005-04-06 2014-04-29 Microsoft Corporation Memory management configuration
US7389395B1 (en) * 2005-06-26 2008-06-17 Sun Microsystems, Inc. Split-reference, two-pass mark-compaction
US7441094B2 (en) 2005-07-05 2008-10-21 Microsoft Corporation Memory management configuration
US8701095B2 (en) 2005-07-25 2014-04-15 Microsoft Corporation Add/remove memory pressure per object
US7926071B2 (en) 2005-10-20 2011-04-12 Microsoft Corporation Load balancing interfaces
US8234378B2 (en) 2005-10-20 2012-07-31 Microsoft Corporation Load balancing in a managed execution environment
US7774389B2 (en) 2007-01-17 2010-08-10 Microsoft Corporation Optimized garbage collection techniques
US7716192B2 (en) * 2007-05-08 2010-05-11 Microsoft Corporation Concurrent, lock-free object copying
US7685182B2 (en) 2007-05-08 2010-03-23 Microsoft Corporation Interleaved garbage collections
US9208081B1 (en) * 2007-11-30 2015-12-08 Oracle America, Inc. Concurrent object management
US8065491B2 (en) 2007-12-30 2011-11-22 Intel Corporation Efficient non-transactional write barriers for strong atomicity
US7801872B2 (en) 2008-04-08 2010-09-21 Microsoft Corporation Providing a publishing mechanism for managed objects
US7831640B2 (en) 2008-04-15 2010-11-09 Microsoft Corporation Using an overflow list to process mark overflow
US7987215B2 (en) * 2008-04-22 2011-07-26 Microsoft Corporation Efficiently marking objects with large reference sets
US7953778B2 (en) 2008-05-20 2011-05-31 International Business Machines Corporation Efficient support of consistent cyclic search with read-copy update and parallel updates
US7860906B2 (en) 2008-05-28 2010-12-28 Microsoft Corporation Overflow per segment
US8028008B2 (en) 2008-09-25 2011-09-27 International Business Machines Corporation System and method for optimizing write barrier in garbage collection
US8612493B2 (en) * 2008-10-30 2013-12-17 International Business Machines Corporation Allocation cache premarking for snap-shot-at-the-beginning concurrent mark-and-sweep collector
US20100318584A1 (en) 2009-06-13 2010-12-16 Microsoft Corporation Distributed Cache Availability During Garbage Collection
US8782306B2 (en) * 2010-02-03 2014-07-15 Oracle America Low-contention update buffer queuing for large systems
US8527559B2 (en) * 2010-04-23 2013-09-03 Clausal Computing Oy Garbage collector with concurrent flipping without read barrier and without verifying copying
US8566368B2 (en) 2010-09-29 2013-10-22 Microsoft Corporation Garbage collection extensibility via managed code
US10754770B2 (en) * 2011-10-10 2020-08-25 Microsoft Technology Licensing, Llc Work stealing of partially-marked objects
WO2014033606A2 (en) 2012-08-31 2014-03-06 Pradeep Varma Systems and methods of memory and access management
US9804962B2 (en) 2015-02-13 2017-10-31 Microsoft Technology Licensing, Llc Garbage collection control in managed code
US10558566B2 (en) 2015-04-16 2020-02-11 Microsoft Technology Licensing, Llc Garbage collection of non-pinned objects within heap
US10929201B2 (en) * 2015-10-22 2021-02-23 Wind River Systems, Inc. Method and system for implementing generation locks
US10013347B2 (en) * 2015-10-27 2018-07-03 Sybase, Inc. Non-blocking parallel memory mechanisms
US9921959B2 (en) 2016-03-11 2018-03-20 Oracle International Corporation Efficient reference classification and quick memory reuse in a system that supports concurrent garbage collection
US9846645B1 (en) 2016-05-27 2017-12-19 Hewlett Packard Enterprise Development Lp Managing objects stored in memory
US10120655B2 (en) 2016-06-03 2018-11-06 Microsoft Technology Licensing, Llc. Seamless high performance interoperability between different type graphs that share a garbage collector
US10761979B2 (en) * 2016-07-01 2020-09-01 Intel Corporation Bit check processors, methods, systems, and instructions to check a bit with an indicated check bit value
US10248471B2 (en) 2016-09-15 2019-04-02 Oracle International Corporation Lockless execution in read-mostly workloads for efficient concurrent process execution on shared resources
US10628306B2 (en) 2017-02-01 2020-04-21 Microsoft Technology Licensing, Llc Garbage collector
US10572181B2 (en) 2017-02-01 2020-02-25 Microsoft Technology Licensing, Llc Multiple stage garbage collector
US10360079B2 (en) 2017-06-16 2019-07-23 GM Global Technology Operations LLC Architecture and services supporting reconfigurable synchronization in a multiprocessing system
US10558564B2 (en) * 2017-09-28 2020-02-11 Hewlett Packard Enterprise Development Lp Pointers in a memory managed system
US11392427B2 (en) 2020-01-06 2022-07-19 Microsoft Technology Licensing, Llc Lock-free reading of unitary value sets

Also Published As

Publication number Publication date
US10802965B2 (en) 2020-10-13
US20200250084A1 (en) 2020-08-06
KR20210122832A (ko) 2021-10-12
WO2020163080A1 (en) 2020-08-13
EP3921736B1 (en) 2024-04-10
US20200409839A1 (en) 2020-12-31
US11301375B2 (en) 2022-04-12
BR112021012888A2 (pt) 2021-09-14
SG11202107184XA (en) 2021-07-29
CN113383318A (zh) 2021-09-10
CA3128016A1 (en) 2020-08-13
EP3921736A1 (en) 2021-12-15
AU2020217643A1 (en) 2021-07-22
ZA202104813B (en) 2022-09-28
IL284970A (en) 2021-09-30
MX2021009362A (es) 2021-09-10

Similar Documents

Publication Publication Date Title
JP2022519169A (ja) ガベージコレクションのマーキングにおける同期依存の軽減
US10824420B2 (en) Caching build graphs
EP3123316B1 (en) Supporting dynamic behavior in statically compiled programs
US9836290B2 (en) Supporting dynamic behavior in statically compiled programs
US11392427B2 (en) Lock-free reading of unitary value sets
RU2565514C2 (ru) Средство функциональной виртуализации для блокировки командной функции многофункциональной команды виртуального процесса
KR20220113372A (ko) 통합된 참조물 및 2차 객체 표시
JP2022545012A (ja) メモリー・アパーチャのフラッシュ・オーダーを使用したデーター保存
TW201220049A (en) A string cache file for optimizing memory usage in a Java virtual machine
CN108509460B (zh) 分布式系统中的数据一致性检查
US20160147559A1 (en) Modification of context saving functions
RU2805768C2 (ru) Уменьшение зависимости от синхронизации в пометке сбора мусора

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20221215

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20231204

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20240110

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20240404

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20240418