JP5868429B2 - 領域に基づくガベージ・コレクタを用いてクラスを漸進的にアンロードするための方法、コンピュータ・プログラム製品、および装置 - Google Patents

領域に基づくガベージ・コレクタを用いてクラスを漸進的にアンロードするための方法、コンピュータ・プログラム製品、および装置 Download PDF

Info

Publication number
JP5868429B2
JP5868429B2 JP2013552082A JP2013552082A JP5868429B2 JP 5868429 B2 JP5868429 B2 JP 5868429B2 JP 2013552082 A JP2013552082 A JP 2013552082A JP 2013552082 A JP2013552082 A JP 2013552082A JP 5868429 B2 JP5868429 B2 JP 5868429B2
Authority
JP
Japan
Prior art keywords
class
region
memory
instance
bit vector
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.)
Active
Application number
JP2013552082A
Other languages
English (en)
Other versions
JP2014504768A (ja
Inventor
ブルカ、ピーター、ダブリュー
ディッシャー、ジェフリー、エム
マイヤー、ダリル、ジェイ
シアンパコーン、ライアン、エー
ミシック、アレクサンダー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2014504768A publication Critical patent/JP2014504768A/ja
Application granted granted Critical
Publication of JP5868429B2 publication Critical patent/JP5868429B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)
  • Refuse Collection And Transfer (AREA)

Description

本発明は、メモリ管理に関し、より詳細には、領域に基づくガベージ・コレクタを用いてクラスを漸進的にアンロードするための装置および方法に関する。
Java(R)仮想マシン(JVM)、マイクロソフト共通言語ランタイム(CLR)、またはSmalltalkランタイムなどのオブジェクト指向のマネージド・ランタイムにおいて、主なメモリ・リソースは、ガベージ・コレクションされるオブジェクトのヒープである。オブジェクトのヒープはオブジェクトのためのメモリを提供し、オブジェクトのそれぞれはクラスのインスタンスである。すべてのマネージド・ランタイムは、オブジェクトのガベージ・コレクションをサポートする。Java(R)仮想マシンなどの一部のマネージド・ランタイムは、クラスのガベージ・コレクションも提供する。
Java(R)においては、クラスは、Java(R) ClassLoader、プログラマによって指定された関連するクラスの基本的に任意のグループの粒度(granularity)で収集される。クラス・ローダは、(a)そのクラス・ローダに対する参照がなく、(b)そのクラス・ローダの定義されたクラスのいずれに対する参照もなく、(c)いずれのスタックにもいかなる定義されたクラスからの実行中のメソッドもなく、(d)そのクラス・ローダの定義されたクラスのいずれのインスタンスもないと、ガベージ・コレクションされ得る。(a)および(b)の場合は、クラス・ローダとクラスの両方がそれらを表すプロキシ・オブジェクト(proxy object)を有するので、判定するのが比較的簡単である。通常のガベージ・コレクタのアルゴリズムは、これらに対する参照を「コストなしで(for free)」見つける。(c)の場合も、各ガベージ・コレクション・サイクルの初めにスタックがクローリングされなければならないので判定が容易である。しかし、(d)の場合は、判定がより困難である。
単純な実装では、ガベージ・コレクタは、どのクラスが生きているインスタンスを有するのかを判定するためにすべての生きているオブジェクトを調べなければならない。これは、コレクタがグローバルな収集を実行しているときに行うのは、十分に簡単である。しかし、最近のガベージ・コレクタは、より良い停止時間をもたらすために漸進的である傾向がある。そのようなコレクタは、ヒープの一部しか調べない。通常、これらのコレクタは、「記憶集合(remembered set)」を用いて、コレクション集合(collection set)外のオブジェクトからコレクション集合内のオブジェクトへの参照を追跡する。単純なクラスをアンロードするガベージ・コレクタは、同じ解決策を用いる可能性がある。しかし、これは明らかに実用的でない。記憶集合は、ほとんどのオブジェクトがごくわずかしか参照を持たない傾向があるので成功する。しかし、あらゆるオブジェクトはクラス・ポインタを有するので、これらのそれぞれを記憶することは実用的でない。
別の単純な解決策は、「参照カウント」を使用することである。この解決策は、いくつかのはっきりした欠点を有する。この解決策は、割り当てのたびにクラス内のカウンタをインクリメントし、オブジェクトが回収されるたびにそのカウンタをデクリメントすることをともなう。この解決策は、典型的な循環参照の参照カウントの問題には陥りにくいが、2つの重大な問題を確かに抱えている。第1に、この解決策は、すべての割り当てスレッド(allocating thread)が共有されたカウンタを更新することを必要とするのでうまく並列化しない。第2に、この解決策は、すべての回収されたオブジェクトが調べられることを必要とし、それは、最近のガベージ・コレクタが避けようと懸命に努力することである。
この問題に対する別の解決策は、トレイン・アルゴリズム(train algorithm)に基づくコレクタを使用することである。そのようなコレクタは、領域に基づくコレクタである。しかし、一般的な領域に基づくコレクタとは異なり、そのようなコレクタは、ラウンドロビンの順序で領域を収集しなければならないという点で制限されている。この制限のために、トレイン・アルゴリズムは、より大きな数を割り振られた領域からより小さな数を割り振られた領域への参照のみを記憶する必要がある。漸進的なクラスのアンロードを可能にするために、この解決策は、「最も若い列車(youngest train)」の識別子を各クラスに追加し、各クラスは、クラスのインスタンスを有する最も小さな数を割り振られた領域を記録する。この単純な解決策は、トレイン・アルゴリズムに適しているが、一般的な領域に基づくガベージ・コレクタには適用することも容易に適用範囲を広げることもできない。
以上のことから、必要とされているのは、ガベージ・コレクションされるオブジェクトのヒープ内の領域の任意のサブセットからクラスを効率的にアンロードするための装置および方法である。そのような装置および方法は、領域がいかなる特定の順序でガベージ・コレクションされることも必要としないことが理想的である。
本発明は、当技術分野の現状に対応して、より具体的には、現在利用可能な装置および方法によってまだ完全に解決されていない当技術分野の問題およびニーズに対応してなされた。したがって、本発明は、領域に基づくガベージ・コレクタを用いてクラスを漸進的にアンロードするための装置および方法を提供するためになされた。本発明の特徴および利点は、以下の説明および添付の特許請求の範囲からより完全に明らかになり、または以降で説明されるように本発明を実施することによって知ることができる。
以上のことを踏まえて、領域に基づくガベージ・コレクタを用いてクラスを漸進的にアンロードするための方法が、本明細書において開示される。一実施形態において、そのような方法は、クラス集合(class set)に関する記憶集合を保守するステップを含み、クラス集合は、クラス・ローダに関連するクラスの集合、クラスのグループ、および単一のクラスのうちの1つを含む。記憶集合は、クラス集合のインスタンスがメモリ内の1つまたは複数の領域に含まれるかどうか、およびどの領域にインスタンスが含まれるかを示す。メモリ内の領域のサブセットに対してインクリメンタル・ガベージ・コレクション・プロセスを実行するときに、方法は、記憶集合を調べて、クラス集合がサブセットの外の領域にインスタンスを含むかどうかを判定する。記憶集合が、クラス集合が領域のサブセットの外にインスタンスを含むことを示す場合、方法は、クラス集合が「生きている」と判定する。これは、領域のサブセットからそのクラス集合をアンロードできなくする。
対応するコンピュータ・プログラム製品および装置も、本明細書において開示され、特許請求される。
本発明の利点が容易に理解されるために、上で簡潔に説明された本発明のより具体的な説明が、添付の図面において図示される特定の実施形態を参照することによってなされる。これらの図面が本発明の典型的な実施形態を示すに過ぎず、したがって、本発明の範囲を限定すると見なされるべきでないことを理解した上で、本発明が、以下に添付の図面を用いてさらに具体的かつ詳細に示され、説明される。
本発明のさまざまな実施形態で使用するのに好適なコンピュータ・システムの一例を示す高レベルの構成図である。 オブジェクト指向のマネージド・ランタイムの一例、この例においてはJava(R)仮想マシンを示す高レベルの構成図である。 記憶集合、この例においては記憶集合フィールドおよび任意的なビット・ベクトルが、ランタイム環境内の各クラス・ローダに対して保有される本発明の一実施形態を示す図である。 記憶集合フィールドの表現の間の遷移の例を示す流れ図である。 オブジェクトのヒープからクラス・ローダをアンロードするための方法の一実施形態を示す流れ図である。 ビット・ベクトルが各クラス・ローダに対して保有される本発明の代替的な実施形態を示す図である。 ビット・ベクトルが各クラスに対して保有される本発明の代替的な実施形態を示す図である。 ビット・ベクトルを使用せず、記憶集合フィールドが各クラス・ローダに対して保有される本発明の代替的な実施形態を示す図である。
本明細書において全体的に説明され、図面に示される本発明のコンポーネントは、多種多様な異なる構成で配置され、設計され得ることが容易に理解されるであろう。したがって、図に示される本発明の実施形態の以下のより詳細な説明は、特許請求される本発明の範囲を限定するように意図されておらず、むしろ、本発明による現在考えられる実施形態の特定の例を表すに過ぎない。本明細書に記載の実施形態は、同様の部分が全体を通して同様の参照番号によって示される図面を参照することによって最も深く理解されるであろう。
当業者に理解されるであろうように、本発明は、装置、システム、方法、またはコンピュータ・プログラム製品として具現化され得る。さらに、本発明は、ハードウェアの実施形態、ハードウェアを動作させるように構成された(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)ソフトウェアの実施形態、または本明細書においてはすべてが全体的に「モジュール」もしくは「システム」と呼ばれる可能性があるソフトウェアの態様とハードウェアの態様とを組み合わせる実施形態の形態をとる可能性がある。さらに、本発明は、コンピュータが使用可能なプログラム・コードを記憶する任意の有形の表現媒体で具現化されたコンピュータが使用可能なストレージ媒体の形態をとる可能性がある。
1つまたは複数のコンピュータが使用可能なまたはコンピュータが読み取り可能なストレージ媒体の任意の組み合わせが、コンピュータ・プログラム製品を記憶するために利用され得る。コンピュータが使用可能なまたはコンピュータが読み取り可能なストレージ媒体は、例えば、電子、磁気、光、電磁気、赤外線、または半導体システム、装置、またはデバイスである可能性があるがそれらに限定されない。コンピュータが読み取り可能なストレージ媒体のより具体的な例(非網羅的なリスト)には、以下、すなわち、1つもしくは複数の配線を有する電気的な接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能プログラマブル読み出し専用メモリ(EPROMもしくはフラッシュ・メモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ(CDROM)、光ストレージ・デバイス、または磁気ストレージ・デバイスが含まれる可能性がある。本明細書の文脈においては、コンピュータが使用可能なまたはコンピュータが読み取り可能なストレージ媒体は、命令実行システム、装置、またはデバイスによって、またはそれらに関連して使用するためのプログラムを収容、記憶、または伝送することができる任意の媒体である可能性がある。
本発明の動作を実行するためのコンピュータ・プログラム・コードは、Java(R)、Smalltalk、C++などのオブジェクト指向プログラミング言語と、「C」プログラミング言語または同様のプログラミング言語などの通常の手続き型プログラミング言語とを含む1つまたは複数のプログラミング言語の任意の組み合わせで記述され得る。本発明を実装するためのコンピュータ・プログラム・コードは、アセンブリ言語などの低級プログラミング言語で記述される可能性もある。
本発明が、本発明のさまざまな実施形態による方法、装置、システム、およびコンピュータ・プログラム製品の流れ図または構成図あるいはその両方を参照して以下で説明される可能性がある。流れ図または構成図あるいはその両方の各ブロック、および流れ図または構成図あるいはその両方のブロックの組み合わせは、コンピュータ・プログラム命令またはコードによって実装され得ることが理解されるであろう。コンピュータ・プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサによって実行される命令が、流れ図または構成図あるいはその両方の1つのブロックまたは複数のブロックで規定された機能/動作を実施するための手段をもたらすように、汎用コンピュータ、専用コンピュータ、または機械を製造するためのその他のプログラム可能なデータ処理装置のプロセッサに与えられる可能性がある。
コンピュータ・プログラム命令は、コンピュータが読み取り可能なストレージ媒体に記憶された命令が、流れ図または構成図あるいはその両方の1つのブロックまたは複数のブロックで規定された機能/動作を実施する命令手段を含む製品をもたらすように、コンピュータまたはその他のプログラム可能なデータ処理装置を特定の方法で機能させることができるコンピュータが読み取り可能なストレージ媒体に記憶される可能性もある。コンピュータ・プログラム命令は、コンピュータまたはその他のプログラム可能な装置で実行される命令が、流れ図または構成図あるいはその両方の1つのブロックまたは複数のブロックで規定された機能/動作を実施するためのプロセスを提供するように、コンピュータで実施されるプロセスを生成するために一連の動作のステップがコンピュータまたはその他のプログラム可能な装置で実行されるようにするために、コンピュータまたはその他のプログラム可能なデータ処理装置にロードされる可能性もある。
図1を参照すると、コンピュータ・システム100の一例が示されている。コンピュータ・システム100は、本発明による装置および方法が実装され得る環境の一例を示すために示される。コンピュータ・システム100は、例として示されるに過ぎず、限定するように意図されていない。実際、本明細書において開示される装置および方法は、示されたコンピュータ・システム100だけでなく多種多様な異なるコンピュータ・システムに適用できる可能性がある。本明細書において開示される装置および方法は、潜在的に、複数のコンピュータ・システム100に分散される可能性もある。
コンピュータ・システム100は、少なくとも1つのプロセッサ102を含み、2つ以上のプロセッサを含む可能性がある。プロセッサ102は、プロセッサ102の状態を示すデータを記憶し、ソフトウェア・システムの実行を容易にする1つまたは複数のレジスタ104を含む。レジスタ104は、プロセッサ102の内部にある可能性があり、またはメモリ106に記憶される可能性がある。メモリ106は、動作データおよび実行可能なデータを記憶し、プロセッサ102は、それらのデータに基づいて動作する。メモリ106は、メモリ・コントローラ108を用いてプロセッサ102によってアクセスされ得る。メモリ106は、揮発性メモリ(例えば、RAM)および不揮発性メモリ(例えば、ROM、EPROM、EEPROM、ハード・ディスク、フラッシュ・メモリなど)を含み得る。
プロセッサ102は、ソフトウェアの実行およびユーザとのインタラクションをサポートする追加的なデバイスに結合され得る。例えば、プロセッサ102は、マウス、キーボード、タッチ・スクリーン、マイクロホンなどの1つまたは複数の入力デバイス110に結合され得る。プロセッサ102は、ディスプレイ・デバイス112、スピーカなどの1つまたは複数の出力デバイスにも結合され得る。プロセッサ102は、LAN、WAN、またはインターネットなどのネットワーク114を用いて1つまたは複数のその他のコンピュータ・システムと通信することができる。ネットワーク114を介した通信は、ネットワーク・アダプタ116によって容易にされ得る。
図2を参照すると、オブジェクト指向のマネージド・ランタイムの一例、この例においてはJava(R)ランタイム環境が示されている。Java(R)ランタイム環境は、本発明のさまざまな実施形態が動作することができるランタイム環境の一例を示すために示される。しかしながら、本明細書で開示されるインクリメンタル・ガベージ・コレクション技術は、Java(R)ランタイム環境に限定されず、ガベージ・コレクションされるオブジェクトのヒープを用いてオブジェクトを記憶する任意のオブジェクト指向のマネージド・ランタイムで動作し得るか、または動作するように適合され得る。本発明の実施形態が動作することができるランタイム環境のその他の非限定的な例には、マイクロソフト共通言語ランタイム(CLR)およびSmalltalkランタイムが含まれる。したがって、本明細書においてはJava(R)ランタイム環境に関する特定の言及がなされるが、本明細書において教示される原理は、Java(R)ランタイム環境に限定されず、多くのランタイム環境に適用できる可能性がある。
図2に示されるように、Java(R)ランタイム環境において、Java(R)仮想マシン202が、基礎となるハードウェアおよびオペレーティング・システム・アーキテクチャ204、206を含む可能性がある特定のプラットフォームで動作するように構成され得る。示されるように、Java(R)仮想マシン202は、「バイトコード」200と呼ばれる中間形態にコンパイルされたプログラム・コード200を受け取る。Java(R)仮想マシン202は、バイトコード200を、基礎となるプラットフォーム204、206で実行するためのネイティブのオペレーティング・システム・コールおよび機械命令に変換する。バイトコード200を特定のハードウェアおよびソフトウェア・プラットフォーム204、206のためにコンパイルする代わりに、バイトコード200は、一旦すべてのJava(R)仮想マシン202で動作するようにコンパイルされる。対称的に、Java(R)仮想マシン202は、基礎となるハードウェアおよびソフトウェア・プラットフォーム204、206に合わせて作成され得る。このようにして、Java(R)バイトコード200は、プラットフォームに依存しないと見なされ得る。
上述のように、Java(R)ランタイム環境において、主なメモリ・リソースは、ガベージ・コレクションされるオブジェクトのヒープ210である。オブジェクトのヒープ210はオブジェクトのためのメモリを提供し、オブジェクトのそれぞれはクラスのインスタンスである。ガベージ・コレクション・モジュール208またはサブシステム208が、プログラムによってもはや使用されていないオブジェクトまたはオブジェクトに関連するクラスによって占有されたメモリを回収するためにJava(R)ランタイム環境内に設けられる。とりわけ大きな利点として、ガベージ・コレクション・モジュール208は、もはや必要とされないオブジェクトを開放することをプログラマが気に掛けなくてよいようにし、そうでなければ、プログラマはオブジェクトを開放することに多大な設計の労力を取られる。
上述のように、Java(R)では、クラスが、プログラマによって指定された関連するクラスの基本的に任意のグループであるクラス・ローダの粒度でアンロードされる。クラス・ローダは、(a)そのクラス・ローダに対する参照がなく、(b)そのクラス・ローダの定義されたクラスのいずれに対する参照もなく、(c)いずれのスタックにもいかなる定義されたクラスからの実行中のメソッドもなく、(d)そのクラス・ローダの定義されたクラスのいずれのインスタンスもないと、アンロードされ得る。クラス・ローダとクラスの両方がそれらを表すプロキシ・オブジェクトを有するので、ガベージ・コレクション・モジュール208は、(a)および(b)の場合を容易に判定することができる。各ガベージ・コレクション・サイクルの始めにスタックがクローリングされなければならないので、ガベージ・コレクション・モジュール208は、(c)の場合も容易に判定することができる。しかし、ガベージ・コレクション・モジュール208は、(d)の場合を判定することがより困難である可能性がある。(d)の場合を効率的に判定するためのさまざまな新規性のある技術が、図3から8に関連して説明される。
停止時間を減らすために、ガベージ・コレクション・モジュール208は、漸進的に動作するように構成され得る。つまり、ガベージ・コレクション・モジュール208は、オブジェクトのヒープ210全体とは対称的に、1回あたりオブジェクトのヒープ210の一部に対してガベージ・コレクションを実行するように構成され得る。これを実現するために、オブジェクトのヒープ210は、いくつかの領域(例えば、数百個または数千個の領域)に分割される可能性がある。それから、ガベージ・コレクション・モジュール208は、任意の特定の時間にこれらの領域のサブセット(本明細書においては「コレクション集合」とも呼ばれる)に対してガベージ・コレクションを実行することができる。これは、メインプログラムの中断を可能な限り最小化する。ガベージ・コレクション・モジュール208は、漸進的に動作し得るので、どのクラス・ローダがコレクション集合の中および外に生きているオブジェクトを有するかを判定して、クラス・ローダがアンロードされ得るかどうかを判定することができる必要がある。クラス・ローダがコレクション集合の中または外に生きているオブジェクトを有するかどうかを判定するためのさまざまな技術が、図3から8に関連して検討される。
図3を参照すると、本発明による特定の実施形態においては、ランタイム環境内の各クラス集合に対して記憶集合が設けられる可能性がある。本開示において、「クラス集合」は、クラス・ローダに関連するクラスの集合、クラスのグループ、単一のクラスなどを指すために使用される。Java(R)はクラス・ローダの粒度でクラスをアンロードすることができるが、その他のランタイム環境は、個々のクラスまたはクラスのグループなどの異なるレベルの粒度でクラスをアンロードする可能性がある。表現「クラス集合」は、これらの異なるレベルの粒度を包含するように意図される。
図3は、クラス集合がクラス・ローダ300に関連するクラスの集合である実施形態を示す。この実施形態においては、記憶集合304が、ランタイム環境内の各クラス・ローダ300に関連付けられる。記憶集合304は、クラス・ローダ300に関連する任意のクラスがオブジェクトのヒープ210の任意の領域302内にインスタンスを含むかどうかを記憶するために使用される。記憶集合304は、インスタンスが位置する領域302も示す可能性がある。
図3に示されるように、選択された実施形態において、記憶集合304は、フィールド304、この例においてはタグ付きポインタ(tagged pointer)304として具現化され得る。特定の実施形態においては、そのようなフィールド304は、クラス・ローダ300の内部構造に追加される可能性がある。例えば、Java(R)ランタイム環境においては、フィールド304は、内部のClassLoaderの構造に追加され得る。このフィールド304は、クラス・ローダ300によって定義されたクラスのインスタンスを含む領域302の記憶集合304を構築するために、ガベージ・コレクション・モジュール208によって使用され得る。
メモリを効率的に使用するために、フィールド304は、特定の実施形態において、図3に示される表現のうちの1つを使用する可能性がある。これらの表現は、(1)「空」表現304a−この表現は、メモリ210内の領域302のいずれにもクラス集合のインスタンスが含まれていないことを示す−、(2)「直接(immediate)」表現304b−この表現は、クラス集合のインスタンスを含むメモリ210内の領域302を指す1つまたは複数のポインタを記憶する−、(3)「オーバーフロー(overflow)」表現304c−この表現は、実際にはそうでないとしてもすべての領域302がクラス集合のインスタンスを含むと想定するエラー状態である−、および(4)「ビット・ベクトル」表現304d−この表現は、領域302ごとに1ビットを有するビット・ベクトル306を指すポインタを記憶し、ビット・ベクトル306のビットを設定することは、対応する領域302にクラス集合の少なくとも1つのインスタンスが含まれることを示す−を含む。示された実施形態において、各フィールド304の最後の2ビットは、どの表現が使用されるかを示すための「タグ」を提供する。例えば、図3に示されるように、タグ「00」は、フィールド304が「空」表現304aを使用していることを示し、タグ「01」は、フィールド304が「直接」表現304bを使用していることを示し、タグ「11」は、フィールド304が「オーバーフロー」表現304cを使用していることを示し、タグ「10」は、フィールド304が「ビット・ベクトル」表現304dを使用していることを示す。
引き続き図3を全体的に参照しながら図4を参照すると、クラス集合(例えば、クラス・ローダ)がオブジェクトのヒープ210にロードされるとき、クラス集合に関連するフィールド304は、最初に、空表現304aで始まる可能性がある。空表現304aは、どのビットも設定されていないビット・ベクトル306と等価である可能性がある。次に、フィールド304は、クラス集合のインスタンスが領域302に導入されるときに直接表現304bに遷移し得る。直接表現304bは、インスタンスを含む領域に関するビットだけが設定されたビット・ベクトル306と等価であるものとして扱われ得る。上述のように、直接表現304bは、クラス集合のインスタンスが記憶される領域302を指す少数のポインタのためにメモリを割り当てることができる。これは、クラス集合のインスタンスが少数の領域302にしか含まれない場合に、ビット・ベクトル306全体を割り当てるコストを回避する。例えば、シングルトン・クラス・ローダ(単一のインスタンスしか含まない単一のクラスに関連するクラス・ローダ)が、Java(R)でよく使用される−標準的なjava.lang.reflectパッケージはそれらのクラス・ローダを大いに使用している。単一の領域302または少数の領域302を指し示す能力は、ビット・ベクトル306全体を割り当てるのに比べて大幅な節約をもたらすことができる。特定の実施形態において、直接表現304bは、インデックスによって少数の領域302を特定するように拡張され得る。
クラス集合のインスタンスを含む領域302の数が直接表現304bによって記憶され得るポインタの数を超えると、フィールド304は、ビット・ベクトル表現304dに遷移することができる。この表現304dに遷移すると、ビット・ベクトル306が、クラス集合に割り当てられる。上述のように、このビット・ベクトル306は、オブジェクトのヒープ210内の各領域302に関するビットを含み得る。ビットを設定することは、クラス集合に関連するクラスの少なくとも1つのインスタンスが対応する領域302内に記憶されていることを示す。
特定の実施形態において、ガベージ・コレクション・モジュール208は、ビット・ベクトル306によって使用されるメモリの量を制限する可能性がある。メモリの制限に達したか、またはシステムがメモリ不足であるかのどちらかのために、ガベージ・コレクション・モジュール208がビット・ベクトル306を割り当てることができない場合、ガベージ・コレクション・モジュール208は、フィールド304の状態をオーバーフロー表現304cに設定することができる。オーバーフロー表現304cは、ビット・ベクトル306と異なりオーバーフロー表現304cからはビットがクリアできないことを除いて、すべてのビットが設定されたビット・ベクトル306と等価であるものとして扱われ得る。フィールド304は、オーバーフロー表現304cを使用すると、対応するクラス集合がオブジェクトのヒープ210からアンロードされるまでオーバーフロー表現304cに留まる可能性がある。同様に、フィールド304は、ビット・ベクトル表現304dを使用すると、対応するクラス集合がオブジェクトのヒープ210からアンロードされるまでビット・ベクトル表現304dに留まる可能性がある。
図5を参照すると、インクリメンタル・ガベージ・コレクション・プロセス中にオブジェクトのヒープ210からクラス集合およびより具体的にはクラス・ローダ300をアンロードするための方法500の一実施形態が示されている。方法500は、図3および4に示された4つの表現304a〜dのすべてを扱うように容易に適合され得るが、各クラス・ローダ300が独自のビット・ベクトル306を含むと想定する。示されるように、コレクション集合内の各クラス・ローダ300に関して、方法500は、コレクション集合内にある領域302に関するビット・ベクトル306のビットをクリアする504。ビットをクリアした後、方法500がビット・ベクトル306が空であると判定する506場合、クラス・ローダ300は、コレクション集合からのアンロードの候補である。一方、方法500がビット・ベクトル306が空でない(少なくとも1つのビットが設定されている)と判定する506場合、クラス・ローダ300は、コレクション集合の外の領域に少なくとも1つのインスタンスを含む可能性があるのでコレクション集合からのアンロードの候補ではない。そのような場合、方法500は、クラス・ローダ300に「生きている」と印を付ける508。
インクリメンタル・ガベージ・コレクション・プロセス中、生きているオブジェクトがコレクション集合内で発見されることになる。発見されたそれぞれの生きているオブジェクトに関して、方法500は、生きているオブジェクトに関連するクラス・ローダと、生きているオブジェクトが含まれる領域とを判定する。方法500は、生きているオブジェクトに関連するクラス・ローダ300に「生きている」と印を付け512、生きているオブジェクトが存在する領域に関するクラス・ローダのビット・ベクトル306のビットを設定する514。
インクリメンタル・ガベージ・コレクション・プロセスの終わりに、方法500は、コレクション集合内のクラス・ローダ300をもう一度調べる。コレクション集合内の各クラス・ローダ300に関して、方法500は、そのクラス・ローダ300が「生きている」と印を付けられているかどうかを判定する518。クラス・ローダ300が「生きている」と印を付けられていない場合、クラス・ローダ300は死んでいる(到達不可能である)こと、およびクラス・ローダ300に関連するいかなるクラスのインスタンスもコレクション集合の中または外のどちらにも存在しないことが推定され得る。そのような場合、方法500は、コレクション集合からクラス・ローダ300をアンロードする520。そうでない場合、方法500は、クラス・ローダ300をコレクション集合に残す。
図6を参照すると、上述のインクリメンタル・ガベージ・コレクション・プロセスのさまざまな変更が可能であり、それらは本発明の範囲内にある。例えば、図3および4に関連して説明された4つの表現304a〜dを使用して記憶集合を実装する代わりに、各クラス・ローダ300などの各クラス集合に対してビット・ベクトル306が割り当てられる可能性がある。この実施形態は、特に、非常に多くのクラス・ローダ300がシングルトン・クラス・ローダである場合、またはクラス・ローダ300がわずかな数のクラスを定義するか、もしくはオブジェクトのヒープ210にそれらのクラスのわずかな数のインスタンスを有する場合、上述の4つの表現304a〜dほど効率的にメモリを使用しない可能性があるが、簡潔さの点で有利である可能性がある。オブジェクトのヒープ210内に比較的少ない数の領域302が存在する場合、このことは各ビット・ベクトル306のビット数と、ひいては各ビット・ベクトル306によって利用されるメモリの量とを削減するので、この実施形態は、効率的でもあり得る。
図7を参照すると、別の実施形態において、各クラス・ローダ300に対してビット・ベクトル306を設ける代わりに、各クラス700に対してビット・ベクトル306が設けられる可能性がある。クラスが領域302に含まれるとき、領域302に関連するビットが設定され得る。インクリメンタル・ガベージ・コレクション・プロセス中、ビット・ベクトル306は、コレクション集合のクラス700のインスタンスがコレクション集合の中または外の領域302に含まれるかどうかを判定するために調べられる可能性がある。クラス700がそのクラスのビット・ベクトル306を用いて死んでいると判定される場合、クラス700は、コレクション集合からアンロードされ得る。代替的に、プロセスは、コレクション集合からクラス700のうちのいずれかをアンロードする前に、クラス・ローダ300またはクラスのその他のグループに関連するすべてのクラス700が死ぬまで待つ可能性がある。すべてのクラス700が死んでいるとき、クラス700はグループとしてアンロードされ得る。この実施形態は、個々のクラス700に対して、図3および4で示された表現304a〜dのいずれかを使用するように修正される可能性もある。
図8を参照すると、本発明のさらに別の実施形態において、ビット・ベクトル306を利用するあらゆる表現304dを省略しながら最初の3つの表現304a〜cが使用される可能性がある。そのような実施形態においては、「直接」表現304bが、何らかの限界まで、選択された数の領域302を特定するための特定の数のポインタを記憶するように構成される可能性がある。限界に達すると、クラス集合に関連するクラスのインスタンスがすべての領域302に含まれると想定するオーバーフロー表現304cが使用され得る。クラス集合がオーバーフロー表現304cを使用するとき、クラス集合は、グローバルなガベージ・コレクションが実行され、クラス集合がアンロードされるまでオーバーフロー表現304cに留まる可能性がある。この実施形態は、多くのクラス集合が直接表現304bで利用可能なポインタの数を超える領域にインスタンスを含む場合を除いて、効率的にメモリを利用することができる。これは、多くのクラス集合にオーバーフロー表現304cを使用させることになり、そのことは、非効率的である可能性がある。
図3、6、7、および8に示された実施形態は、記憶集合304を実装するためのさまざまな技術の単なる例である。それぞれは、異なるランタイム環境で利点および欠点を有する可能性がある。実施形態は、例として示されているに過ぎず、限定することを意図されていない。したがって、その他の変更が可能であり、それらは本発明の範囲内にある。
図面の流れ図および構成図は、本発明のさまざまな実施形態によるシステム、方法、およびコンピュータが使用可能な媒体のあり得る実装のアーキテクチャ、機能、および動作を示す。これに関連して、流れ図または構成図の各ブロックは、(1つまたは複数の)規定された論理的な機能を実装するための1つまたは複数の実行可能命令を含むモジュール、セグメント、またはコードの一部を表す可能性がある。一部の代替的な実装においては、ブロックで示された機能が、図面に示された順序とは異なる順序で行われる可能性があることにも留意されたい。例えば、連続で示された2つのブロックが、実際には実質的に同時に実行される可能性があり、またはそれらのブロックは、関連する機能に応じて逆順に実行されることもあり得る。一部のブロックが削除される可能性があり、またはその他のブロックが関連する機能に応じて追加される可能性がある。ブロック図または流れ図あるいはその両方の各ブロックと、ブロック図または流れ図あるいはその両方のブロックの組み合わせとは、規定された機能もしくは動作を実行する専用のハードウェアに基づくシステム、または専用のハードウェアとコンピュータ命令との組み合わせによって実装され得ることも認められるであろう。

Claims (9)

  1. 領域に基づくガベージ・コレクタを用いてクラスを漸進的にアンロードするための方法であって、
    クラス集合に関する記憶集合(remembered set)を保守するステップであって、前記記憶集合は、前記クラス集合のインスタンスがメモリ内の1つまたは複数の領域に含まれるかどうか、およびメモリ内のどの領域に前記インスタンスが含まれるかを示す、ステップと、
    メモリ内の前記領域のサブセットに対してインクリメンタル・ガベージ・コレクション・プロセスを実行するときに、前記記憶集合を調べて、前記クラス集合が前記サブセットの外の領域にインスタンスを含むかどうかを判定するステップと、
    前記記憶集合が、前記クラス集合が前記サブセットの外の領域にインスタンスを含むことを示す場合に、前記クラス集合を「生きている(live)」ものとして特定するステップと
    前記インクリメンタル・ガベージ・コレクション・プロセスにおいて発見された前記サブセット内の生きているインスタンスに前記クラス集合が関連する場合に、該クラス集合を「生きている(live)」ものとして特定するステップと、
    前記クラス集合が「生きている」と判定されない場合に、前記クラス集合をアンロードするステップと、
    を含む、方法。
  2. 前記クラス集合が、クラス・ローダに関連するクラスの集合、クラスのグループ、および単一のクラスのうちの1つである請求項1に記載の方法。
  3. 前記記憶集合が、前記クラス集合に割り振られたビット・ベクトルを含み、前記ビット・ベクトルの各ビットが、メモリ内の領域に割り振られている請求項1に記載の方法。
  4. 各ビットの値が、前記クラス集合の少なくとも1つのインスタンスがメモリ内の対応する領域に含まれるかどうかを示す請求項3に記載の方法。
  5. 前記サブセットに対して前記インクリメンタル・ガベージ・コレクション・プロセスを実行する前に、前記サブセット内の領域に関する前記ビット・ベクトルのビットをリセットするステップをさらに含む請求項4に記載の方法。
  6. 前記サブセットに対して前記インクリメンタル・ガベージ・コレクション・プロセスを実行するときに、前記クラス集合のインスタンスが発見される前記サブセット内の領域に関する前記ビット・ベクトルのビットを設定するステップをさらに含む請求項5に記載の方法。
  7. 前記ビット・ベクトルのビットのいずれかが設定されている場合に前記クラス集合を「生きている」ものとして特定するステップをさらに含む請求項6に記載の方法。
  8. 領域に基づくガベージ・コレクタを用いてクラスを漸進的にアンロードするためのコンピュータ・プログラムであって、コンピュータに、請求項1乃至7のいずれか1項に記載の前記方法の全てのステップを実行させる前記コンピュータ・プログラム。
  9. 領域に基づくガベージ・コレクタを用いてクラスを漸進的にアンロードするための装置であって、請求項1乃至請求項7のいずれか1項に記載の前記方法の全てのステップを実行するように適合された手段を含む、前記装置。
JP2013552082A 2011-02-08 2012-02-06 領域に基づくガベージ・コレクタを用いてクラスを漸進的にアンロードするための方法、コンピュータ・プログラム製品、および装置 Active JP5868429B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/023,447 2011-02-08
US13/023,447 US8489653B2 (en) 2011-02-08 2011-02-08 Incremental class unloading in a region-based garbage collector
PCT/CA2012/050065 WO2012106817A1 (en) 2011-02-08 2012-02-06 Incremental class unloading in a region-based garbage collector

Publications (2)

Publication Number Publication Date
JP2014504768A JP2014504768A (ja) 2014-02-24
JP5868429B2 true JP5868429B2 (ja) 2016-02-24

Family

ID=46601403

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013552082A Active JP5868429B2 (ja) 2011-02-08 2012-02-06 領域に基づくガベージ・コレクタを用いてクラスを漸進的にアンロードするための方法、コンピュータ・プログラム製品、および装置

Country Status (6)

Country Link
US (3) US8489653B2 (ja)
JP (1) JP5868429B2 (ja)
CN (1) CN103339616B (ja)
DE (1) DE112012000365T5 (ja)
GB (1) GB2501445B (ja)
WO (1) WO2012106817A1 (ja)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8762620B2 (en) 2007-12-27 2014-06-24 Sandisk Enterprise Ip Llc Multiprocessor storage controller
US9699263B1 (en) 2012-08-17 2017-07-04 Sandisk Technologies Llc. Automatic read and write acceleration of data accessed by virtual machines
US9612948B2 (en) 2012-12-27 2017-04-04 Sandisk Technologies Llc Reads and writes between a contiguous data block and noncontiguous sets of logical address blocks in a persistent storage device
US9870830B1 (en) 2013-03-14 2018-01-16 Sandisk Technologies Llc Optimal multilevel sensing for reading data from a storage medium
US9524235B1 (en) 2013-07-25 2016-12-20 Sandisk Technologies Llc Local hash value generation in non-volatile data storage systems
US9639463B1 (en) * 2013-08-26 2017-05-02 Sandisk Technologies Llc Heuristic aware garbage collection scheme in storage systems
US9703816B2 (en) 2013-11-19 2017-07-11 Sandisk Technologies Llc Method and system for forward reference logging in a persistent datastore
US9520197B2 (en) 2013-11-22 2016-12-13 Sandisk Technologies Llc Adaptive erase of a storage device
US9520162B2 (en) 2013-11-27 2016-12-13 Sandisk Technologies Llc DIMM device controller supervisor
US9582058B2 (en) 2013-11-29 2017-02-28 Sandisk Technologies Llc Power inrush management of storage devices
US9703636B2 (en) 2014-03-01 2017-07-11 Sandisk Technologies Llc Firmware reversion trigger and control
US9454448B2 (en) 2014-03-19 2016-09-27 Sandisk Technologies Llc Fault testing in storage devices
US9448876B2 (en) 2014-03-19 2016-09-20 Sandisk Technologies Llc Fault detection and prediction in storage devices
US9626400B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Compaction of information in tiered data structure
US9626399B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Conditional updates for reducing frequency of data modification operations
US9697267B2 (en) 2014-04-03 2017-07-04 Sandisk Technologies Llc Methods and systems for performing efficient snapshots in tiered data structures
US10372613B2 (en) 2014-05-30 2019-08-06 Sandisk Technologies Llc Using sub-region I/O history to cache repeatedly accessed sub-regions in a non-volatile storage device
US10656840B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Real-time I/O pattern recognition to enhance performance and endurance of a storage device
US10162748B2 (en) 2014-05-30 2018-12-25 Sandisk Technologies Llc Prioritizing garbage collection and block allocation based on I/O history for logical address regions
US10146448B2 (en) 2014-05-30 2018-12-04 Sandisk Technologies Llc Using history of I/O sequences to trigger cached read ahead in a non-volatile storage device
US10656842B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Using history of I/O sizes and I/O sequences to trigger coalesced writes in a non-volatile storage device
US10114557B2 (en) 2014-05-30 2018-10-30 Sandisk Technologies Llc Identification of hot regions to enhance performance and endurance of a non-volatile storage device
US9703491B2 (en) 2014-05-30 2017-07-11 Sandisk Technologies Llc Using history of unaligned writes to cache data and avoid read-modify-writes in a non-volatile storage device
US9652381B2 (en) 2014-06-19 2017-05-16 Sandisk Technologies Llc Sub-block garbage collection
US11249899B2 (en) * 2018-09-19 2022-02-15 Cisco Technology, Inc. Filesystem management for cloud object storage
US11573894B2 (en) * 2020-10-29 2023-02-07 Oracle International Corporation Tracking garbage collection states of references
US11513954B2 (en) 2021-03-25 2022-11-29 Oracle International Corporation Consolidated and concurrent remapping and identification for colorless roots
US11573794B2 (en) 2021-03-25 2023-02-07 Oracle International Corporation Implementing state-based frame barriers to process colorless roots during concurrent execution
US11875193B2 (en) 2021-03-25 2024-01-16 Oracle International Corporation Tracking frame states of call stack frames including colorless roots

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10320263A (ja) * 1997-05-22 1998-12-04 Fujitsu Ltd Gcアタッチメント装置及びプログラム記憶媒体
US6701334B1 (en) 1999-07-13 2004-03-02 Sun Microsystems, Inc. Methods and apparatus for implementing individual class loaders
US6185581B1 (en) * 1999-08-19 2001-02-06 Sun Microsystems, Inc. Train-algorithm-based garbage collector employing fixed-size remembered sets
US6529919B1 (en) * 2000-02-15 2003-03-04 Sun Microsystems, Inc. Incremental class unloading in a train-algorithm-based garbage collector
US7340494B1 (en) * 2004-03-12 2008-03-04 Sun Microsystems, Inc. Garbage-first garbage collection
US7272695B1 (en) * 2004-09-13 2007-09-18 Sun Microsystems, Inc. Hot-card caching to avoid excessive remembered-set updating
US7499961B2 (en) 2006-01-12 2009-03-03 Sun Microsystems, Inc. Method and apparatus for limiting the size and facilitating maintenance of remembered sets in a space incremental garbage collector
CN100405304C (zh) * 2006-07-27 2008-07-23 清华大学 基于存储区域网络的高速固态存储设备的实现方法
US20110264880A1 (en) * 2010-04-23 2011-10-27 Tatu Ylonen Oy Ltd Object copying with re-copying concurrently written objects

Also Published As

Publication number Publication date
CN103339616A (zh) 2013-10-02
WO2012106817A1 (en) 2012-08-16
US20120203804A1 (en) 2012-08-09
US20130282772A1 (en) 2013-10-24
DE112012000365T5 (de) 2013-10-17
US8554807B2 (en) 2013-10-08
GB2501445B (en) 2014-06-04
CN103339616B (zh) 2016-01-20
JP2014504768A (ja) 2014-02-24
US8489653B2 (en) 2013-07-16
US20120203803A1 (en) 2012-08-09
GB201314691D0 (en) 2013-10-02
US9870317B2 (en) 2018-01-16
GB2501445A (en) 2013-10-23

Similar Documents

Publication Publication Date Title
JP5868429B2 (ja) 領域に基づくガベージ・コレクタを用いてクラスを漸進的にアンロードするための方法、コンピュータ・プログラム製品、および装置
JP4896384B2 (ja) メモリを効率的に管理するための方法およびプログラム
US8453132B2 (en) System and method for recompiling code based on locality domain and thread affinity in NUMA computer systems
US10572181B2 (en) Multiple stage garbage collector
US20140380017A1 (en) Memory management and method for allocation using free-list
US9740716B2 (en) System and method for dynamically selecting a garbage collection algorithm based on the contents of heap regions
US8074025B2 (en) Method and system for copying live entities of source blocks identified by source list for selected destination block to selected destination block of memory heap
US8769230B2 (en) Parallel, single-pass compaction in a region-based garbage collector
EP3577565B1 (en) Garbage collector
US8447793B2 (en) Efficient remembered set for region-based garbage collectors
US8782306B2 (en) Low-contention update buffer queuing for large systems
US10120796B2 (en) Memory allocation for long-lived objects
US20120005460A1 (en) Instruction execution apparatus, instruction execution method, and instruction execution program
US11650916B2 (en) Closed loop garbage collector
US11188460B2 (en) Arena-based memory management
CN109923527B (zh) 可变类型建立器
US8326886B2 (en) Per-thread, per-instance data storage
WO2023177446A1 (en) Reducing reference count updates for stack variables

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140905

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150715

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150818

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151117

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: 20151208

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160105

R150 Certificate of patent or registration of utility model

Ref document number: 5868429

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150