JP5380695B2 - メモリ管理方法、計算機システム及びメモリ管理プログラム - Google Patents

メモリ管理方法、計算機システム及びメモリ管理プログラム Download PDF

Info

Publication number
JP5380695B2
JP5380695B2 JP2010037069A JP2010037069A JP5380695B2 JP 5380695 B2 JP5380695 B2 JP 5380695B2 JP 2010037069 A JP2010037069 A JP 2010037069A JP 2010037069 A JP2010037069 A JP 2010037069A JP 5380695 B2 JP5380695 B2 JP 5380695B2
Authority
JP
Japan
Prior art keywords
data
area
predetermined
predetermined data
heap
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2010037069A
Other languages
English (en)
Other versions
JP2011175333A (ja
Inventor
元樹 小幡
博泰 西山
昌彦 足立
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2010037069A priority Critical patent/JP5380695B2/ja
Priority to US13/386,348 priority patent/US8990532B2/en
Priority to PCT/JP2010/054273 priority patent/WO2011104897A1/ja
Publication of JP2011175333A publication Critical patent/JP2011175333A/ja
Application granted granted Critical
Publication of JP5380695B2 publication Critical patent/JP5380695B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0261Garbage collection, i.e. reclamation of unreferenced memory using reference counting
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/11File system administration, e.g. details of archiving or snapshots
    • G06F16/119Details of migration of file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/11File system administration, e.g. details of archiving or snapshots
    • G06F16/122File system administration, e.g. details of archiving or snapshots using management policies
    • G06F16/125File system administration, e.g. details of archiving or snapshots using management policies characterised by the use of retention policies

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)
  • Memory System (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、メモリ管理方法に関し、特に、ガベージコレクタによって管理されるメモリ領域と管理されないメモリ領域とを併用する計算機システムにおけるメモリ管理方法に関する。
コンピュータプログラムを開発する上で、プログラムが利用するメモリ領域の確保・解放等のメモリ管理は、プログラム開発者の手を煩わせる項目の一つである。これを解決する手段として、ガベージコレクタが利用されることが多い。
Java(登録商標)は、ガベージコレクタを利用してメモリを管理する言語処理系の一つである。Javaは、プログラム実行時のメモリ確保用APIは用意されているが、メモリ解放用APIは用意されていない言語仕様である。プログラムの実行過程で確保されたメモリ領域は、Java仮想マシンに実装されたガベージコレクタによって自動的に解放される。ガベージコレクタによるメモリの解放処理(ガベージコレクション、以下、「GC(Garbage Collection)」という。)は、Javaプログラムによって実行中の全てのスレッドを停止させて、不要なデータを回収する形態が多い。
ところで、Java仮想マシンがGCを起動するのは、Javaプログラムによって生成されたデータ(Javaオブジェクト)を格納するJavaヒープの使用量がある閾値を超える直前である。しかしながら、Javaヒープの使用量を見積もること及びJavaヒープの使用量が閾値を超えるタイミングを予見することはユーザにとって困難である。そのため、GCの起動によって、プログラムが不定期に実行停止する問題がある。
また、Java仮想マシンにおけるGCの実装方式として、停止時間が短時間のGC(CopyGC)と、停止時間が長時間のGC(FullGC)と、を使い分ける世代別ガベージコレクションが多く採用されている。しかしながら、この世代別ガベージコレクションでは、次にどちらのGCが起動するかを予見することは困難である。そのため、予期しないGCの起動によって、プログラムが実行停止してシステム全体の応答が低下する問題がある。
これらの問題を解決することを目的として各種発明がなされてきた(特許文献1、非特許文献1、2参照)。上記各文献には、GC対象のメモリ領域(以下、「Javaヒープ」という。)の他に、GC対象外のメモリ領域(以下、「外部ヒープ」という。)を設けた点が示されている。外部ヒープとは、プログラムによって管理可能なメモリ領域である。外部ヒープの確保、外部ヒープにおけるオブジェクトの生成及び外部ヒープの解放は、プログラマによるプログラムのソースコード中の記述に従って実行される。
非特許文献1には、外部ヒープに生成するデータに制限が設けた点が開示されている。この制限とは、外部ヒープにおいて、Javaヒープ内のデータから参照されるデータの生成を制限することである。これにより、外部ヒープ内のデータにアクセスするプログラムの実行スレッド数が0となった場合に、自動的に外部ヒープをそこに格納されたデータごと解放しても、プログラムの実行結果に影響を与えないことを保証できる。つまり、外部ヒープを低オーバヘッドに且つ安全に解放することができる。仮に、Javaヒープ内のデータが外部ヒープ内のデータを参照している状態で外部ヒープを解放すると、Javaヒープ内のデータからの参照が不正な領域(解放されたメモリ領域)を指すことになる。そうすると、正常にプログラムの実行を継続することができなくなる。
しかしながら、非特許文献1に開示された技術では、ユーザが常にデータ間の参照関係に留意しながらプログラミングする必要がある点、プログラム規模の増大やプログラムに記述されない暗黙的なデータの生成により、メモリ領域上の参照関係の把握が極めて困難になる点等の問題がある。また、実際にプログラムを実行するまで、上記の制限に違反するか否かが不明である点、上記の制限に違反している場合には例外(Exception)が発生してプログラムが正常に実行されないことが多い点、プログラムの実行時に制限内容をチェックすることにより性能が著しく低下する点等の問題がある。
これらの問題を解決すべく、特許文献1及び非特許文献2には、外部ヒープに生成するデータに制限を設けずに、外部ヒープを利用可能な点が開示されている。特許文献1及び非特許文献2に開示された技術では、外部ヒープを解放する際、解放対象の外部ヒープ内のデータと、解放対象外のメモリ領域(Javaヒープ、解放対象外の外部ヒープ)内のデータと、の参照関係を調査し、解放対象の外部ヒープ内のデータのうち、その後のプログラムの実行に必要なデータを、解放対象外のメモリ領域に移動させる。これにより、その後のプログラムの実行に支障がないことを保証した上で、解放対象の外部ヒープを解放できる。また、ユーザは、データの参照関係を気にすることなく外部ヒープ用APIを利用してプログラミングできる。また、上記の調査は外部ヒープの解放時のみに実行されるため、プログラム実行時等に調査が実行されることによるオーバヘッドも回避することができる。
図1Aは、従来の一般的なJava用APIの利用例を示す図である。プログラム201は、Listクラスのデータliを生成するステップ202と、Objクラスのデータo1、o2を生成するとともに、ステップ202で生成されたデータliからデータo1、o2を参照させるステップ206と、を含む。
図1Bは、従来の外部ヒープ用APIの利用例を示す図である。プログラム203は、図1Aのプログラム201を修正したものである。このプログラム203は、外部ヒープを生成するステップ204と、生成された外部ヒープに対してListクラスのデータliを生成するステップ205と、上記のステップ206と、生成された外部ヒープを解放(削除)するステップ207と、を含む。特にステップ204では、ReferenceExplicitMemoryクラスのデータemを生成することによって、外部ヒープを生成する。また、ステップ204で生成された外部ヒープ内のデータが、他のメモリ領域内のデータから参照されている場合、ステップ207では、外部ヒープ内のデータを他のメモリ領域に移動させた後に、外部ヒープを解放する。
ところで、外部ヒープにデータを配置させる方法には、二種類の方法がある。一つは、プログラム中のある区間内で生成されるデータの全てを、外部ヒープに配置する方法(特許文献1参照)である。もう一つは、外部ヒープに関連付けされたデータ(以下、「基点データ」という。)から参照可能なデータを、外部ヒープに配置する方法(非特許文献2参照)である。図1Bは、後者の方法を利用するためのプログラムである。すなわち、後者の方法を利用する前提として、ステップ204で生成された外部ヒープに、ステップ205によってListクラスのデータliを関連付けさせている。
図2は、従来の外部ヒープ用APIを利用したプログラム(図1B参照)を実行後のデータ配置を示す図である。外部ヒープ110は、図1Bのステップ204で生成される。この外部ヒープ110には、ステップ205で生成されたListクラスのデータli301が基点データとして配置される。一方、図2のJavaヒープ109には、ステップ206で生成されたObjクラスのデータo1(302)、o2(303)、及び、その他のデータF305が配置される。なお、参照304−1、304−2に示すように、基点データli301は、データo1(302)及びデータo2(303)を参照している。また、参照306に示すように、データF305はデータo1(302)を参照している。
ここで、データo1(302)及びデータo2(303)を外部ヒープ110に移動させることを考える。移動させるタイミングは、GC実行時やJavaヒープの使用量がある閾値を超えた場合等である。
図3は、従来の基点データから参照可能なデータを外部ヒープに移動させた後のデータ配置を示す図である。図3では、基点データli301から参照可能なデータo1(401)、o2(402)が、外部ヒープ110に移動している。
ここで、仮に外部ヒープ110を解放すると、参照306は不正な領域(解放されたメモリ領域)を指すことになる。この場合、正常にプログラムの実行を継続できなくなる。そこで、参照306のような、解放対象外のJavaヒープ109内のデータF305から解放対象の外部ヒープ110内のデータo1(401)への参照が存在する場合、データo1(401)をJavaヒープ109に移動させる(図4参照)。
図4は、従来の解放対象の外部ヒープ内のデータを解放対象外のメモリ領域に移動させた場合のデータ配置を示す図である。図4では、データo1(401)は、データo1'(501)としてJavaヒープ109に移動している。また、図3の参照306は、図4の参照502として更新される。
データo1(401)とデータo1'(501)とは同一のデータであるため、参照502は参照306と同義である。この場合、外部ヒープ110をデータli301、o1(401)、o2(402)ごと解放しても、その後のプログラムの実行に支障がない。
特開2009−037547号公報
F.Pizlo, J.M.Fox, D.Holmes and J.Vitek, Real-Time Java Scoped Memory: Design Patterns and Semantics, In Proceedings of the Seventh IEEE International Symposium on Object-Oriented Real-Time Distributed Computing, 2004. 小幡 元樹、西山 博泰、足立 昌彦、岡田 浩一、長瀬 卓真、中島 恵、Javaにおける明示的メモリ管理、情報処理学会論文誌、Vol.50、No.7、pp.1693-1715、July、2009年
ところで、基点データから参照可能なデータを、外部ヒープに配置する上記の方法では、基点データが参照可能なJavaヒープ内の全データ群が、外部ヒープに移動する。そのため、このようなデータ群のうちの特定のデータ群のみを外部ヒープに移動させたい場合の指定が困難であった。
例えば、所定処理によって生成されるデータ群の参照関係上の頂点のデータを基点データとして、この基点データから参照可能なデータ群のみを一つの外部ヒープに移動させる場合を考える。この場合、基点データが特定のデータ構造上にある場合、想定外のデータ移動が発生し得る。
図10は、循環構造のデータ間の参照関係を示す図である。図10において、丸印はデータを、丸印の内側のアルファベットはデータの所属クラスを、矢印はデータ間の参照関係を示す。例えば、参照1107は、所属クラスAのデータ1101が、所属クラスBのデータ1102を参照することを示す。
ここで、データ1103−1を基点データとして、データ1103−1及びデータ1103−1から参照可能なデータ1104−1のみを、一つの外部ヒープに移動させるものとする。この場合、図10に示すように、データ1103−1、1104−1、1101、1102、1103−1間において、参照関係が循環構造になっている。そのため、従来のデータ配置方法では、データ1101、1102も、基点データ1103−1から参照可能なデータとして、一つの外部ヒープに移動する。
図21は、リスト構造のデータ間の参照関係を示す図である。図21において、例えば、参照1504−1は、所属クラスFのデータ1501−1が、同じ所属クラスFのデータ1501−2を参照することを示す。
ここで、データ1501−1を基点データとして、データ1501−1及びこのデータ1501−1から参照可能なデータ1502−1、1503−1のみを、一つの外部ヒープに移動させるものとする。この場合、図21に示すように、データ1501−1、1501−2、1501−3間において、参照関係が自己参照型のリスト構造になっている。そのため、従来のデータ配置方法では、データ1501−2、1501−3も、基点データ1501−1から参照可能なデータとして、一つの外部ヒープに移動する。
以上、図10及び図21を用いて説明してきたように、基点データが特定のデータ構造(循環構造やリスト構造)上にある場合、想定外のデータ移動が発生し得る。この結果、ユーザによる見積もりと大きさが異なる外部ヒープが生成される。そうすると、外部ヒープの解放処理においても問題が生じる。前述のように、外部ヒープの解放処理では、外部ヒープに格納されたデータのうちその後のプログラムの実行に必要なデータを他のメモリ領域に移動させる必要がある。しかしながら、基点データが特定のデータ構造上にある場合、外部ヒープには「移動すべく移動したデータ群」と「想定外に移動したデータ群」とが配置される。両者は多くの場合、データの生存期間が異なる。そして、「想定外に移動したデータ群」が配置された外部ヒープの解放時間は、「移動すべく移動したデータ群」のみが配置された他の外部ヒープの解放時間よりも長くなる。すなわち、外部ヒープによって解放時間に大きなバラつきが生じる。
この問題を解決する方法として、基点データとなり得る他のデータの調査、基点データが特定の構造上に置かれないようなプログラムの修正等が挙げられる。しかしながら、これらの解決方法では、外部ヒープの利便性を大きく損ねてしまう。
本発明は、上述した問題を考慮したものであって、基点データが特定のデータ構造(循環構造、リスト構造)上にある場合であっても、外部ヒープの利便性を損なうことなく効率的にメモリ領域を利用可能なメモリ管理方法、計算機システム及びメモリ管理プログラムを提供することを目的とする。
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、プログラムを実行するプロセッサと、メモリと、を備えた計算機システムにおけるメモリ管理方法であって、前記メモリは、ガベージコレクタによって管理される第1の領域と、前記ガベージコレクタによって管理されない第2の領域と、を備えており、前記方法は、前記プロセッサが、前記第2の領域に関連付けされた所定のデータを基点として参照を辿ることによって、前記所定のデータの参照関係を調査する手順と、前記所定のデータの参照関係が、前記所定のデータと同一の所属クラスのデータへの参照を含む構造である場合、前記プロセッサが、この構造を構成するデータのうちの特定のデータの前記第2の領域への移動を禁止するように判定する手順と、前記プロセッサが、前記構造を構成するデータから前記特定のデータを除いたデータのうちの、前記第1の領域に格納されたデータを、前記第2の領域に移動させる手順と、を含むことを特徴とする。
本発明によれば、基点データが特定のデータ構造(例えば循環構造、リスト構造)上にある場合に、この基点データが参照可能なデータのうちの特定のデータが第2の領域へ移動されないようにしている。そのため、外部ヒープに配置すべきでない特定のデータが外部ヒープに配置されることを防ぐことができ、外部ヒープの利便性を損なうことなく効率的にメモリを管理することができる。
また、ユーザの意図に沿ったデータ配置や外部ヒープの使用量の正確な見積もりを可能にする。さらに、外部ヒープ毎の解放時間のバラつきを低減することができる。
従来の一般的なJava用APIの利用例を示す図である。 従来の外部ヒープ用APIの利用例を示す図である。 従来の外部ヒープ用APIを利用したプログラムを実行後のデータ配置を示す図である。 従来の基点データから参照可能なデータを外部ヒープに移動させた後のデータ配置を示す図である。 従来の解放対象の外部ヒープ内のデータを解放対象外のメモリ領域に移動させた場合のデータ配置を示す図である。 本発明の実施形態の計算機システムの構成例を示す図である。 本発明の実施形態のメモリ管理方法の概要を示すフローチャートである。 本発明の実施形態の外部ファイルによって調査契機を指定する第1の例を示す図である。 本発明の実施形態の外部ファイルによって調査契機を指定する第2の例を示す図である。 本発明の実施形態のJavaプログラムAPIによって調査契機を指定する例を示す図である。 本発明の実施形態のデータ移動可否判定部及びデータ移動部の制御ロジックを示すフローチャートである。 循環構造のデータ間の参照関係の一例を示す図である。 本発明の実施形態の循環構造のデータの参照の深さを調査する制御ロジックを示すフローチャートである。 本発明の実施形態の循環構造のデータの参照の深さを求めた結果を示す図である。 本発明の実施形態のデータの参照の深さに基づく循環構造のデータの移動可否判定の制御ロジックを示すフローチャートである。 図13のステップ1002の詳細処理を示すフローチャートである。 本発明の実施形態のデータ移動の制御ロジックを示すフローチャートである。 図10に示す循環構造のデータに本発明の実施形態を適用した場合のデータ配置を示す図である。 図10に示す循環構造のデータに従来のデータ配置方法を適用した場合のデータ配置を示す図である。 循環構造のデータ間の参照関係の他の例を示す図である。 本発明の実施形態の循環構造のデータの距離を調査する制御ロジックを示すフローチャートである。 本発明の実施形態のデータの距離に基づく循環構造のデータの移動可否判定の制御ロジックを示すフローチャートである。 リスト構造のデータ間の参照関係を示す図である。 本発明の実施形態のデータの参照の深さに基づくリスト構造のデータの移動可否判定の制御ロジックを示すフローチャートである。 図21に示すリスト構造のデータに本発明の実施形態を適用した場合のデータ配置を示す図である。 図21に示すリスト構造のデータに従来のデータ配置方法を適用した場合のデータ配置を示す図である。
本発明の実施形態によれば、GC対象のメモリ領域(Javaヒープ)とGC対象外のメモリ領域(外部ヒープ)とを併用する計算機システムにおいて、データ(オブジェクト)の参照関係に基づいてJavaヒープから外部ヒープにデータを移動させる処理において、外部ヒープに関連付けされた基点データ(基点オブジェクト)と特定の参照関係(循環構造、リスト構造)を構成するデータのうちの特定のデータの、基点データと同一の外部ヒープへの配置を禁止する。
以下、本発明の実施形態について図面に基づいて説明する。なお、以下の実施形態では、本発明を、Java技術を基盤とした計算機システムに適用した場合を例に説明するが、GC機能を有する他の計算機システムに対しても適用可能である。
(計算機システムの構成)
図5は、本発明の実施形態の計算機システム101の構成例を示す図である。計算機システム101は、プロセッサ(CPU)102、メモリ103を備える。
CPU102は、各処理(ここでは特にJavaVM105)を実行するプロセッサである。JavaVM(Java仮想マシン)105は、CPU102によって実行され、メモリ103を管理する。このJavaVM105は、データ参照関係把握部106、データ移動可否判定部107、データ移動部108を含む。また、このJavaVM105は、Javaヒープ109を自動的に解放するGC機能を有する。
メモリ103は、各種データを記憶するRAM(Random Access Memory)等の記憶装置である。このメモリ103は、JavaVM105によって実行されるJavaプログラム104、JavaVM105が実行するGCの対象メモリ領域であるJavaヒープ109、GC対象外のメモリ領域である外部ヒープ110−1〜3(以下、総称する場合、「外部ヒープ110」という。)を含む。なお、Javaプログラム104は、計算機システム101に接続された外部記憶装置(HDD等)111に記録されてもよい。
外部ヒープ110は、自身に関連付けされたデータから参照可能なJavaヒープ109内のデータを、所定の移動契機(例えばGCの起動時、ユーザによって指示されたタイミング)ごとに、この外部ヒープ110に移動させるタイプの外部ヒープである。ここでいう参照可能とは、直接又は間接的に参照していることを示す。この外部ヒープ110にデータを関連付ける方法には、外部ヒープ110にデータを直接生成する方法や、ユーザ指示によって関連があることを明示する方法等がある。また外部ヒープ110に関連付けるデータを動的に決定する方法の一例として、以下の方法がある。すなわち、まず、Javaヒープ109に存在するデータ群のうち、スタックから直接又は間接に参照されていないデータ群を取得する。次に、取得されたデータ群の所属クラスを抽出し、抽出されたクラス毎に、クラスから生成された全てのデータのサイズと、そのデータの参照先の全てのデータのサイズと、を全て加算した総オブジェクトサイズを算出する。その後、この総オブジェクトサイズが所定の閾値を超えるクラスから生成されるデータを、外部ヒープ110に関連付けさせる。
このような外部ヒープ110にデータが関連付けされると、このデータから参照可能なJavaヒープ109内のデータが、移動契機ごとにこのデータが関連付けされた外部ヒープ110に移動する。なお、外部ヒープ110に関連付けされたデータは、この外部ヒープ110に配置されたデータ群の参照関係上の頂点のデータ、すなわち基点データとなる。このような外部ヒープ110−1、110−2、110−3は、Javaプログラム104のソースコード中に記述された外部ヒープ生成文(図1Bのステップ204参照)で生成された外部ヒープ生成バイトコードを実行した回数だけ生成される。
JavaVM105が備えるデータ参照関係把握部106は、外部ヒープ110に関連付けされたデータである基点データの参照関係を把握する。
データ移動可否判定部107は、データ参照関係把握部106によって把握されたデータの参照関係に基づいて、Javaヒープ109から外部ヒープ110へのデータの移動可否を判定する。
データ移動部108は、データ移動可否判定部107による判定結果に基づいて、Javaヒープ109から外部ヒープ110にデータを移動させる。
なお、これらの処理部106〜108の各々は、他の処理部106〜108の結果を利用する処理である。ここで、データ移動部108による処理を実行する度にデータ参照関係把握部106及びデータ移動可否判定部107の処理を実行すると、調査時間が非常に大きくなることが予想される。そのため、データ参照関係把握部106及びデータ移動可否判定部107の実行契機は、例えば外部ヒープ110を使用する一連の処理を1回実行した直後、Javaプログラム104によって利用される全てのクラスロードが終了した直後等であるとよい。これにより、データ参照関係把握部106及びデータ移動可否判定部107の処理による調査時間を短縮可能である。
(メモリ管理方法の概要)
図6は、本発明の実施形態のメモリ管理方法の概要を示すフローチャートである。JavaVM105が、図6に示す制御ロジックを実行する。
まずJavaVM105は、データの参照関係の調査契機に到達したか否かを判定する(2401)。ここでいう調査契機とは、Javaプログラム用APIやJavaVM105の起動時オプション、外部ファイル等によって指定されたプログラム中のある処理が開始するタイミングである。調査契機については図7、8を用いて詳細に後述する。
調査契機に到達した場合(2401でYES)、JavaVM105は、調査対象の全てのデータの参照関係を調査する(2402)。
その後、JavaVM105は、ステップ2402で取得されたデータの参照関係に基づいて、外部ヒープ110に関連付けされた基点データから参照可能なデータ群の中に特定の参照構造(循環構造、リスト構造等)が存在する場合、その参照構造上のデータの全て又は一部の外部ヒープ110への移動を不可に(禁止)する(2403)。なお、その後、このステップ2403で移動不可にされたデータは、基点データが関連付けされた外部ヒープ110には移動されないよう処理される。
(データの参照関係の調査契機)
図7Aは、本発明の実施形態の外部ファイルによって調査契機を指定する第1の例を示す図である。図7Bは、本発明の実施形態の外部ファイルによって調査契機を指定する第2の例を示す図である。
図7A及び図7Bには、1行目に「基点データを生成するフルメソッド名、基点データの所属クラス、調査対象の参照関係の種類、(距離)」及び2行目に「調査契機」の書式の外部ファイルを示す。
図7Aにおいて、MyClass.MyMethodメソッド2201は、基点データを生成するフルメソッド名(クラス名+メソッド名)である。java.util.HashMapクラス2202は、基点データの所属クラスである。Circle2203は、調査対象の参照関係の種類が循環構造であることを指定するものである。数値「3」2204は、外部ヒープに移動させてもよいデータの、基点データからの参照の距離である。この数値2204が0である場合、循環構造のデータは、外部ヒープに移動させないことになる。メソッド2205は、ステップ2201〜2204で指定されるデータの参照関係の調査契機を示すものである。図7Aでは、メソッドの実行時を調査契機として指定している。なお、調査契機をプログラム中の文によって指定してもよい。図7Bにおいて、List2206は、調査対象の参照関係の種類がリスト構造であることを指定するものである。
図8は、本発明の実施形態のJavaプログラムAPIによって調査契機を指定する例を示す図である。図8では、図7Aに示す内容をJavaプログラムAPIによって指定している。
図8において、Javaプログラム2301は、外部ヒープを生成するステップ2302と、生成された外部ヒープ内に基点データ(MyClassのインスタンス)を生成するステップ2303と、調査対象の参照関係の種類を指定するステップ2304と、referenceCheckメソッドを呼び出すことによって実際に調査を指示するステップ2305と、を含む。なお、ステップ2304の第1引数Circle、第2引数0は、それぞれ図7AのCircle2203、数値2204と同義である。
図7A及び図7Bに示す外部ファイルや図8に示すJavaプログラムAPIに基づいて、JavaVM105は、指定された契機で指定されたデータの参照関係を調査することができる。なお、調査箇所は、Javaプログラムの実行に大きな影響を及ぼさない箇所が適切に指定されるとよい。これは、長い時間を要することが予想される参照関係の調査の実用性を高めるためである。
調査対象の参照関係としては、例えば循環構造及びリスト構造がある。
調査対象の参照関係が循環構造である場合、まず、全データの参照関係と参照の深さを調べる。次に、基点データからの参照関係が循環している場合に、基点データから参照可能なデータの内のどのデータを外部ヒープに移動させないかを判定する。その後、移動させないと判定されたデータの所属クラスに、外部ヒープメモリへの移動不可フラグを付与する。この移動不可フラグが付与された所属クラスのデータ群は、外部ヒープへの移動が禁止される。
一方、調査対象の参照関係がリスト構造である場合、まず、基点データからの参照を調べる。次に、基点データから参照可能なデータに、所属クラスが基点データと同一のデータが存在するか否かを判定する。その後、所属クラスが基点データと同一のデータが存在すると判定された場合、その所属クラスに、外部ヒープへの移動不可フラグを付与する。この移動不可フラグは、調査対象の参照関係が循環構造である場合と同義である。
(循環構造の場合の制御ロジック)
図9は、本発明の実施形態のデータ移動可否判定部107及びデータ移動部108の制御ロジックを示すフローチャートである。図9のステップ601及び602は、図6のステップ2402に対応する。ステップ603は、図6のステップ2403に対応する。
まず、データ参照関係把握部106は、全データの参照の深さを求める(601)。ここでは、データ参照関係把握部106は、処理開始時点のデータの参照関係を把握し、把握されたデータの参照関係に基づいて、全データの参照の深さを求めるとともに、全データに参照の深さを付与する。参照の深さとは、GCルート集合からの距離、すなわちGCルート集合から参照を辿った数である。このステップ601の処理については図10及び図11を用いて具体的に後述する。
次に、データ参照関係把握部106は、ステップ601で求められた全データの参照の深さのうち、外部ヒープに関連付けされた基点データの参照の深さを把握する(602)。
その後、データ移動可否判定部107は、ステップ602で把握された基点データの参照の深さと、基点データから参照可能なデータの参照の深さと、を比較して、循環構造を構成するデータを検出する。また、検出されたデータについての外部ヒープへの移動の可否を判定する。さらに、移動不可と判定されたデータの所属クラスに、外部ヒープへの移動不可フラグを付与する(603)。このステップ603の処理については図12及び図13を用いて具体的に後述する。
以下、図9の各処理について詳細に説明する。なお、図9の各処理の説明に先立ち、循環構造のデータについて説明する。
図10は、循環構造のデータ間の参照関係の一例を示す図である。図10において、丸印はデータを、丸印の内側のアルファベットはデータの所属クラスを、矢印はデータ間の参照関係を示す。例えば、参照1107は、所属クラスAのデータ1101が、所属クラスBのデータ1102を参照することを示す。なお、参照1106の参照元はGCルート集合である。GCルート集合とは、GCによってデータの参照関係を辿る際の辿り始めのデータ(オブジェクト)である。このGCルート集合は、CPU102内のレジスタや、Javaプログラム104の実行過程で生成されるスタックフレーム内、JavaVM105自体を構成するプログラム内等に定義される。
図11は、本発明の実施形態の循環構造のデータの参照の深さを調査する制御ロジックを示すフローチャートである。図11に示す制御ロジックは、図9のステップ601に対応する。
まず、データ参照関係把握部106は、全データの参照の深さを0として初期化する(701)。次に、データ参照関係把握部106は、現在の参照の深さを1にセットする(702)。その後、データ参照関係把握部106は、GCルート集合から参照可能なデータに、現在の参照の深さである1をセットして、このデータをスタックにPUSHする(703)。なお、ここでのスタックは、一般的なFirst In Last Outのデータ構造である。スタックへのデータの追加をPUSH、スタックからのデータの取り出しをPOPという。図10に示す例では、GCルート集合から参照可能なデータ1101に、参照の深さ1をセットして、このデータ1101をスタックにPUSHする。
その後、データ参照関係把握部106は、スタックが空であるか否かを判定する(704)。スタックが空である場合(704でYES)、処理を終了する。一方、スタックが空でない場合(704でNO)、スタックからデータを一つPOPする(705)。図10に示す例では、データ1101がPOPされる。なお、以降の説明では、ステップ705でPOPされたデータを「Obj」という。
その後、データ参照関係把握部106は、ステップ705でPOPされたデータObjから参照可能なデータが存在するか否かを判定する(706)。図10に示す例では、データ1101から参照可能なデータ1102が存在するので、ステップ707に進む。
ステップ707に進むと、データ参照関係把握部106は、(1)ステップ706で検出されたデータの参照の深さが0(初期状態)である、及び、(2)ステップ706で検出されたデータの参照の深さがステップ705でPOPされたデータObjの参照の深さよりも大きい、のうちの少なくとも一方の条件を満たすか否かを判定する(707)。図10に示す例では、データ1102の参照の深さは0(初期状態)であるため、条件(1)を満たすので、ステップ708に進む。
ステップ708に進むと、データ参照関係把握部106は、ステップ706で検出されたデータの参照の深さとして、ステップ705でPOPされたデータObjの参照の深さの値に1を加算した値をセットし、ステップ706で検出されたデータをスタックにPUSHする(708)。図10に示す例では、データ1102の参照の深さとして2がセットされる。その後、ステップ704に戻る。
以降、ステップ704からステップ708の処理は、スタックが空になるまで繰り返される。これにより、GCルート集合から参照可能な全てのデータの各々に対して、ステップ708の処理は一回だけ実行される。図10に示す例では、データ1102から参照可能なデータ1103−1、1103−2の参照の深さとして、3がセットされる(図12参照)。また、データ1103−1、1103−2から参照可能なデータ1104−1、1104−2の参照の深さとして、4がセットされる(図12参照)。なお、データ1104−1、1104−2から参照可能なデータ1101の参照の深さとして1がセットされており、ステップ705でPOPされるデータ1104の参照の深さ4よりも小さいため(707でNO)、前述した条件(1)(2)のいずれも満たさないので、ステップ704に進む。その後、スタックが空であるため(704でYES)、処理を終了する。
図12は、本発明の実施形態の循環構造のデータの参照の深さを求めた結果を示す図である。図12において、深さ1301は、データ1101の参照の深さである数値1を示す。同様に、深さ1302、1303−1(2)、1304−1(2)は、それぞれデータ1102、1103−1(2)、1104−1(2)の参照の深さである数値2、3、4を示す。
次に、図9のステップ602について説明する。
データ参照関係把握部106は、基点データの参照の深さを把握する(602)。図10に示す例では、囲み1105−1、1105−2内のデータをそれぞれ異なる外部ヒープに配置する場合、データ1103−1、1103−2が基点データとなる。これらデータ1103−1、1103−2の参照の深さは3である(図13参照)。
次に、図9のステップ603について説明する。
図13は、本発明の実施形態のデータの参照の深さに基づく循環構造のデータの移動可否判定の制御ロジックを示すフローチャートである。図13に示す制御ロジックは、図9のステップ603に対応する。
まず、データ移動可否判定部107は、未処理の外部ヒープを一つ選択する(1001)。図12に示す例では、囲み1105−1に対応する外部ヒープが選択されるものとする。
次に、データ移動可否判定部107は、ステップ1001で選択された外部ヒープに関連付けされた基点データから参照可能なデータのうち、参照の深さが基点データの参照の深さ以下であるデータの所属クラスに、外部ヒープへの移動を禁止する旨の移動不可フラグを付与する(1002)。図12に示す例では、囲み1105−1内の基点データ1103−1から参照可能なデータ1104−1、1101、1102のうち、基点データ1103−1の参照の深さ3以下の参照の深さを有するデータ1101(参照の深さ1)、1102(参照の深さ2)の所属クラスA、Bに、移動不可フラグが付与される。
図14は、図13のステップ1002の詳細処理を示すフローチャートである。
まず、データ移動可否判定部107は、ステップ1001で選択された外部ヒープに関連付けされた基点データを取得する(801)。図12に示す例では、基点データ1103−1が取得される。なお、以下の説明では、ここで取得された基点データの参照の深さを「基点Depth」という。
次に、データ移動可否判定部107は、基点データから参照可能、且つ、基点データとの間で循環構造を構成するデータを取得する(802)。図12に示す例では、基点データ1103−1から参照可能なデータ1104−1、1101、1102が取得される。なお、他の外部ヒープの基点データ1103−2とそのデータから参照可能なデータ1104−2は、取得されない。
ステップ802で取得されたデータが、ステップ804以降の処理が未処理のデータを含む場合には(803でYES)、データ移動可否判定部107は、データの集合から未処理のデータを一つ選択する(804)。
その後、データ移動可否判定部107は、ステップ804で選択されたデータの参照の深さと、基点Depthと、を比較する(805)。ステップ804で選択されたデータの参照の深さが、基点Depth以下である場合(805でYES)、ステップ806に進む。
ステップ806に進むと、データ移動可否判定部107は、基点Depth以下の参照の深さを有するデータの所属クラスに、外部ヒープへの移動不可フラグを付与する(806)。図12に示す例では、基点データ1103−1の参照の深さ3以下の参照の深さを有するデータ1101(参照の深さ1)、1102(参照の深さ2)の所属クラスA、Bに、移動不可フラグが付与される。付与された移動不可フラグは、データ移動部108の移動処理(図15参照)で利用される。なお、前述のステップ805は、ステップ802で取得されたデータの全てに、このステップ806が適用されるのを防止するための処理である。
図13に戻り、データ移動可否判定部107は、未処理の外部ヒープがあるか否かを判定する(1003)。未処理の外部ヒープがある場合(1003でYES)、ステップ1001に戻る。未処理の外部ヒープがない場合(1003でNO)、処理を終了する。
図15は、本発明の実施形態のデータ移動の制御ロジックを示すフローチャートである。図5のデータ移動部108は、上記の移動不可フラグを利用して、移動すべきデータのみを外部ヒープに移動させる。
まず、データ移動部108は、移動先の外部ヒープの基点データを取得する(901)。図12に示す例では、移動先の外部ヒープが囲み1105−1に対応する外部ヒープである場合、基点データ1103−1が取得される。
次に、データ移動部108は、基点データから参照可能、且つ、未処理のデータがあるか否かをチェックする(902)。図12に示す例では、データ1104−1が存在するため(902でYES)、ステップ903に進む。なお、所属クラスに移動不可フラグが付与されているデータ1101、1102や、他の外部ヒープ内のデータ1103−2、1104−2は、基点データ1103−1から参照可能なデータに含まれない。
ステップ903に進むと、データ移動部108は、外部ヒープへ移動可能な状態であるか否かをチェックする(903)。移動可能な状態とは、GC時に外部ヒープにデータを移動するのであればJavaヒープ内でのGCの移動回数が一定値を超えた場合や、Javaヒープの使用量が一定値を超えた場合等である。
ステップ904へ進むと、データ移動部108は、ステップ902で存在すると判定されたデータの所属クラスに、移動不可フラグが付与されているか否かをチェックする(904)。
ステップ903でYES及びステップ904でNOの場合、データ移動部108は、外部ヒープに実際にデータを移動させる(906)。図12に示す例では、データ1104−1が、囲み1105−1に対応する外部ヒープに移動する。
一方、ステップ903でNO又はステップ904でYESの場合、データ移動部108は、GC時に外部ヒープにデータを移動させる場合には、Javaヒープ内でデータを移動させる。そうでない場合には、データを移動させない(907)。このステップ907では、外部ヒープにデータを移動させなくても、少なくともプログラムが正常に実行可能な状態にする。
以降、ステップ903からステップ907の処理は、ステップ902で取得された未処理のデータの全てについて繰り返される。
図16は、図10に示す循環構造のデータに本発明を適用した場合のデータ配置を示す図である。データ1103−1を基点データとするデータ群は、外部ヒープ1201に配置される。同様に、データ1103−2を基点データとするデータ群は、外部ヒープ1201と異なる外部ヒープ1202に配置される。また、移動不可フラグが付与されたデータ1101、1102は、移動することなくJavaヒープ109に配置される。
図17は、図10に示す循環構造のデータに従来のデータ配置方法を適用した場合のデータ配置を示す図である。外部ヒープ1201には、外部ヒープ1201に移動させることを想定していないデータ1101、1102が配置されている。そのため、外部ヒープの使用量の見積もりが難しい、外部ヒープ間で解放時間に大きな差が出る等の問題が発生する。言い換えると、本発明を適用して図16に示すデータ配置とすることによって、このような問題を解決することができる。
(循環構造の場合の制御ロジックの変形例)
次に、循環構造の場合の制御ロジックの変形例を説明する。前述の制御ロジックでは、データの参照の深さ(GCルート集合から参照を辿った数)に基づいて、外部ヒープへの移動の可否を判定した(図13のステップ1002参照)。ここでは、データの参照の深さの代わりに、データの距離(基点データから参照を辿った数)に基づいて、外部ヒープへの移動の可否を判定する。
図18は、循環構造のデータ間の参照関係の他の例を示す図である。図18に示す例では、囲み1906内の基点データ1903及びデータ1904のみが、同一の外部ヒープに配置されるべきデータである。また、距離1907、1908、1909、1910、1911は、それぞれデータ1901、1902、1903、1904、1905の基点データ1903からの参照上の距離の値4、5、1、2、3を示す。
図19は、本発明の実施形態の循環構造のデータの距離を調査する制御ロジックを示すフローチャートである。図19は、図11のステップ701〜703、707、708を、それぞれステップ2001〜2003、2007、2008に置き換えたものである。以下では、図11と同様の機能を果たす部分には同一の符号を付して重複する説明を適宜省略する。なお、図19に示す制御ロジックは、図9のステップ601に対応する。
ステップ2001では、データ参照関係把握部106は、全データの基点データからの参照上の距離、すなわち、基点データから参照を辿った数(以下、「距離」という。)を0として初期化する(2001)。次に、データ参照関係把握部106は、現在の距離を1にセットする(2002)。図18に示す例では、基点データ1903に距離1がセットされる。その後、データ参照関係把握部106は、基点データから参照可能なデータに現在の距離1をセットして、このデータをスタックにPUSHする(2003)。
ステップ2007では、データ参照関係把握部106は、(1)ステップ706で検出されたデータの距離が0(初期状態)である、及び、(2)ステップ705でPOPされたデータの距離よりも大きい、のうちの少なくとも一方の条件を満たすか否かを判定する(2007)。その後ステップ2008では、データ参照関係把握部106は、ステップ706で検出されたデータの距離として、ステップ705でPOPされたデータObjの距離の値に1を加算した値をセットし、ステップ706で検出されたデータをスタックにPUSHする(2008)。
以降、ステップ704からステップ2008の処理は、スタックが空になるまで繰り返される。図18に示す例では、基点データ1903の距離には、数値1がセットされる。また、基点データ1903から参照可能なデータ1904、1905、1901、1902の距離には、それぞれ数値2、3、4、5がセットされる。なお、データ1902から参照可能なデータ1903の距離は1がセットされており、ステップ705でPOPされるデータ1902の距離5よりも小さいため(2007でNO)、上記の条件を満たさないので、ステップ704に進む。その後、スタックが空であるため(704でYES)、処理を終了する。
図20は、本発明の実施形態のデータの距離に基づく循環構造のデータの移動可否判定の制御ロジックを示すフローチャートである。図20は、図14のステップ805を、ステップ2101に置き換えたものである。以下では、図14と同様の機能を果たす部分には同一の符号を付して重複する説明を適宜省略する。なお、図20に示す制御ロジックは、図13のステップ1002に対応する。
ステップ2101では、データ移動可否判定部107は、ステップ804で選択されたデータの距離と、所定の閾値(例えば2)と、を比較する(2101)。所定の閾値とは、基点データから外部ヒープに移動可能なデータまでの距離の許容値である。ステップ804で選択されたデータの距離が、所定の閾値より大きい場合(2101でYES)、ステップ806に進む。その後、データ移動可否判定部107は、基点データからの距離が所定の閾値より大きいデータの所属クラスに、移動不可フラグを付与する(806)。図18に示す例では、基点データ1903からの距離が閾値2より大きいデータ1905、1901、1902の所属クラスN、J、Kに、移動不可フラグが付与される。なお、移動不可フラグが付与された所属クラスのデータは、外部ヒープに移動しない(図15参照)。
以上のように、本変形例によれば、データの参照の深さの代わりに、データの距離(基点データから参照を辿った数)に基づいて、外部ヒープへの移動の可否を判定することができる。
(リスト構造の場合の制御ロジック)
以上、調査対象の参照関係が循環構造である場合を説明してきた。ここでは、調査対象の参照関係がリスト構造である場合について説明する。
図21は、リスト構造のデータ間の参照関係を示す図である。図21において、丸印はデータを、丸印の内側のアルファベットはデータの所属クラスを、矢印はデータの参照関係を示す。例えば、参照1504−1は、所属クラスFのデータ1501−1が、同一の所属クラスFのデータ1501−2を参照することを示す。
リスト構造とは、データ集合(図21ではデータ1501−1(2、3)、1502−1(2、3)、1503−1(2、3)の単位で構成されるデータ集合)を、データ間参照(図21ではデータ1501−1、1501−2、1501−3間の参照1504−1、1504−2)で参照可能な状態としたものである。同一所属クラスのデータ同士が参照関係にあることが多い。図21に示す例では、同一所属クラスFのデータ1501−1、1501−2、1501−3が参照関係にある。なお、図21において、囲み1505−1内のデータ1501−1、1502−1、1503−1のみが、同一の外部ヒープに配置されるべきデータであるものとする。
図22は、本発明の実施形態のデータの参照の深さに基づくリスト構造のデータの移動可否判定の制御ロジックを示すフローチャートである。図22は、図14のステップ802を、ステップ1801に置き換えるとともに、ステップ1802を追加したものである。以下では、図14と同様の機能を果たす部分には同一の符号を付して重複する説明を適宜省略する。図22に示す制御ロジックは、図13のステップ1002に対応する。
ステップ1801では、データ移動可否判定部107は、基点データから直接参照可能なデータを取得する(1801)。図22に示す例では、基点データ1501−1から直接参照可能なデータ1502−1、1503−1、1501−2が取得される。
ステップ1802では、データ移動可否判定部107は、ステップ804で選択されたデータと、基点データとが、同じ所属クラスであるか否かを判定する(1802)。両者が同じ所属クラスである場合(1802でYES)、ステップ806に進む。図21に示す例では、データ1501−2と、基点データ1501−1とが、同じ所属クラスFであるため(1802でYES)、クラスFに移動不可フラグが付与される。なお、移動不可フラグが付与されたクラスFのデータ1501−2等は、外部ヒープに移動しない(図15参照)。
図23は、図22に示すリスト構造のデータに本発明を適用した場合のデータ配置を示す図である。囲み1505−1内のデータ1501−1、1502−1、1503−1は、外部ヒープ1601−1に配置される。その他のデータ群は、移動することなくJavaヒープ109に配置される。
図24は、図22に示すリスト構造のデータに従来のデータ配置方法を適用した場合のデータ配置を示す図である。外部ヒープ1601−1には、外部ヒープ1601−1に移動させることを想定していないデータ1501−2(3)、1502−2(3)、1503−2(3)が配置される。そのため、外部ヒープの使用量の見積もりが難しい、外部ヒープ間で解放時間に大きな差が出る等の問題が発生する。言い換えると、本発明を適用して図23に示すデータ配置とすることによって、このような問題を解決することができる。
以上、本発明の実施の形態について説明したが、上記実施の形態は本発明の適用例の一つを示したものであり、本発明の技術的範囲を上記実施の形態の具体的構成に限定する趣旨ではない。
101 計算機システム
102 CPU
103 メモリ
104 Javaプログラム
105 JavaVM(Java仮想マシン)
106 データ参照関係把握部
107 データ移動可否判定部
108 データ移動部
109 Javaヒープ
110 外部ヒープ
111 外部記憶装置

Claims (8)

  1. プログラムを実行するプロセッサと、メモリと、を備えた計算機システムにおけるメモリ管理方法であって、
    前記メモリは、ガベージコレクタによって管理される第1の領域と、前記ガベージコレクタによって管理されない第2の領域と、を備えており、
    前記方法は、
    前記プロセッサが、前記第2の領域に関連付けされた所定のデータを基点として参照を辿ることによって、前記所定のデータの参照関係を調査する手順と、
    前記所定のデータの参照関係が、前記所定のデータと同一の所属クラスのデータへの参照を含む構造である場合、前記プロセッサが、この構造を構成するデータのうちの特定のデータの前記第2の領域への移動を禁止するように判定する手順と、
    前記プロセッサが、前記構造を構成するデータから前記特定のデータを除いたデータのうちの、前記第1の領域に格納されたデータを、前記第2の領域に移動させる手順と、
    を含むことを特徴とするメモリ管理方法。
  2. 前記判定する手順では、前記所定のデータの参照関係が、前記所定のデータから参照を辿ると、再び前記所定のデータを参照する循環構造である場合、前記プロセッサは、この循環構造を構成するデータのうちの特定のデータの前記第2の領域への移動を禁止するように判定することを特徴とする請求項1に記載のメモリ管理方法。
  3. 前記特定のデータは、前記所定のデータと参照関係にあるデータのうち、ルート集合データを基点として参照を辿った数である参照の深さが、前記所定のデータの参照の深さよりも小さいデータであることを特徴とする請求項2に記載のメモリ管理方法。
  4. 前記特定のデータは、前記所定のデータと参照関係にあるデータのうち、前記所定のデータを基点として参照を辿った数である距離が、所定数よりも大きいデータであることを特徴とする請求項2に記載のメモリ管理方法。
  5. 前記判定する手順では、前記所定のデータの参照関係が、前記所定のデータが前記所定のデータと同一の所属クラスのデータを参照するリスト構造である場合、前記プロセッサは、このリスト構造を構成するデータのうちの、前記所定のデータと同一の所属クラスのデータ、及び、前記所定のデータと同一の所属クラスのデータから直接又は間接的に参照されるデータの、前記第2の領域への移動を禁止するように判定することを特徴とする請求項1に記載のメモリ管理方法。
  6. 前記調査する手順では、前記プロセッサは、プログラムAPI、起動時オプション、又は、外部ファイルによって指示された契機で、前記所定のデータの参照関係の調査を開始することを特徴とする請求項1に記載のメモリ管理方法。
  7. プログラムを実行するプロセッサと、メモリと、を備えた計算機システムであって、
    前記メモリは、ガベージコレクタによって管理される第1の領域と、ガベージコレクタによって管理されない第2の領域と、を備え、
    前記プロセッサは、
    前記第2の領域に関連付けされた所定のデータを基点として参照を辿ることによって、前記所定のデータの参照関係を調査し、
    前記所定のデータの参照関係が、前記所定のデータと同一の所属クラスのデータへの参照を含む構造である場合、この構造を構成するデータの特定のデータの、前記第2の領域への移動を禁止するように判定し、
    前記構造を構成するデータから前記特定のデータを除いたデータのうちの、前記第1の領域に格納されたデータを、前記第2の領域に移動させることを特徴とする計算機システム。
  8. プログラムを実行するプロセッサと、メモリと、を備えた計算機システムに用いられるメモリ管理プログラムであって、
    ガベージコレクタによって管理されない第2の領域に関連付けされた所定のデータを基点として参照を辿ることによって、前記所定のデータの参照関係を調査する手順と、
    前記所定のデータの参照関係が、前記所定のデータと同一の所属クラスのデータへの参照を含む構造である場合、この構造を構成するデータのうちの特定のデータの前記第2の領域への移動を禁止するように判定する手順と、
    記構造を構成するデータから前記特定のデータを除いたデータのうちの、前記ガベージコレクタによって管理される第1の領域に格納されたデータを、前記第2の領域に移動させる手順と、
    を前記プロセッサに実行させることを特徴とするメモリ管理プログラム。
JP2010037069A 2010-02-23 2010-02-23 メモリ管理方法、計算機システム及びメモリ管理プログラム Active JP5380695B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2010037069A JP5380695B2 (ja) 2010-02-23 2010-02-23 メモリ管理方法、計算機システム及びメモリ管理プログラム
US13/386,348 US8990532B2 (en) 2010-02-23 2010-03-08 Method of managing memory in computer system, computer system and memory managing program
PCT/JP2010/054273 WO2011104897A1 (ja) 2010-02-23 2010-03-08 メモリ管理方法、計算機システム及びメモリ管理プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010037069A JP5380695B2 (ja) 2010-02-23 2010-02-23 メモリ管理方法、計算機システム及びメモリ管理プログラム

Publications (2)

Publication Number Publication Date
JP2011175333A JP2011175333A (ja) 2011-09-08
JP5380695B2 true JP5380695B2 (ja) 2014-01-08

Family

ID=44506339

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010037069A Active JP5380695B2 (ja) 2010-02-23 2010-02-23 メモリ管理方法、計算機システム及びメモリ管理プログラム

Country Status (3)

Country Link
US (1) US8990532B2 (ja)
JP (1) JP5380695B2 (ja)
WO (1) WO2011104897A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5391422B2 (ja) 2009-09-01 2014-01-15 株式会社日立製作所 メモリ管理方法、計算機システム及びプログラム
US9753846B2 (en) * 2012-09-06 2017-09-05 Red Hat, Inc. Adjusting the operating memory used by a virtual machine during runtime
JP5889270B2 (ja) 2013-12-13 2016-03-22 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation スタック・スキャンのコストを削減するための方法、プログラム及びシステム
US9858059B2 (en) * 2015-09-14 2018-01-02 International Business Machines Corporation System module deployment optimization
KR102105478B1 (ko) * 2015-12-16 2020-04-28 아브 이니티오 테크놀로지 엘엘시 고 쓰루풋, 고 신뢰성의 데이터 처리 시스템

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1308845A1 (en) * 2001-10-23 2003-05-07 Sun Microsystems, Inc. Method and apparatus for scoped memory
JP3939975B2 (ja) * 2001-12-14 2007-07-04 松下電器産業株式会社 ガベージコレクション装置、ガベージコレクション方法及びガベージコレクションプログラム
US7788300B2 (en) * 2004-09-15 2010-08-31 Sap Ag Garbage collection for shared data entities
JP5064134B2 (ja) 2007-08-03 2012-10-31 株式会社日立製作所 メモリ管理方法およびその方法を用いるコンピュータ
US7793049B2 (en) * 2007-10-30 2010-09-07 International Business Machines Corporation Mechanism for data cache replacement based on region policies
JP5153539B2 (ja) * 2008-09-22 2013-02-27 株式会社日立製作所 メモリ管理方法およびその方法を用いるコンピュータ
US8301671B1 (en) * 2009-01-08 2012-10-30 Avaya Inc. Method and apparatus providing removal of replicated objects based on garbage collection
JP5347657B2 (ja) * 2009-03-31 2013-11-20 富士通株式会社 データ記憶プログラム、方法、及び情報処理装置
US8224874B2 (en) * 2010-01-05 2012-07-17 Symantec Corporation Systems and methods for removing unreferenced data segments from deduplicated data systems
US20120066270A1 (en) * 2010-09-13 2012-03-15 Alelo, Inc. Automated memory management of indexed data using weak references

Also Published As

Publication number Publication date
US20120221821A1 (en) 2012-08-30
WO2011104897A1 (ja) 2011-09-01
JP2011175333A (ja) 2011-09-08
US8990532B2 (en) 2015-03-24

Similar Documents

Publication Publication Date Title
JP5064134B2 (ja) メモリ管理方法およびその方法を用いるコンピュータ
JP5153539B2 (ja) メモリ管理方法およびその方法を用いるコンピュータ
US7024436B2 (en) Computer system with two heaps in contiguous storage
US8554807B2 (en) Incremental class unloading in a region-based garbage collector
US7263700B1 (en) Serially, reusable virtual machine
JP5380695B2 (ja) メモリ管理方法、計算機システム及びメモリ管理プログラム
US7107426B2 (en) Computer system with heap reset for performing generational garbage collection implemented by card-marking between successive applications
EP3577567B1 (en) Multiple stage garbage collector
US7627621B2 (en) Method and system for minor garbage collection
JP2009199214A (ja) Osイメージ縮小方法、osイメージ縮小プログラムおよびosイメージ縮小プログラムを記録した記録媒体
US10628306B2 (en) Garbage collector
US8966212B2 (en) Memory management method, computer system and computer readable medium
JP5281452B2 (ja) メモリ管理方法、コンピュータ、及び、メモリ管理プログラム
CN112313631B (zh) 闭环垃圾收集器
US11294806B2 (en) Feedback-based selection of regions for abortable garbage collection
JP5564540B2 (ja) メモリ管理方法、コンピュータ及びプログラム
JP5756549B2 (ja) 記憶領域管理方法、計算機システム及びプログラム
Tasneem et al. Android memory optimization
Nguyen et al. Parmarksplit: A parallel mark-split garbage collector based on a lock-free skip-list
Sarcar Memory Management
US10754766B2 (en) Indirect resource management
Charan et al. Development of Real-Time Capability in Application Virtual Machine using Concurrent Automatic Memory Management Algorithm
Wienholt Garbage Collection and Object Lifetime Management
Yang et al. Improved Adaptive Generational Garbage Collection Algorithm for Java Card

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120309

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120309

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130528

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130703

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130903

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130909

R150 Certificate of patent or registration of utility model

Ref document number: 5380695

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150