JP4555879B2 - メモリ管理方法、メモリ管理プログラム、および、メモリ管理装置 - Google Patents
メモリ管理方法、メモリ管理プログラム、および、メモリ管理装置 Download PDFInfo
- Publication number
- JP4555879B2 JP4555879B2 JP2008207412A JP2008207412A JP4555879B2 JP 4555879 B2 JP4555879 B2 JP 4555879B2 JP 2008207412 A JP2008207412 A JP 2008207412A JP 2008207412 A JP2008207412 A JP 2008207412A JP 4555879 B2 JP4555879 B2 JP 4555879B2
- Authority
- JP
- Japan
- Prior art keywords
- objects
- program
- lifetime
- heap
- class
- 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.)
- Expired - Fee Related
Links
- 238000007726 management method Methods 0.000 title claims description 43
- PWPJGUXAGUPAHP-UHFFFAOYSA-N lufenuron Chemical compound C1=C(Cl)C(OC(F)(F)C(C(F)(F)F)F)=CC(Cl)=C1NC(=O)NC(=O)C1=C(F)C=CC=C1F PWPJGUXAGUPAHP-UHFFFAOYSA-N 0.000 title 1
- 238000000034 method Methods 0.000 claims description 133
- 230000008569 process Effects 0.000 claims description 89
- 238000012545 processing Methods 0.000 claims description 85
- 239000003607 modifier Substances 0.000 claims description 5
- 239000000284 extract Substances 0.000 claims description 3
- 238000004458 analytical method Methods 0.000 description 24
- 230000004083 survival effect Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 10
- 238000007689 inspection Methods 0.000 description 7
- 238000012795 verification Methods 0.000 description 6
- 239000010432 diamond Substances 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 230000002776 aggregation Effects 0.000 description 2
- 238000004220 aggregation Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000004817 gas chromatography Methods 0.000 description 2
- 238000005056 compaction Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000002542 deteriorative effect Effects 0.000 description 1
- 229910003460 diamond Inorganic materials 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
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
Description
ヒープ領域は、内部ヒープまたは外部ヒープのいずれかに分類される。
内部ヒープは、GCの対象内となるヒープ領域であり、例えば、Java(登録商標)言語に実行されているJava(登録商標)ヒープとして実現される。
外部ヒープは、GCの対象外となるヒープ領域であり、プログラムからの明示的な命令(手動)により、メモリ管理が実現される。
「Mark and Sweep GC」アルゴリズムは、ヒープ領域上のプログラムのルートオブジェクトからリンクを順に辿り(Mark)、辿れなかった(宙に浮いた)オブジェクトをヒープ領域上から削除し(Sweep)、細切れのヒープ領域内のメモリ空間を一カ所に片づける(Compaction)アルゴリズムである。
「Copying GC」アルゴリズムでは、メモリ空間を複数の区画に区切り、GC監視対象のヒープ領域はそのうちの1つの区画のみとする。そして、オブジェクトからリンクを辿る処理を1つの区画内までに制限し、オブジェクト間がリンクで接続されるオブジェクト群の単位で、別の区画にコピー(Copying)するアルゴリズムである。
Angelo Corsaro and Ron K. Cytron著,"Efficient memory-reference checks for real-time java",Proceedings of the 2003 ACM SIGPLAN conference on Language, compiler, and tool for embedded systems,2003 F.Pizlo,J.M. Fox,D. Holmes and J.Vitek著,"Real-time Java scoped memory: design patterns and semantics",Proceedings of the Seventh IEEE International Symposium on Object-Oriented Real-Time Distributed Computing, 2004.
つまり、GCの処理対象となるオブジェクトの増加により、GCの処理負荷も増加する。そこで、長寿命の(換言すると、処理負荷への影響が大きい)オブジェクトをGCの処理対象となる内部ヒープではなく、GCの処理対象外となる外部ヒープに配置することにより、GCの処理対象となるオブジェクトを抑制し、GCの処理負荷も抑制する。
そして、短寿命のオブジェクトを内部ヒープに配置し、長寿命のオブジェクトを外部ヒープに配置するように振り分けることで、GCによる自動メモリ管理と、明示的な命令による手動メモリ管理と、のバランスをとることができる。
新たにプログラムを作成する際、どのオブジェクトが長寿命になるかを予め意識してプログラミングを行うことは、非常に困難なため、外部ヒープ領域を効果的に利用可能なプログラムの作成は困難である。
利用状況、環境等によって、オブジェクトが長寿命となるかが決まることも多く、ある利用状況で長寿命となったオブジェクトが、他の利用状況でも長寿命になるとは限らない。そのため、常に外部ヒープ領域に確保することで、GCの処理負荷の増大を抑止できるとは限らない。
メモリ管理方法を実行する計算機が、前記内部ヒープおよび前記外部ヒープを構成するメモリに加え、入力装置と、対象集合処理部と、メモリ割当用データと、プログラム実行部と、を有し、
前記入力装置が、実行対象プログラムと、その実行対象プログラムから利用されるオブジェクトの集合を示す集合定義データと、その集合定義データで示されるオブジェクトの集合を利用する解析用プログラムと、の入力を受け付け、
前記対象集合処理部が、
前記解析用プログラムを試行することにより、その解析用プログラムから利用されるオブジェクトの集合についてのメモリ上の生成時刻から解放時刻までの生存期間を取得するとともに、その取得した各生存期間の時間長により、各オブジェクトの寿命を計算し、
オブジェクトの集合の名前と、そのオブジェクトの集合を構成するオブジェクトのうちの前記集合定義データで指定されるルートクラスについてのオブジェクトの寿命の平均値と、を対応づけて前記メモリ割当用データとして記憶手段に格納し、
前記プログラム実行部が、
前記実行対象プログラムを実行する過程で、その実行対象プログラムから利用されるオブジェクトの生成命令を実行すると、
生成されるオブジェクトの生存期間が、ルートクラスについてのオブジェクトの生存期間に含まれないときには、前記生成されるオブジェクトを前記内部ヒープに配置し、
前記メモリ割当用データを参照して、前記生成されるオブジェクトが属するオブジェクトの集合に対応する寿命の平均値を取得し、取得した寿命の平均値が所定閾値以上のときに、前記生成されるオブジェクトを長寿命オブジェクトとして前記外部ヒープに配置するとともに、取得した寿命の平均値が所定閾値未満のときに、前記生成されるオブジェクトを短寿命オブジェクトとして前記内部ヒープに配置すること、を特徴とする。
その他の手段は、後記する。
計算機9は、PCやサーバなどのコンピュータによって実現され、メモリ91、CPU(Central Processing Unit、処理部)92、記憶装置93、入力装置94、出力装置95およびこれらを相互接続するバス96を含んで構成される。
メモリ91は、オペレーティングシステム97に加え、実行対象プログラム10、対象集合処理部20、有制約集合処理部30、メモリ割当情報テーブル40(メモリ割当用データ)、プログラム実行部50、プログラム実行環境部60、集合用領域管理API(Application Programming Interface)70を含んで記憶している。
実行対象プログラム10は、対象集合11を利用する。対象集合11は、有制約集合12および無制約集合13である(詳細は図3参照)。
対象集合11は、寿命が類似するオブジェクト群であり、有制約集合12と無制約集合13との総称である。
有制約集合12は、カプセル化された対象集合11であり、後記する5つの規約(第1規約〜第5規約)から構成される制約を満たす対象集合11である。
無制約集合13は、有制約集合12とは逆に、制約を満たさない対象集合11である。換言すると、無制約集合13は、対象集合11に属する有制約集合12の補集合である。
有制約集合処理部30は、有制約集合12を試行し、その結果をメモリ割当情報テーブル40に書き込む。
プログラム実行部50は、実行対象プログラム10を実行する。このとき、実行対象プログラム10から利用される対象集合11は、ヒープ領域に割り当てられる。ここで、プログラム実行部50は、メモリ割当情報テーブル40の集合の生存期間から対象集合11が長寿命か短寿命かを判定し、その結果によって対象集合11の割当先となるヒープ領域を選択する。
プログラム実行環境部60は、例えば、Java(登録商標) VM(Virtual Machine)として実現されるプログラム実行部50の実行環境であり、オペレーティングシステム97上で実行される。
ルートクラス配置部52は、対象集合11のルートクラスを、ヒープ領域(内部ヒープ62または外部ヒープ64)に配置する。なお、1つの対象集合11には、1つのルートクラスが含まれる。ルートクラスは、クラス間の利用関係をツリー構造として見たときのルート(根)に存在するクラスである。
メンバクラス配置部53は、対象集合11のメンバクラスを、ヒープ領域(内部ヒープ62または外部ヒープ64)に配置する。1つのルートクラスからは、1つ以上のメンバクラスが利用される。よって、1つの対象集合11には、1つ以上のメンバクラスが含まれる。
内部ヒープ62とは、メモリ管理が自動で実行される(換言すると、GCの対象となる)ヒープ領域である。内部ヒープ62は、例えば、Java(登録商標)ヒープとして実現される。
外部ヒープ64とは、メモリ管理が手動で実行される(換言すると、GCの対象とならず、プログラム中から明示的にメモリ管理をする必要のある)ヒープ領域である。
よって、内部ヒープ62と外部ヒープ64との違いは、GCの対象となるか否かである。
内部ヒープ62に格納されるデータが多くなると、GCの対象となるため、メモリ管理は容易になる反面、GCの処理に伴う負荷が増大する。
外部ヒープ64に格納されるデータが多くなると、負荷はあまりかからないが、メモリ管理を手動で明示的に行う必要がある。
オブジェクト情報取得部68および参照情報取得部69は、内部ヒープ62および外部ヒープ64上における対象集合11の各オブジェクトの割当状況を監視し、その結果として、オブジェクト情報取得部68はオブジェクトの割当履歴を、参照情報取得部69はオブジェクト間の参照関係を、それぞれ取得する。
集合用領域管理API70は、実行対象プログラム10から利用され、対象集合11の集合用領域を確保および解放する。
集合試行部22は、集合オブジェクト解析部23と、集合解析部24と、集合ルートクラステーブル25(詳細は表4)と、集合メンバクラス候補テーブル26(詳細は表5)と、集合メモリ割当情報生成部27と、を有する。
制約試行部33は、制約ルートクラス配置部34と、制約メンバクラス配置部35と、制約利用情報テーブル36(詳細は表7)と、制約メモリ割当情報生成部37と、を有する。
ルートクラス(「RootClass」102)は、参照関係をツリー構造としたときのルートを成すクラスである。
メンバクラス(「MemberClass1」103、「MemberClass2」105、「MemberClass3」104)は、ルートクラスから参照される、ルートクラス以外のクラスである。
無制約集合13では、「RootClass」102にインタフェース101が付され、「MemberClass1」103にインタフェース106が付されており、外部のクラスからの利用を許可している。
なお、「RootClass」102からの塗られている菱形は、合成(Composition)を示し、参照元のオブジェクトの消去にともない、参照先のオブジェクトも消去する。
一方、塗られていない菱形は、集約(Aggregation)を示し、参照元のオブジェクトの消去は、参照先のオブジェクトの消去には影響しない。
有制約集合12以外のオブジェクトからメンバクラスを利用すことができないため、ルートクラス(「RootClass」102)の消去にともない、すべてのメンバクラス(「MemberClass1」103、「MemberClass2」105、「MemberClass3」104)も消去する。
・第1規約は、有制約集合12を構成するクラスはすべて同じパッケージ(package)107内に宣言しなければならないことである。
・第2規約は、有制約集合12のルートクラスは、第1規約で宣言されるパッケージ内において、publicクラスとして、1つだけ宣言しなければならないことである。
・第3規約は、有制約集合12のメンバクラスは、package-privateなクラスとして宣言しなければならないことである。
・第4規約は、有制約集合12のルートクラスのpublicと宣言されているメソッド(インタフェース101)は、戻り値としてメンバクラスを返してはいけないことである。
・第5規約は、有制約集合12のルートクラスのフィールド、有制約集合12のメンバクラスのフィールド、メソッド、コンストラクタは、publicと宣言してはいけないことである。
第5規約から、メンバクラスのオブジェクトを生成できるのは、同じパッケージであるルートクラスとメンバクラス内である。
第4規約からメンバクラスのオブジェクトは、有制約集合12以外のオブジェクトへは渡されないため、メンバクラスを保持できるのは、ルートクラスおよびメンバクラスである。したがって、メンバクラスの生存期間は、ルートクラスの生存期間に含まれる。
つまり、5つの規約に従い定義されたプログラムは、対象集合11である。
第3規約から、メンバクラスの型を有制約集合12以外のオブジェクトから利用することはできない。
第5規約から、メンバクラスのフィールド、メソッド、コンストラクタを有制約集合12以外のオブジェクトから利用することはできない。
第5規約から、メンバクラスのオブジェクトを生成できるのは、同じパッケージであるルートクラスとメンバクラス内である。
第4規約から、メンバクラスのオブジェクトは、有制約集合12以外のオブジェクトへは渡されない。
「RootClass」は、対象集合11のルートクラスのオブジェクトである。「MemberClass1」、「MemberClass2」、「MemberClass3」は、対象集合11のメンバクラスのオブジェクトである。「OtherClass1」、「OtherClass2」は、対象集合11以外のオブジェクトである。対象集合11は、「RootClass」、「MemberClass1」、「MemberClass2」、「MemberClass3」により構成される。
図4(a)の矢印を順に追っていくことで、参照が辿れる。ここで、参照が辿れるとは、オブジェクトが直接参照しているオブジェクトを探し、その参照しているオブジェクトが参照しているオブジェクトを探す、というように再帰的にオブジェクトを探し、最終的に目的のオブジェクトを発見できることである。
例えば、ルートクラスである「RootClass」は、生成時刻が「10:00」であり、解放時刻が「10:20」であるので、寿命は20分である。
あるクラスの生成時刻がルートクラスの生成時刻以降であり、かつ、あるクラスの解放時刻がルートクラスの解放時刻以前であるときに、「あるクラスの生存期間が、ルートクラスの生存期間に包含される」と表現する。
例えば、各メンバクラス(「MemberClass1」、「MemberClass2」、「MemberClass3」)の生存期間は、それぞれルートクラスの生存期間に包含される。しかし、「OtherClass1」の生存期間は、ルートクラスの生存期間には包含されない。
なお、1つのルートクラスの生存期間内において、あるクラスの「生成および解放」が複数回実行されることもあるが、そのときには、あるクラスの複数回の生存期間がすべてルートクラスの生存期間に包含されるとき、包含関係を有することとする。
1行目は、パッケージ(package x)の宣言文である。
2,10,16,17行目は、それぞれクラス(RootClass、MemberClass1、MemberClass2、MemberClass3)の宣言文である。
RootClassは、ルートクラスであり、修飾子「public」が付されている。
MemberClass1、MemberClass2、MemberClass3は、それぞれメンバクラスであり、修飾子が省略されているため、package-private(自分のパッケージからのみ参照可能)なクラスである。
5〜8行目は、getDataメソッドを示す。このgetDataメソッドは、ルートクラスのpublicメソッドであり、戻り値としてメンバクラスを返さない。
3,4行目は、それぞれルートクラスのフィールド「m1」,「m2」を示す。
11,12行目は、それぞれメンバクラスのフィールド「i」,「m3」を示す。
13行目は、メンバクラスのコンストラクタ「MemberClass1」を示す。
14行目は、getメソッドを示す。このgetメソッドは、メンバクラスのメソッドであり、public宣言されていない。
第1規約は、各クラスがpackage xに含まれるので、満たされる。
第2、3規約は、各クラスの修飾子の宣言または省略により、満たされる。
第4規約は、getDataメソッドの宣言により、満たされる。
第5規約は、ルートクラスのフィールド、メンバクラスのフィールド、コンストラクタ、getメソッドの宣言により、満たされる。
「対象集合の名前」は、各レコードのキーとなる対象集合11の特定情報を示す。この対象集合11は、有制約集合12でもよいし、無制約集合13でもよい。
「ルートクラス」は、「対象集合の名前」の対象集合に含まれる1つのルートクラスを示す。
「メンバクラス」は、「対象集合の名前」の対象集合に含まれる1つ以上のメンバクラスを示す。
「ルートクラスの平均生存時間」は、「ルートクラス」に関する実行結果としての、平均生存時間を示す。この平均生存時間は、所定閾値との比較により、レコードの対象集合11が内部ヒープ62に割り当てられるか、外部ヒープ64に割り当てられるか、を決定するための情報である。
「対象集合の平均領域サイズ」は、「対象集合の名前」の対象集合に関する実行結果としての、割り当てられた平均領域サイズを示す。この平均領域サイズは、外部ヒープ64に割り当てられるときに外部ヒープ64内に確保される領域サイズの初期値として使用される。
1〜11行目は、ルート要素であるtarget-set-definition要素を示す。
2〜5行目は、ルート要素の子要素であるtarget-set要素を示す。3行目のtarget-set-name要素は対象集合11の名称を示し、4行目のroot-class要素はその対象集合11のルートクラスの名称を示す。
6〜10行目は、2〜5行目と同様に、ルート要素の子要素であるtarget-set要素を示す。
1〜15行目は、ルート要素であるconstrained-set-definition要素を示す。
2〜8行目は、ルート要素の子要素であるconstrained-set要素を示す。3行目のconstrained-set-name要素は有制約集合12の名称を示し、4行目のroot-class要素はその有制約集合12のルートクラスの名称を示す。さらに、5〜7行目のmember-class要素は、その有制約集合12のメンバクラスの名称を示す。
9〜13行目は、2〜8行目と同様に、ルート要素の子要素であるconstrained-set要素を示す。
制約利用情報テーブル36は、有制約集合12の名前と、その有制約集合12に含まれるルートクラスの生成時刻と、ルートクラスの解放時刻と、有制約集合12の領域サイズと、有制約集合12の妥当性と、を対応づけて管理する。
なお、「有制約集合12の領域サイズ」とは、有制約集合12のルートクラスおよびメンバクラスのオブジェクトが占める領域サイズを示す。また、「有制約集合の妥当性」は、有制約集合12の利用方法が妥当である(妥当)か、否か(不当)を示す。
7行目は、allocateメソッドを利用して、引数で指定したルートクラスを含む対象集合用領域を割り当てて、対象集合の利用を開始する旨を示す。
9行目は、getRootメソッドを利用して、対象集合のルートクラスを取得する旨を示す。
11行目は、取得した対象集合のルートクラスを利用して、任意の操作を実行する旨を示す。
13行目は、9行目で取得した対象集合のルートクラスへの参照をクリアする旨を示す。
15行目は、releaseメソッドを利用して、引数で指定した対象集合用領域を解放して、対象集合の利用を終了する旨を示す。
以下、表9と表8との違いに着目して、説明する。
5行目では、内部ヒープ62内に対象集合11のルートクラスを生成する。対象集合用領域の確保および解放する旨を明示しない。
S23において、計算機9は、無制約集合13を利用する実行対象プログラム10の入力を受け付ける。実行対象プログラム10は、集合用領域管理API70による無制約集合13の明示的なメモリ管理を、解析用プログラムに追加したプログラムである。
解析用プログラムのルートクラス生成(表9の5行目)を、解析用プログラムの試行の結果(図11のS506で後記)から特定された無制約集合13の対象集合用領域の割り当て(表8の7行目、allocate)と、ルートクラスの取得(表8の5行目、getRoot)とに変更する。
無制約集合13の任意の操作(表9の7行目)の次に、ルートクラスへの参照のクリア(表8の13行目)と、割り当てた対象集合用領域の解放(表8の15行目、release)とを追加する。
S32において、制約形式検査部32は、S31で入力された実行対象プログラム10が、S11で入力された制約集合定義データ31が示すように、利用される対象集合11が有制約集合12か否かを形式検査する。そのため、制約形式検査部32は、図15のフローチャートを実行する。
・既存プログラム(解析用プログラム)から利用されるオブジェクト(S21,S22,S23)
・新規プログラム(実行対象プログラム10)から利用されるオブジェクト(S31,S32,S33)
S102において、プログラム実行環境部60上で、実行対象プログラム10の実行を開始する。
S103において、実行中の実行対象プログラム10からallocateメソッドが実行されると、S104に移行する。
S104において、対象集合用領域を割り当てるとともに、その対象集合用領域内に、ルートクラスを生成する。つまり、allocateメソッドの引数で渡されたルートクラスの名称を引数として、図8を呼び出す。なお、図8では、プログラム実行部50は、ルートクラス配置部52に対して、ルートクラスの生成を指示する。指示を受けたルートクラス配置部52は、対象集合11が長寿命のときには外部ヒープ64内に対象集合用領域を割り当てるとともに、その対象集合用領域内にルートクラスを生成し、対象集合11が短寿命のときには内部ヒープ62内にルートクラスを生成する。
S106において、allocateメソッドで割り当てられた対象集合用領域を解放する。つまり、releaseメソッドの引数で渡され、S104で割り当てられた対象集合用領域を引数として、図9を呼び出す。図9では、プログラム実行部50は、ルートクラス配置部52に対して、対象集合用領域の解放を指示する。指示を受けたルートクラス配置部52は、外部ヒープ64内に割り当てた対象集合用領域を、解放する。
S108において、S107で移動対象となるメンバクラスのオブジェクトをS104で外部ヒープ64内に割り当てた対象集合用領域へ移動する。つまり、移動対象のオブジェクトを引数として、図10を呼び出す。プログラム実行部50は、メンバクラス配置部53に対して、対象集合が長寿命の場合、メンバクラスのオブジェクトを外部ヒープ6464内に割り当てた対象集合用領域へ移動するように指示する。
S203において、登録レコードの「平均生存時間」が、取得したMark and Sweep GCの実行間隔以上か否かを判定する。S203の判定を満たすときには、S204に移行する。
S204において、登録レコードの「対象集合の平均領域サイズ」に従って、外部ヒープ処理部63を用いて外部ヒープ64内に対象集合用領域を割り当てるとともに、その対象集合用領域内に引数で渡されたルートクラスを生成する。
S205において、(S201,No)または(S203,No)の場合、内部ヒープ処理部61を用いて、内部ヒープ62の中に引数で渡されたルートクラスを生成する。
S302において、外部ヒープ処理部63を用いて、引数で渡された対象集合11が配置されている対象集合用領域を外部ヒープ64から解放する。
S402において、引数で渡された移動対象のオブジェクトが、S401のルートクラスを含む対象集合のメンバクラスのオブジェクトであるか判定する。S402の判定を満たすときには、S403に移行する。
S403において、引数で渡された移動対象のオブジェクトを、S401のルートクラスのオブジェクトが格納されている外部ヒープ64内の対象集合用領域へ移動する。
S501において、集合試行部22は、S11で入力された集合定義データ21を読み込む。
S502において、集合オブジェクト解析部23は、S21の解析用プログラムをプログラム実行環境部60上で試行する。
S503において、集合オブジェクト解析部23は、参照情報取得部69を介して、試行した解析用プログラムに利用されたすべてのオブジェクトの参照関係を取得するとともに、オブジェクト情報取得部68を介して、利用されたすべてのオブジェクトの割当履歴を取得する。
まず、図4(a)からは、以下に示すオブジェクトの参照関係が取得される。
・参照「RootClass→MemberClass1」
・参照「RootClass→MemberClass2」
・参照「MemberClass1→MemberClass3」
・参照「MemberClass2→OtherClass2」
・参照「OtherClass1→OtherClass2」
次に、図4(b)は、取得されるオブジェクトの割当履歴として、すべてのオブジェクト(RootClass、MemberClass1、MemberClass2、MemberClass3、OtherClass1、OtherClass2)の領域サイズと、生成時刻と、解放時刻と、を示している。
S504において、集合解析部24は、集合オブジェクト解析部23でのオブジェクト解析の結果から、対象集合11を解析する。そのため、図12に示すサブルーチンを呼び出す。
S505において、集合メモリ割当情報生成部27は、集合解析部24による対象集合11の解析結果から、対象集合11のメモリ割当情報を生成し、そのメモリ割当情報をメモリ割当情報テーブル40に登録する。そのため、図14に示すサブルーチンを呼び出す。
S506において、集合試行部22は、集合メモリ割当情報生成部27によるメモリ割当情報の生成結果から、メモリ割当情報テーブル40に登録した「対象集合」、「ルートクラス」、「メンバクラス」をユーザに出力する。
S604において、S603からのループで選択したオブジェクトについて、その対象集合のメンバクラスの候補を解析する。そのため、図13に示すサブルーチンを呼び出す。
例えば、図4のRootClassの生存区間に包含される(S704,Yes)MemberClass1、MemberClass2、MemberClass3の割当履歴を、それぞれメンバクラスの候補として、集合メンバクラス候補テーブル26(ID=#1)へ格納する。
一方、図4のRootClassの生存区間に包含されない(S704,No)OtherClass2の割当履歴は、集合メンバクラス候補テーブル26には格納されない。
なお、OtherClass2は、図4のRootClass以外のルートクラスがS603〜S605のループで選択されているときに、その選択されているルートクラスのうちの少なくとも1つのルートクラスの生存区間に包含されるときには、別の集合メンバクラス候補テーブル26(例えば、ID=#2)に格納される。
S801〜S808において、集合解析部24による対象集合11の解析処理(S504)で作成された集合ルートクラステーブル25の各ルートクラスを1つずつ選択して、以下のループ処理を実行する。以下、選択したルートクラスごとに、メモリ割当情報テーブル40の追加するレコードを作成する。
(1)集合ルートクラステーブル25の「ルートクラス」列から、選択されたルートクラスを検索する。
(2)検索したレコードに含まれる、集合ルートクラステーブル25の「メンバクラス候補テーブルID」の全てを抽出する。
(3)抽出した「メンバクラス候補テーブルID」に一致する全ての集合メンバクラス候補テーブル26の中で、「メンバクラス候補」列に格納されている要素を、追加するレコードのメンバクラスとして全て抽出する。(なお、抽出した「メンバクラス候補テーブルID」に一致するいずれかの集合メンバクラス候補テーブル26の中で、「メンバクラス候補」列に格納されている要素を、追加するレコードのメンバクラスとして全て抽出してもよい。)
S902〜S909において、読み取った各集合から1つずつ検査対象の集合を選択し、集合を検査するループを実行する。
S903において、検査対象の集合のルートクラスを検査対象のルートクラスに指定して、ルートクラスを検証するサブルーチン(図16)を呼び出す。
S904において、S903のルートクラスの検証結果が「妥当」であるか否かを判定する。S904の判定を満たすときにはS905へ移行し、判定を満たさないときにはS911へ移行する。
S905〜S908において、検査対象の集合のメンバクラスを制約集合定義データ31から1つずつ選択し、メンバクラスを検証するループ処理を実行する。
S906において、選択されているメンバクラスを検査対象のメンバクラスに指定して、メンバクラスを検証するサブルーチン(図17)を呼び出す。
S907において、S906のメンバクラスの検証結果が「妥当」であるか否かを判定する。S907の判定を満たすときにはS908へ移行し、判定を満たさないときにはS911へ移行する。
S911において、検査対象の集合のうちの1つ以上の集合について、ルートクラスの検証結果が「不当」(S904,No)またはメンバクラスの検証結果が1つでも「不当」(S907,No)なら、検査対象の制約集合定義データ31を「不当」として、処理を終了する。
S1002において、S31で入力された実行対象プログラム10内に存在する、検査対象のルートクラスのプログラムが、publicクラスであるか否かを判定する。S1002の判定を満たすときにはS1003へ移行し、判定を満たさないときにはS1008へ移行する。
S1003において、検査対象のルートクラスのプログラムが、publicフィールドを含むか否かを判定する。S1003の判定を満たすときにはS1008へ移行し、判定を満たさないときにはS1004へ移行する。
S1004〜S1006において、検査対象のルートクラスのプログラムの各publicメソッドを1つずつ順に選択するループを実行する。このループを終えた後は、S1007に移行する。
S1005において、選択されたpublicメソッドの戻り値が、検査対象のルートクラスと同じパッケージのクラスであるか否かを判定する。S1005の判定を満たすときにはS1008へ移行し、判定を満たさないときにはS1006へ移行する。
S1007において、検査対象のルートクラスを「妥当」と判断する。
S1008において、検査対象のルートクラスを「不当」と判断する。
S1102において、S31で入力された実行対象プログラム10内に存在する、検査対象のメンバクラスのプログラムが、ルートクラスと同じパッケージに含まれるか否かを判定する。S1102の判定を満たすときにはS1103へ移行し、判定を満たさないときにはS1108へ移行する。
S1103において、検査対象のメンバクラスのプログラムにpublicフィールドが存在するか否かを判定する。S1101の判定を満たすときにはS1108へ移行し、判定を満たさないときにはS1104へ移行する。
S1104〜S1106において、検査対象のメンバクラスのプログラムの各メソッドおよび各コンストラクタを1つずつ選択するループを実行する。このループを実行した後は、S1107に移行する。
S1105において、選択されたメソッドまたはコンストラクタが、public宣言されているか否かを判定する。S1105の判定を満たすときにはS1108へ移行する。
S1108において、検査対象のメンバクラスを「不当」と判断する。
S1202において、制約試行部33は、有制約集合12を利用する実行対象プログラム10をプログラム実行環境部60上で試行する。この試行結果の各データを制約利用情報テーブル36に格納する。なお、S1202の試行処理は、プログラム実行部50の運用処理(図7)と類似する。以下が試行処理と運用処理との相違点である。
(1)allocateメソッドにより呼び出される割当処理のサブルーチンが、運用処理の場合(ルートクラス配置部52が実行する図8)から、試行処理の場合(制約ルートクラス配置部34が実行する図19)に置き換わる。
(2)releaseメソッドにより呼び出される解放処理のサブルーチンが、運用処理の場合(ルートクラス配置部52が実行する図9)から、試行処理の場合(制約ルートクラス配置部34が実行する図20)に置き換わる。
(3)プログラム実行環境部60のCopying GC部66の処理で内部ヒープ62のNew領域のオブジェクトがOld領域への移動対象となるときに呼び出される移動処理のサブルーチンは、双方ともに図10の処理であるが、その動作主体が、運用処理の場合(メンバクラス配置部53)から、試行処理の場合(制約メンバクラス配置部35)に置き換わる。
(4)前記(1)〜(3)の3つのサブルーチンの処理対象となる対象集合11が割り当てられるヒープ領域は、運用処理の場合(対象集合11の寿命の長さにより外部ヒープ64または内部ヒープ62のいずれかに振り分けられる)から、試行処理の場合(有制約集合12の寿命の長さに関わらず、外部ヒープ64となる)に置き換わる。
S1302において、有制約集合12が定義されていない旨をユーザに警告し、処理を中断する。
S1303において、外部ヒープ処理部63を用いて、外部ヒープ64内に集合用領域を生成し、その集合用領域内にallocateメソッドの引数で渡されたルートクラスを生成する。
S1304において、制約利用情報テーブル36にレコードを追加し、ルートクラスの生成時刻を登録する。
S1402において、制約利用情報テーブル36に、ルートクラスの解放時刻を登録する。
S1403において、外部ヒープ処理部63から、S1401での解放時の集合用領域の領域サイズを取得し、制約利用情報テーブル36に、有制約集合の領域サイズとして登録する。有制約集合12を利用する実行対象プログラム10の実行中、有制約集合のルートクラスおよびメンバクラスは外部ヒープ64内の集合用領域に配置される。ルートクラスおよびメンバクラスの配置において、集合用領域に空きがなくなった場合、外部ヒープ処理部63は集合用領域を自動的に拡張する。そのため、解放時の集合用領域の領域サイズは、有制約集合のルートクラスおよびメンバクラスが占める領域サイズと同じである。
S1404において、外部ヒープ64内の集合用領域の解放時、内部ヒープ62に配置されているオブジェクトから、外部ヒープ64に配置されている有制約集合のルートクラスおよびメンバクラスへの参照があったか、外部ヒープ処理部63へ問い合わせる。そして、その問い合わせ結果により、分岐する。S1404の判定を満たすとき(参照あり)にはS1405へ移行し、判定を満たさないとき(参照なし)にはS1406へ移行する。
・実行対象プログラム10の文「this.root = null;」を実行しない結果、有制約集合のルートクラスへの参照をクリアしていない場合、内部ヒープ62に配置されているオブジェクトから、外部ヒープ64に配置されているルートクラスへの参照が存在する。
・図16で説明した第4規約に関する例外処理において、ルートクラスのpublicメソッドの戻り値が、当該ルートクラスと異なるパッケージで、かつメンバクラスのスーパークラスであり、また当該publicメソッドがメンバクラスを戻り値として返す場合、内部ヒープ62に配置されているオブジェクトから、外部ヒープ64に配置されているメンバクラスへの参照が存在する。
S1406において、制約利用情報テーブル36内の「有制約集合12の妥当性」列を「不当」に更新する。
1回のループにおいて、制約利用情報テーブル36から1つのレコードが選択されるときには、そのレコードの「有制約集合の名前」は、制約利用情報テーブル36内に1つ存在する。
1回のループにおいて、制約利用情報テーブル36から複数のレコードが選択されるときには、そのレコードの「有制約集合の名前」は、選択される複数のレコード間で同じである。
S1503において、現在のループで処理中の有制約集合12のメモリ割当情報を生成するか否かをユーザに問い合わせる。S1503の判定を満たすときにはS1504へ移行する。
S1504において、追加するレコードの「対象集合」列には、今回のループで選択された「有制約集合の名前」を登録する。
追加するレコードの「ルートクラス」列には、検索された要素内のroot-class要素(例えば4,11行目)が登録される。
追加するレコードの「メンバクラス」列には、検索された要素内のmember-class要素(例えば5〜7,12行目)が登録される。
S1508において、S1504〜S1507でそれぞれ生成された、追加するレコードの各列要素を、メモリ割当情報テーブル40に書き込む。
これにより、短寿命のオブジェクトは、その生成処理と解放処理とが頻繁になされるが、内部ヒープ62に割り当てられるため、そのメモリ管理はGCにより自動的に行われる。よって、GCにより、メモリ管理の手間を効率的に削減できる。
一方、長寿命のオブジェクトは外部ヒープ64に割り当てられるため、GCの対象外となり、GCの処理負荷を削減できる。さらに、長寿命のオブジェクトは、その生成処理と解放処理とが行われる頻度が少ないため、実行対象プログラム10で明示的にメモリ管理したとしても、メモリ管理の手間はそれほどかからなくて済む。
よって、本実施形態のメモリ管理手法は、内部ヒープ62および外部ヒープ64それぞれの長所を、バランスよく活用できる手法である。
11 対象集合
12 有制約集合
13 無制約集合
20 対象集合処理部
21 集合定義データ
22 集合試行部
23 集合オブジェクト解析部
24 集合解析部
25 集合ルートクラステーブル
26 集合メンバクラス候補テーブル
27 集合メモリ割当情報生成部
30 有制約集合処理部
31 制約集合定義データ
32 制約形式検査部
33 制約試行部
34 制約ルートクラス配置部
35 制約メンバクラス配置部
36 制約利用情報テーブル
37 制約メモリ割当情報生成部
40 メモリ割当情報テーブル
50 プログラム実行部
51 メモリ割当部
52 ルートクラス配置部
53 メンバクラス配置部
60 プログラム実行環境部
61 内部ヒープ処理部
62 内部ヒープ
63 外部ヒープ処理部
64 外部ヒープ
65 GC処理部
66 Copying GC部
67 Mark and Sweep GC部
68 オブジェクト情報取得部
69 参照情報取得部
70 集合用領域管理API
9 計算機
91 メモリ
92 CPU
93 記憶装置
94 入力装置
95 出力装置
96 バス
97 オペレーティングシステム
Claims (8)
- オブジェクトの割当先となるメモリ上のヒープ領域を、GC(Garbage Collection)が適用される内部ヒープ、および、プログラムから明示的にメモリ管理される外部ヒープに分けるとともに、オブジェクトの寿命に基づいてオブジェクトの割当先を決定するメモリ管理方法であって、
メモリ管理方法を実行する計算機は、前記内部ヒープおよび前記外部ヒープを構成するメモリに加え、入力装置と、対象集合処理部と、メモリ割当用データと、プログラム実行部と、を有し、
前記入力装置は、実行対象プログラムと、その実行対象プログラムから利用されるオブジェクトの集合を示す集合定義データと、その集合定義データで示されるオブジェクトの集合を利用する解析用プログラムと、の入力を受け付け、
前記対象集合処理部は、
前記解析用プログラムを試行することにより、その解析用プログラムから利用されるオブジェクトの集合についてのメモリ上の生成時刻から解放時刻までの生存期間を取得するとともに、その取得した各生存期間の時間長により、各オブジェクトの寿命を計算し、
オブジェクトの集合の名前と、そのオブジェクトの集合を構成するオブジェクトのうちの前記集合定義データで指定されるルートクラスについてのオブジェクトの寿命の平均値と、を対応づけて前記メモリ割当用データとして記憶手段に格納し、
前記プログラム実行部は、
前記実行対象プログラムを実行する過程で、その実行対象プログラムから利用されるオブジェクトの生成命令を実行すると、
生成されるオブジェクトの生存期間が、ルートクラスについてのオブジェクトの生存期間に含まれないときには、前記生成されるオブジェクトを前記内部ヒープに配置し、
前記メモリ割当用データを参照して、前記生成されるオブジェクトが属するオブジェクトの集合に対応する寿命の平均値を取得し、取得した寿命の平均値が所定閾値以上のときに、前記生成されるオブジェクトを長寿命オブジェクトとして前記外部ヒープに配置するとともに、取得した寿命の平均値が所定閾値未満のときに、前記生成されるオブジェクトを短寿命オブジェクトとして前記内部ヒープに配置すること、を特徴とする
メモリ管理方法。 - オブジェクトの割当先となるメモリ上のヒープ領域を、GC(Garbage Collection)が適用される内部ヒープ、および、プログラムから明示的にメモリ管理される外部ヒープに分けるとともに、オブジェクトの寿命に基づいてオブジェクトの割当先を決定するメモリ管理方法であって、
メモリ管理方法を実行する計算機は、前記内部ヒープおよび前記外部ヒープを構成するメモリに加え、入力装置と、有制約集合処理部と、メモリ割当用データと、プログラム実行部と、を有し、
前記入力装置は、実行対象プログラムと、その実行対象プログラムから利用されるオブジェクトの集合を示す制約集合定義データと、の入力を受け付け、
前記有制約集合処理部は、
前記実行対象プログラムを試行することにより、その実行対象プログラムから利用されるオブジェクトの集合についてのメモリ上の生成時刻から解放時刻までの生存期間を取得するとともに、その取得した各生存期間の時間長により、各オブジェクトの寿命を計算し、
前記実行対象プログラムを読み取り、その実行対象プログラム内の各クラスの定義文で記述されるアクセス修飾子を参照することにより、所定規約を満たすか否かを判定し、
前記所定規約は、オブジェクトの集合のうちのルートクラスについてのオブジェクトはオブジェクトの集合の外部から利用できるが、オブジェクトの集合のうちのルートクラス以外のメンバクラスについてのオブジェクトはオブジェクトの集合の外部から利用できない旨の規約であり、
オブジェクトの集合の名前と、そのオブジェクトの集合を構成するオブジェクトのうちの前記制約集合定義データで指定されるルートクラスについてのオブジェクトの寿命の平均値と、を対応づけて前記メモリ割当用データとして記憶手段に格納し、
前記プログラム実行部は、
前記実行対象プログラムを実行する過程で、その実行対象プログラムから利用されるオブジェクトの生成命令を実行すると、
生成されるオブジェクトを利用する前記実行対象プログラムが、前記所定規約を満たさないときには、前記生成されるオブジェクトを前記内部ヒープに配置し、
前記メモリ割当用データを参照して、前記生成されるオブジェクトが属するオブジェクトの集合に対応する寿命の平均値を取得し、取得した寿命の平均値が所定閾値以上のときに、前記生成されるオブジェクトを長寿命オブジェクトとして前記外部ヒープに配置するとともに、取得した寿命の平均値が所定閾値未満のときに、前記生成されるオブジェクトを短寿命オブジェクトとして前記内部ヒープに配置すること、を特徴とする
メモリ管理方法。 - 前記有制約集合処理部は、前記実行対象プログラムを試行する過程において、前記外部ヒープに配置されているオブジェクトを解放するときに、その解放するオブジェクトが前記内部ヒープに配置されているオブジェクトから参照されている場合、解放するオブジェクトの属するオブジェクトの集合を妥当性無しとし、
前記プログラム実行部は、
前記生成されるオブジェクトの属するオブジェクトの集合が、妥当性無しとされたときには、前記生成されるオブジェクトを前記内部ヒープに配置すること、を特徴とする
請求項2に記載のメモリ管理方法。 - 前記プログラム実行部は、前記実行対象プログラムを実行する過程で、前記内部ヒープに配置されているオブジェクトに対してCopyingGC処理を実行した結果、前記内部ヒープ内での領域移動が行われるオブジェクトを抽出し、
抽出したオブジェクトの集合の寿命が長寿命の場合、そのオブジェクトの集合のうちのメンバクラスについてのオブジェクトの配置先を、前記内部ヒープから前記外部ヒープに移動すること、を特徴とする
請求項1ないし請求項3のいずれか1項に記載のメモリ管理方法。 - 前記メモリ割当用データには、前記試行処理におけるオブジェクトの集合を生成したときの平均領域サイズを、さらに、オブジェクトの集合の名前と対応づけ、
前記プログラム実行部は、前記外部ヒープに配置するためのオブジェクトの領域サイズを、前記メモリ割当用データから読み取った平均領域サイズとすること、を特徴とする
請求項1ないし請求項4のいずれか1項に記載のメモリ管理方法。 - 請求項1ないし請求項5のいずれか1項に記載のメモリ管理方法を、コンピュータに実行させるためのメモリ管理プログラム。
- オブジェクトの割当先となるメモリ上のヒープ領域を、GC(Garbage Collection)が適用される内部ヒープ、および、プログラムから明示的にメモリ管理される外部ヒープに分けるとともに、オブジェクトの寿命に基づいてオブジェクトの割当先を決定するメモリ管理装置であって、
メモリ管理装置は、前記内部ヒープおよび前記外部ヒープを構成するメモリに加え、入力装置と、対象集合処理部と、メモリ割当用データと、プログラム実行部と、を有し、
前記入力装置は、実行対象プログラムと、その実行対象プログラムから利用されるオブジェクトの集合を示す集合定義データと、その集合定義データで示されるオブジェクトの集合を利用する解析用プログラムと、の入力を受け付け、
前記対象集合処理部は、
前記解析用プログラムを試行することにより、その解析用プログラムから利用されるオブジェクトの集合についてのメモリ上の生成時刻から解放時刻までの生存期間を取得するとともに、その取得した各生存期間の時間長により、各オブジェクトの寿命を計算し、
オブジェクトの集合の名前と、そのオブジェクトの集合を構成するオブジェクトのうちの前記集合定義データで指定されるルートクラスについてのオブジェクトの寿命の平均値と、を対応づけて前記メモリ割当用データとして記憶手段に格納し、
前記プログラム実行部は、
前記実行対象プログラムを実行する過程で、その実行対象プログラムから利用されるオブジェクトの生成命令を実行すると、
生成されるオブジェクトの生存期間が、ルートクラスについてのオブジェクトの生存期間に含まれないときには、前記生成されるオブジェクトを前記内部ヒープに配置し、
前記メモリ割当用データを参照して、前記生成されるオブジェクトが属するオブジェクトの集合に対応する寿命の平均値を取得し、取得した寿命の平均値が所定閾値以上のときに、前記生成されるオブジェクトを長寿命オブジェクトとして前記外部ヒープに配置するとともに、取得した寿命の平均値が所定閾値未満のときに、前記生成されるオブジェクトを短寿命オブジェクトとして前記内部ヒープに配置すること、を特徴とする
メモリ管理装置。 - オブジェクトの割当先となるメモリ上のヒープ領域を、GC(Garbage Collection)が適用される内部ヒープ、および、プログラムから明示的にメモリ管理される外部ヒープに分けるとともに、オブジェクトの寿命に基づいてオブジェクトの割当先を決定するメモリ管理装置であって、
メモリ管理装置は、前記内部ヒープおよび前記外部ヒープを構成するメモリに加え、入力装置と、有制約集合処理部と、メモリ割当用データと、プログラム実行部と、を有し、
前記入力装置は、実行対象プログラムと、その実行対象プログラムから利用されるオブジェクトの集合を示す制約集合定義データと、の入力を受け付け、
前記有制約集合処理部は、
前記実行対象プログラムを試行することにより、その実行対象プログラムから利用されるオブジェクトの集合についてのメモリ上の生成時刻から解放時刻までの生存期間を取得するとともに、その取得した各生存期間の時間長により、各オブジェクトの寿命を計算し、
前記実行対象プログラムを読み取り、その実行対象プログラム内の各クラスの定義文で記述されるアクセス修飾子を参照することにより、所定規約を満たすか否かを判定し、
前記所定規約は、オブジェクトの集合のうちのルートクラスについてのオブジェクトはオブジェクトの集合の外部から利用できるが、オブジェクトの集合のうちのルートクラス以外のメンバクラスについてのオブジェクトはオブジェクトの集合の外部から利用できない旨の規約であり、
オブジェクトの集合の名前と、そのオブジェクトの集合を構成するオブジェクトのうちの前記制約集合定義データで指定されるルートクラスについてのオブジェクトの寿命の平均値と、を対応づけて前記メモリ割当用データとして記憶手段に格納し、
前記プログラム実行部は、
前記実行対象プログラムを実行する過程で、その実行対象プログラムから利用されるオブジェクトの生成命令を実行すると、
生成されるオブジェクトを利用する前記実行対象プログラムが、前記所定規約を満たさないときには、前記生成されるオブジェクトを前記内部ヒープに配置し、
前記メモリ割当用データを参照して、前記生成されるオブジェクトが属するオブジェクトの集合に対応する寿命の平均値を取得し、取得した寿命の平均値が所定閾値以上のときに、前記生成されるオブジェクトを長寿命オブジェクトとして前記外部ヒープに配置するとともに、取得した寿命の平均値が所定閾値未満のときに、前記生成されるオブジェクトを短寿命オブジェクトとして前記内部ヒープに配置すること、を特徴とする
メモリ管理装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008207412A JP4555879B2 (ja) | 2008-08-11 | 2008-08-11 | メモリ管理方法、メモリ管理プログラム、および、メモリ管理装置 |
US12/388,742 US8504594B2 (en) | 2008-08-11 | 2009-02-19 | Memory management method, and memory management apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008207412A JP4555879B2 (ja) | 2008-08-11 | 2008-08-11 | メモリ管理方法、メモリ管理プログラム、および、メモリ管理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2010044532A JP2010044532A (ja) | 2010-02-25 |
JP4555879B2 true JP4555879B2 (ja) | 2010-10-06 |
Family
ID=41697396
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008207412A Expired - Fee Related JP4555879B2 (ja) | 2008-08-11 | 2008-08-11 | メモリ管理方法、メモリ管理プログラム、および、メモリ管理装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8504594B2 (ja) |
JP (1) | JP4555879B2 (ja) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4555879B2 (ja) * | 2008-08-11 | 2010-10-06 | 株式会社日立製作所 | メモリ管理方法、メモリ管理プログラム、および、メモリ管理装置 |
US8631051B2 (en) * | 2008-09-22 | 2014-01-14 | Filip Pizlo | Hybrid fragmenting real time garbage collection |
JP5199975B2 (ja) * | 2009-10-13 | 2013-05-15 | 株式会社日立製作所 | メモリ管理方法、メモリ管理プログラム、及び、情報処理装置 |
JP5618796B2 (ja) * | 2010-12-02 | 2014-11-05 | 株式会社日立製作所 | 計算機、計算機の制御方法及びプログラム |
US10754766B2 (en) | 2014-03-21 | 2020-08-25 | Red Hat Israel, Ltd. | Indirect resource management |
US9507713B1 (en) * | 2014-09-22 | 2016-11-29 | Google Inc. | Memory object pretenuring |
US9430153B2 (en) * | 2014-10-22 | 2016-08-30 | International Business Machines Corporation | Garbage collection and other management of memory heaps |
US11726979B2 (en) | 2016-09-13 | 2023-08-15 | Oracle International Corporation | Determining a chronological order of transactions executed in relation to an object stored in a storage system |
US10733159B2 (en) | 2016-09-14 | 2020-08-04 | Oracle International Corporation | Maintaining immutable data and mutable metadata in a storage system |
US10860534B2 (en) | 2016-10-27 | 2020-12-08 | Oracle International Corporation | Executing a conditional command on an object stored in a storage system |
US10956051B2 (en) | 2016-10-31 | 2021-03-23 | Oracle International Corporation | Data-packed storage containers for streamlined access and migration |
US10169081B2 (en) * | 2016-10-31 | 2019-01-01 | Oracle International Corporation | Use of concurrent time bucket generations for scalable scheduling of operations in a computer system |
US10180863B2 (en) | 2016-10-31 | 2019-01-15 | Oracle International Corporation | Determining system information based on object mutation events |
US9934127B1 (en) | 2017-03-08 | 2018-04-03 | Microsoft Technology Licensing, Llc | Indexing a trace by insertion of key frames for replay responsiveness |
US9940369B1 (en) | 2017-03-08 | 2018-04-10 | Microsoft Technology Licensing, Llc | Searching an indexed time-travel trace |
US10185645B2 (en) | 2017-03-08 | 2019-01-22 | Microsoft Technology Licensing, Llc | Resource lifetime analysis using a time-travel trace |
US9934126B1 (en) | 2017-03-08 | 2018-04-03 | Microsoft Technology Licensing, Llc | Indexing a trace by insertion of reverse lookup data structures |
US9959194B1 (en) | 2017-03-08 | 2018-05-01 | Microsoft Technology Licensing, Llc | Indexing a trace by insertion of memory snapshots for replay responsiveness |
US9983978B1 (en) | 2017-03-08 | 2018-05-29 | Microsoft Technology Licensing, Llc | Querying an indexed time-travel trace |
US10282274B2 (en) | 2017-06-14 | 2019-05-07 | Microsoft Technology Licensing, Llc | Presenting differences between code entity invocations |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001184219A (ja) * | 1999-12-27 | 2001-07-06 | Matsushita Electric Ind Co Ltd | コンパイル装置、コンパイル方法、コンパイルプログラムを記録している記録媒体、プログラム実行装置及びプログラム実行システム。 |
JP2003241967A (ja) * | 2002-02-15 | 2003-08-29 | Matsushita Electric Ind Co Ltd | プログラム実行装置およびその方法、並びにそこで実行されるプログラム |
US6681234B2 (en) * | 2000-12-12 | 2004-01-20 | Sun Microsystems, Inc. | Method and apparatus for storing long-lived objects in a virtual machine |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6199075B1 (en) * | 1997-05-30 | 2001-03-06 | Sun Microsystems, Inc. | Method and apparatus for generational garbage collection of a heap memory shared by multiple processors |
JP3027845B2 (ja) * | 1997-11-21 | 2000-04-04 | オムロン株式会社 | プログラム制御装置および方法 |
US7162499B2 (en) * | 2000-06-21 | 2007-01-09 | Microsoft Corporation | Linked value replication |
US6795836B2 (en) * | 2000-12-29 | 2004-09-21 | International Business Machines Corporation | Accurately determining an object's lifetime |
US20030097537A1 (en) * | 2001-10-23 | 2003-05-22 | Sun Microsystems, Inc. | Method and apparatus for scoped memory |
US6728738B2 (en) * | 2002-04-03 | 2004-04-27 | Sun Microsystems, Inc. | Fast lifetime analysis of objects in a garbage-collected system |
US20070011109A1 (en) * | 2005-06-23 | 2007-01-11 | Microsoft Corporation | Immortal information storage and access platform |
WO2008107482A1 (en) * | 2007-03-07 | 2008-09-12 | Coloplast A/S | Scaffolds for the regeneration of cartilage |
US7882159B2 (en) * | 2007-07-25 | 2011-02-01 | Apple Inc. | Associative references in a garbage collected programming environment |
JP4555879B2 (ja) * | 2008-08-11 | 2010-10-06 | 株式会社日立製作所 | メモリ管理方法、メモリ管理プログラム、および、メモリ管理装置 |
-
2008
- 2008-08-11 JP JP2008207412A patent/JP4555879B2/ja not_active Expired - Fee Related
-
2009
- 2009-02-19 US US12/388,742 patent/US8504594B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001184219A (ja) * | 1999-12-27 | 2001-07-06 | Matsushita Electric Ind Co Ltd | コンパイル装置、コンパイル方法、コンパイルプログラムを記録している記録媒体、プログラム実行装置及びプログラム実行システム。 |
US6681234B2 (en) * | 2000-12-12 | 2004-01-20 | Sun Microsystems, Inc. | Method and apparatus for storing long-lived objects in a virtual machine |
JP2003241967A (ja) * | 2002-02-15 | 2003-08-29 | Matsushita Electric Ind Co Ltd | プログラム実行装置およびその方法、並びにそこで実行されるプログラム |
Also Published As
Publication number | Publication date |
---|---|
US20100049938A1 (en) | 2010-02-25 |
JP2010044532A (ja) | 2010-02-25 |
US8504594B2 (en) | 2013-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4555879B2 (ja) | メモリ管理方法、メモリ管理プログラム、および、メモリ管理装置 | |
JP6939132B2 (ja) | アプリケーション・プロファイリング・ジョブ管理システム、プログラム、及び方法 | |
US9465726B2 (en) | Abstract layer for automatic user interface testing | |
CN103809966B (zh) | 数据流分析方法和装置 | |
US8995070B2 (en) | Garbage collection based on functional block size | |
JP6695437B2 (ja) | 管理計算機及びテスト環境決定方法 | |
US9904524B2 (en) | Method and device for visually implementing software code | |
KR101751515B1 (ko) | 테스트 실행 장치, 방법 및 컴퓨터 프로그램 | |
JP5031470B2 (ja) | メモリ管理方法、情報処理装置及びメモリ管理プログラム | |
CN107257959A (zh) | 托管代码中的垃圾收集控制 | |
JP2022036800A (ja) | Api選定システム及びapi選定方法 | |
CN105849698B (zh) | 动态编程中的执行防护 | |
JP5304950B2 (ja) | データベース管理方法、データベース管理装置及びデータベース管理プログラム | |
US20190253473A1 (en) | Checkpointing a set of stream computing data | |
KR102631906B1 (ko) | 폐기물 수거 운송차 배차 방법, 장치 및 시스템 | |
US9335990B2 (en) | Method, a system, and a non-transitory computer-readable medium for supporting application development | |
KR101566855B1 (ko) | 전사적 자원 관리 시스템에서의 새로운 업무용 화면을 개발하는 방법 | |
US10992742B2 (en) | Managing asset placement with respect to a distributed computing environment having a set of hosts | |
JP5199975B2 (ja) | メモリ管理方法、メモリ管理プログラム、及び、情報処理装置 | |
Menshchikov | Scalable semantic virtual machine framework for language-agnostic static analysis | |
US20180137049A1 (en) | Mutable type builder | |
JP2015084152A (ja) | データ割当制御プログラム、MapReduceシステム、データ割当制御装置、データ割当制御方法 | |
CN112328180A (zh) | 一种基于单片机的文件管理方法 | |
Lee | Automatic Measurement of Function Points from Java Applications | |
Castrillón Mazo et al. | Sequential Code Flow |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20100217 |
|
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: 20100706 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20100716 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130723 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 4555879 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |