JP2004295889A - データ処理システム内での処理タスクの実行を制御する方法および装置 - Google Patents

データ処理システム内での処理タスクの実行を制御する方法および装置 Download PDF

Info

Publication number
JP2004295889A
JP2004295889A JP2004088343A JP2004088343A JP2004295889A JP 2004295889 A JP2004295889 A JP 2004295889A JP 2004088343 A JP2004088343 A JP 2004088343A JP 2004088343 A JP2004088343 A JP 2004088343A JP 2004295889 A JP2004295889 A JP 2004295889A
Authority
JP
Japan
Prior art keywords
execution
data
processing task
memory
memory management
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
JP2004088343A
Other languages
English (en)
Inventor
Edward Colles Nevill
コルス ネビル エドワード
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.)
ARM Ltd
Original Assignee
ARM Ltd
Advanced Risc Machines Ltd
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 ARM Ltd, Advanced Risc Machines Ltd filed Critical ARM Ltd
Publication of JP2004295889A publication Critical patent/JP2004295889A/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

Abstract

【課題】データ処理システム内での処理タスクの実行を制御する方法および装置を提供する。
【解決手段】データ処理システム内での処理タスクの実行は、データ記憶装置に対するメモリエリアの割当てを含むその処理タスクを実行し(段階120)、次に実行点において前記処理タスクの実際の実行経路を中断し(段階130)、メモリ管理を行うことにより制御される。そのメモリ管理は、実行のコースにおいて生じ、メモリエリアのそれぞれをポイントする基準値を指定する実行点における処理タスクによりアクセス可能である、1つまたはそれ以上のデータアイテムの識別(段階140)を含む。識別されたデータアイテムに対応する基準値と、与えられた実行点までの実行中に割当てられたメモリエリアと、の間の相関が決定される(段階150)。その相関に依存して、割当てられたメモリエリアに対するメモリ管理動作が行われる(段階160)。
【選択図】図1

Description

本発明は、コンピュータシステムにおけるメモリの再生利用プロセス、すなわち「ガーベジコレクション」に関する。
多くの現代のプログラム言語は、プログラマがメモリを動的に割当て、また再生利用することを可能とする。動的に割当てられた記憶装置は、ガーベジコレクションとして公知のプロセスを用い、コンピュータプログラムの実行中に、しばしば自動的に管理される。ガーベジコレクションを用いるプログラム言語の特定の例は、ジャバ(R)(Java(R))である。ジャバ(R)は、オブジェクト指向プログラム言語である。オブジェクト指向プログラミングシステムにおいて、「クラス」は、そのクラスの特徴を有する「オブジェクト」(すなわち、データアイテム)の作成に用いるテンプレートを提供することができる。オブジェクトは、一般に、(ジャバ(R)においては、「新」オペレータと呼ばれるオペレータを用いて)プログラムの実行中に作成される。クラスに関連する方法は、一般に、同じクラスのオブジェクトに対する操作を行う。
ジャバ(R)のソースコードは、バイトコードとして公知の、ランタイムコードを生成するようにコンパイルされる。しかし、バイトコードは、現存のコンピュータの2進コードではない。むしろ、ジャバ(R)のバイトコードは、任意の特定のコンピュータ上において働くものと解釈できる、アーキテクチャ中立マシンコードである。ジャバ(R)プログラムは、ジャバ(R)仮想マシン(JVM)と呼ばれるインタプリタプログラムを走らせることにより実行される。JVMは、バイトコードプログラムを読取って、それがインストールされているコンピュータの固有命令セットに対し、それを解釈または翻訳する。バイトコードは、ソースコードの再コンパイルの必要なしに、JVMがインストールされている任意のコンピュータプラットホーム上で走行する。「バイトコードの検査」と呼ばれるプロセスが、ジャバ(R)プログラムのリンキングの一部として、実行の前に用いられる。この検査プロセスは、バイトコードを、正しく形成されているジャバ(R)のクラスファイルを定めたルールのセットに確実に従わせる。例えば、クラスファイル内の方法が、2つの整数を、「iadd」(すなわち、整数加算)命令の実行の前にオペランドスタック上にプッシュしていることを、もし検査機が確認できなければ、検査機はそのクラスファイルを拒否する。
ジャバ(R)は、プロセスのマルチスレッド型の実行を可能とする。スレッド(「制御のスレッド」の省略形)は、プロセス内における実行のシーケンスである。スレッドは、自身のアドレス空間を持たないという点では簡単なプロセスであるが、それが実行されるプロセスのメモリその他のリソースは用いる。1つのプロセスには、いくつかのスレッドが存在し、JVMは、それらのスレッドを管理し、それらの実行のためのスケジュールを作る。スレッドは、単一のプログラム内において同時に実行される、いくつかの異なる機能の間のスイッチングを可能とする。JVMが、1つのスレッドの実行から他のスレッドへスイッチする時、同じアドレス空間内においてコンテキストスイッチが行われる。
ガーベジコレクションは、割当てられたメモリを明示的に解放するプログラマの負担を軽減し、メモリを間違って割当て解除する可能性を減少させることにより、プログラムの完全性の確保を助ける。しかし、ガーベジコレクションの潜在的な欠点は、もっと多くのメモリが必要な場合において、予測できない時に大量のガーベジコレクションが開始される可能性があることである。ジャバ(R)においては、この問題は、ガーベジコレクションがユーザコードにより並列に実行されることを可能にする、システムのマルチスレッド性により時には改善される。ガーベジコレクションのアルゴリズムは、2つの基本機能を行わなければならない。第1に、それは、いずれのオブジェクトがガーベジとして回収するのに適切であるかを決定しなければならず、第2に、それは、ガーベジオブジェクトにより用いられているメモリ空間を再生し、プログラムにより利用可能であるようにしなければならない。ガーベジとは、プログラムにとって、もはやアクセスできないメモリとして定義される。
このプロセスの第1の段階は、一般に、「ルート(root)」のセットを定め、それらのルートからの到達可能性を決定することを行う。ルートを経て到達可能でないオブジェクトは、ガーベジであると考えられる。その理由は、プログラムがそれらにアクセスできないために、それらは、プログラムの実行の将来のコースに影響を与えることができないからである。
JVMにおいては、ルートのセットは、実施に依存するが、常にローカル変数内にオブジェクト基準を有する。JVMは、4つの基本成分、すなわち、レジスタと、スタックメモリと、ヒープメモリと、方法エリアと、を含む。全てのジャバ(R)のオブジェクトは、ヒープメモリ内に存在し、ガーベジが収集されるのはヒープメモリにおいてである。さまざまな記憶片が、特定の順序なしにヒープから割当てられ、またヒープへ返還される。ジャバ(R)における「新」オペレータを割当てられるメモリは、ヒープから与えられる。ヒープは、全てのスレッドにより共有される。方法エリアは、バイトコードが存在する場所である。方法エリア内のあるバイトをポイントする(すなわち、そのバイトのアドレスを含む)プログラムカウンタは、実行のスレッドの跡をたどるために用いられる。ジャバ(R)のスタックは、バイトコード命令に用いるパラメータおよびバイトコード命令の結果を記憶するため、パラメータを方法へ送りまたパラメータを方法から返還するため、また、それぞれの方法の呼出しの状態を保持するために用いられる。JVMは、わずかなレジスタしかもっていない。その理由は、バイトコード命令は、主としてスタック上において動作するからである。スタックは、後入れ先出し方式で動作するので、いわゆる後入れ先出し型のものである。方法の呼出しの状態は、その「スタックフレーム」と呼ばれる。制御のスレッド内において実行するそれぞれの方法は、スタックフレームを割当てる。方法が復帰した時は、スタックフレームは廃棄される。
要するに、JVMにおいては、全てのオブジェクトはヒープ上に存在し、ローカル変数はスタック上に存在し、実行のそれぞれのスレッドは自身のスタックを有する。それぞれのローカル変数は、整数、文字、または浮動小数点数のような、オブジェクト基準またはプリミティブタイプ(すなわち、非基準)である。従って、ルートは、ことごとくのスレッドのスタック上の、ことごとくのオブジェクト基準を含む。
多くの公知のガーベジコレクションのアルゴリズムが存在し、それらの中には、基準カウントガーベジコレクションアルゴリズム、マーク付けおよび掃出しガーベジコレクションアルゴリズム、および生成的ガーベジコレクションアルゴリズムが含まれる。これらの詳細および他のガーベジコレクションアルゴリズムは、1996年にジョン・ワイリ・アンド・サンズ(John Wiley & Sons)から発行された、リチャード・ジョーンズ(Richard Jones)およびラファエルス・リンス(Raphaels Lins)著「ガーベジコレクション、自動的動的なメモリ管理のためのアルゴリズム(Garbage Collection, Algorithms for Automatic Dynamic Memory Management)」に説明されている。
ガーベジコレクションアルゴリズムは、スタックのような基準源における基準値をどのようにして識別し、その跡をたどるかという点で、精密(正確)であるか、または不精密(保存的)であるかの、いずれかに分類される。不精密なガーベジコレクタは、メモリの特定領域(例えば、スタックフレーム内のスロット)が基準を含んでいることがわかっても、その特定領域のどこに記憶されている与えられた値が基準であるかはわからない。従って、不精密なガーベジコレクタは、いずれの潜在的な基準オブジェクトをも存続させておかなければならない。この公知の技術の欠点は、もし変数値が偶然にメモリアドレスと一致すれば、プリミティブタイプが、不精密なガーベジコレクタにより基準として誤って識別されるかもしれないことである。これは、ガーベジオブジェクトが、不精密なコレクタにより、「生きている」ものと誤って考えられることを意味する。その理由は、オブジェクト基準によく似たもの(すなわち、プリミティブタイプ)かそれに関連しているからである。
一方、精密なガーベジコレクタは、純粋なオブジェクト基準と、基準のように見せかけているプリミティブタイプとを識別できる。従って、精密なガーベジコレクタは、オブジェクト基準によく似たものに相当するガーベジコレクションオブジェクトに対する、不精密なコレクタの失敗の問題を軽減する。精密なガーベジコレクションを行うためには、システムは、基準と非基準とを明確に識別できなければならない。オブジェクトにおいては、それぞれのオブジェクトに対し、そのオブジェクトのいずれのデータフィールドが基準を含んでいるかを記述する「レイアウトマップ」を生成することができる。このレイアウトマップは、オブジェクトの全存続期間の間不変であり、かつ同じタイプの全てのオブジェクトは、同じレイアウトマップを有するので、オブジェクトにおける基準識別は比較的に簡単である。しかし、スタックフレームのレイアウトは、その存続期間中に変化しやすいので、スタックフレームにおける基準識別プロセスは、もっと複雑である。例えば、与えられたスタックフレームスロットは、方法の開始時に初期化されなくてもよく、方法の1つのブロックに対しては整数を、また方法のもう1つのブロックに対しては基準を含むことができる。
現在、精密なガーベジコレクションを実施するために必要な情報を記憶する、2つの公知の方法が存在する。第1の方法は、バイトコードの検査段階中における一連のスタックマップの作成を含む。「スタックマップ」は、ガーベジコレクションが行われるそれぞれの実行点における、基準を含むスタックフレームスロットを示す、スタックフレームのちょうどよい時のスナップショットを表すデータ構造である。スタックマップは、ことごとくの検査された方法における複数の実行点のために記憶されなければならず、従って、この方法はランダムアクセスメモリ(RAM)上で集中的に行われなければならない。
第2の方法は、検査されたバイトコードの実行中に、それぞれのスタックの書込み動作の跡をたどるステップと、基準が書込まれたそれぞれのスタックスロットにタグをつけるステップと、非基準値がそのスタック位置に書込まれた時にスタックタグをクリアするステップと、を含む。これは、スタックに書込まれた基準値および非基準値が、自己記述性のものであること、すなわち、それぞれの値が、その値が基準であるかどうかを表示するために用いられる1つまたはそれ以上のビットを有すること、を必要とする。タグデータ自身は、タグフィールドを含めるために、存在するスタックを広げることにより、または、並列スタックを保持することにより、記憶される。このスタックのタグ付けプロセスは、プログラムの実行を遅くする。その理由は、スタックおよび変数の双方が、スタックに書込まれたそれぞれの値に対し、基準または非基準としてマーク付けされなければならないからである。
従って、公知の方法よりも、メモリへの集中が少なく、プログラムに対する影響が少ない、精密なガーベジコレクションの方法を提供することが望ましい。
1つの特徴から見ると、本発明は、データ処理システム内における処理タスクの実行を制御する方法を提供し、その方法は、
データ記憶装置に対するメモリエリアの割当てを含む前記処理タスクを実行するステップと、
メモリ管理を行うために、実行点において前記処理タスクの実際の実行経路を中断するステップと、を含み、前記メモリ管理は、
実行のコースにおいて生じ、前記メモリエリアのそれぞれをポイントする基準値を指定する前記実行点における前記処理タスクによりアクセス可能である、1つまたはそれ以上のデータアイテムを識別するステップと、
識別されたデータアイテムに対応する基準値と、前記実行点までの前記実行中に割当てられたメモリエリアと、の間の相関を決定するステップと、
前記相関に依存して、割当てられたメモリエリアに対するメモリ管理動作を行うステップと、
を含む。
メモリ空間を有効に再生利用するためには、処理タスクによりアクセス可能であるいずれのデータアイテムが基準値であり、いずれのデータアイテムが非基準値であるかを、正確に識別する必要がある。公知のメモリ再生利用技術は、処理タスクの実行の前の検査段階において基準を識別するために必要な解析を行うか、または、データの書込み動作を連続的にモニタし、それぞれの書込まれたデータアイテムが基準値であるか否かをログする。本発明は、基準識別のプロセスが、処理タスクの実行の開始後(すなわち、検査後)に、必要に応じ、かつ必要になった時にのみ、基準識別を行うことにより、メモリへの集中が少なく、プロセッサへの集中が少ないようにされうることを認めた。本発明は、基準が、ガーベジコレクションが開始される実行点において動的に識別され、かつ前に記憶された情報に依拠しない技術を用いる。
基準値を指定するオペランドスタックデータアイテムを識別するプロセスは、現在の実行点までの全ての可能な実行経路を徹底的に探索して、実際の実行経路を見出すことにより行うことができた。本発明の実施例は、これが不必要であることを認識し、現在の実行点に至る任意の可能なデータ経路、例えば、最初に遭遇したデータ経路が、いずれのオペランドスタックエントリが基準に対応するかを識別するために用いられるように動作する。これは、経路発見アルゴリズムを促進し、しかもスタックスロットを含む基準が、命令の実行に関連する制約に従う任意のプログラム言語において、信頼性をもって識別されることを可能にする。
本発明の実施例により行われるメモリ管理動作は、例えば、タグ付け動作、コピー動作、または再割当て動作を含むことができることを認識すべきである。しかし、データアイテムがオペランドスタックのデータアイテムである実施例においては、メモリ管理動作は、基準値を指定する識別されたデータアイテムを介して直接または間接に処理タスクによりアクセス可能である、全てのメモリエリアへのマーク付けを含む。マーク付けされなかったメモリエリアは、次に、処理タスクのその後の実行における再割当てのために収集される。基準は、メモリ管理動作が行われる実行点において、必要に応じ、かつ必要になった時にのみ、識別されるので、そのような実施例は、公知のガーベジコレクションアルゴリズムよりも効率的なメモリ再生利用の機能性を提供する。
マーク付けされていないメモリエリアは、後のプログラミングタスクの実行中に直接再割当てされうるが、マーク付けされていないメモリエリアを再割当てのために解放する前に、それらのメモリエリアの圧縮を行うと、処理タスクが、メモリのより大きい隣接エリアを再割当てのために利用できるようになる利点が得られる。
基準を指定する処理タスクによりアクセスできるデータアイテムの識別において、それらのデータアイテムがローカル変数を表す場合、複数の可能な実行経路の1つに沿った基準に関連するローカル変数は、基準値として分類されうるが、その利用は不精密である。しかし、実施例においては、異なった実行経路に沿った、異なったデータタイプに関連するローカル変数(従って、不確定タイプのもの)は、プログラム命令および分類用変数を走査することにより、確定タイプのローカル変数から、マルチプルタイプとして識別され、従って非基準である。全てのその時可能な、現在の実行点までの実行経路は、それぞれのマルチプルタイプ変数に対して次々にシミュレートされ、それぞれの実行経路のためのそれぞれのプログラム命令におけるデータタイプが決定される。決定されたデータタイプは、次に、現在の実行点のためにチェックされ、このチェックの結果に依拠してメモリ管理動作が行われる。これは、現在の実行点において不確定タイプを有するマルチプルタイプ変数に関連するメモリエリアが、メモリ管理動作中に再割当ての効果的要求を受けられるという利点を有する。不確定タイプの変数の識別は、まずマルチプルタイプの変数を識別し、次にマルチプルタイプ変数として分類されたローカル変数の部分集合のみに対し完全なデータフロー解析を行うことにより、著しく簡単化される。
本発明は、メモリが動的に割当てられる、任意のコンピュータプログラミング言語に関連する処理タスクに適用可能であることを認識すべきである。しかし、実施例は、スモールトークまたはジャバ(R)のようなオブジェクト指向プログラム言語における処理タスクを行う。特に実施例は、ジャバ(R)における処理タスクを行う。有利なことに、ジャバ(R)仮想マシンの仕様は、プログラムコードが、ローカル変数またはオペランドスタック値のようないずれのデータアイテムが基準に対応するかを識別するために用いられるアルゴリズムを相当に簡単化するために直接利用できるルールに、従わなければならないことを意味する。
もう1つの特徴から見ると、本発明は、データ処理システム内における処理タスクの実行を制御する動作が可能なデータ処理装置を提供し、そのデータ処理装置は、
データ記憶装置に対するメモリエリアの割当てを含む前記処理タスクを実行する動作が可能な実行ロジックと、
メモリ管理を行うために、実行点において前記処理タスクの実際の実行経路を中断する動作が可能なタスク中断ロジックと、
実行のコースにおいて生じ、かつ前記メモリエリアのそれぞれをポイントする基準値を指定する前記実行点における前記処理タスクによりアクセス可能である、1つまたはそれ以上のデータアイテムを識別する動作が可能な基準識別ロジックと、
識別されたデータアイテムに対応する基準値と、前記実行点までの前記実行中に割当てられたメモリエリアと、の間の相関を決定する動作が可能な相関ロジックと、
前記相関に依存して、割当てられたメモリエリアに対するメモリ管理動作を行うよう操作可能なメモリ管理ロジックと、
を含む。
さらなる特徴から見ると、本発明は、コンピュータを制御してデータ処理システム内における処理タスクの実行を制御するコンピュータプログラムを有するコンピュータプログラム製品を提供し、そのコンピュータプログラムは、
データ記憶装置に対するメモリエリアの割当てを含む前記処理タスクを実行する動作が可能な実行コードと、
メモリ管理を行うために、実行点において前記処理タスクの実際の実行経路を中断する動作が可能な中断コードと、
実行のコースにおいて生じ、かつ前記メモリエリアのそれぞれをポイントする基準値を指定する前記実行点における前記処理タスクによりアクセス可能である、1つまたはそれ以上のデータアイテムを識別する動作が可能な基準識別コードと、
識別されたデータアイテムに対応する基準値と、前記実行点までの前記実行中に割当てられたメモリエリアと、の間の相関を決定する動作が可能な相関コードと、
前記相関に依存して、割当てられたメモリエリアに対するメモリ管理動作を行うよう操作可能なメモリ管理コードと、
を含む。
本発明の、上述の、またその他の、目的、特徴、および利点は、添付図面と関連して読まれるべき、以下の実施例の詳細な説明から明らかとなる。
図1は、本技術によるガーベジコレクションを概略的に示すフローダイアグラムである。このプロセスは、段階110において開始され、そこでは方法のバイトコード検査が行われる。この検査プロセスは、ジャバ(R)のバイトコードが、JVM仕様のルールに従っていることを保証する。プロセスは次に段階120へ進み、そこでは本方法のバイトコードがJVM上で実行される。ヒープは、JVMの立上げの時に作成され、全てのクラスの具体化物(すなわち、オブジェクト)およびアレイは、実行中にヒープからメモリ割当てを受ける。段階130においては、全ての実行中の方法の実行が、ガーベジコレクションの目的のために中断される。この場合、ガーベジコレクションは、使い尽くされたヒープからのメモリ割当ての要求によりトリガされる。プロセスは段階140へ進み、そこでは、ガーベジコレクションの第1の段階が行われる。これは、プログラムのルートを形成する基準値に対応するデータ値の識別を含む。グローバル変数、ローカル変数(スタックフレーム上に記憶されている)、およびオブジェクトが、基準を求めて探索される。この段階において、ガーベジコレクションがトリガされた実行点に対応するスタックマップが、動的に作成される。これは、バイトコードの検査中に多数のスタックマップを作成し、メモリから現在の実行点に対して適切なスタックマップを検索する公知の方法とは異なる。基準値の識別は、「マーク付けおよび掃出し」アルゴリズムのマーク付けプロセスの初期段階に対応する。基準値が識別されると、プロセスは段階150へ進み、そこでは識別された基準値が、割当てられたヒープメモリエリアと相関されて、いずれのヒープオブジェクトがガーベジであるか確認される。段階140から170は、用いられている全ての方法に対し行われる。
図2は、相関プロセスを概略的に示す。図2は、ルートのセット210と、複数のメモリエリア222、226、228、230を含むヒープ空間220と、2つのスタックフレーム262、264を含むスタック260と、処理タスクのためのバイトコードを含むメモリエリア250と、を示す。
図2に示されているように、それぞれのジャバ(R)スタックフレームは、3つのセクション、すなわち、ローカル変数、実行環境、およびオペランドスタックを有する。それぞれの方法は、関連するスタックフレームを有することを想起すべきである。ローカル変数セクションは、現在の方法呼出しにより用いられている全てのローカル変数を含む。実行環境セクションは、スタック自身の動作を維持するために用いられる。オペランドスタックは、バイトコード命令により作業空間として用いられる。
プログラムが直接アクセスできる値は、プロセッサのレジスタに保持されているものと、プログラムスタック上に保持されているもの(ローカル変数および一時変数を含む)と、グローバル変数内に保持されているものと、である。計算のルート210は、(メモリアドレスに対するポインタまたはハンドルのような)ヒープ220のメモリエリアに対する基準を保持する直接アクセス可能な値である。整数のようなプリミティブタイプはルートではなく、基準のみがルートでありうることに注意すべきである。ルート210は、プログラムにとって常にアクセス可能であるオブジェクトを表す。ルートオブジェクト自身は基準フィールドを含むので、基準のチェーンをそれぞれのルートから形成することができる。オブジェクトは、もし別のライブオブジェクト内のフィールドがそれを基準とすれば、ライブであると考えられる。ルートを経て到達可能である全てのオブジェクトは、ライブであると考えられる。図2は、アルゴリズムがどのように、計算のルート210から出発し、それぞれのルートから基準のチェーンを走査し、ルートから到達可能なそれぞれのデータアイテムに、マークビット224をセットすることによりマーク付けするかを示す。このプロセスにおいて、ルートに関連する基準のチェーンを追跡するときに巡視されたそれぞれのデータは、ライブオブジェクトとしてマーク付けされる。例えば、オブジェクト222はルートにより基準とされ、オブジェクト222内のフィールドは、今度はオブジェクト226に対する基準を含む。従って、オブジェクト224および226は、それらがライブであることを示すマークビットを有し、従って、ガーベジコレクションのために用いることはできない。もしルートからのある基準の経路が存在し、その経路により実行中のプログラムがオブジェクトにアクセスできるならば、そのオブジェクトはルートから到達可能である。マーク付け相の終了は、すでにマーク付けされているデータアイテムから追跡されないことにより強要される。マーク付けされずに残っているデータアイテムは、ルートから到達可能ではなく、従って、ガーベジに違いない。データアイテム228は、データアイテム230に対する基準を含むが、これらのデータアイテムのいずれもルート210の1つを経て追跡可能ではなく、従って、それらはガーベジである。
ここで図1のフローチャートに帰る。プロセスのマーク付け相が完了し、ライブメモリエリアがガーベジから識別され終わると、プロセスは段階160へ進み、そこでは、メモリ管理動作が行われる。この場合は、段階160において「掃出し」動作が行われる。掃出し相においては、ガーベジコレクタはヒープメモリを掃出し、マーク付けされていないメモリエリアを、ヒープメモリの割当て可能な(自由な)プールへ返し、次のガーベジコレクションサイクルの準備として、アクティブセルのマークビットをクリアする。この段階において行われるさらなるメモリ管理タスクは、「圧縮」として公知のプロセスであり、これはヒープの断片化を防止するために用いられる。圧縮は、ライブオブジェクトを自由メモリ空間を経て、ヒープの一方の端部に向かって移動させることを含む。これは、ヒープの他端部に、隣接する自由メモリエリアを残す。圧縮中に、移動されたライブオブジェクトに対する全ての基準は更新されて、新しい位置に関連するものとされる。最後に、段階170において、方法は実行を再開し、新しく自由化されたヒープメモリは、実行中のプログラムにより再割当てのために使用可能となる。
本技術による方法が、公知の精密ガーベジコレクションと異なる点は、基準値が、ガーベジコレクションの開始される実行点における、ちょうどよい時のスナップショットに対応する別個のマップの動的作成により識別されることである。公知の精密なガーベジコレクションは、検査段階において複数のそのようなマップ(スタックマップ)を形成し、それらの全てはRAM内に保持されて、後にプログラムの実行中に用いられなければならない。この公知のアプローチには、かなりの冗長性がある。その理由は、実際に用いられる記憶されたスタックマップは、ガーベジコレクションがシステムにより開始される実行点に依存するからである。本技術は、基準フラグがオブジェクト自身内にセットされ、かつスタックがプログラム実行中のことごとくの書込み動作のためにマーク付けされる公知の技術とは異なる。特に、双方の技術において、基準は処理タスクの実行が開始された後に識別されるが、本技術によれば、基準は、ガーベジコレクションが開始される実行点において、必要に応じてのみ識別される。
本技術によるガーベジコレクションは、ルートおよびライブオブジェクトの、もっと信頼できる正確な識別に焦点を合わせている。これは、2つの異なった要素の解析であって、その一方の要素はオペランド(または表現)スタック内における基準の発見を含み、他方の要素は変数アレイ内における基準の発見およびマルチプルタイプ変数の識別を含む、前記解析を行うことにより達成される。次に、ここで、これら2つの要素のそれぞれを順番に考える。
図3は、オペランドスタック内において基準を見出すプロセスを概略的に示す。本技術によれば、(スタックマップに類似した)オペランドスタック基準テーブルが、ガーベジコレクションが開始される実行点において、検査後に動的に作成される。図4は、オペランドスタック基準テーブルを概略的に示す。図4には、隣接するメモリロケーションまたはスロットのブロックを含む論理スタック410が示されており、スタック基準テーブル450は、論理スタックを伴うビットベクトルであり、それは、いずれのスタックスロットが基準を含むかを指定する。この実施例においては、スタックは、連続メモリブロックを含むが、別の実施例においては、スタックは、不連続メモリロケーションを含む。スタックスロット412、414、416、418は、ビットベクトルロケーション452、454、456および458にそれぞれ対応する。それぞれのスタックスロットは、整数(INT)または浮動小数点数(FLOAT)のようなプリミティブ値を記憶するため、または、ポインタのような基準(REF)を記憶するために用いられる。スタックスロット412および418は基準を含み、対応するビットベクトルロケーション452および458は、これを反映するために1にセットされたタグビットを有する。論理スタック410内の実際のデータは、基準を明確に識別しないが、ガーベジコレクションアルゴリズムは、ビットベクトルを検査して、いずれのスタックスロットが基準を含むかを決定することができる。この基準テーブル450の構成は、方法コードにより2パスの実行を行うことによって実現される。
本技術によるオペランドスタック解析は、以下の2つのルールを用い、これらのルールはジャバ(R)のためのJVM仕様に定められている。
I. 「それぞれの命令は、その呼出しに至る実行経路にかかわらず、オペランドスタックおよびローカル変数アレイ内のアーギュメントの適切なタイプおよび数によってのみ実行されなければならない。整数型の値を操作する命令はまた、ブール型、バイト型、文字型、およびショート(short)型の値を操作することもできる。」
II. もし命令を、いくつかの異なる実行経路に沿って実行することができれば、オペランドスタックは、とる経路にかかわらず命令の実行の前に同じ深さをもたなければならない。」
基準テーブルは、ガーベジコレクションアルゴリズムの開始点において動的に作成されるので、現在の実行点に到着するためにたどられた実際の実行経路についての情報は得られない。もしか/ほかに、方法コードに分岐がある可能性により、複数の可能な実行経路を経て現在の実行点に到着できることは十分にありうる。一般に、与えられたスタックフレームスロットが、方法の実行における与えられた点に基準を含むかどうかは、現在の実行点に依存するのみでなく、その実行点に到着するためにたどられた制御経路にも依存する。例えば、1つの制御経路に沿っては、与えられたスタックフレームに整数値が割当てられ、一方、別の制御経路に沿っては、同じスタックスロットに基準が割当てられることができる。
しかし、JVM仕様の上述の2つのルールを適用するとき、スタックのいずれのスロットが基準を含むかを識別するために、実際の実行経路を決定することは本質的に重要ではないことが推測できる。実際には、現在の実行点に至る複数の可能な実行経路のいずれかを見出し、必ずしも実際の実行経路ではないその見出された経路を用い、スタック基準テーブルを生成すれば十分である。実行経路は、現在の実行点に対応するゼロのバイトコードインデックスにおいて開始されなければならない。それぞれの可能な実行経路のためのスタック基準テーブル(そこでは、基準に対応するスタックスロットはタグを付けられている)は、JVMのルールIおよびII(上記参照)が守られている限り、同じになるはずである。
ここで図3のフローチャートを参照すると、プロセスは段階310において開始され、そこでは、任意の制御経路が見出される。次に、段階320においては、この経路が現在のバイトコードインデックスに至るものであるかどうかが決定される。もし実行された経路を経て、現在の実行点に実際に到達するならば、プロセスは段階330へ進み、そうでなければ、フロー制御は段階310へ復帰し、そこでさらなる経路が見出される。段階330においては、識別された実行経路がたどられ、その経路に沿ってモニタ動作が行われる。特に、その経路に沿っての方法エリアのことごとくのバイトコードは、それがスタックを変更するかどうかを見るためにチェックされる。これにより、スタックの深さが追跡され、識別された実行経路に沿って、スタックによりどのような変数タイプがプッシュされポップされるかがモニタされる。段階330において作成されたスタック基準テーブルは、次の段階340において、マーク付けプロセスを完成するために用いられ、それにより、ルートから到達可能な全てのヒープメモリが明確に識別される。このようにして、段階340は、スタックスロット内に記憶されているメモリの基準値と、処理タスクによりメモリエリアを割当てられたヒープメモリ内のオブジェクトと、の相関を含む。段階310から340は、用いられている全ての方法に対して行われる。段階340において、ライブヒープメモリエリアが識別されると、プロセスは段階350へ進み、そこでは、ガーベジに対応する全ての相関していないヒープメモリエリアが、メモリ管理動作を受ける。このメモリ管理動作の結果、それらのヒープメモリエリアは、実行プログラムによる再割当てのために自由化される。
図5は、オペランドスタック内においてではなく、変数リスト内において基準を見出すプロセスを概略的に示すフローダイアグラムである。方法により用いられる変数は、アレイ内に記憶される。それらの変数は、静的(グローバル)変数、ローカル変数または方法のアーギュメントである。JVMは、変数アレイ内のそれぞれの変数が、基準または非基準値を記憶しているかどうかを決定する必要がある。方法のシグネチャは、それぞれのアーギュメントのタイプを指定し、これにより、アーギュメントはあらかじめタグ付けされることができる。しかし、ローカル変数は、初期化されていないとしてマーク付けされ、後にタグ付けされなければならない。
ある変数が不確定タイプのものでありうるという事実により、一定の変数を、基準または非基準として分類することには問題がある。この状況は、例えば、共通の実行点に至る少なくとも2つの異なる制御経路が存在し、変数が、1つの制御経路に沿っては整数値を割当てられるが、別の制御経路に沿っては基準値を割当てられる場合に生じうる。上記のルールIによれば、それぞれの命令は、その命令の呼出しに至る実行経路にかかわらず、ローカル変数アレイ内の適切な数またはアーギュメントのタイプによってのみ実行されなければならない。現在の実行点において不確定タイプであるいずれのローカル変数も、当然の結果として基準とみなされないことになる。
原理的には、与えられた変数が、方法の1つのブロックにおいては非基準として用いられるが、同じ方法の別のブロックにおいては基準値として用いられることは可能である。これは、プログラム実行のそれぞれのステップにおけるそれぞれの変数のタイプを追跡しつつ行われる、全ての制御経路を経てのステップバイステップの解析が必要であることを示唆する。しかし、本技術は、変数のマルチプルタイプの使用が実際には比較的に稀であり、例えば、変数の5%がマルチプルタイプであることを認めている。マルチプルタイプを有する方法変数の一部が少ない事実は、2段階の変数解析を行うことにより利用される。この変数解析の第1の段階は、いずれの変数がマルチプルタイプ変数として識別可能であるかを決定するための、方法の全てのバイトコードの1パス走査を含む。この変数解析の第2の段階は、第1の段階においてマルチプルタイプであるとして識別された小さい割合の変数に対してのみ、完全なデータフロー解析を行うことを含み、好ましくは、一時に1つの変数をチェックする。
図5のフローチャートを参照すると、変数に対する基準識別プロセスは段階510において開始され、そこでは、それぞれのローカル変数のために、方法の完全なバイトコードが走査される。与えられたローカル変数において、記憶命令により影響されるそれぞれの変数に関連するデータタイプはログされる。それぞれの可能なデータタイプに、1つのタグビットが割当てられる。この段階の終了時には、方法の変数の総数に等しいサイズの変数アレイが存在する。それぞれの変数に対し、このアレイは、完全な方法の実行中のある点における、その変数に関連する全てのデータタイプを示すデータフィールドを有する。プロセスは次に段階520へ進み、そこでは、段階510のタグビットが、マルチプルタイプの変数と、公知のタイプの変数とを、識別するために用いられる。段階530においては、それぞれのマルチプルタイプ変数に対し、完全なデータフロー解析が行われる。この完全なデータフロー解析は、それぞれのマルチプルタイプ変数のためのバイトコードを通る全ての可能な実行経路の追跡と、それぞれのバイトコードにおける変数のデータタイプのロギングとを含む。従って、この段階の終了時には、それぞれのマルチプルタイプ変数のための方法におけるバイトコードの数と同じ長さのアレイが存在する。プロセスは次に段階540へ進み、そこでは、ガーベジコレクションアルゴリズムが、現在の実行点のバイトコード番号に対応するそれぞれのマルチプルタイプ変数アレイエントリをチェックして、現在の実行点におけるマルチプルタイプ変数の実際のデータタイプを確立する。段階540において、現在の実行点におけるデータタイプが確立されると、プロセスは次に段階550へ進み、そこでは、メモリ管理動作が行われる。もし現在の実行点EPにおいて、マルチプルタイプ変数が基準値であることが見出されたとすれば、それはライブであるとしてマーク付けされる。しかし、もしマルチプルタイプ変数が公知のタイプであるが、非基準であることが見出されたとすれば、それは無視される。同様にして、もしマルチプルタイプ変数が、現在の実行点において不確定データタイプのものであることが見出されたとすれば、それは無視される。マーク付けプロセスの第1の段階である段階550に続く、ガーベジコレクションのその後の諸段階は、従来の技術を用いて行われる。段階510から550は、用いられている全ての方法に対し行われる。段階530から550は、それぞれの識別された可能なマルチプルタイプ変数に対し行われる。
図6は、本技術による、変数のための基準識別プロセスの3つの段階を概略的に示す。このプロセスの第1の段階は、方法エリア610内の全てのバイトコードの走査と、それぞれのローカル変数のための、それぞれの関連した記憶命令のロギングとを含む。このロギングプロセスの結果は、変数テーブル620として編集され、このテーブルは、本例の目的のために、ローカル変数VAR1、VAR2、VAR3およびVAR4のそれぞれをリストし、また、基準(REF)、整数(INT)および浮動小数点(FLT)である可能なデータタイプのそれぞれのためのタグビットを有する。
プロセスの第2の段階は、それぞれのローカル変数のために、変数テーブル620内にセットされた、ビット数の検査を含む。変数テーブル620から、VAR1、VAR3およびVAR4は、それぞれ公知のタイプINT、REFおよびFLTであることがわかる。これら3つの変数のそれぞれは、方法の全てのバイトコード610のための単一のデータタイプに関連している。しかし、VAR2は、基準および整数の双方としてフラグ付けされており、従って、マルチプルタイプ(または、不確定タイプ)の変数として識別される。
プロセスの第3の段階は、方法エリア610内に存在するバイトコードと同じ数の要素を有する、マルチプルタイプ変数VAR2のためのアレイ630の作成を含む。VAR2のために完全なデータフロー解析が行われ、それぞれのバイトコードにおけるVAR2の可能な変数タイプが決定される。この場合には、考慮しなければならないバイトコード#4において、現在の実行点EPへの2つの可能な経路が存在する。経路1上においては、VAR2は、バイトコード#0ないしバイトコード#4からの整数値を有し、一方、経路2上においては、VAR2は、バイトコード#1およびバイトコード#2に対しては初期化されていないが、バイトコード#3およびバイトコード#4に対しては基準値をとる。従って、VAR2アレイ630は、バイトコード#1および#2においては、(整数に対応する)エントリIを有するが、バイトコード#3および#4においてはエントリM(マルチプルタイプ)を有する。VAR2は、現在の実行点において、経路1上には整数値を有し、経路2上には基準値を有するので、それは不確定タイプのものであり、従って、ライブオブジェクトとしてマーク付けされることはない。
本技術による、変数アレイ内における基準の識別方法は、現在の実行点において不確定タイプを有する変数が誤ってライブオブジェクトとしてマーク付けされることを防止するという利点を有する。すなわち、本技術は、精密なガーベジコレクションを効果的に提供する。
ジャバ(R)仮想マシンの仕様は、「オブジェクトのためのヒープ記憶装置は、自動記憶管理システムにより再生利用される」と述べている。JVMは、特定のタイプの自動記憶管理システムを仮定してはおらず、記憶管理技術は実施者のシステム要求に従って選択できる。しかし、(サン(R)(SunRTM)およびマイクロソフト(R)(MicrosoftRTM)によるもののような)ジャバ(R)の全ての普及した実施は、ガーベジコレクションを用いている。
特定のオプションによりジャバ(R)を開始することによってガーベジコレクションをターンオフすることは可能であるが、ガーベジコレクションは、一般にJVMにより自動的に実行される。もしガーベジコレクションが、長期にわたって走るプログラムにおいてターンオフされれば、そのプログラムは、実行が完了する前にメモリの枯渇により障害を起こす可能性がある。JVMは、一般にユーザに対し、ガーベジコレクションの方法を明示的に呼出すオプションを提供するので、ガーベジコレクションは、ユーザにより指定されたコード実行の任意の点において行われうる。
図7は、上述の技術を実施するために用いられるタイプの汎用コンピュータ700を示す。汎用コンピュータ700は、中央処理装置702と、ランダムアクセスメモリ704と、読取り専用メモリ706と、ネットワークインタフェースカード708と、ハードディスクドライブ710と、ディスプレイドライバ712と、モニタ714と、キーボード718およびマウス720を有するユーザ入出力回路716と、を含み、これらは全て共通バス722により接続されている。動作の際には、中央処理装置702は、ランダムアクセスメモリ704、読取り専用メモリ706およびハードディスクドライブ710の1つまたはそれ以上に記憶されている、または、ネットワークインタフェースカード708を経て動的にダウンロードされた、コンピュータプログラム命令を実行する。行われた処理の結果は、ディスプレイドライバ712およびモニタ714により、ユーザに対しディスプレイされる。汎用コンピュータ700の動作を制御するためのユーザ入力は、キーボード718またはマウス720から、ユーザ入出力回路716を経て受け取られる。コンピュータプログラムは、さまざまな異なるコンピュータ言語で書けることを認識すべきである。コンピュータプログラムは、記録媒体上に記憶されて分配されるか、または、汎用コンピュータ700へ動的にダウンロードされる。適切なコンピュータプログラムの制御下で動作する時、汎用コンピュータ700は、上述の技術を行うことができ、また上述の技術を行う装置を形成すると考えることができる。汎用コンピュータ700のアーキテクチャは、かなりさまざまでありえ(例えば、ハンドヘルドゲームコンピュータ、モバイルコンピュータ、パーソナルディジタルアシスタント、など)、図7は単に1つの例に過ぎない。
ここでは本発明の特定の実施例を説明したが、本発明はこれに制限されるわけではなく、本発明の範囲内において多くの改変および追加を行えることは明らかである。例えば、本発明の範囲から逸脱することなく、以下の従属請求項の特徴のさまざまな組み合わせを、独立請求項の特徴を用いて行うことができる。
本技術によるガーベジコレクションを概略的に示すフローダイアグラムである。(実施例1) どのように識別された基準値がヒープメモリと相関されて、ライブオブジェクトにマーク付けが行われるかを概略的に示す。 オペランドスタック内において基準を見出すプロセスを概略的に示すフローダイアグラムである。 オペランドスタック基準テーブルのフォーマットを概略的に示す。 変数リスト内において基準を見出すプロセスを概略的に示すフローダイアグラムである。 図5のフローチャートに対応する変数のための基準識別のプロセスの3つの段階を概略的に示す。 本技術を実施するために用いられるタイプの汎用コンピュータを概略的に示す。
符号の説明
220 ヒープ空間
222 メモリエリア
226 メモリエリア
228 メモリエリア
250 メモリエリア

Claims (30)

  1. データ処理システム内における処理タスクの実行を制御する方法において、前記方法は、
    データ記憶装置に対するメモリエリアの割当てを含む前記処理タスクを実行するステップと、
    メモリ管理を行うために、実行点において前記処理タスクの実際の実行経路を中断するステップと、を含み、前記メモリ管理は、
    実行のコースにおいて生じ、かつ前記メモリエリアのそれぞれをポイントする基準値を指定する前記実行点における前記処理タスクによりアクセス可能である、1つまたはそれ以上のデータアイテムを識別するステップと、
    識別されたデータアイテムに対応する基準値と、前記実行点までの前記実行中に割当てられたメモリエリアと、の間の相関を決定するステップと、
    前記相関に依存して、割当てられたメモリエリアに対するメモリ管理動作を行うステップと、
    を含む、前記方法。
  2. 前記1つまたはそれ以上のデータアイテムのそれぞれはオペランドである、請求項1記載の方法。
  3. 前記識別するステップは、
    前記実行点に至る可能な実行経路を識別するステップであって、前記可能な実行経路は前記実際の実行経路とは異なるかもしれない、前記ステップと、
    前記可能な実行経路のシミュレートされた実行を行うステップと、を含み、
    前記処理タスクにとってアクセス可能である前記1つまたはそれ以上のデータアイテムは、前記現在の実行点への前記可能な実行経路をたどることにより識別される、
    請求項2記載の方法。
  4. 前記メモリ管理動作は、前記識別されたデータアイテムを介して直接または間接に前記処理タスクによりアクセス可能である、全ての前記メモリエリアへのマーク付けと、前記処理タスクの後の実行中における再割当てのための、マーク付けされていないメモリエリアの収集と、を含む、請求項3記載の方法。
  5. 前記メモリ管理動作は、前記マーク付けされていないメモリエリアの、再割当ての前における圧縮を含む、請求項4記載の方法。
  6. 前記1つまたはそれ以上のデータアイテムのそれぞれはローカル変数である、請求項1記載の方法。
  7. 前記識別するステップは、
    前記処理タスクに対応する複数のプログラム命令を走査し、前記1つまたはそれ以上のデータアイテムのそれぞれに対応するそれぞれの記憶命令のためのデータタイプをログするステップと、
    もしそれぞれのデータアイテムに対する異なる記憶命令のために異なるデータタイプがログされたならば、前記1つまたはそれ以上のデータアイテムの少なくとも1つをマルチプルタイプ変数として分類するステップと、
    マルチプルタイプ変数として分類された前記1つまたはそれ以上のデータアイテムのそれぞれのために、前記実行点までの全ての可能な実行経路をシミュレートし、前記可能な実行経路のそれぞれのための前記複数のプログラム命令のそれぞれにおいて、それぞれのマルチプルタイプ変数に関連するデータタイプを決定するステップと、
    前記現在の実行点に対応する前記複数のプログラム命令の1つにおいて、前記マルチプルタイプ変数のそれぞれにおける前記決定されたデータタイプをチェックするステップと、を含み、
    前記メモリ管理動作は、前記決定されたデータタイプをチェックする前記ステップの結果に依存して行われる、
    請求項6記載の方法。
  8. 前記メモリ管理動作は、もし前記決定されたデータタイプが前記現在の実行点における前記可能な実行経路の異なるものに対し異なるならば、前記データアイテムに、再割当てのために適切であるとしてタグ付けすることを含む、請求項7記載の方法。
  9. 前記処理タスクは、オブジェクト指向プログラム言語で書かれたコンピュータプログラムの成分である、請求項1記載の方法。
  10. 前記オブジェクト指向プログラム言語はジャバ(R)である、請求項9記載の方法。
  11. コンピュータを制御してデータ処理システム内における処理タスクの実行を制御するコンピュータプログラムを有するコンピュータプログラム製品において、前記コンピュータプログラムは、
    データ記憶装置に対するメモリエリアの割当てを含む前記処理タスクを実行する動作が可能な実行コードと、
    メモリ管理を行うために、実行点において前記処理タスクの実際の実行経路を中断する動作が可能な中断コードと、
    実行のコースにおいて生じ、かつ前記メモリエリアのそれぞれをポイントする基準値を指定する前記実行点における前記処理タスクによりアクセス可能である、1つまたはそれ以上のデータアイテムを識別する動作が可能な基準識別コードと、
    識別されたデータアイテムに対応する基準値と、前記実行点までの前記実行中に割当てられたメモリエリアと、の間の相関を決定する動作が可能な相関コードと、
    前記相関に依存して、割当てられたメモリエリアに対するメモリ管理動作を行うよう操作可能なメモリ管理コードと、
    を含む、前記コンピュータプログラム製品。
  12. 前記1つまたはそれ以上のデータアイテムのそれぞれはオペランドである、請求項11記載のコンピュータプログラム製品。
  13. 前記基準識別コードは、
    前記実行点に至る可能な実行経路を識別する動作が可能な経路識別コードであって、前記可能な実行経路は前記実際の実行経路とは異なるかもしれない、前記経路識別コードと、
    前記可能な実行経路のシミュレートされた実行を行う動作が可能な経路シミュレーションコードと、を含み、
    前記処理タスクにとってアクセス可能である前記1つまたはそれ以上のデータアイテムは、前記現在の実行点への前記可能な実行経路をたどることにより識別される、
    請求項12記載のコンピュータプログラム製品。
  14. 前記メモリ管理コードは、前記識別されたデータアイテムを介して直接または間接に前記処理タスクによりアクセス可能である、全ての前記メモリエリアにマーク付けし、また、前記処理タスクの後の実行中における再割当てのための、マーク付けされていないメモリエリアを収集する動作が可能である、請求項13記載のコンピュータプログラム製品。
  15. 前記メモリ管理コードは、前記マーク付けされていないメモリエリアを、再割当ての前に圧縮する動作が可能である、請求項14記載のコンピュータプログラム製品。
  16. 前記1つまたはそれ以上のデータアイテムのそれぞれはローカル変数である、請求項11記載のコンピュータプログラム製品。
  17. 前記基準識別コードは、
    前記処理タスクに対応する複数のプログラム命令を走査し、前記1つまたはそれ以上のデータアイテムのそれぞれに対応するそれぞれの記憶命令のためのデータタイプをログする走査コードと、
    もしそれぞれのデータアイテムに対する異なる記憶命令のために異なるデータタイプがログされたならば、前記1つまたはそれ以上のデータアイテムの少なくとも1つをマルチプルタイプ変数として分類する動作が可能な分類コードと、
    マルチプルタイプ変数として分類された前記1つまたはそれ以上のデータアイテムのそれぞれのために、前記実行点までの全ての可能な実行経路をシミュレートし、前記可能な実行経路のそれぞれのための前記複数のプログラム命令のそれぞれにおいて、それぞれのマルチプルタイプ変数に関連するデータタイプを決定する動作が可能な経路シミュレーションコードと、
    前記現在の実行点に対応する前記複数のプログラム命令の1つにおいて、前記マルチプルタイプ変数のそれぞれにおける前記決定されたデータタイプをチェックする動作が可能なデータタイプチェックコードと、を含み、
    前記メモリ管理コードは、前記メモリ管理動作を、前記データタイプチェックコードの結果に依存して行うよう操作可能である、
    請求項16記載のコンピュータプログラム製品。
  18. 前記メモリ管理コードは、もし前記決定されたデータタイプが前記現在の実行点における前記可能な実行経路の異なるものに対し異なるならば、前記データアイテムに、再割当てのために適切であるとしてタグ付けする動作が可能である、請求項17記載のコンピュータプログラム製品。
  19. 前記処理タスクは、オブジェクト指向プログラム言語で書かれたコンピュータプログラムの成分である、請求項11記載のコンピュータプログラム製品。
  20. 前記オブジェクト指向プログラム言語はジャバ(R)である、請求項19記載のコンピュータプログラム製品。
  21. データ処理システム内における処理タスクの実行を制御する動作が可能なデータ処理装置において、前記データ処理装置は、
    データ記憶装置に対するメモリエリアの割当てを含む前記処理タスクを実行する動作が可能な実行ロジックと、
    メモリ管理を行うために、実行点において前記処理タスクの実際の実行経路を中断する動作が可能なタスク中断ロジックと、
    実行のコースにおいて生じ、かつ前記メモリエリアのそれぞれをポイントする基準値を指定する前記実行点における前記処理タスクによりアクセス可能である、1つまたはそれ以上のデータアイテムを識別する動作が可能な基準識別ロジックと、
    識別されたデータアイテムに対応する基準値と、前記実行点までの前記実行中に割当てられたメモリエリアと、の間の相関を決定する動作が可能な相関ロジックと、
    前記相関に依存して、割当てられたメモリエリアに対するメモリ管理動作を行うよう操作可能なメモリ管理ロジックと、
    を含む前記データ処理装置。
  22. 前記1つまたはそれ以上のデータアイテムのそれぞれはオペランドである、請求項21記載のデータ処理装置。
  23. 前記基準識別ロジックは、
    前記実行点に至る可能な実行経路を識別する動作が可能な経路識別ロジックであって、前記可能な実行経路は前記実際の実行経路とは異なるかもしれない、前記経路識別ロジックと、
    前記可能な実行経路のシミュレートされた実行を行う動作が可能な経路シミュレーションロジックと、を含み、
    前記処理タスクにとってアクセス可能である前記1つまたはそれ以上のデータアイテムは、前記現在の実行点への前記可能な実行経路をたどることにより識別される、
    請求項22記載のデータ処理装置。
  24. 前記メモリ管理ロジックは、前記識別されたデータアイテムを介して直接または間接に前記処理タスクによりアクセス可能である、全ての前記メモリエリアにマーク付けし、また、前記処理タスクの後の実行中における再割当てのための、マーク付けされていないメモリエリアを収集する動作が可能である、請求項23記載のデータ処理装置。
  25. 前記メモリ管理ロジックは、前記マーク付けされていないメモリエリアを、再割当ての前に圧縮する動作が可能である、請求項24記載のデータ処理装置。
  26. 前記1つまたはそれ以上のデータアイテムのそれぞれはローカル変数である、請求項21記載のデータ処理装置。
  27. 前記基準識別ロジックは、
    前記処理タスクに対応する複数のプログラム命令を走査し、前記1つまたはそれ以上のデータアイテムのそれぞれに対応するそれぞれの記憶命令のためのデータタイプをログする走査ロジックと、
    もしそれぞれのデータアイテムに対する異なる記憶命令のために異なるデータタイプがログされたならば、前記1つまたはそれ以上のデータアイテムの少なくとも1つをマルチプルタイプ変数として分類する動作が可能な分類ロジックと、
    マルチプルタイプ変数として分類された前記1つまたはそれ以上のデータアイテムのそれぞれのために、前記実行点までの全ての可能な実行経路をシミュレートし、前記可能な実行経路のそれぞれのための前記複数のプログラム命令のそれぞれにおいて、それぞれのマルチプルタイプ変数に関連するデータタイプを決定する動作が可能な経路シミュレーションロジックと、
    前記現在の実行点に対応する前記複数のプログラム命令の1つにおいて、前記マルチプルタイプ変数のそれぞれにおける前記決定されたデータタイプをチェックする動作が可能なデータタイプチェックロジックと、を含み、
    前記メモリ管理ロジックは、前記メモリ管理動作を、前記決定されたデータタイプのチェックの結果に依存して行うよう操作可能である、
    請求項26記載のデータ処理装置。
  28. 前記メモリ管理ロジックは、もし前記決定されたデータタイプが前記現在の実行点における前記可能な実行経路の異なるものに対し異なるならば、前記データアイテムに、再割当てのために適切であるとしてタグ付けする動作が可能である、請求項27記載のデータ処理装置。
  29. 前記処理タスクは、オブジェクト指向プログラム言語で書かれたコンピュータプログラムの成分である、請求項21記載のデータ処理装置。
  30. 前記オブジェクト指向プログラム言語はジャバ(R)である、請求項29記載のデータ処理装置。
JP2004088343A 2003-03-26 2004-03-25 データ処理システム内での処理タスクの実行を制御する方法および装置 Pending JP2004295889A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
GB0306970A GB2399897B (en) 2003-03-26 2003-03-26 Memory recycling in computer systems

Publications (1)

Publication Number Publication Date
JP2004295889A true JP2004295889A (ja) 2004-10-21

Family

ID=9955571

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004088343A Pending JP2004295889A (ja) 2003-03-26 2004-03-25 データ処理システム内での処理タスクの実行を制御する方法および装置

Country Status (3)

Country Link
US (1) US8176286B2 (ja)
JP (1) JP2004295889A (ja)
GB (1) GB2399897B (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009535682A (ja) * 2006-04-28 2009-10-01 インターナショナル・ビジネス・マシーンズ・コーポレーション スコープ・メモリ・システム内での参照の作成
US11314640B2 (en) 2013-12-13 2022-04-26 International Business Machines Corporation Method, program, and system for reducing the cost of stack scanning

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7313789B1 (en) * 2004-02-27 2007-12-25 Sun Microsystems, Inc. Methods and systems for reducing a program size
US7458072B2 (en) * 2004-10-06 2008-11-25 Microsoft Corporation Execution context infrastructure
US7685601B2 (en) * 2005-02-28 2010-03-23 Sony Computer Entertainment Inc. Methods and apparatus for segmented stack management in a processor system
GB0512809D0 (en) * 2005-06-23 2005-08-03 Ibm Arrangement and method for garbage collection in a computer system
US8949555B1 (en) * 2007-08-30 2015-02-03 Virident Systems, Inc. Methods for sustained read and write performance with non-volatile memory
US8504878B2 (en) * 2010-05-04 2013-08-06 Oracle International Corporation Statistical analysis of heap dynamics for memory leak investigations
US8522216B2 (en) 2010-05-04 2013-08-27 Oracle International Corporation Memory leak detection
US8819382B2 (en) * 2012-08-09 2014-08-26 Apple Inc. Split heap garbage collection
US9747088B2 (en) * 2013-04-22 2017-08-29 Embarcadero Technologies, Inc. Automatic reference counting
US9740716B2 (en) * 2013-08-21 2017-08-22 Oracle International Corporation System and method for dynamically selecting a garbage collection algorithm based on the contents of heap regions
KR20200027204A (ko) * 2018-09-04 2020-03-12 삼성전자주식회사 전자장치 및 그 제어방법

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000047931A (ja) * 1998-03-06 2000-02-18 Sun Microsyst Inc コンピュ―タメモリの世代動的管理のための方法及び装置
JP2000099351A (ja) * 1997-11-21 2000-04-07 Omron Corp プログラム制御装置とメモリ割当装置および方法
WO2001050270A2 (en) * 2000-01-05 2001-07-12 Sun Microsystems, Inc. Methods and apparatus for improving locality of reference through memory management
JP2001209572A (ja) * 2000-01-28 2001-08-03 Matsushita Electric Ind Co Ltd ガベージコレクション装置および方法

Family Cites Families (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3889243A (en) 1973-10-18 1975-06-10 Ibm Stack mechanism for a data processor
US4236204A (en) 1978-03-13 1980-11-25 Motorola, Inc. Instruction set modifier register
US4587632A (en) 1980-05-27 1986-05-06 At&T Bell Laboratories Lookahead stack oriented computer
US4922414A (en) * 1982-12-17 1990-05-01 Symbolics Inc. Symbolic language data processing system
DE3726192A1 (de) 1987-08-06 1989-02-16 Otto Mueller Stacksteuerung
US5136696A (en) 1988-06-27 1992-08-04 Prime Computer, Inc. High-performance pipelined central processor for predicting the occurrence of executing single-cycle instructions and multicycle instructions
US5440749A (en) 1989-08-03 1995-08-08 Nanotronics Corporation High performance, low cost microprocessor architecture
US5355483A (en) * 1991-07-18 1994-10-11 Next Computers Asynchronous garbage collection
US5455775A (en) 1993-01-25 1995-10-03 International Business Machines Corporation Computer design system for mapping a logical hierarchy into a physical hierarchy
US5873097A (en) * 1993-05-12 1999-02-16 Apple Computer, Inc. Update mechanism for computer storage container manager
US5644709A (en) * 1994-04-21 1997-07-01 Wisconsin Alumni Research Foundation Method for detecting computer memory access errors
GB2289353B (en) 1994-05-03 1997-08-27 Advanced Risc Mach Ltd Data processing with multiple instruction sets
US5638525A (en) 1995-02-10 1997-06-10 Intel Corporation Processor capable of executing programs that contain RISC and CISC instructions
US5752035A (en) 1995-04-05 1998-05-12 Xilinx, Inc. Method for compiling and executing programs for reprogrammable instruction set accelerator
US5619665A (en) 1995-04-13 1997-04-08 Intrnational Business Machines Corporation Method and apparatus for the transparent emulation of an existing instruction-set architecture by an arbitrary underlying instruction-set architecture
US5838948A (en) 1995-12-01 1998-11-17 Eagle Design Automation, Inc. System and method for simulation of computer systems combining hardware and software interaction
KR100466722B1 (ko) 1996-01-24 2005-04-14 선 마이크로시스템즈 인코퍼레이티드 어레이경계검사방법및장치와,이를포함하는컴퓨터시스템
KR100513138B1 (ko) 1996-01-24 2005-09-07 선 마이크로시스템즈 인코퍼레이티드 네트워크 또는 로컬 메모리로부터 수신된 명령 세트를실행하는 프로세서 및 컴퓨터 시스템
EP0976030B1 (en) 1996-01-24 2008-07-02 Sun Microsystems, Inc. Instruction folding for a stack-based machine
US6038643A (en) 1996-01-24 2000-03-14 Sun Microsystems, Inc. Stack management unit and method for a processor having a stack
US5742802A (en) 1996-02-16 1998-04-21 International Business Machines Corporation Method and system for efficiently mapping guest instruction in an emulation assist unit
US6031992A (en) 1996-07-05 2000-02-29 Transmeta Corporation Combining hardware and software to provide an improved microprocessor
US5926832A (en) 1996-09-26 1999-07-20 Transmeta Corporation Method and apparatus for aliasing memory data in an advanced microprocessor
JP3330378B2 (ja) 1996-11-13 2002-09-30 ラツ,ヤイール リアルタイムプログラム言語アクセラレータ
US5953741A (en) 1996-11-27 1999-09-14 Vlsi Technology, Inc. Stack cache for stack-based processor and method thereof
US5937193A (en) 1996-11-27 1999-08-10 Vlsi Technology, Inc. Circuit arrangement for translating platform-independent instructions for execution on a hardware platform and method thereof
US6009499A (en) 1997-03-31 1999-12-28 Sun Microsystems, Inc Pipelined stack caching circuit
US5875336A (en) 1997-03-31 1999-02-23 International Business Machines Corporation Method and system for translating a non-native bytecode to a set of codes native to a processor within a computer system
US6149318A (en) * 1997-04-15 2000-11-21 Samuel C. Kendall Link-time and run-time error detection, and program instrumentation
US5892966A (en) 1997-06-27 1999-04-06 Sun Microsystems, Inc. Processor complex for executing multimedia functions
US6088786A (en) 1997-06-27 2000-07-11 Sun Microsystems, Inc. Method and system for coupling a stack based processor to register based functional unit
US6003126A (en) 1997-07-01 1999-12-14 International Business Machines Special instruction register including allocation field utilized for temporary designation of physical registers as general registers
US6317872B1 (en) 1997-07-11 2001-11-13 Rockwell Collins, Inc. Real time processor optimized for executing JAVA programs
WO1999018484A2 (en) 1997-10-02 1999-04-15 Koninklijke Philips Electronics N.V. A processing device for executing virtual machine instructions
WO1999018486A2 (en) 1997-10-02 1999-04-15 Koninklijke Philips Electronics N.V. Data processing device for processing virtual machine instructions
US6009509A (en) 1997-10-08 1999-12-28 International Business Machines Corporation Method and system for the temporary designation and utilization of a plurality of physical registers as a stack
JP3027845B2 (ja) 1997-11-21 2000-04-04 オムロン株式会社 プログラム制御装置および方法
US6070173A (en) 1997-11-26 2000-05-30 International Business Machines Corporation Method and apparatus for assisting garbage collection process within a java virtual machine
US6122638A (en) 1997-11-26 2000-09-19 International Business Machines Corporation Object-oriented processor and method for caching intermediate data in an object-oriented processor
US6167535A (en) 1997-12-09 2000-12-26 Sun Microsystems, Inc. Object heap analysis techniques for discovering memory leaks and other run-time information
US6148391A (en) 1998-03-26 2000-11-14 Sun Microsystems, Inc. System for simultaneously accessing one or more stack elements by multiple functional units using real stack addresses
US6374286B1 (en) 1998-04-06 2002-04-16 Rockwell Collins, Inc. Real time processor capable of concurrently running multiple independent JAVA machines
US6286016B1 (en) * 1998-06-09 2001-09-04 Sun Microsystems, Inc. Incremental heap expansion in a real-time garbage collector
US6212612B1 (en) * 1998-07-15 2001-04-03 Intelect Communications Inc. System and method for synchronized, multi-channel data management with dynamically configurable routing
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6442751B1 (en) * 1998-12-14 2002-08-27 International Business Machines Corporation Determination of local variable type and precision in the presence of subroutines
US6338134B1 (en) 1998-12-29 2002-01-08 International Business Machines Corporation Method and system in a superscalar data processing system for the efficient processing of an instruction by moving only pointers to data
US7013454B2 (en) * 1999-02-22 2006-03-14 Sun Microsystems, Inc. Thread suspension system and method using trapping instructions
US6249793B1 (en) * 1999-06-10 2001-06-19 Sun Microsystems, Inc. Mostly concurrent compaction in a garbage collection system
US6427154B1 (en) * 1999-12-16 2002-07-30 International Business Machines Corporation Method of delaying space allocation for parallel copying garbage collection
US6944637B2 (en) * 2000-02-07 2005-09-13 Esmertec Ag Reduced size objects headers
US6978285B2 (en) * 2002-08-22 2005-12-20 Intel Corporation Methods and apparatus for concurrent enumeration of an object reference root set

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000099351A (ja) * 1997-11-21 2000-04-07 Omron Corp プログラム制御装置とメモリ割当装置および方法
JP2000047931A (ja) * 1998-03-06 2000-02-18 Sun Microsyst Inc コンピュ―タメモリの世代動的管理のための方法及び装置
WO2001050270A2 (en) * 2000-01-05 2001-07-12 Sun Microsystems, Inc. Methods and apparatus for improving locality of reference through memory management
JP2001209572A (ja) * 2000-01-28 2001-08-03 Matsushita Electric Ind Co Ltd ガベージコレクション装置および方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009535682A (ja) * 2006-04-28 2009-10-01 インターナショナル・ビジネス・マシーンズ・コーポレーション スコープ・メモリ・システム内での参照の作成
US11314640B2 (en) 2013-12-13 2022-04-26 International Business Machines Corporation Method, program, and system for reducing the cost of stack scanning

Also Published As

Publication number Publication date
GB2399897A (en) 2004-09-29
US8176286B2 (en) 2012-05-08
GB0306970D0 (en) 2003-04-30
GB2399897B (en) 2006-02-01
GB2399897A8 (en) 2005-07-27
US20040193828A1 (en) 2004-09-30

Similar Documents

Publication Publication Date Title
US7711920B2 (en) Method and system for dynamically managing storage of data objects generated during execution of a computer program
EP0874318B1 (en) A method and apparatus for locating object pointers used within exact garbage collection
US6049810A (en) Method and apparatus for implementing a write barrier of a garbage collected heap
US5920876A (en) Performing exact garbage collection using bitmaps that identify pointer values within objects
US6047125A (en) Garbage collection system for improved use of memory by removal of reference conflicts
US5903900A (en) Method and apparatus for optimizing exact garbage collection of array nodes in a carded heap
US6839726B2 (en) Apparatus, method, and program for implementing garbage collection suitable for real-time processing
US7143124B2 (en) Detection of dead regions during incremental collection
US6038572A (en) Method and apparatus for localizing nodes in a garbage collected carded heap
US6820101B2 (en) Methods and apparatus for optimizing garbage collection using separate heaps of memory for storing local objects and non-local objects
US7197521B2 (en) Method and system performing concurrently mark-sweep garbage collection invoking garbage collection thread to track and mark live objects in heap block using bit vector
US6996590B2 (en) Method and system for the garbage collection of shared data
EP0874319A2 (en) Method and apparatus for locating nodes in a carded heap
US7870170B2 (en) Method and apparatus for determining leaks in a Java heap
US5915255A (en) Method and apparatus for referencing nodes using links
US7100003B2 (en) Method and apparatus for generating data for use in memory leak detection
US7043509B2 (en) Parallel non-contiguous allocation and card parsing
KR20010043785A (ko) 메모리 복구 방법
JP2002541552A (ja) メモリ再利用方法
US6912553B1 (en) Virtual machine memory management
US20060242635A1 (en) Method and system for optimizing array sizes in a JAVA virtual machine
JP2004295889A (ja) データ処理システム内での処理タスクの実行を制御する方法および装置
US6735761B1 (en) Compile method frame detection method and device code discarding method and computer
US7653793B1 (en) Use of memory protection to implement replicating collection in an incremental, copying garbage collector
US20170277623A1 (en) Method of ascertaining primary cause of memory consumption in program, and computer system and computer program for the same

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060419

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090414

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20090714

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20090717

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20090813

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20090818

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20090914

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20090917

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091014

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20091110

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100310

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20100428

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20100528

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110601

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110606