JP2005011349A - 電子システムおよびガーベジコレクション方法 - Google Patents
電子システムおよびガーベジコレクション方法 Download PDFInfo
- Publication number
- JP2005011349A JP2005011349A JP2004180364A JP2004180364A JP2005011349A JP 2005011349 A JP2005011349 A JP 2005011349A JP 2004180364 A JP2004180364 A JP 2004180364A JP 2004180364 A JP2004180364 A JP 2004180364A JP 2005011349 A JP2005011349 A JP 2005011349A
- Authority
- JP
- Japan
- Prior art keywords
- root
- objects
- heap
- garbage collection
- egc
- 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.)
- Abandoned
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
- G06F12/0269—Incremental or concurrent garbage collection, e.g. in real-time systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99956—File allocation
- Y10S707/99957—Garbage collection
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
- Memory System (AREA)
Abstract
【課題】スタックベース言語(たとえば、Java)に関連付けられたコンピュータプログラムを格納することができるメモリを有するプロセッサ等のプログラマブル電子装置を得る。
【解決手段】プロセッサ、プロセッサに接続されたメモリ、および埋込ガーベジコレクションオブジェクトをアクティブとするアプリケーションプログラミングインターフェイスを含む電子システム。メモリは選択的にルートオブジェクトからの参照を有する一つ以上のオブジェクトを格納する。埋込ガーベジコレクションオブジェクトは、好ましくは、制御データを使用して前記メモリからオブジェクトを除去させ、除去オブジェクトは埋込ガーベジコレクションオブジェクトがアクティブである間に生成されしかもルートオブジェクトからの参照がないオブジェクトを含む。
【選択図】図2
【解決手段】プロセッサ、プロセッサに接続されたメモリ、および埋込ガーベジコレクションオブジェクトをアクティブとするアプリケーションプログラミングインターフェイスを含む電子システム。メモリは選択的にルートオブジェクトからの参照を有する一つ以上のオブジェクトを格納する。埋込ガーベジコレクションオブジェクトは、好ましくは、制御データを使用して前記メモリからオブジェクトを除去させ、除去オブジェクトは埋込ガーベジコレクションオブジェクトがアクティブである間に生成されしかもルートオブジェクトからの参照がないオブジェクトを含む。
【選択図】図2
Description
本発明は一般的にプロセッサに関し、特にプロセッサに関連付けられたメモリの管理に関する。
多種の電子装置がバッテリ操作されるため、消費電力はできるだけ少ないことが望ましい。一例はセルラー電話機である。さらに、セルホーン等の電子装置内でさまざまな種類のマルチメディア機能を実現するのは望ましいことがある。マルチメディア機能の例として、限定はしないが、ゲーム、オーディオデコーダ、デジタルカメラ、等が含まれる。
したがって、他は全て等しく、高速であって、できるだけ電力を消費せずしかもできるだけメモリを必要としないように電子装置内にこのような機能を実現することが望ましい。このエリアにおける改善が望まれる。
一実施例では、電子システムはプロセッサ、プロセッサに接続されたメモリ、および埋込ガーベジコレクションオブジェクトをアクティブにするアプリケーションプログラミングインターフェイスを含んでいる。メモリは選択的にルートオブジェクトからの参照を有する一つ以上のオブジェクトを格納する。埋込ガーベジコレクションオブジェクトは、好ましくは、制御データを使用してオブジェクトを前記メモリから除去し、除去オブジェクトは埋込ガーベジコレクションオブジェクトがアクティブであった間に作り出されしかもルートオブジェクトからの参照を有しないオブジェクトを含んでいる。
一実施例では、方法は埋込ガーベジコレクタを始動させ、メモリから除去するオブジェクトを選択するステップを含み、メモリは関連付けられたオブジェクトへの参照を選択的に有することができるルートオブジェクトを含み、選択されたオブジェクトを除去するステップを含む。除去するオブジェクトの選択はコンテキストが変化しているルートオブジェクトを識別し、識別されたルートオブジェクトを参照されたオブジェクトにトレースしてコンテキストが変化しているルートオブジェクトにどのオブジェクトが関連付けられるかを決定するステップを含んでいる。選択されたオブジェクトの除去は埋込ガーベジコレクタがアクティブであった間に生成されしかもコンテキストが変化しているルートオブジェクトに関連付けられていると決定されなかったオブジェクトを除去するステップを含んでいる。
下記の明細書および特許請求の範囲全体をとおして特定のシステム構成要素を指示するのにある用語が使用される。さまざまな半導体会社がある構成要素を異なる名称で指示することがあることを当業者ならばお判りである。本明細書では名称が違っていても機能的に同じ構成要素は区別しない。下記の検討および特許請求の範囲において、“含む(including)”および“からなる(comprising)”という用語は幅広い解釈を許すように使用され、したがって、“限定はしないが、含んでいる”ことを意味するように解釈しなければならない。また、“結合する(coupleまたはcouples)”という用語は直接または間接接続を意味するものとする。したがって、第1の装置が第2の装置に接続される場合、その接続は直接接続または他の装置や接続を介した間接接続とすることができる。
本発明の好ましい実施例をより詳細に説明するために、次に、添付図を参照する。
下記の検討は本発明のさまざまな実施例に向けられる。これらの実施例の一つ以上は好ましいものではあるが、特記なき限り開示された実施例は特許請求の範囲を含めて開示の範囲を制限するものとして解釈または使用してはならない。さらに、当業者ならば下記の説明は広い応用を有し、任意の実施例の検討は単にその典型的な実施例の意味を持つにすぎず、特許請求の範囲を含む本開示の範囲がその実施例に限定されることを暗示するものではないことを理解できる。
下記の検討は本発明のさまざまな実施例に向けられる。これらの実施例の一つ以上は好ましいものではあるが、特記なき限り開示された実施例は特許請求の範囲を含めて開示の範囲を制限するものとして解釈または使用してはならない。さらに、当業者ならば下記の説明は広い応用を有し、任意の実施例の検討は単にその典型的な実施例の意味を持つにすぎず、特許請求の範囲を含む本開示の範囲がその実施例に限定されることを暗示するものではないことを理解できる。
ここに開示された主題はスタックベース言語(たとえば、Java(登録商標))に関連付けられたコンピュータプログラムを格納することができるメモリを有するプロセッサ等のプログラマブル電子装置に向けられている。コンピュータプログラムはハードウェア、ソフトウェア、またはハードウェアとソフトウェアの両方で実現することができる“仮想”マシンを介して実行することができる。仮想マシンはコンピュータプログラムを“スタック”と呼ばれるメモリの一部で基本的なコンピュータ操作を実施することができるマシンコード(たとえば、Javaバイトコード)に変換することができる。仮想マシンにより実行される間に、Javaバイトコードはスタックを利用して中間値を格納することができる。
スタックの他に、メモリの一部をJavaオブジェクト(たとえば、変数、クラス、タイプ)を格納するために保存することができる。メモリのこの部分を“ヒープ”と呼ぶことができる。Javaオブジェクトが生成される時、オブジェクトはヒープ内にメモリを割当てている。ヒープ内に割当てられるメモリのサイズは生成されたオブジェクト内に含まれるJavaフィールドのタイプ(たとえば、int,long,array)によって決まることがある。仮想マシンはヒープに対して保存されるメモリ量を利用されるヒープのパーセンテージに応じて調節することができる。たとえば、ヒープが過剰利用されると、仮想マシンはヒープに対する付加メモリを保存する。
ヒープ内に格納されたオブジェクトは“参照”と呼ばれる機構を介してヒープ内に格納された他のオブジェクトを利用することができる。たとえば、第1のオブジェクトは第2のオブジェクトに関連付けられた変数を使用することができる。一度ヒープ内にロードされると、第1のオブジェクトは第2のオブジェクトへの参照を作り出すことができる。一度オブジェクト間の参照が生成されると、第1のオブジェクトは第2のオブジェクトに関連付けられた変数にアクセスすることができる。オブジェクトに関連付けられた全参照のセットはそのオブジェクトに対する“コンテキスト”と呼ばれる。参照は参照フィールドまたはアレイエレメント上に書き込む各Javaバイトコードに対応する“PutRef”操作を介して挿入され修正される。このようにして、JavaオブジェクトのコンテキストはPutRef操作がオブジェクト上に発せられる時しか変化しない。
ヒープのサイズはシステムに関連付けられたメモリの総量により制限されることがある。ヒープがこの最大サイズに達して完全に利用されると、付加オブジェクトを生成することはできない。この状態が生じると、もはや不要であるかもしれない現在ヒープ内に格納されているオブジェクトがJavaプロセスによりヒープから取り出されて他のオブジェクト用の場所を作る。ヒープからオブジェクトを除去する責任のあるJavaプロセスは“ガーベジコレクション”プロセスと呼ぶことができる。ガーベジはヒープから永久的に除去するためにガーベジコレクションプロセスが選択するオブジェクトを表す。ガーベジコレクションプロセスがヒープからオブジェクトを永久的に除去した後で、これらのオブジェクトに関連付けられたメモリは他のオブジェクトに割当てることができる。
ガーベジコレクションプロセスは“ルート”を使用してヒープから永久的に除去することができるオブジェクトを識別する。ユーザがルートを割当てることができるが、一般的にルートは基本的なオブジェクトランタイムにより自動的に割当てられる。このオブジェクトランタイムは、アプリケーション自体から見て必要ではない、アプリケーションの第1のオブジェクトを生成するかまたはオブジェクトへの参照を含むスタック(メモリブロック)を生成し、これらのオブジェクトをルートとして割当てられる。
ルートが識別され割当てられた後で、ガーベジコレクションプロセスはルートから他のオブジェクトへの参照を調べることができる。たとえば、図1はルート102およびオブジェクト104,106,108,および110を含む典型的なヒープ100を示す。明示されてはいないが、ルート102はガーベジコレクションプロセスによりルートとして割当てられたヒープ内に格納された任意のオブジェクトを含むことができる。ルート102は参照112を介して直接オブジェクト104を参照することができる。オブジェクト104はさらに参照114を介してオブジェクト106を参照することができる。ガーベジコレクションプロセスがヒープ100上で実行されている時に、ルート102からの全参照にガーベジコレクションプロセス内の手順が続くことができる。ルートオブジェクトからヒープ内に格納された他のオブジェクトへの後続参照の手順は“トレースルーチン”と呼ぶことができる。たとえば、ヒープ100上のトレースルーチンはルート102によりアクセス可能なものとしてJavaオブジェクト104および106を識別することができる。トレースルーチン中に識別されたオブジェクトに基づいて、ガーベジコレクションプロセスはヒープからどのオブジェクトを除去すべきかを決定することができる。トレーシングルーチン内で識別されたオブジェクトは典型的に除去されずトレーシングルーチン内で識別されないオブジェクトが典型的に除去される。トレーシングルーチンはルートから開始するため、識別されたオブジェクトはルートから“到達可能”なオブジェクトと呼ばれ、識別されないオブジェクトは “到達不能”なオブジェクトと呼ばれる。この除去技術の背後の原理はトレーシングルーチン内で識別されないオブジェクトをアプリケーション実行には不要で除去できるものと見なす。図1の例では、オブジェクト108および110には参照がなくヒープ100上のトレースルーチン内で識別されない。このようにして、ガーベジコレクションプロセスはこれらのオブジェクトをヒープから除去することができる。本発明の好ましい実施例では、前記したようなガーベジコレクタを後述する好ましいガーベジコレクタと組み合わせることができる。
オブジェクトがマシン(たとえば、プロセッサ、仮想マシン)により使用された後でガーベジコレクションプロセスがヒープからオブジェクトを除去することができるシステムの好ましい実施例の操作について以下に説明する。他のプロセッサアーキテクチュアおよび実施例も使用することができるため、本開示および特許請求の範囲は任意特定タイプのプロセッサに限定されるものではない。ガーベジコレクションプロセスに関する詳細がプロセッサおよび仮想マシンの説明に続く。
ここに記述されたプロセッサはJavaTM Bytecodes、または匹敵するコードを実行するのに特に適している。よく知られているように、Javaは埋込アプリケーションに特に適している。Javaは比較的“稠密な”言語であり、平均して各命令はさまざまな他のプログラミング言語に比べて多数の機能を実施できることを意味する。Javaの稠密性はスペースおよび電力を節減するために好ましくはできるだけ少ないメモリしか含んでいないポータブル、バッテリ操作装置にとって特に有利である。しかしながら、Javaコードを実行する理由は本開示または特許請求の範囲の題材ではない。
次に、本発明の好ましい実施例に従ったシステム200を図2に示す。図からお判りのように、このシステムは少なくとも2つのプロセッサ202および204を含んでいる。本開示の目的のために、プロセッサ202はJavaスタックマシン(“JSM”)と呼ばれ、プロセッサ204は主プロセッサユニット(“MPU”)と呼ばれる。システム200はJSM202およびMPU204に共に接続されたメモリ206も含むことができ両方のプロセッサによりアクセスすることができる。メモリ206の少なくとも一部は両方のプロセッサが共用することができ、両方のプロセッサが同じ共用メモリ場所にアクセスできることを意味する。さらに、所望によりメモリ206の一部を一方または他方のプロセッサ専用として指示することができる。システム200はJava仮想マシン(“JVM”)208、コンパイラ210およびディスプレイ214も含んでいる。好ましくは、JSM202はユーザがシステム200のさまざまな側面を制御するのを許すキーパッド等の一つ以上の入出力(“I/O”)装置とのインターフェイスを含んでいる。さらに、データストリームをI/OスペースからJSM202内に受信してJSM202により処理することができる。所望により、他の構成要素(明示せず)も含むことができる。
やはり図2について、一般的に知られているように、Javaコードは複数の“バイトコード”212を含んでいる。バイトコード212はJVM208に供給され、コンパイラ210によりコンパイルされ、その中で実行するためにJSM202および又はMPU204に供給することができる。本発明の好ましい実施例では、JSM202は少なくともいくつかの、一般的には大概の、Javaバイトコードを実行することができる。しかしながら、適切であればJSM202はそれが実行しなかったまたは実行できない一つ以上のJavaバイトコードを実行するようMPU204に要求することができる。Javaバイトコードを実行する他に、MPU204は非Java命令も実行することができる。また、MPU204はシステムメモリ管理、JVM208およびシステム上で実行する大概のまたは他の全てのネイティブタスクをスケジューリングするシステムタスク管理、ディスプレイ214の管理、入力装置からの入力受信、等を含むさまざまな機能を実施するオペレーティングシステム(“O/S”)(明示せず)もホストする。限定はしないが、Javaコードは、O/Sおよび他のネイティブアプリケーションを含むことができる非JavaコードがまだMPU204上のシステムで実行している間に、マルチメディア、ゲームまたはウェブベースアプリケーションを含む多様なアプリケーションのいずれか一つをシステム200内で実施するのに使用することができる。
JVM208は一般的にソフトウェアとハードウェアの組合せを含んでいる。ソフトウェアはコンパイラ210を含むことができハードウェアはJSM202を含むことができる。JVMはクラスローダ、バイトコードベリファイア、ここに記述された好ましいガーベジコレクタから機能的に分離することができる一般的なガーベジコレクタ、およびJSMプロセッサ202上で実行されないバイトコードを解釈するバイトコードインタープリタを含むことができる。
本発明の好ましい実施例では、ガーベジコレクションプロセスはアプリケーションプログラミングインターフェイス(API)を使用してコンピュータプログラム内に埋め込むことができる。好ましくは、APIはプログラムデベロッパがガーベジコレクションを制御するために実行することができる一連の機能を含んでいる。ガーベジコレクションプロセスはプログラム内に具体化されるため、プロセスはそれを実行しているプログラムと同じメモリスレッド内で実行する。同じメモリスレッド内で実行することにより、埋込ガーベジコレクションプロセスは特定のプログラムにより利用されるオブジェクトを有効に除去することができる。この埋込ガーベジコレクションプロセスはここでは埋込ガーベジコレクタ(“EGC”)と呼ぶことができる。
好ましくは、埋込ガーベジコレクタAPI(EGC-API)はEGCの操作を制御する3つの機能を含んでいる。EGCオブジェクトの生成関数である第1の関数はヒープ内にEGCを生成してEGCにより使用されるデータ構造を設定する。第2の関数“egc.start()”はEGCを“アクティブ”状態に設定する。第3の関数“egc.stop()”は、好ましくは、トレーシングルーチンを実施し、選択されたオブジェクトをヒープから除去し、アクティブEGCを終了する。egc.start()関数が実行された後egc.stop()関数が実行されるまでの任意の時間EGCの状態はアクティブであると考えられる。好ましくは、egc.start()およびegc.stop()は除去するメソッド呼出しの同じレベル内にある。それにより参照サーチに対する関連付けられたスタックフレームのコンテンツを解析する必要をなくすことができる。
好ましくは、EGCはそれがアクティブである間にヒープ内に生成されているオブジェクトだけを除去しようと考える。前記したような他のガーベジコレクタをEGCと組み合わせて使用してEGCにより考慮されないヒープからオブジェクトを除去することができる。さらに、トレーシングルーチンに対してルーツを自動的に割当てるのとは反対に、好ましくは、EGCはプログラムデベロッパが関連付けられたEGCの生成関数のパラメータを使用してルートを指定するのを許す。
指定されたルーツは“ルートアレイ”と呼ばれるデータ構造を使用してEGC内に組み入れることができる。EGCのトレーシングルーチンに対するルーツを定義するオブジェクトへの参照をルートアレイ内に含めることができる。たとえば、デベロッパはルートアレイ内の特定オブジェクトへの参照を含むことができる。このオブジェクトに関連付けられたすべての参照をトレーシングルーチン中に識別することができる。好ましくは、トレーシングルーチン中に識別されたオブジェクトはEGCによって除去されない。現在または前の活性化において、EGCがアクティブである間に生成されかつトレーシングルーチンにおいて識別されなかった他のオブジェクトは好ましくは除去される。ルートオブジェクトの指定を許すEGCの能力によりプログラムデベロッパはガーベジコレクションプロセスにおいて従来のガーベジコレクタよりも制御を行うことができる。
図3はEGCが使用する典型的なヒープ350を示す。ルートアレイは任意数のオブジェクトへの参照を含むことができるが、図3の例ではルートアレイ300は3つのルートオブジェクト302,304,および306への参照を含んでいる。好ましくは、各ルートオブジェクトは3つの関連付けられたデータ変数を含んでいる。“リーチセット(reach set)”と呼ばれる第1のデータ変数はEGCのトレーシングルーチン中に識別されるオブジェクトに参照を配置するのに使用することができる。これらの参照は特定のルートオブジェクトにより参照されるヒープ内に格納された全てのオブジェクトを含むことができる。したがって、ルートのリーチセット変数はルートコンテキストに対応する。ルートオブジェクト302,304,および306は図示するようにリーチセット308,310,および312を含むことができる。
第2のデータ変数は各ルートオブジェクトと関連付けられてルートオブジェクトに関連付けられた参照、直接または推移参照、のコンテキストが修正されているかどうかを示すことができる状態ビットである。この状態ビットは“修正”ビットと呼ぶことができる。たとえば、egc.start()関数を実行すると、ルーツオブジェクトの修正ビットを偽に初期設定することができる。EGCのアクティブ状態中に、参照が修正され、生成され、または現在のルートコンテキストのオブジェクトから削除されると、そのルートオブジェクトの修正ビットは真に設定される。図からお判りのように、ルートオブジェクト302,304,および306は、それぞれ、修正ビット314,316,および318を含んでいる。
本発明の好ましい実施例では、修正ビットはJVM208により自動的に修正することができる。参照が生成または修正される度に、“PutRef”命令がオブジェクト上のJVMに発せられる。好ましくは、PutRef命令の修正はPutRefがルートコンテキスト内側のオブジェクトになされる場合にルートオブジェクトの修正ビットを真に設定するように行われる。オブジェクトがルートコンテキストの内側であるかを決定するために、“ルート識別子”と呼ばれる第3の変数について記述する。
最後に、各ルートオブジェクト内の第3のデータ変数はルート識別子である。ルート識別子はルートオブジェクトへの参照を格納する。したがって、ルートオブジェクト302,304,および306はルート識別子360,362,および364を含んでいる。
やはり図3について、2つの変数アレイをEGCと組み合わせて使用することができる。“ヒープセット”と呼ばれる第1のアレイ320は、好ましくは、EGCがアクティブである前後にEGCルートコンテキストの内側であるヒープ内のオブジェクトへの参照を格納するのに使用される。たとえば、ヒープセット320はEGCが開始される前にヒープ内にあるオブジェクトを含むことができる。“テンプセット(tempset)”と呼ばれる第2のアレイ322は、好ましくは、EGCがアクティブである間にヒープ内に生成されたオブジェクトの参照を格納するのに使用される。ヒープ350はヒープオブジェクト324を含むこともできる。任意所定の時間におけるヒープ内のオブジェクトは任意数とすることができるが、図3の例ではヒープオブジェクト324は3つのオブジェクト326,328,330を含んでいる。各オブジェクト326,328,330にはルート識別子332,334,および336が関連付けられている。ルートオブジェクト内のルート識別子と同様に、このルート識別子はオブジェクトを生成している時はNULLに設定される。ヒープオブジェクトのルート識別子は、好ましくは、ヒープオブジェクトを参照するルートオブジェクトへの参照を格納する。たとえば、EGCがアクティブである間にオブジェクトを生成してルートオブジェクトのコンテキスト内に挿入することができる。この新たに生成されたオブジェクトに関連付けられたルート識別子はオブジェクトを参照するルートオブジェクトへの参照を含むことができる。EGCアルゴリズムはトレーシングルーチン中にヒープ内のオブジェクトのルート識別子の設定を管理してどのルーツのコンテキストが変化したかを検出する。
好ましい実施例では、ルート識別子はJVM208により自動的に生成することができる。ヒープ内にオブジェクトが生成されるたびに、“新しい”命令がJVMに発せられる。好ましくは、“新しい”命令はオブジェクトを生成してヒープ上に格納する。“新しい”命令の修正は、好ましくは、EGCがアクティブである間に生成された各新しいオブジェクトにルート識別子を関連付けるように行うことができる。最初にルート識別子はNULL値に設定することができる。
次に、図4-8に関してEGCを使用する典型的なヒープについて検討する。EGCの機能を例示するために実行の5段階を示す。これらの5段階はEGCの操作を説明するためだけに使用される。EGCの実際の操作は任意所望数の段階を使用することができる。第1段階(図4)はegc.start()関数実行中のヒープの状態および関連付けられたデータ構造を示す。第2段階(図5)はEGCがアクティブでヒープ内に新しいオブジェクトが生成される間のヒープの状態および関連付けられたデータ構造を示す。第3段階(図6)はEGCがアクティブでルートオブジェクトのコンテキストが修正されている間のヒープの状態および関連付けられたデータ構造を示す。第4段階(図7)はegc.stop()関数実行中のヒープの状態および関連付けられたデータ構造を示す。最後に、第5段階(図8)はegc.stop()関数実行後のヒープの状態および関連付けられたデータ構造を示す。
次に、図4に関して、ヒープ350は実行の第1段階で示すことができる。ルートアレイ内に任意数のルートオブジェクトを含むことができるが、検討を容易にするために3つのルートオブジェクト302,304,および306が示されている。これらのオブジェクトはプログラムデベロッパによりルートアレイ300内に配置される。修正ビット314,316,および318はegc.start()呼出し中に偽に初期設定される。前記したように、ルートオブジェクトに関連付けられた修正ビットは、ルート識別子がNULLではない、オブジェクトにPutRef操作が実施される時に真に設定される。
ヒープセットデータ構造はEGCの前のインスタンスによりヒープ上に残されかつルートコンテキストの内側であるオブジェクトへの参照を含んでいる。典型的な目的に対して、ヒープセット320はこのような2つのオブジェクト326および328への参照を含むことができる。オブジェクト326はルート302のルートコンテキストの内側であり(ルート302とオブジェクト326間に参照が存在する)オブジェクト328はルート304のルートコンテキストの内側である(ルート304とオブジェクト328間に参照が存在する)。したがって、オブジェクト326および328はそれぞれ302および304に設定されたルート識別子を有する。ルート識別子は初期egc.start()呼出し中および各egc.stop()呼出し中に設定される。実行の第1段階においてテンプセット322だけでなくリーチセット308,310,および312も空である。EGCがアクティブであった間オブジェクト330は生成されなかったため、ヒープセット320には含まれずEGCにより除去されるものと見なされない。
図5は実行の第2段階(ヒープ内のオブジェクト生成)におけるヒープ350を示す。この段階において任意数のオブジェクトを生成することができるが、検討を容易にするためこのような2つのオブジェクト352および354が示されている。オブジェクト352および354はEGCがアクティブである間に生成される。したがって、オブジェクト352および354への参照はテンプセット322内に配置される。さらに、これらのオブジェクトのルート識別子は‘Null’に設定される。他の全てのデータ構造は実行の第2段階において不変である。
次に、実行の第3段階(オブジェクトコンテキスト修正)における典型的なヒープ350が図6に示されている。典型的な目的に対して、ルートオブジェクト304の参照はオブジェクト328からオブジェクト352に変化する(putrefベースopcodeを使用して)。オブジェクト上にputref opcodeを実現する時に、ランタイムはそのオブジェクトのルート識別子を使用して対応するルートオブジェクトの修正ビットを真に設定する。図6においてputrefがオブジェクト304に実行され、オブジェクト304自体がルートであるため関連付けられたルート識別子360はオブジェクト304に等しい。したがって、ルートオブジェクト304の修正ビットは真に設定される。実行の第2段階において他の全てのデータ構造は不変である。
図7は実行の第4段階(egc.stop)におけるヒープ350を示す。この段階中に、いくつかのステップが行われる。第1のステップでは、その修正ビットが真に設定されている各ルートオブジェクトであって、これらのルーツだけにトレーシングルーチンが利用される。トレーシングルーチンはこのルートオブジェクトにより参照されるヒープ内の全オブジェクトを識別することができる。トレーシングルーチン中に特定のルートオブジェクトに対して識別された全てのオブジェクトを各ルートオブジェクトに関連付けられたリーチセット内に配置することができる。たとえば、ルートオブジェクト304に関連付けられた修正ビットは真に設定されるため、ルートオブジェクト304上のトレーシングルーチンが利用される。オブジェクト352はトレーシングルーチン内で識別されてリーチセット310内に配置される。好ましくは、オブジェクトは一時に一つのセット(リーチセット、ヒープセット、テンプセット)だけに含まれる。したがって、オブジェクト352への参照はテンプセット322から除去される。修正済とマークされた全ルートからのトレーシングがなされた後の第2ステップにおいて、テンプセット322内にまだ存在する全オブジェクトをメモリから除去することができる。典型的なケースでは、オブジェクト354が除去される。アルゴリズムの第3ステップはヒープセットを走査してルートコンテキストからオブジェクトが除去されているかどうか確認する。第3ステップはその修正ビットが真に設定されているルートオブジェクトがある場合だけ実施される。ヒープセットを走査する時に、オブジェクトがルート識別子を変化させておれば、それはメモリから除去することができる。たとえば、オブジェクト328は実行のこの段階中にヒープセット内にある。オブジェクト328はそのルート識別子にそのコンテキストを修正させているルートオブジェクトを参照させているため、EGCによりヒープから除去することができる。ヒープセット内の他方のオブジェクト、オブジェクト326(図6)、はそのルート識別子がルートオブジェクト302を参照しルートオブジェクト302はそのコンテキストを修正させていないため除去されない。この段階中の第4ステップはEGCのヒープセットの形成からなっている。ヒープセットを形成するために、その修正ビットを真に設定しているルートオブジェクトの各リーチセットがヒープセット内側で併合される。したがって、ルートオブジェクトのリーチセットは空になる。
最後に、図8は実行の第5段階におけるヒープ350を示す。ルートオブジェクトは、好ましくは、ルートアレイ300からクリアされる。ヒープセット内の全オブジェクトがヒープ350内にとどまる。EGCの任意の前のインスタンスがアクティブであった間オブジェクト330は生成されなかったため、オブジェクト330もヒープ350内にとどまる。他の全てのオブジェクトはヒープ350から除去される。全データ構造が初期状態となり、EGCはegc.start()が実行される時に再び活性化することができる。
当業者ならば前記開示を完全に理解すれば非常に多くの変更および修正が自明となる。特許請求の範囲にはこのような全ての変更および修正が含まれるものとする。
以上の説明に関して更に以下の項を開示する。
以上の説明に関して更に以下の項を開示する。
(1).プロセッサと、プロセッサに接続されルートオブジェクトからの参照を有する一つ以上のオブジェクトを格納するメモリと、埋込ガーベジコレクションオブジェクトの状態を制御するアプリケーションプログラミングインターフェイスを含む電子システムであって、アプリケーションプログラミングインターフェイスはプログラムから呼び出され埋込ガーベジコレクションオブジェクトは制御データを使用して前記メモリからオブジェクトを除去させ、除去オブジェクトは埋込ガーベジコレクションオブジェクトがアクティブ状態である間に生成されかつルートオブジェクトからの参照がないオブジェクトを含む電子システム。
(2).第1項に記載のシステムであって、埋込ガーベジコレクタの前記状態は初期化、アクティブ、またはイナクティブを含むシステム。
(3).第2項に記載のシステムであって、制御データは各ルートオブジェクトに関連付けられた修正ビットを含み、修正ビットは埋込ガーベジコレクタがアクティブ状態である間にルートオブジェクトのコンテキストが修正されているかどうかを示し、さらに、テンプセットを含み、テンプセットは埋込ガーベジコレクションオブジェクトがアクティブ状態である間に生成されかつルートオブジェクトにより参照されていないオブジェクトを示すシステム。
(4).第3項に記載のシステムであって、ルートオブジェクトに関連付けられた修正ビットはルートオブジェクトのコンテキストが変化している場合に真に設定されるシステム。
(5).第3項に記載のシステムであって、ルートオブジェクトのコンテキストの修正はルートオブジェクトのコンテキスト内の参照の加算、変更、または除去を含むシステム。
(6).第3項に記載のシステムであって、埋込ガーベジコレクションオブジェクトはそのコンテキストを変化させているルートオブジェクトをトレースし、そのコンテキストを変化させていないルートオブジェクトをトレースしないシステム。
(7).第3項に記載のシステムであって、前記メモリから除去されるオブジェクトは、さらに、埋込ガーベジコレクションオブジェクトがアクティブ状態である時に割当てられしかも全修正ルートがトレースされている後でもテンプセット内に含まれるオブジェクトを含むシステム。
(8).第3項に記載のシステムであって、埋込ガーベジコレクションオブジェクトはアプリケーションプログラミングインターフェイスを呼び出すプログラムと同じスレッドの内側で実行されるシステム。
(9).第3項に記載のシステムであって、ルートオブジェクトはアプリケーションプログラミングインターフェイスを呼び出すプログラムにより生成され埋込ガーベジコレクションオブジェクトに通されるシステム。
(10).第3項に記載のシステムであって、さらに、埋込ガーベジコレクタがアクティブ状態である間に生成されないオブジェクトに対する付加ガーベジコレクションを含むシステム。
(11).埋込ガーベジコレクタを始動させるステップと、関連付けられたオブジェクトへの参照を有することができるルートオブジェクトを含むメモリから除去するオブジェクトを選択するステップと、選択されたオブジェクトを除去するステップと、を有するガーベジコレクション方法であって、除去するオブジェクトを選択するステップはコンテキストが変化しているルートオブジェクトを識別し、識別されたルートオブジェクトを参照されたオブジェクトにトレースしてコンテキストが変化しているルートオブジェクトにどのオブジェクトが関連付けられるかを決定するステップを含み、選択されたオブジェクトを除去するステップは埋込ガーベジコレクタがアクティブであった間に生成されしかもコンテキストが変化しているルートオブジェクトに関連付けられていると決定されなかったオブジェクトを除去するステップを含む方法。
(12).第11項に記載の方法であって、埋込ガーベジコレクタが始動すると、各ルートオブジェクトに関連付けられた修正ビットをクリアし、次に前記ルートオブジェクトに関連付けられたコンテキストが変化している時にルートオブジェクトの修正ビットを設定する方法。
(13).第11項に記載の方法であって、識別されたルートオブジェクトをトレースするステップはコンテキストが変化しているルートオブジェクトをトレースすることを含まない方法。
(14).プロセッサ、プロセッサに接続されたメモリ、および埋込ガーベジコレクションオブジェクトをアクティブとするアプリケーションプログラミングインターフェイスを含む電子システム。メモリは選択的にルートオブジェクトからの参照を有する一つ以上のオブジェクトを格納する。埋込ガーベジコレクションオブジェクトは、好ましくは、制御データを使用して前記メモリからオブジェクトを除去させ、除去オブジェクトは埋込ガーベジコレクションオブジェクトがアクティブである間に生成されしかもルートオブジェクトからの参照がないオブジェクトを含む。
100,350 ヒープ
102 ルート
104,106,108,110,326,328,330,352,354 オブジェクト
112,114 参照
200 システム
202 Javaスタックマシン
204 主プロセッサユニット
206 メモリ
208 Java仮想マシン
210 コンパイラ
212 バイトコード
214 ディスプレイ
300 ルートアレイ
302,304,306 ルートオブジェクト
308,310,312 リーチセット
314,316,318 修正ビット
320 ヒープセット
322 テンプセット
324 ヒープオブジェクト
332,334,336,360,362,364 ルート識別子
102 ルート
104,106,108,110,326,328,330,352,354 オブジェクト
112,114 参照
200 システム
202 Javaスタックマシン
204 主プロセッサユニット
206 メモリ
208 Java仮想マシン
210 コンパイラ
212 バイトコード
214 ディスプレイ
300 ルートアレイ
302,304,306 ルートオブジェクト
308,310,312 リーチセット
314,316,318 修正ビット
320 ヒープセット
322 テンプセット
324 ヒープオブジェクト
332,334,336,360,362,364 ルート識別子
Claims (2)
- プロセッサと、
プロセッサに接続されルートオブジェクトからの参照を有する一つ以上のオブジェクトを格納するメモリと、
埋込ガーベジコレクションオブジェクトの状態を制御するアプリケーションプログラミングインターフェイスと、を含む電子システムであって、
アプリケーションプログラミングインターフェイスはプログラムから呼び出され埋込ガーベジコレクションオブジェクトは制御データを使用して前記メモリからオブジェクトを除去させ、除去オブジェクトは埋込ガーベジコレクションオブジェクトがアクティブ状態である間に生成されかつルートオブジェクトからの参照がないオブジェクトを含む電子システム。 - 埋込ガーベジコレクタを始動させるステップと、
関連付けられたオブジェクトへの参照を有することができるルートオブジェクトを含むメモリから除去するオブジェクトを選択するステップと、
選択されたオブジェクトを除去するステップと、を有するガーベジコレクション方法であって、
除去するオブジェクトを選択するステップはコンテキストが変化しているルートオブジェクトを識別し、識別されたルートオブジェクトを参照されたオブジェクトにトレースしてコンテキストが変化しているルートオブジェクトにどのオブジェクトが関連付けられるかを決定するステップを含み、
選択されたオブジェクトを除去するステップは埋込ガーベジコレクタがアクティブであった間に生成されしかもコンテキストが変化しているルートオブジェクトに関連付けられていると決定されなかったオブジェクトを除去するステップを含む方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP03291506A EP1489518B1 (en) | 2003-06-19 | 2003-06-19 | Embedded garbage collection |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005011349A true JP2005011349A (ja) | 2005-01-13 |
Family
ID=33396045
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004180364A Abandoned JP2005011349A (ja) | 2003-06-19 | 2004-06-18 | 電子システムおよびガーベジコレクション方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US7565385B2 (ja) |
EP (1) | EP1489518B1 (ja) |
JP (1) | JP2005011349A (ja) |
KR (1) | KR20040111149A (ja) |
DE (1) | DE60318993T2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7685397B2 (en) | 2006-03-10 | 2010-03-23 | Samsung Electronics Co., Ltd. | Apparatus and method for managing stacks in virtual machine |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7886294B2 (en) * | 2004-12-28 | 2011-02-08 | Sap Ag | Virtual machine monitoring |
US20070100919A1 (en) * | 2005-11-01 | 2007-05-03 | Electronics And Telecommunications Research Institute | Garbage collection unit and method thereof |
KR100753821B1 (ko) | 2005-11-01 | 2007-08-31 | 한국전자통신연구원 | 가비지 컬렉션 장치 및 그 방법 |
KR100737345B1 (ko) * | 2006-03-28 | 2007-07-09 | 한국전자통신연구원 | 점진적인 가비지 콜렉션 수행 시에 순환적 가비지의 회수방법 및 장치 |
US8001336B2 (en) * | 2007-03-02 | 2011-08-16 | International Business Machines Corporation | Deterministic memory management in a computing environment |
US8914424B2 (en) * | 2008-08-13 | 2014-12-16 | Oracle America, Inc. | Efficient object pinning in a multi-threaded environment |
US8200718B2 (en) * | 2009-07-02 | 2012-06-12 | Roberts Michael L | Parallelized, incremental garbage collector |
KR100978630B1 (ko) * | 2009-09-17 | 2010-08-27 | (주)제이모바일 | 사전 검증 절차를 거치지 않은 자바 응용프로그램을 실행하는 방법 |
US8346821B2 (en) * | 2010-05-07 | 2013-01-01 | International Business Machines Corporation | Orphan object tracking for objects having acquire-release semantics |
EP2671161B1 (en) * | 2011-01-31 | 2019-03-13 | The MathWorks, Inc. | System and method for determining an objects lifetime in an object oriented environment |
US8892610B1 (en) | 2011-07-29 | 2014-11-18 | Google Inc. | System and method for garbage collection pause reduction |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5819299A (en) * | 1996-06-06 | 1998-10-06 | Electric Communities | Process for distributed garbage collection |
US6629113B1 (en) * | 1999-06-30 | 2003-09-30 | International Business Machines Corporation | Method and system for dynamically adjustable and configurable garbage collector |
GB9907283D0 (en) * | 1999-03-31 | 1999-05-26 | Koninkl Philips Electronics Nv | Memory reclamation method |
US6237060B1 (en) * | 1999-04-23 | 2001-05-22 | Sun Microsystems, Inc. | Cache management techniques |
US6865585B1 (en) * | 2000-07-31 | 2005-03-08 | Microsoft Corporation | Method and system for multiprocessor garbage collection |
US6502111B1 (en) * | 2000-07-31 | 2002-12-31 | Microsoft Corporation | Method and system for concurrent garbage collection |
GB0027045D0 (en) * | 2000-11-06 | 2000-12-20 | Ibm | Computer system with heap reset |
US6611898B1 (en) * | 2000-12-22 | 2003-08-26 | Convergys Customer Management Group, Inc. | Object-oriented cache management system and method |
US7111294B2 (en) * | 2001-01-16 | 2006-09-19 | Microsoft Corporation | Thread-specific heaps |
US6542911B2 (en) * | 2001-03-01 | 2003-04-01 | Sun Microsystems, Inc. | Method and apparatus for freeing memory from an extensible markup language document object model tree active in an application cache |
US6999980B2 (en) * | 2002-08-23 | 2006-02-14 | Sun Microsystems, Inc. | Eliminating write barriers for young objects |
-
2003
- 2003-06-19 DE DE60318993T patent/DE60318993T2/de not_active Expired - Lifetime
- 2003-06-19 EP EP03291506A patent/EP1489518B1/en not_active Expired - Lifetime
-
2004
- 2004-04-22 US US10/831,387 patent/US7565385B2/en active Active
- 2004-06-18 JP JP2004180364A patent/JP2005011349A/ja not_active Abandoned
- 2004-06-18 KR KR1020040045409A patent/KR20040111149A/ko not_active Application Discontinuation
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7685397B2 (en) | 2006-03-10 | 2010-03-23 | Samsung Electronics Co., Ltd. | Apparatus and method for managing stacks in virtual machine |
Also Published As
Publication number | Publication date |
---|---|
EP1489518A1 (en) | 2004-12-22 |
EP1489518B1 (en) | 2008-02-06 |
DE60318993T2 (de) | 2009-01-29 |
US20040260732A1 (en) | 2004-12-23 |
KR20040111149A (ko) | 2004-12-31 |
US7565385B2 (en) | 2009-07-21 |
DE60318993D1 (de) | 2008-03-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6651080B1 (en) | Techniques for implementing pluggable virtual machines | |
US7543285B2 (en) | Method and system of adaptive dynamic compiler resolution | |
US8239861B2 (en) | Software-based unloading and reloading of an inactive function to reduce memory usage of a data processing task performed using a virtual machine | |
US6484188B1 (en) | Optimization of garbage collection code in the context of raw native interface function calls in the java programming language | |
US7340730B2 (en) | On demand, network accessible, run time compile server | |
US7406684B2 (en) | Compiler, dynamic compiler, and replay compiler | |
US20040168162A1 (en) | System and method for shortening compiling time of byte codes in java program | |
US7246346B2 (en) | System and method for persisting dynamically generated code in a directly addressable and executable storage medium | |
US6701520B1 (en) | Preventing garbage collection of objects in object oriented computer programming languages | |
US10216497B2 (en) | Selective compiling method, device, and corresponding computer program product | |
US20020144240A1 (en) | Method and system of controlling dynamically compiled native code size | |
JP2003167737A (ja) | スタック使用方法 | |
JP2000222220A (ja) | 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ | |
CA2376327C (en) | Executing native code in place of non-native code | |
JP2005011349A (ja) | 電子システムおよびガーベジコレクション方法 | |
EP1207454A1 (en) | Java run-time system with modified linking identifiers | |
US20020133638A1 (en) | Method and apparatus to facilitate sharing optimized instruction code in a multitasking virtual machine | |
US6681381B1 (en) | Arrangement for executing program code with reduced memory requirements | |
JP2005507103A (ja) | Javaヒープを実現するフレームワーク | |
KR20040071831A (ko) | 자바 프로그램에서 클래스 로딩 과정을 단축시키는 시스템및 방법 | |
US7036120B2 (en) | Two tier clusters for representation of objects in Java programming environments | |
US7065760B2 (en) | Reducing the memory footprint of applications executed in a virtual machine | |
WO2001013223A1 (fr) | Procede et appareil permettant de faire fonctionner un ordinateur virtuel | |
JP2005011350A (ja) | 未解決命令解決 | |
JP2003271393A (ja) | インライン割付による最適化方法およびそのコンパイラ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20070618 |
|
A762 | Written abandonment of application |
Free format text: JAPANESE INTERMEDIATE CODE: A762 Effective date: 20090916 |