JP2003529149A - ガーベジコレクション - Google Patents

ガーベジコレクション

Info

Publication number
JP2003529149A
JP2003529149A JP2001571207A JP2001571207A JP2003529149A JP 2003529149 A JP2003529149 A JP 2003529149A JP 2001571207 A JP2001571207 A JP 2001571207A JP 2001571207 A JP2001571207 A JP 2001571207A JP 2003529149 A JP2003529149 A JP 2003529149A
Authority
JP
Japan
Prior art keywords
memory allocation
memory
tree
garbage
node
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
JP2001571207A
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 JP2003529149A publication Critical patent/JP2003529149A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

(57)【要約】 内部ポインタを使用するガーベジコレクタが、複数のリンクされたノード(40−52)を含む2分木構造を維持し、各ノードはメモリアロケーション(a...g)を表す。使用中の既知の内部ポインタ(P)について、2分木がサーチされて、ポインタが指し示すメモリアロケーション(c)が決定される。このメモリアロケーション(c)が、ガーベジコレクションの解放について利用不可能であると記録される。全ての使用可能な使用中のポインタについてサーチされた後、システムが、解放のために利用不可能であると記録されていないメモリアロケーションを解放する。2分木がAVL木であることが好ましい。この方法はどのメモリアロケーションスキームにも適用可能であり、メモリアロケーションのサイズにおいてもメモリにおけるロケーションにおいても制約がない。本発明はさらに、ガーベジコレクションのための方法、及びガーベジコレクタを含むオペレーティングシステムにも及ぶ。

Description

【発明の詳細な説明】
【0001】 本発明は、ガーベジコレクションに関するが、必ずしもオブジェクト指向環境
におけるガーベジコレクションに関するものではない。
【0002】 「ガーベジコレクション(garbage collection)」とは、実行中の当該プログ
ラムが当該コンピュータメモリを必要としなくなった時に、通常、オペレーティ
ングシステムによって、当該コンピュータメモリを自動的にリクラメーション(
reclamation)することに関するものである。CまたはC++のような幾つかの言
語では、メモリアロケーションの解放は、プログラマが明示的に行わなければな
らない。Java(登録商標)(Sun Microsystems, Inc.の商標)のような他の多数
の言語においては、ガーベジコレクタをバックグラウンドでラン(run)させて
メモリアロケーションを解放する煩わしさはない。このようなガーベジコレクタ
は、JVM(Java(登録商標)Virtual Machine)の一部である。プログラマが
作成したオブジェクトは、オブジェクトへの参照がないとき(よって、当該実行
中のプログラムが当該オブジェクトに再度アクセスすることができないとき)、
JVMのガーベジコレクタによって自動的に破壊される。オブジェクトへの参照
は、オブジェクトO1がオブジェクトO2へのポインタまたはハンドルを含むと
きに行われ、もって、オブジェクトO1は、オブジェクトO2のフィールドおよ
びコールメソッドにアクセスすることができる。これらオブジェクトへの参照は
スタチックに(グローバルデータ)プロセッサスタック上で行うことができる。
概念的には、Java(登録商標)では、これらの参照は、オブジェクト全体に対し
て行なわれるが、オブジェクトの一部に対しては行なわれない。Java(登録商標
)コードがネイティブコードにコンパイルされると、これらの参照はデータ構造
を指し示すポインタ(直接ポインタまたは間接ポインタのいずれか)となること
ができる。これらのポインタは、オブジェクトを表現するデータ構造のスタート
(すなわち、このスタートの最下位メモリアドレス)を参照する、のが典型的で
ある。
【0003】 ネイティブコードを生成するときの最適化の観点からは、別のデータ構造のス
タートではなく内部を指し示すポインタを作成することが有用になる。仮にガー
ベジコレクタがこれらの内部ポインタを参照として認識することができる場合に
は、このネイティブコードが、データ構造のスタートを指し示すオリジナルのポ
インタをセーブする必要がないが、そうでない場合には、このオリジナルのポイ
ンタをセーブする必要があり、もってコードが大きくなる。
【0004】 確かに内部ポインタを効率的にサーチするためのメカニズムは存在するが、こ
れらのメカニズムを採用すると、特定のメモリレイアウトが強制されることにな
る。すなわち、同じようなサイズのアロケーションは、全て、同じメモリの領域
、ページ境界、又は既知のメモリロケーションから行なわれる。典型的には、各
領域のスタートメモリロケーションは一定であり、すべてが因数2の倍数である
。このような構成では、アロケーションのサイズとそのスタートメモリは、内部
ポインタを、因数2の逆数でマスクして決定することができる。もって、メモリ
領域のスタートを指し示すポインタが取得される。
【0005】 このような従来技術において、内部ポインタをガーベジコレクションするアプ
ローチにあっては、メモリブロックを(例えば、ページ境界で)適切にアライン
するため、オブジェクトが小さくても、大きいメモリブロックをアロケーション
する必要があり、もってメモリを無駄にしている。このようにメモリアロケーシ
ョンは効率が悪いため、プログラムがエンベッディド(embeded)環境、例えば
、ハンドヘルドコンピュータ又はモバイルフォーン(mobile phone)においてラ
ンすると、損害を被る虞がある。
【0006】 慣用のガーベジコレクションシステムにおいて問題となるところは、典型的に
は、これらのシステムが、使用中の特定のメモリアロケーションスキームの詳細
に依存する点にある。ガーベジコレクションを行っているオペレーティングシス
テムが、メモリアロケーションをコントロールしているときは、利便性が良く、
そうであることが多い。しかしながら、ガーベジコレクタを含むオペレーティン
グシステムが、メモリアロケーションをコントロールする別の基礎(underlying
)オペレーティングシステムに対して、「ホストになる(hosted)」「ホスト(
hosted)」システムにおいては、全く利便性に欠ける。異なる基礎オペレーティ
ングシステムが異なるメモリアロケーションスキームを使用する可能性があると
いうことは、異なるガーベジコレクタを各場面において提供する必要があること
を意味する。これは、プログラミングの労力を無駄にするに止まらず利便性に欠
ける。というのは、ガーベジコレクション機能を含むが、種々の異なる基礎オペ
レーティングシステムを修正せずにホストすることができるコンパクトで効率的
なオペレーティングシステムを提供することが、実質的に不可能となるからであ
る。
【0007】 本発明の目的は、従来技術の問題を少なくとも解消することである。
【0008】 本発明の第1の態様においては、ガーベジコレクションの方法は、 (a)メモリアロケーションを表す複数のノードがリンクされている木構造を
維持するステップと、 (b)ポインタが指し示すメモリアロケーションを決定するため、木から使用
中のポインタをサーチするステップと、 (c)前記メモリアロケーションがガーベジコレクション解放のために利用不
可能であると記録するステップと を含む。
【0009】 利用不可能なメモリアロケーションの記録においては、メモリアロケーション
(仮にまだマーク付けされていない場合)にマーク付けするか、木構造上の対応
するノードにマーク付けすることを含むことができる。本発明の方法は、使用さ
れていないメモリアロケーションを実際に解放するのに都合の良いメカニズムに
関係付けをして、使用することができる。この点には、ステップ(b)及び(c)
を複数の使用中のポインタについて繰り返すステップと、解放のために利用不可
能であると記録されていないメモリアロケーションを解放するステップとが含ま
れるのが好ましい。ステップ(b)及び(c)が、全ての使用中のポインタについ
て、又は少なくともシステムに既知の全てのポインタについて、繰り返されるの
が好ましい。
【0010】 木が2分木であり、標準の2分トラバース(binary traverse)を使用して、
トップ(top)からサーチされるのが好ましい。1つの好ましい実施形態におい
ては、木がAVL平衡木である。標準のAVLアルゴリズムは当該木を再構築す
るために用いることができる。木を再構築するのは、新しいノードが新しいメモ
リアロケーションに対応して追加されたとき、又はノードが、再使用のために解
放されるメモリアロケーションに対応して削除されたとき、その度に、その平衡
形式を維持するためである。
【0011】 木は必ずしも2分木である必要はなく、本発明はN進木及びN進平衡木にも適
用可能である。
【0012】 各メモリアロケーションは連続メモリブロックを表現することができ、オブジ
ェクト指向システムにおいては、個々のオブジェクトを表現することができる。
本発明の一形式では、オブジェクトを、コンパイルされたJava(登録商標)オブ
ジェクトの形式にすることができる。
【0013】 各ノードは、各ノードに関係付けされた情報であって、前記ブロックスタート
及び前記ブロックエンドのロケーションについての情報、又は前記ロケーション
の1つ及び前記ブロック長についての情報を有することができる。当該ノードは
、オプションで、他のメモリアロケーション関連情報、例えばブロック識別子を
含むこともできる。木構造を効率的に定義するため、各ノードがその親ノード(
存在すれば)とその子ノード(存在すれば)のアドレスも含むことが好ましい。
【0014】 任意のタイプのポインタ(内部ポインタを含む)をサーチするため、この木構
造を使用することができる。
【0015】 本発明の別の態様において、ガーベジコレクタは、 (a)メモリアロケーションを表す複数のノードがリンクされている木構造を
維持する手段と、 (b)ポインタが指し示すメモリアロケーションを決定するため、木から使用
中のポインタをサーチする手段と、 (c)前記メモリアロケーションがガーベジコレクション解放のために利用不
可能であると記録する手段と を含む。
【0016】 本発明の別の態様において、ガーベジコレクションの方法は、 (a)1つ以上のガーベジコレクション可能なメモリアロケーションを含むシ
ステムメモリアロケーションを表す複数のノードが、リンクされている木構造を
維持するステップと、 (b)ポインタが指し示すガーベジコレクション可能なモリアロケーションを
決定するため、木から使用中のポインタをサーチするステップと、 (c)前記ガーベジコレクション可能なメモリアロケーションがガーベジコレ
クション解放のために利用不可能であると記録するステップと を含む。
【0017】 本発明の別の態様において、ガーベジコレクタは、 (a)1つ以上のガーベジコレクション可能のメモリアロケーションを含むシ
ステムメモリアロケーションを表す複数のノードが、リンクされている木構造を
維持する手段と、 (b)ポインタが指し示すガーベジコレクション可能なメモリアロケーション
を決定するため、木から使用中のポインタをサーチする手段と、 (c)前記ガーベジコレクション可能なメモリアロケーションがガーベジコレ
クション解放ために利用不可能であると記録する手段と を含む。
【0018】 本発明は、上に定義したようなガーベジコレクタを含むオペレーティングシス
テム及びJVM(Java(登録商標)Virtual Machine)にも関する。
【0019】 一実施形態においては、オペレーティングシステムはメモリアロケーション手
段を含むことができ、この手段によれば、メモリアロケーションにおいてメモリ
上のポジションを人為的に制約せずに、可能な限り効率的に、メモリアロケーシ
ョンをコントロールすることができる。あるいはまた、オペレーティングシステ
ムには、外部からメモリアロケーションされたときにオペレートするガーベジコ
レクタを有するメモリアロケーション手段を含まないようにできる。この例にお
いては、本発明に係るオペレーティングシステムが別の基礎オペレーティングシ
ステムに対してホストになる。このような場合には、外部からのメモリアロケー
ションが、その基礎オペレーティングシステムのメモリアロケーション手段によ
って行なわれる。このメモリアロケーションスキームが基礎オペレーティングシ
ステムによって適用されるにもかかわらず、このガーベジコレクタはなおこれを
使用することができる。ガーベジコレクタが外部からのメモリアロケーションを
使用することができるオペレーティングシステムの利点は、このようなオペレー
ティングシステムが種々の異なる基礎システムに対してホストになることができ
、基礎システムによって使用されたメモリアロケーションスキームに煩わされな
いことにある。仮に基礎システムアロケーションスキームが効率的である場合に
は、このオペレーティングシステムがそれを利用する。
【0020】 さらに進んで、本発明には、上述した方法を実行するためのコンピュータプロ
グラムと、このようなコンピュータプログラムを実行するデータキャリアと、こ
のようなコンピュータプログラムを表すデータストリームが含まれる。本発明に
は、上述したようなオペレーティングシステムを搬送するデータキャリアと、こ
のようなオペレーティングシステムを表すデータストリームも含まれる。
【0021】 本発明は、多くの方法で実施することができ、以下に、具体的な実施形態を添
付の図面を参照して記載することにする。
【0022】 図1は最適化されたネイティブコードの一部におけるレジスタおよびメモリの
使用例を詳細に示す。データ構造10、12、14は個々のオブジェクトを表現
していて、メモリに保持されている。加えて、マシンレジスタ16は、追加され
た値を保持するものであり、典型的には、メモリに保持されたオブジェクトを指
し示すポインタ、又はこれらのオブジェクト内のロケーションを指し示すポイン
タである。図1においては、レジスタ1はポインタ18(内部ポインタ)を保持
していて、このポインタ18はオブジェクト10内の特定のケーションを指し示
している。同様に、レジスタ2及び3は、オブジェクト14内の異なるロケーシ
ョンを指し示す内部ポインタ20、22を保持している。
【0023】 ポインタもメモリに保持することができる。図1には、ポインタ24で示す。
これらポインタは、オブジェクト10内の内部ポインタであり、オブジェクト1
2内の内部ロケーションを指し示すものである。
【0024】 必ずしも全てのポインタを内部ポインタにする必要はない。例えば、ポインタ
26は、オブジェクト12を表現するデータ構造のスタートを指し示している。
【0025】 図1は最適化されたネイティブコードを示すが、このネイティブコードは、個
々のオブジェクトが、Java(登録商標)のようなオリジナル言語で、互いに参照
する方法に厳密に対応する必要はなく、典型的には対応しない、ことに留意され
たい。Java(登録商標)自体は内部ポインタの概念がなく、厳密に言えば、ポイ
ンタの概念さえもない。その代わりに、各オブジェクトが別のオブジェクトを「
参照」することができ、この参照は、オブジェクトの個々の部分を参照するもの
ではなく、オブジェクト全体を参照するものである。Java(登録商標)コードが
コンパイルされると、これらの参照を、ネイティブコードにおけるオブジェクト
に対応するデータ構造のスタートを指し示すポインタに変換することができ、時
としてそのように行われる。しかし、このようなポインタのみを使用するネイテ
ィブコードは非効率的であるから、本発明においては、必要に応じて、内部ポイ
ンタを作成するのが好ましい。内部ポインタがあると、オブジェクトデータ構造
のスタートのみを指し示すオリジナルのJava(登録商標)ポインタをドロップさ
せることができる。図1に示すように、データ構造のスタートを指し示すポイン
タ、例えばポインタ26は、このコードが実際にそのアドレスを特に参照する必
要のある場合にのみ、保持される。
【0026】 図2は本発明の好ましい実施形態に係る例であって、データ構造をメモリにス
トアする例を示す。図2はアロケートされたメモリのブロックa、b、c...
を示す。メモリロケーションアドレスは図2において右上がりに大きくなってい
る。ブロックaはメモリロケーションAから開始されメモリロケーションA′で
終了する。ブロックbはメモリロケーションBから開始されメモリロケーション
B′で終了する。他のブロックについても同様である。ブロックとブロックとの
間の空白は、明確にするために示したもので、なければならないものではない。
【0027】 新しいメモリブロックをアロケートする必要がある場合には、アロケートされ
ていないメモリブロック30、又は最後のメモリブロックg(アロケートされて
いないメモリブロックがない場合)のいずかにおいて、適正なメモリロケーショ
ンにアロケートされる。アロケートされたメモリは、そのサイズを任意にするこ
とができ、アドレス可能なメモリ空間内に位置させることもできる。従来技術の
ように、特定のサイズのメモリブロックをアロケートする必要があるとか、特に
事前定義されたケーションにアロケートする必要があるとかの制約はない。
【0028】 ガーベジコレクタの役割は、ラン時においては、アロケートされた各メモリブ
ロックをチェックして、これらメモリブロックがなおアプリケーションに必要と
される可能性があるかどうか(あるいは、同じことであるが、そのメモリブロッ
クを指し示す既存の使用中の内部ポインタがあるかどうか)を確認することであ
る。この目的を達成するため、新しいメモリブロックがアロケートされたときは
、メモリに保持された2分木(binary tree)に、このアロケートされた新しい
メモリブロックが追加される。
【0029】 図4aはこの2分木上のノードに対応する個々のメモリブロックをより詳細に
示す。メモリブロック又は「チャンク(chunk)」は、ヘッダ100と、データ
部又は「ペイロード」102からなる。ヘッダ100には、セクション104,
106,108,110が含まれる。セクション104はこの特定のアロケーシ
ョンが関係付けされている2分木のノードを定義する。セクション106はこの
アロケーションが「ラージ(large)」か「スモール(small)」かを示す。セク
ション108はアイテム(item)サイズを定義する。セクション110はスター
トポジションを指定する。セクション112はエンドポジションを指定する。図
4aの例においては、セクション106が常に「ラージ」となるが、「スモール
」のオプションについては図4bを参照して詳細に検討する。ペイロード102
には、ヘッダセクション114及びデータセクション116が含まれる。
【0030】 図3は図2のメモリアロケーションを表す典型的な2分木を示す。この2分木
において、各ノードが個々のアロケーションを表し、効率的にサーチできるよう
に、ノードがリンクされている。次にこれについて詳細に説明する。各ノードに
ストアされている情報は、ブロック識別子(ノード40においてはd)と、当該
ブロックのスタートアドレス(D)と、エンドアドレス(D′)とからなる。あ
るいはまた、D及びD′をストアする代わりに、ブロックD′のスタート又はブ
ロックD′のエンドのいずれかを、その長さ(D′−D)とともに、ストアする
ことができる。
【0031】 2分木内における各ノードのポジションを確立するため、各ノードはリンキン
グ情報にも関係付けしてある。例えば、ノード40には、2つの子、すなわちノ
ード42及び44にリンクされているとの情報が含まれている。ノード44には
、親ノード40と、2つの子ノード50、52とを有するとの情報が含まれてい
る。ノード52には、子ノードはないが、単一の親ノード44がある。各ノード
に関係付けされたリンキング情報がラベル付け又は順序付けされ、左側の子ノー
ドが右側のノードから区別できるようにする。
【0032】 未知の内部ポインタが指し示しているメモリアロケーションブロックを識別す
るため、この2分木をサーチできる方法の例を挙げることにする。この例におい
ては、未知のポインタを図2のポインタPとする。この2分木のてっぺん、すな
わちノード40からエンタし、まず、Pの値がD未満かどうかを試験する。Pは
D未満であるから、左側の子ノード42(ブロックbを表す)に移る。まず、P
がB未満であるかどうかをチェックする。そうでないとき、さらに進んで、Pが
B′を超えるかどうかをチェックする。PがB′を超える場合には、右側の子ブ
ロック48に移る。ついで、PがC未満かどうかを試験し、そうでないとき、P
がC′を超えるかどうかを試験する。PはC未満でなく、C′を超えないから、
結局、Pはブロックc内に存在する。したがって、このサーチはノード48で終
了する。
【0033】 ガーベジコレクションは、全てのライブ(live)ポインタをシステマティック
にチェックすること、及びポインタが存在するメモリブロックを2分木を使用し
て決定すること、によって行われる。このため、内部ポインタと他のポインタと
を区別する必要はない。単に、全てのポインタが2分木上で同じ方法でサーチさ
れる。まず、レジスタについてポインタの有無(または、スタックベースのシス
テムにおいては、スタック)がチェックされ、それら指し示す対応するアロケー
トされたメモリブロックが、2分木から決定される。ついで、これら決定された
メモリブロックについて、(2分木ベースのルックアップ、又は他メカニズムを
使用して)ポインタの有無がチェックされ、その後、このプロセスが繰り返され
る。このプロセス中に、使用中と判明したメモリブロック(すなわち、メモリブ
ロックの内部を指し示すポインタを有するメモリブロック)は、このメモリブロ
ックに対応する2分木のノードに対応させて「使用中」フラグをストアし、マー
ク付けされる。ついで、使用中でないメモリブロックを、システムから解放する
ことができ、使用中でないメモリブロックに対応するノードを、この2分木から
削除することができる。ついで、この2分木が再リンクされて通常の2分形式に
される。
【0034】 これまで、単一のメモリアロケーションが当該2分木上の単一のノードに対応
すると仮定している。しかし、環境によっては、2分木上の単一のノードを幾つ
かの小さいガーベジコレクション可能なアロケーションに関係付けする方が効率
的な場合もある。このようなアプローチは、ランしているアプリケーションがコ
ントロールしていない基礎オペレーティングシステムにより、メモリがアロケー
トされている場面においては、利便性がある。システムメモリアロケータは典型
的にはシステムアロケーション(「チャンク」として知られる)を行い、システ
ムアロケーションのタイミング及びサイズは、アプリケーションによりコントロ
ールされないようにできる。
【0035】 図4bに示すように、単一のシステムアロケーション又は「チャンク」は、多
くの異なるガーベジコレクション可能なアロケーション(図4bにおいて、参照
番号120、122、124で示す)のために使用することができる。チャンク
ペイロード102においては、これらのユニットには、それぞれ、ヘッダ114
と、データセクション116とが含まれる。理解しやすくするため、図4bで使
用した参照番号は、図4aで使用したものに対応する。
【0036】 好ましい実施形態では、仮にアプリケーションが1K bytes未満のメモリアロ
ケーションを必要とする場合、すなわち、個々のアロケーションが、例えば、3
2bytes、64bytes、128bytes、256bytes、512bytes、及び1024b
ytesである場合に、図4bのアプローチが使用される。アプリケーションが1K
bytesを超えるアロケーションを必要とする場合には、図4aのアプローチが使
用される。
【0037】 好ましい実施形態において、この2分木のノードは、図4a又は図4bに示す
ような個々のシステムアロケーションを表すか、図4a及び図4bに示すような
個々のシステムアロケーションを表す。ヘッダ114と、データセクション11
6は、それぞれ、単一の上位のガーベジコレクション可能なアロケーション、例
えばJava(登録商標)アロケーションに対応する。
【0038】 仮に当該アプリケーションがスモールアロケーション(例えば、好ましい実施
形態では1K bytes未満)を必要とする場合には、このシステムブロック全体が
同時にリザーブされ、2分木上に配置される。ついで、当該アプリケーションは
、使用されていないスモールアロケーションにどのタイミングでどの環境でアク
セスするかをコントロールし、適正であれば、2分木に影響を与えないで、当該
アプリケーションが、自分で、これら使用されていないスモールアロケーション
のガーベジコレクションを行う。2分木上の全ノードに関係付けされた全てのア
ロケーションが使用されなくなったときにのみ、当該ノードと、当該対応するシ
ステムブロックとが、ガーベジコレクションのために使用可能となる。
【0039】 当然、図4bのアプローチが使用されるとき、システムブロック全体に関する
限り、個々のガーベジコレクション可能なアロケーションのスタートを指し示す
ポインタがそれ自体で「内部ポインタ」となる。そこで、未知の内部ポインタが
指し示すメモリアロケーションを発見する上記方法が、依然として、適用される
。当該システムは、ヘッダにおけるアイテムサイズセクション108を参照して
、内部ポインタが指し示す正確なガーベジコレクション可能なアロケーションを
、システムアロケーション内で決定することができる。
【0040】 その余に決定すべきことは、2分木のどこに新しいノードを挿入するか、新し
いメモリのブロックがいつアロケートされるか、及び対応するブロックがガーベ
ジコレクタによって解放され1つ以上のノードが「切り落とされる(snip out)
」ときに、2分木を再リンクする方法である。これらを決定するには幾つかの方
法があるが、そのうちの1つとして、AVLロードバランシング木(load balan
cing tree)を使用するアプローチがある。これは、左/右の平衡を維持する2
分木であり、ノードの追加時と、ノードの削除時とに、適正な2分木再構築アル
ゴリズムを使用するものである。詳細は、例えば、Donald E. Knuth, "The Art
of Computer Programming", Volume 3. Addison-Wesley, Reading、Massachuset
ts、U.S.A, 1969を参照されたい。Adelson-Velskii, G.M. and E.M. Landis "An
Algorithm for the Organization of Information" Soviet Math. Doclady 3,
1962, pp.1259-1263を参照されたい。また、Karlton,P.L.,S.H. Fuller、R.E.
Scroggs and E.B. Kaehler "Performance of Height-Balanced Trees" Commun
ications of the ACM 19, 1976, pp.23-28も参照されたい。これら文献は全て
本明細書の一部とする。
【0041】 AVL木を使用した好ましいアルゴリズムを詳細に説明する。背景から説明す
る。平衡2分木は効率的な汎用データ構造である。2分木は木グラフ(tree gra
ph)であって、各ノードが多くても2つの出力エッジを有する。これに対して、
平衡2分木は、任意のノードの2つのサブ木の間のサイズが不均衡にならないよ
うに構築されている。AVL木(このシステムを考案したAdelson-Velskii及びL
andisにちなんだもの)は、平衡2分木であり、任意のノードの2つのサブ木が
、常に、多くても1レベルだけ異なるデプス(depth)を有していなければなら
ない。
【0042】 AVL木のノードにおいては、2つのサブ木のハイト(hight)の差が1を超
えないという、平衡するための基準がある。この木のハイトとデプスは次のよう
に定義される。 ・エレメントのない木のハイトは0である。 ・エレメントが1つの木のハイトは1である。木のルートノードのデプスは1
である。 ・エレメントが複数ある2分木のハイトは、最も大きなハイトを有するサブ木
のハイトに1を加えたものである。このような木におけるノードのデプスは、そ
の親のデプスに1を加えたものである。
【0043】 AVL木の「平衡(balanced)」プロパティは、効率的な方法でインクリメン
トに維持される(すなわち、AVL木のサイズに対して時間の対数を取る)。ノ
ードが挿入されたり削除されたりしたとき、AVL木に対して、1つ以上の再平
衡変換が行われる。
【0044】 3つの基本的なオペレーション、すなわち、AVL木内のエレメントをサーチ
すること、エレメントをAVL木に挿入すること、及びエレメントをAVL木か
ら削除すること、が必要とされる。注意すべきことは、キー値の重複は許されな
いが、このため普遍性は失われない。というのは、必要であれば、追加のエレメ
ントを、ストアされるデータと結合させて、一意のキーを作成できるからである
【0045】用語及び表記法 このアルゴリズムを、「ノード」と、「リンク」と、「キー」とで記載する。
ノードは木のこずえにすぎない。各ノードは「左リンク」及び「右リンク」と呼
ばれる2つの関係付けをしたリンクを有し、これら2つのリンクは、それぞれ、
サブ木を指し示すか、NULLの値(この値で、その側にサブ木がないことを意味す
る)を取るかのいずれかである。ノードNの左リンク及び右リンクをそれぞれ示
すため、「Left(N)」及び「Right(N)」を使用する。ルート以外の全ノードが一
意の「親」ノードを有する。当該ノードの親ノードのリンクの一方が当該ノード
を指し示している。各ノードは関係付けをしたキーも有する。ノードNに関係付
けをしたキーを表すため、Key(N)と書く。キーはノードに関係付けをしたデータ
に過ぎない。ここで、キーには総合順位が存在するものと仮定する。これを記号
「<」を使用して表す。例えば、整数値は(「<」の典型的な意味でもってすれ
ば)適切なキーとなる。「方向」の概念も必要である。方向は、「left」、「ri
ght」または「balanced」のうちのいずれかである。全ノードが、関係付けをし
た方向も有する。方向を表すため、Dir(N)と書く。ただし、Nは注目しているノ
ードである。あるノードからのリンクを省略表現で「Link(d,N)」と表す。ただ
し、Nはノードであり、dは方向である(必ずしもDir(N)ではない)。仮にdが
「left」であれば、Link(d,N)はノードNの左リンクを表し、仮にdが「right」
であれば、Link(d,N)はNの右リンクを表す。仮にdが「balanced」であれば、L
ink(d,N)の値は定義されないが、これがこのようなコンテキストでは使用される
ことはない。
【0046】 仮にdが方向であれば、「−d」は、逆の方向を意味する。明確にいえば、仮
にdが「left」であれば、−dは「right」であり、仮にdが「right」であれば
、−dは「left」である。dが「balanced」である場合において、−dは定義さ
れないが、これがこのようなコンテキストにおいては使用されることはない。
【0047】 このアルゴリズムの説明においては、明瞭にするため、木のルートはNULL、す
なわち空でないものと仮定する。そうすると、当然のことであるが、空の木に対
してサーチ及び削除しても、常に失敗し、挿入すると、その木のルートが、挿入
されたエレメントとなる。ノードを期待するコンテキストにおいて、リンクが参
照された場合には、そのリンクで指し示されたノードを参照するように解釈され
るべきであることに留意されたい。
【0048】サーチアルゴリズム ステップ1) 変数の初期設定 ・まず、ノードPがルートノードと等しいと定義する。ノードPが「カレン
トポイント」となり、このカレントポイントは木をトラバースする際に使用され
る。 ・Kを、サーチされているキーと定義する。 ・テンポラリノードを表すためQを使用することもある。これは必要に応じ
て定義する。
【0049】 ステップ2) 比較 ・K<Key(P)である場合、ステップ3へ進む。 ・K>Key(P)である場合、ステップ4へ進む。 ・K=Key(P)である場合には、サーチの目的となるエレメントが発見されて
いる(サーチの終了)。
【0050】 ステップ3) 左に移動 ・QをLeft(P)に設定する。 ・QがNULLでない場合、PにQを設定し、ステップ2に戻る。 ・他方、QがNULLである場合、この木には、キーKを有するエレメントが含
まれていないことを意味する。このサーチを終了し、failureを返す。(サーチ
の終了)
【0051】 ステップ4) 右に移動 ・QにRight(P)を設定する。 ・QがNULLでない場合、PにQを設定し、ステップ2に戻る。 ・他方、QがNULLである場合、この木には、キーKを有するエレメントが含
まれていないことを意味し、このサーチを終了し、failureを返す。(サーチの
終了)
【0052】挿入アルゴリズム ステップ1) 変数の初期設定 ・「Head」とは、木の一部でないがルートノードの親と考えられる特殊なノ
ードと定義されるものである。具体的には、Headの右リンクがルートを指し示す
。このように定義すれば、ルートノードを親のない特殊なケースと考えなくてす
む。 ・まず、ノードSとノードPがルートノードに等しいと定義する。ノードP
が「カレントポイント」となり、これを使用して木をトラバースする。ノードS
は、挿入後の木を再平衡するため、どのサブ木をスターティングポイントとして
用いるべきかをトラッキングするために使用することになる。 ・TがHeadに等しいと定義する。常に、TがSの親となるように更新する。 ・Kを、挿入しようと試みているキーと定義する。 ・ノードを示すため、Q及びRを使用する。これらは必要に応じて定義する
【0053】 ステップ2) 比較 ・K<Key(P)である場合、ステップ3へ進む。 ・K>Key(P)である場合、ステップ4へ進む。 ・K=Key(P)である場合、そのキーのエレメントがすでに木内に存在してい
るから、挿入の必要がない。(サーチの終了)
【0054】 ステップ3) 左に移動 ・QにLeft(P)を設定する。 ・QがNULLでない場合において、Dir(Q)が「balanced」でない場合、TにP
を設定し、SにQを設定する。ついで、Dir(Q)の値に関係なく、PにQを設定し
、ステップ2に戻る。 ・他方、QがNULLである場合、我々は新しいエレメントを挿入する。これは
、Qを、新たに作成されたノード(キーKを有することになる)とし、Left(P)
を、Qを指し示すように変更し、ついでステップ5に進む、ことを意味する。
【0055】 ステップ4) 右に移動 ・QにRight(P)を設定する。 ・QがNULLでない場合において、Dir(Q)が「balanced」でない場合には、T
にPを設定し、SにQを設定する。ついで、Dir(Q)の値に関係なく、PにQを設
定し、ステップ2に戻る。 ・他方、QがNULLである場合、我々は新しいエレメントを挿入する。これは
、我々は、Qを、新たに作成したノード(キーKを有することになる)とし、Ri
ght(P)を、Qを指し示すように変更し、ついでステップ5に進む、ということを
意味する。
【0056】 ステップ5) 挿入 ・新しいノードQのフィールドを初期設定する。Key(Q)にKを、Left(Q)及び
Right(Q)にNULLを、Dir(Q)に「balanced」を設定する。 ・ステップ6に進む。
【0057】 ステップ6) 平衡の調整 ・木の新しい状態を反映させるため、平衡の方向をSとQの間のノードに設
定する必要がある。これは、次のように行われる。 ・K<Key(S)である場合、dを「left」と定義し、そうでない場合、dを「r
ight」と定義する。 ・PにLink(d,S)を設定し、まずノードRがPに等しいと定義する。 ・以後、P=Qになるまで繰り返す(繰り返しが0回のこともある)。 1.K<Key(P)である場合、Dir(P)に「left」を設定し、ついでPに
Left(P)を設定する。 2.K>Key(P)である場合、Dir(P)に「right」を設定し、ついでP
にRight(P)を設定する。 3.(K=Key(P)である場合、P=Qでなければならないので、ステッ
プ7に進む。) ・ステップ7に進む。
【0058】 ステップ7) 平衡 ・3つのケースのうち1つが、Dir(S)の値に応じて適用される。 ・Dir(S)=「balanced」である場合、Dir(S)にdを設定する。この場合、当
該挿入が完了する。(挿入の終了) ・Dir(S)がdの逆である(すなわち、−dに等しい)場合、Dir(S)に「balan
ced」を設定する。この場合、当該挿入が完了する。(挿入の終了) ・Dir(S)=dである場合、木が「unbalanced」になっている。ノードR(ス
テップ6で定義したもの)を考察してどのように進むかを決定する。Dir(R)が
dの逆である(すなわち、−dに等しい)場合、ステップ9に進む。Dir(R)=
dである場合、ステップ8に進む。この時点ではいずれも「balanced」となる可
能性がない、ことに留意されたい。
【0059】 ステップ8) 1重ローテーション ・木のインバランスを次のように修正する。 ・PにRを設定する。 ・Link(s,S)にLink(-d,R)を設定し、ついでLink(-d,R)にSを設定する。 ・Dir(S)及びDir(R)に「balanced」を設定する。 ・ステップ10に進む。
【0060】 ステップ9) 2重ローテーション ・木のインバランスを次のように修正する。 ・PにLink(-d,R)を設定し、ついでLink(-d,R)にLink(d,P)を設定し、ついで
Link(d,P)にRを設定する。 ・Link(d,S)にLink(-d,P)を設定し、ついでLink(-d,P)にSを設定する。 ・Dir(S)及びDir(R)を、Dir(P)の値に応じて次のように設定する。 1. Dir(P)=dである場合、Dir(S)に−dを設定し、Dir(R)に「balanc
ed」を設定する。 2. Dir(P)=−dである場合、Dir(S)にbalancedを設定し、Dir(R)にd
を設定する。 3. Dir(P)=「balanced」である場合、Dir(S)及びDir(R)にも「balanc
ed」を設定する。 ・ステップ10に進む。
【0061】 ステップ10) リンクの修正 ・このとき木が再平衡しているので、再平衡されたサブ木の親が正しいノー
ドにリンクしていることを確かめなければならない。 ・S=Right(T)である場合、Right(T)にPを設定し、そうでない場合、Left(
T)にPを設定する。 ・アルゴリズムが終了される。(挿入の終了)
【0062】削除アルゴリズム ステップ1) 変数の初期設定 ・「Head」とは、木の一部でないがルートノードの親となる特殊なノードと
定義されるものである。具体的には、Headの右リンクがルートを指し示す。この
ように定義すれば、ルートノードを親のない特殊なケースと考えなくてすむ。 ・P[]をノードのアレイと定義する。アレイ内のエレメントを表すには、P[
0]、P[1]などを使用する。 ・d[]を方向の配列と定義する。 ・P[0]に「Head」を設定する。 ・d[0]に「left」を設定する。 ・ノードPを定義し、最初にRight(P[0])(すなわち、ルートノード)を設定
する。 ・Kを、挿入しようと試みているキーと定義する。 ・カウンタ変数cを整数と定義し、最初にカウンタ変数cに1を設定する。 ・ノードを示すのに、R及びSを使用する。これらは必要に応じて定義する
。リンク(ノードではない)を示すのに、Qを使用する。これも必要に応じて定
義する。特に、Qに幾つかの(ノード)値を設定するということは、当該ノード
のリンクQを指し示すことを意味するから、注意されたい。
【0063】 ステップ2) 比較 ・K<Key(P)である場合、ステップ3へ進む。 ・K>Key(P)である場合、ステップ4へ進む。 ・K=Key(P)である場合、ステップ5へ進む。
【0064】 ステップ3) 左に移動 ・P[c]にPを設定する。d[c]に「left」を設定する。 ・cに1を加算する。 ・PにLeft(P)を設定する。 ・PがNULLである場合は、木には、キーKを有するエレメントがないから、
ここで停止する。(削除の終了) ・ステップ2に戻る。
【0065】 ステップ4) 右に移動 ・P[c]にPを設定する。d[c]に「right」を設定する。 ・cに1を加算する。 ・PにRight(P)を設定する。 ・PがNULLである場合は、木には、キーKを有するエレメントがないから、
ここで停止する。(削除の終了) ・ステップ2に戻る。
【0066】 ステップ5) 右リンクがNULLであるかどうかのチェック ・Qを、Link(d[c-1],P[c-1])すなわちPに到達するために辿ったリンクで
あると定義する。 ・仮にRight(P)=NULLである場合には、ステップ6に進む。 ・QにLeft(P)を設定する。 ・Left(P)がNULLでない場合には、Dir(Q)に「balanced」を設定し、ステッ
プ10に進む。
【0067】 ステップ6) 後続ノード(successor)の発見 ・RにRight(P)を設定する。 ・Left(R)がNULLでない場合、ステップ7に進む。 ・Left(R)にLeft(P)を設定する。 ・QにRを設定する。 ・Dir(R)にDir(P)を設定する。 ・d[c]に「right」を設定し、P[c]にRを設定し、ついでcに1を加算する
。 ・ステップ10に進む。
【0068】 ステップ7) NULLの左リンクを発見するための準備 ・SにLeft(R)を設定し、整数1を定義し、最初にcに設定する。 ・cに1を加算する。 ・d[c]に「left」を設定し、P[c]にRを設定し、再度、cに1を加算する
。 ・ステップ8に進む。
【0069】 ステップ8) NULLの左リンクの発見 ・Left(S)がNULLである場合、ステップ9に進む。 ・RにSを設定し、ついでSにLeft(R)を設定する。 ・d[c]に「left」を設定し、P[c]にRを設定し、ついでcに1を加算する
。 ・このステップを最初(すなわち、ステップ8に進む)から繰り返す。
【0070】 ステップ9) 調整の実施 ・d[1]に「right」を設定し、P[1]にSを設定する。 ・Left(S)にLeft(P)を設定し、Left(R)にLeft(S)を設定し、Right(S)にRigh
t(P)を設定する。 ・Dir(S)にDir(P)を設定する。 ・QにSを設定する。
【0071】 ステップ10) 平衡の調整 ・cから1を減算する。 ・cが0である場合、ここで停止する。(削除の終了) ・SにP[c]を設定し、ついで、次の3つの事柄のうち1つをDir(S)に応じ
て行う。 ・Dir(S)=「balanced」である場合、Dir(S)に−d[c]を設定し、停止する
。(削除の終了) ・Dir(S)=d[c]である場合、Dir(S)に「balanced」を設定し、このステッ
プを最初(すなわち、ステップ11に進む)から繰り返す。 ・そうでない場合、すなわちDir(S)=−d[c]である場合、このステップを
継続する。 ・RにLink(-d[c],S)を設定する。 ・Dir(S)=「balanced」である場合、ステップ11に進む。 ・Dir(S)=−d[c]である場合、ステップ12に進む。 ・Dir(R)=d[c]でなければならない。ステップ13に進む。
【0072】 ステップ11) balanced Rによる1重ローテーション ・Link(-d[c],S)にLink(d[c],R)を設定し、ついでLink(d[c],R)にSを設定
する。 ・Dir(R)にd[c]を設定し、Link(d[c-1],P[c-1])にRを設定する。 ・これ以上、再平衡の必要がないから、停止する。(削除の終了)
【0073】 ステップ12) unbalanced Rによる1重ローテーション ・Link(-d[c],S)にLink(d[c],R)を設定し、ついでLink(d[c],R)にSを設定
する。 ・Dir(S)及びDir(R)に「balanced」を設定する。 ・Link(d[c-1],P[c-1])にRを設定する。 ・ステップ10に進む。
【0074】 ステップ13) 2重ローテーション ・PにLink(d[c],R)を設定し、ついでLink(d[c],R)にLink(-d[c],P)を設定
し、ついでLink(-d[c],P)にRを設定する。 ・Link(-d[c],S)にLink(d[c],P)を設定し、ついでLink(d[c],P)にSを設定
する。 ・平衡の方向を、Dir(P)の値に応じて次のように更新する。 ・Dir(P)=−d[c]である場合、Dir(S)=d[c]と設定し、Dir(R)=「balanc
ed」と設定する。 ・Dir(P)=「balanced」である場合、Dir(S)及びDir(R)にも「balanced」を
設定する。 ・そうでない場合、すなわちDir(P)=d[c]である場合、Dir(S)に0を、Dir
(R)に−d[c]を設定する。 ・Dir(P)に「balanced」を設定し、Link(d[c-1],P[c-1])にPを設定する。 ・ステップ10に進む。
【0075】 ガーベジコレクションにおいて2分木を使用すれば、「ホストとなる(hosted
)」システム、言い換えると、メモリアロケーションが、プログラマの支配外に
あり基礎ホストオペレーティングシステムによって決定される場面で、本発明を
使用することができる。本発明のオペレーションが、基礎オペレーティングシス
テムにより使用されているメモリアロケーションスキームから、本質的に独立し
ているので、メモリアロケーションを自分で行う仮想的な基礎オペレーティング
システム上で、本発明に係るガーベジコレクタを使用することができる。アロケ
ーションを行っているオペレーションシステムがどれであれ、そのオペレーティ
ングシステムが、図2を参照して述べたブロックサイズ・ロケーション・フレキ
シビリティを、利用することができるときにのみ、高効率のメモリアロケーショ
ンが行われるのが普通であって,これは言うまでもないことである。
【0076】 平衡であるか否かにかかわらず、本発明が非2分(N進)木に等しく適用可能
であることは、当然のことである。本発明は例えばB木に適用可能である。AV
L木は双方向平衡木の1つの好ましいインプリメントにすぎない。
【図面の簡単な説明】
【図1】 最適化されたネイティブコードにおける内部ポインタの使用を示す概略を表す
図である。
【図2】 アロケートされたメモリブロックを内部ポインタとともに示す図である。
【図3】 本発明の好ましい実施形態において図2のメモリアロケーションのためのAV
L木構造を示す図である。
【図4a】 2分木のノードの1つを形成する1つのメモリアロケーション又は「チャンク
」の例を示す図である。
【図4b】 単一の「チャンク」が幾つかの個々のガーベジコレクション可能なアロケーシ
ョンのために使用されるときに使用するための代替メモリアロケーションを示す
図である。
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,CY, DE,DK,ES,FI,FR,GB,GR,IE,I T,LU,MC,NL,PT,SE,TR),OA(BF ,BJ,CF,CG,CI,CM,GA,GN,GW, ML,MR,NE,SN,TD,TG),AP(GH,G M,KE,LS,MW,MZ,SD,SL,SZ,TZ ,UG,ZW),EA(AM,AZ,BY,KG,KZ, MD,RU,TJ,TM),AE,AG,AL,AM, AT,AU,AZ,BA,BB,BG,BR,BY,B Z,CA,CH,CN,CO,CR,CU,CZ,DE ,DK,DM,DZ,EE,ES,FI,GB,GD, GE,GH,GM,HR,HU,ID,IL,IN,I S,JP,KE,KG,KP,KR,KZ,LC,LK ,LR,LS,LT,LU,LV,MA,MD,MG, MK,MN,MW,MX,MZ,NO,NZ,PL,P T,RO,RU,SD,SE,SG,SI,SK,SL ,TJ,TM,TR,TT,TZ,UA,UG,US, UZ,VN,YU,ZA,ZW

Claims (30)

    【特許請求の範囲】
  1. 【請求項1】 ガーベジコレクションの方法であって、 (a)メモリアロケーションを作成するとき、該メモリアロケーションへの参照
    を、メモリアロケーションをそれぞれ表す複数のノードがリンクされているダイ
    ナミックな木構造に、追加するステップと、 (b)ポインタが指し示すメモリアロケーションを決定するため、前記木から使
    用中のポインタをサーチするステップと、 (c)前記メモリアロケーションがガーベジコレクション解放のために利用不可
    能であると記録するステップと を含むことを特徴とする方法。
  2. 【請求項2】 請求項1において、複数の使用中のポインタについて、前記
    ステップ(b)及び(c)を繰り返すステップと 解放のために利用不可能と記録されていないメモリアロケーションを解放する
    ステップと を含むことを特徴とする方法。
  3. 【請求項3】 請求項1又は請求項2において、前記木は、2分木であるこ
    とを特徴とする方法。
  4. 【請求項4】 請求項1又は請求項2において、前記木は、AVL木である
    ことを特徴とする方法。
  5. 【請求項5】 請求項1ないし4のいずれかにおいて、前記メモリアロケー
    ションは、メモリブロックであることを特徴とする方法。
  6. 【請求項6】 請求項5において、前記ノードは、各ノードに関係付けされ
    た情報であって、前記ブロックスタート及び前記ブロックエンドのロケーション
    についての情報、又は前記ロケーションの1つ及び前記ブロック長についての情
    報を有することを特徴とする方法。
  7. 【請求項7】 請求項1ないし6のいずれかにおいて、前記使用中のポイン
    タは、内部ポインタであることを特徴とする方法。
  8. 【請求項8】 請求項1ないし7のいずれかにおいて、前記メモリアロケー
    ションは、必ずしもアラインされていないことを特徴とする方法。
  9. 【請求項9】 (a)メモリアロケーションを作成し、各メモリアロケーショ
    ンへの参照を、メモリアロケーションを表す複数のノードがリンクされている木
    構造に追加する手段と、 (b)ポインタが指し示すメモリアロケーションを決定するため、前記木から使
    用中のポインタをサーチする手段と、 (c)前記メモリアロケーションがガーベジコレクション解放のために利用不可
    能であると記録する手段と を含むことを特徴とするガーベジコレクタ。
  10. 【請求項10】 請求項9において、複数の使用中のポインタについて、メ
    モリアロケーションをサーチして記録する手段と、 解放するために利用不可能と記録されていないメモリアロケーションを解放す
    る手段と を含むことを特徴とするガーベジコレクタ。
  11. 【請求項11】 請求項9又は10において、前記木は、2分木であること
    を特徴とするガーベジコレクタ。
  12. 【請求項12】 請求項9又は10において、前記木は、AVL木であるこ
    とを特徴とするガーベジコレクタ。
  13. 【請求項13】 請求項9ないし12のいずれかにおいて、前記メモリアロ
    ケーションは、メモリブロックであることを特徴とするガーベジコレクタ。
  14. 【請求項14】 請求項13において、前記ノードは、各ノードに関係付け
    された情報であって、前記ブロックスタート及び前記ブロックエンドのロケーシ
    ョンについての情報、又は前記ロケーションの1つ及び前記ブロック長について
    の情報を有することを特徴とする方法。
  15. 【請求項15】 請求項9ないし14のいずれかにおいて、前記使用中のポ
    インタは、内部ポインタであることを特徴とするガーベジコレクタ。
  16. 【請求項16】 請求項9ないし15のいずれかにおいて、前記メモリアロ
    ケーションは、必ずしもアラインされないことを特徴とするガーベジコレクタ。
  17. 【請求項17】 請求項9ないし16のいずれかに記載のガーベジコレクタ
    を含むことを特徴とするオペレーティングシステム。
  18. 【請求項18】 請求項17において、メモリアロケーション手段を含むこ
    とを特徴とするオペレーティングシステム。
  19. 【請求項19】 請求項17において、本オペレーティングシステムは、メ
    モリアロケーション手段を含まず、 前記ガーベジコレクタは、外部からのメモリアロケーションによりオペレート
    する ことを特徴とするオペレーティングシステム。
  20. 【請求項20】 請求項19において、本オペレーティングシステムは、基
    礎オペレーティングシステムに対してホストとなり、 前記外部からのメモリアロケーションは、前記基礎オペレーティングシステム
    のメモリアロケーション手段によって行われる ことを特徴とするオペレーティングシステム。
  21. 【請求項21】 請求項1ないし8のいずれかに記載の方法を実行するよう
    にしたことを特徴とするコンピュータプログラム。
  22. 【請求項22】 請求項21に記載のコンピュータプログラムを搬送するこ
    とを特徴とするデータキャリア。
  23. 【請求項23】 請求項21に記載のコンピュータプログラムを表すことを
    特徴とするデータストリーム。
  24. 【請求項24】 請求項17ないし20のいずれかに記載のオペレーティン
    グシステムを搬送することを特徴とするデータキャリア。
  25. 【請求項25】 請求項17ないし20のいずれかに記載のオペレーティン
    グシステムを表すことを特徴とするデータストリーム。
  26. 【請求項26】 請求項1又は9において、前記メモリアロケーションは、
    オブジェクト指向システム内のオブジェクトを表すことを特徴とする方法又はガ
    ーベジコレクタ。
  27. 【請求項27】 請求項26において、前記オブジェクトは、コンパイルさ
    れたJava(登録商標)オブジェクトの形式であることを特徴とする方法又はガー
    ベジコレクタ。
  28. 【請求項28】 ガーベジコレクションの方法であって、 (a)1つ以上のガーベジコレクション可能なメモリアロケーションを含むシス
    テムメモリアロケーションを表す複数のノードが、リンクされた木構造を維持す
    るステップと、 (b)ポインタが指し示すガーベジコレクション可能なメモリアロケーションを
    決定するため、前記木から使用中のポインタをサーチするステップと、 (c)前記ガーベジコレクション可能なメモリアロケーションがガーベジコレク
    ション解放のために利用不可能であると記録するステップと を含むことを特徴とする方法。
  29. 【請求項29】 (a)1つ以上のガーベジコレクション可能なメモリアロケ
    ーションを含むシステムメモリアロケーションを表す複数のノードが、リンクさ
    れた木構造を維持する手段と、 (b)ポインタが指し示すガーベジコレクション可能なメモリアロケーションを
    決定するため、前記木から使用中のポインタをサーチする手段と、 (c)前記ガーベジコレクション可能なメモリアロケーションがガーベジコレク
    ション解放のために利用不可能であると記録する手段と を含むことを特徴とするガーベジコレクタ。
  30. 【請求項30】 請求項9ないし16又は請求項29のいずれかに記載のガ
    ーベジコレクタを含むことを特徴とするJava(登録商標)バーチャルマシン。
JP2001571207A 2000-03-28 2001-03-28 ガーベジコレクション Pending JP2003529149A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GBGB0007493.0A GB0007493D0 (en) 2000-03-28 2000-03-28 Garbage collection
GB0007493.0 2000-03-28
PCT/GB2001/001375 WO2001073556A1 (en) 2000-03-28 2001-03-28 Garbage collection

Publications (1)

Publication Number Publication Date
JP2003529149A true JP2003529149A (ja) 2003-09-30

Family

ID=9888571

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001571207A Pending JP2003529149A (ja) 2000-03-28 2001-03-28 ガーベジコレクション

Country Status (8)

Country Link
US (1) US20030187888A1 (ja)
EP (1) EP1292891A1 (ja)
JP (1) JP2003529149A (ja)
KR (1) KR20030065308A (ja)
AU (1) AU780140B2 (ja)
CA (1) CA2407041A1 (ja)
GB (1) GB0007493D0 (ja)
WO (1) WO2001073556A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005100402A (ja) * 2003-09-23 2005-04-14 Microsoft Corp オブジェクト指向プログラムのための領域ベースのメモリ管理

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030097537A1 (en) * 2001-10-23 2003-05-22 Sun Microsystems, Inc. Method and apparatus for scoped memory
US7127709B2 (en) * 2002-09-25 2006-10-24 Microsoft Corporation System and method for jointly managing dynamically generated code and data
US20040107227A1 (en) * 2002-12-03 2004-06-03 International Business Machines Corporation Method for efficient implementation of dynamic lock-free data structures with safe memory reclamation
KR100626368B1 (ko) * 2003-08-25 2006-09-20 삼성전자주식회사 가비지 콜렉션 벤치마킹 방법
JP2005234687A (ja) * 2004-02-17 2005-09-02 Sony Corp メモリ管理方法、画像処理装置およびメモリ管理プログラム
US7251671B2 (en) * 2004-03-26 2007-07-31 Intel Corporation Method and system for garbage collection wherein resetting the mark/allocation bit, and switching the mark/allocation bit to the mark bit to perform marking and scanning of objects using the identified object as a root object and providing mark/allocation bit information being displayed at the client
US7853628B1 (en) * 2004-04-09 2010-12-14 Oracle America, Inc. Selective promotion policy for generational garbage collectors
KR100631782B1 (ko) 2004-07-27 2006-10-11 삼성전자주식회사 객체지향 어플리케이션에서의 효율적인 메모리 관리 방법및 장치
US7539833B2 (en) * 2004-12-06 2009-05-26 International Business Machines Corporation Locating wasted memory in software by identifying unused portions of memory blocks allocated to a program
US7526754B2 (en) * 2005-02-28 2009-04-28 Sap Portals Israel Ltd. Memory debugging tool
US7624246B2 (en) * 2005-10-20 2009-11-24 Cray Inc. Method and system for memory allocation in a multiprocessing environment
KR100772871B1 (ko) 2006-02-24 2007-11-02 삼성전자주식회사 자바 환경에서 자원을 관리하는 장치 및 방법
US7853591B1 (en) * 2006-06-30 2010-12-14 Juniper Networks, Inc. Protection of database operations
US10019503B2 (en) * 2010-12-22 2018-07-10 Microsoft Technology Licensing, Llc Database transfers using constraint free data
US9208080B2 (en) 2013-05-30 2015-12-08 Hewlett Packard Enterprise Development Lp Persistent memory garbage collection
CN113302597A (zh) * 2019-04-23 2021-08-24 华为技术有限公司 分布式存储系统和分布式存储系统中垃圾回收方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6138202A (en) * 1994-01-04 2000-10-24 Iowa State University Research Foundation, Inc. Object space manager circuit for obtaining addresses of object headers
ES2176214T3 (es) * 1994-09-19 2002-12-01 Siemens Ag Sistema de administracion de memoria de un sistema de ordenador.
US5930827A (en) * 1996-12-02 1999-07-27 Intel Corporation Method and apparatus for dynamic memory management by association of free memory blocks using a binary tree organized in an address and size dependent manner
US6510504B2 (en) * 1998-06-29 2003-01-21 Oracle Corporation Methods and apparatus for memory allocation for object instances in an object-oriented software environment
US7409694B2 (en) * 1998-09-09 2008-08-05 Microsoft Corporation Highly componentized system architecture with loadable virtual memory manager

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005100402A (ja) * 2003-09-23 2005-04-14 Microsoft Corp オブジェクト指向プログラムのための領域ベースのメモリ管理

Also Published As

Publication number Publication date
GB0007493D0 (en) 2000-05-17
WO2001073556A1 (en) 2001-10-04
US20030187888A1 (en) 2003-10-02
CA2407041A1 (en) 2001-10-04
AU780140B2 (en) 2005-03-03
KR20030065308A (ko) 2003-08-06
AU4261101A (en) 2001-10-08
EP1292891A1 (en) 2003-03-19

Similar Documents

Publication Publication Date Title
JP2003529149A (ja) ガーベジコレクション
US6449695B1 (en) Data cache using plural lists to indicate sequence of data storage
US5774715A (en) File system level compression using holes
JP2779587B2 (ja) コンピュータシステムに用いる名前スペースの一部分を別の名前スペースの一部分として利用可能にするための装置及びその方法
US5931935A (en) File system primitive allowing reprocessing of I/O requests by multiple drivers in a layered driver I/O system
US6009266A (en) Methods, apparatus and data structures for managing objects
US6269442B1 (en) Apparatus and method for on-line replacement of a running program code and data using checkpoints
Shapiro et al. Persistence and Migration for C++ Objects.
JP5236367B2 (ja) 共用型ジャバjarファイル
JPH07104808B2 (ja) 設置可能なファイルシステムにおいてダイナミックボリュームトラッキングを行う方法及び装置
EP0397404A2 (en) A system and method for reading and writing disks formatted for an operating system foreign to the host computer
JPH07191892A (ja) フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
US9116798B2 (en) Optimized memory management for class metadata
JPH06318168A (ja) 階層データ記憶管理装置、方法およびそのネットワーク
US20040167947A1 (en) Space-efficient, depth-first parallel copying collection technique making use of work-stealing on the same structures that maintain the stack of items to be scanned
US20040019784A1 (en) File system for nonvolatile memory
JP2002513971A (ja) ファイル分割システム
US6223344B1 (en) Apparatus and method for versioning persistent objects
JPH113269A (ja) スタックの内容をサブスタックに分離することによる正確なガーベイジ・コレクションを補助するシステムと方法
JP2005063449A (ja) オブジェクトからオブジェクトへのJavaネイティブインタフェースマッピングの方法及び装置
US20050071809A1 (en) System and method for serializing objects in a compiled programming language
US6829761B1 (en) Method and apparatus for managing shared memory in a run-time environment
US20120310998A1 (en) Efficient remembered set for region-based garbage collectors
US5519860A (en) Central processor index sort followed by direct record sort and write by an intelligent control unit
JPH0358249A (ja) フアイルのアクセス方法