JP5199975B2 - メモリ管理方法、メモリ管理プログラム、及び、情報処理装置 - Google Patents
メモリ管理方法、メモリ管理プログラム、及び、情報処理装置 Download PDFInfo
- Publication number
- JP5199975B2 JP5199975B2 JP2009236257A JP2009236257A JP5199975B2 JP 5199975 B2 JP5199975 B2 JP 5199975B2 JP 2009236257 A JP2009236257 A JP 2009236257A JP 2009236257 A JP2009236257 A JP 2009236257A JP 5199975 B2 JP5199975 B2 JP 5199975B2
- Authority
- JP
- Japan
- Prior art keywords
- memory area
- area
- generation
- profiling
- equal
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/0261—Garbage collection, i.e. reclamation of unreferenced memory using reference counting
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Description
また、Javaシステムの大規模化や複雑化、複数人分担によるプログラム開発、及び、プログラムソースコードに記述されていない暗黙的なオブジェクト生成とオブジェクト参照の存在といった様々な理由によって、プログラム開発者が、プログラム実行時に動的に変化するオブジェクトの参照関係を予め把握することは極めて困難である。そのため、外部ヒープ領域に格納すべき長命なオブジェクトであっても、実際は外部ヒープ領域に格納できていないオブジェクトが存在する可能性がある。逆に、このようなオブジェクトを動的に検出し外部ヒープ領域に格納できれば、FullGCの発生をさらに抑止できる。
このようにして、外部ヒープ領域に格納すべき長命なオブジェクトを外部ヒープ領域に格納することができるので、GCの発生、特に、FullGCの発生を抑止することができる。
詳細は後記する。
図1は、本発明の実施の形態のJavaVMが動作する計算機システム101の構成、及び、入出力データを示す図である。
主記憶107は、プログラム、プログラムの実行に必要な情報、及び、プログラムの処理結果を記憶する。主記憶107は、揮発性メモリであってもよいし、不揮発性メモリであってもよい。主記憶107は、Javaコンパイラ109、JavaVM110、データ領域108、及び、オペレーティングシステム127を記憶する。
出力装置131は、処理結果などの情報を外部に出力する装置である。出力装置131は、例えば、ディスプレイなどである。
一方、Javaヒープ領域115に空きがなく、Javaヒープ領域115へのオブジェクト生成に失敗した場合には、GC部122にGC処理を要求し(GC処理要求)、GC部122がGC処理を実行し、Javaヒープ領域115で不要になったメモリ領域を解放する。そして、再びオブジェクト生成を試み、さらに失敗した場合にはメモリ不足エラーを発生させる。
また、外部ヒープ領域116に空きがなく、外部ヒープ領域116へのオブジェクト生成に失敗した場合には、Javaヒープ領域115へのオブジェクト生成を試みる。さらにJavaヒープ領域115へのオブジェクト生成にも失敗した場合には、GC部122にGC処理を要求し、GC部122がGC処理を実行し、Javaヒープ領域115で不要になったメモリ領域を解放する。そして、再びオブジェクト生成を試み、さらに失敗した場合にはメモリ不足エラーを発生させる。
1行目から17行目は、Sampleクラスの内容を示している。
3行目から9行目、及び、11行目から15行目は、それぞれ、methodA()メソッド、及び、methodB()メソッドの処理の内容を示している。
5行目、及び、13行目は、クラスの型がClassAであるオブジェクトをJavaヒープ領域115に生成することをnew演算子により指示している。また、6行目は、クラスの型がClassZであるオブジェクトをJavaヒープ領域115に生成することをnew演算子により指示している。これにより、例えばmethodA()を5回実行すると、クラスの型がClassAであるオブジェクトが5個、クラスの型がClassZであるオブジェクトが5個、それぞれ生成される。さらにmethodB()を10回実行すると、クラスの型がClassAであるオブジェクトがもう10個生成される。
オブジェクト解析情報126は、バイトコード情報112に係るオブジェクト解析の情報を格納しており、オブジェクト生成情報テーブル301、オブジェクトプロファイリング情報テーブル302、及び、メンバオブジェクト情報303を含む。メンバオブジェクト生成情報テーブル301、オブジェクトプロファイリング情報テーブル302、及び、メンバオブジェクト情報303の詳細は、それぞれ、図4、図5、及び、図6で説明する。
オブジェクト生成情報テーブル301の各行は、オブジェクト生成命令に係る情報を格納しており、オブジェクト生成命令アドレス401、オブジェクトID(Identifier)402、クラス名403、及び、オブジェクト生成先404を含む。
オブジェクトプロファイリング情報テーブル302は、オブジェクトID402に係るオブジェクトについてのオブジェクトプロファイリング処理の結果を格納しており、オブジェクトID501、オブジェクト生成回数502、オブジェクトプロファイリング回数503、及び、メンバオブジェクト情報アドレス504を含む。
メンバオブジェクト情報303は、オブジェクトプロファイリング処理によってプロファイリングされたオブジェクトの参照関係の状況についての情報を格納しており、起点オブジェクトについての情報を格納するデータ構造(以下、「起点オブジェクトデータ構造」という。)、及び、メンバオブジェクトについての情報を格納するデータ構造(以下、「メンバオブジェクトデータ構造」という。)を含む。起点オブジェクトは、オブジェクトプロファイリング処理の起点となるOld領域に格納してあるオブジェクトであり、前回のFullGCの終了後から今回のFullGCの開始前までの間に、ルートセットや必要オブジェクトから参照されなくなったオブジェクト、又は、ルートセットや必要オブジェクトから参照されなくなった可能性の高いオブジェクトである。また、メンバオブジェクトは、起点オブジェクトからオブジェクト参照を順次辿ることによって到達可能なオブジェクトのうち、起点オブジェクトがFullGCによって解放されることによって一緒に解放されるオブジェクト、又は、一緒に解放される可能性の高いオブジェクトである。オブジェクトプロファイリング処理の詳細は、図19で説明する。
ここで、ポインタに付された数字は、便宜上のメンバオブジェクト適合率を示す。メンバオブジェクト適合率は、起点オブジェクトがFullGCによって解放されたことによってメンバオブジェクトも一緒に解放された割合である。例えば、メンバオブジェクトデータ構造606によって示されるClassFのメンバオブジェクト適合率は、メンバオブジェクトデータ構造601によって示されるClassAの起点オブジェクトが4回解放されたうちClassFのメンバオブジェクトは3回解放されたので、0.75になる。また、メンバオブジェクトデータ構造607によって示されるClassGのメンバオブジェクト適合率は、メンバオブジェクトデータ構造601によって示されるClassAの起点オブジェクトが4回解放されたうちClassGのメンバオブジェクトは1回解放されたので、0.25になる。
また、破線の囲み線はメンバオブジェクト適合率が0.6である便宜上の境界を示しており、破線で囲まれた内側は、メンバオブジェクト適合率が0.6以上であることを示している。
オブジェクトIDフィールド702は、オブジェクトを識別するためのオブジェクトIDを格納する。このオブジェクトIDは、当該オブジェクトを生成したオブジェクト生成命令に係るオブジェクトID402である。なお、オブジェクトプロファイリング処理の対象ではない通常オブジェクトのデータ構造は、オブジェクトヘッダ701とオブジェクトデータ703で構成される。また、オブジェクトプロファイリング処理の対象であっても、オブジェクトヘッダ701の空き領域やオブジェクトデータ703、及び、オブジェクトのデータ構造以外の領域にオブジェクトIDを格納するなどしてオブジェクトを識別できれば、オブジェクトIDフィールドのための領域を別途確保する必要はない。
オブジェクトデータ703は、オブジェクトのデータ本体である。
オブジェクト種別ビット802の値は、オブジェクト種別801に対応する。本発明の実施の形態では、オブジェクトヘッダ701に含まれる2ビットをオブジェクト種別ビットとして使用する。
また、オブジェクト種別ビット802が“01”の場合には、FullGC処理においてプログラムの実行に必要なオブジェクトであると判定済みの“必要”オブジェクトであることを示す。
同様に、オブジェクト種別ビット802が“10”の場合には、オブジェクトプロファイリング処理の起点となるオブジェクトであり、前回のFullGCから今回のFullGCまでの間に、必要オブジェクトから参照されなくなったオブジェクト、又は、必要オブジェクトから参照されなくなった可能性の高いオブジェクトである“起点”オブジェクトであることを示す。
さらに、オブジェクト種別ビット802が“11”の場合には、起点オブジェクトからオブジェクト参照を順次辿ることによって到達可能なオブジェクトのうち、起点オブジェクトがFullGCによって解放されることによって一緒に解放されるオブジェクト、又は、一緒に解放される可能性の高いオブジェクトである“メンバ”オブジェクトであることを示す。
外部ヒープヘッダ901は、オブジェクトの管理情報であり、外部ヒープ117に格納された起点オブジェクトを生成したオブジェクト生成命令に係るメンバオブジェクト参照情報アドレス504に格納されたメンバオブジェクト情報303のアドレスを格納する。
オブジェクト格納領域902は、オブジェクトを格納するための領域である。
バイトコード読み込み部111が生成した実行対象メソッドに係るバイトコード情報112は、一つ以上の命令を含み、各命令には、命令種別が付与されている。
命令種別がオブジェクト生成命令である場合には(ステップ1501の結果が「YES」)、オブジェクト生成部121を実行し、オブジェクト生成処理を実行する(ステップ1502)。
オブジェクトの生成に失敗した場合には(ステップ1503の結果が「NO」)、メソッドの実行を中断し、メモリ不足エラーを発生させる(ステップ1505)。
次に実行すべき命令がある場合には(ステップ1506の結果が「YES」)、ステップ1501の処理を実行し、メソッド実行処理を継続する。
ステップ1610の処理の終了後、又は、ステップ1611の処理の終了後には、本処理を終了する。
プロセッサ129がGC部122を実行すると、GC部122は、まず、オブジェクト生成処理1502で枯渇している領域がJavaヒープ領域115のNew領域とOld領域のどちらかを判定する(ステップ1701)。
ステップ1702の処理の終了後、又は、ステップ1703の処理の終了後には、本処理を終了する。
ステップ1801の処理の終了後には、JavaVM110の設定フラグを参照し、オブジェクトプロファイリングを行うか否かを判定する(ステップ1802)。
ステップ1804の処理の終了後には、本処理を終了する。
本処理のステップ1901からステップ1904までの処理を実行することによって、起点オブジェクトを特定することができる。
ステップ1905の処理の終了後には、本処理を終了する。
未処理の参照先オブジェクトが存在する場合には(ステップ2001の結果が「YES」)、参照先オブジェクトのオブジェクトヘッダ701のオブジェクト種別を参照し、オブジェクト種別を判定する(ステップ2002)。
参照先オブジェクトがメンバオブジェクト処理1803の呼び出し元の起点オブジェクトと同じでない場合には(ステップ2003の結果が「NO」)、参照先オブジェクトのオブジェクトヘッダ701のオブジェクト種別を“メンバ”に設定する(ステップ2005)。
ステップ2004の処理の終了後には、当該参照先オブジェクトに対して、メンバオブジェクト処理1904を実行する(ステップ1904)。
未処理の参照先オブジェクトが存在しない場合には(ステップ2001の結果が「NO」)、本処理を終了する。
また、オブジェクト1011を処理し、オブジェクトプロファイリング処理1803のステップ1902の判定においてオブジェクト種別が“未解析”でないため、オブジェクト1011の処理はここで終了となる。
また、オブジェクト1008の参照先であるオブジェクト1010を処理し、メンバオブジェクト処理1904のステップ2002の判定においてオブジェクト種別が“未解析”であるため、参照先であるオブジェクト1010のオブジェクトヘッダ701のオブジェクト種別を“メンバ”に設定した状態を示している。さらに、オブジェクト1010の参照先であるオブジェクト1012を処理し、メンバオブジェクト処理1904のステップ2002の判定においてオブジェクト種別が“未解析”であるため、参照先であるオブジェクト1012のオブジェクトヘッダ701にオブジェクト種別“メンバ”を設定した状態を示している。なお、オブジェクト1012の参照先であるオブジェクト1008は、メンバオブジェクト処理1904のステップ2002の判定においてオブジェクト種別が“起点”であり、メンバオブジェクト処理1904のステップ2003の判定において、呼び出し元のオブジェクト1008と同じであるため、オブジェクト1008の処理はここで終了となる。
さらに、オブジェクト1010を処理し、オブジェクトプロファイリング処理1803のステップ1902の判定においてオブジェクト種別が“未解析”でないため、オブジェクト1010の処理はここで終了となる。オブジェクト1012についても同様である。
不要な外部ヒープ117が存在する場合には(ステップ2102の結果が「YES」)、不要な外部ヒープ領域116、例えば、外部ヒープ1や外部ヒープ3を解放することで、外部ヒープ1や外部ヒープ3に格納してある不要なオブジェクトを解放する(ステップ2103)。
オブジェクト生成先を変更する場合には(ステップ2104の結果が「YES」)、オブジェクト生成情報テーブル301に対して、オブジェクト生成先変更部113を実行し、オブジェクト生成先変更処理を実行する(ステップ1303)。
オブジェクト生成先を変更しない場合(ステップ2104の結果が「NO」)、又は、ステップ1303の処理の終了後には、本処理を終了する。
未処理の参照先オブジェクトが存在する場合には(ステップ2201の結果が「YES」)、参照先オブジェクトがCopyGC処理1702のステップ2101の処理によるNew領域からOld領域への移動対象であるか否かを判定する(ステップ2202)。なお、参照先オブジェクトがCopyGC処理によるNew領域からOld領域への移動対象であるとは、少なくともその参照先オブジェクトがOld領域に移動するのに十分な回数のCopyGCを経ている長命なオブジェクトであることを意味する。
各ノードはオブジェクトを示している。なお、ノード内の記号はクラス名の略称を示している。例えば、ノード内の記号が“A”であるオブジェクト1201のクラス名は“ClassA”になる。また、オブジェクトを連結する矢印は、オブジェクトの参照関係を示している。
ステップ2204の処理の終了後には、参照先オブジェクトに対して、メンバオブジェクト移動処理を呼び出し、メンバオブジェクト移動処理を実行する(ステップ2205)。
未処理の参照先オブジェクトが存在しない場合には(ステップ2201の結果が「NO」)、本処理を終了する。
また、計算機システム101が有するJavaVM110は、予め出荷時に搭載されたものであってもよいし、ウェブサーバ201から取得したものであってもよい。
前記した各実施形態は、本発明を実施するために好適のものであるが、その実施形式はこれらに限定されるものでなく、本発明の要旨を変更しない範囲内において種々変形することが可能である。
102 補助記憶(記憶部)
103 Javaクラスファイル
104 Javaソースファイル
105 オブジェクト解析情報ファイル
106 設定ファイル
107 主記憶(記憶部)
108 データ領域
109 Javaコンパイラ
110 JavaVM
111 バイトコード読み込み部
112 バイトコード情報
113 オブジェクト生成先変更部
114 メソッド実行部
115 Javaヒープ領域(第1のメモリ領域)
116 外部ヒープ領域(第2のメモリ領域)
117 外部ヒープ1
118 外部ヒープ2
119 外部ヒープ3
120 メモリ管理部
121 オブジェクト生成部
122 GC部
123 FullGC部
124 CopyGC部
125 オブジェクト解析部
126 オブジェクト解析情報
127 オペレーティングシステム
128 バス
129 プロセッサ(制御部)
130 入力装置
131 出力装置
132 Javaアプリケーション
201 ウェブサーバ
202 Javaサーブレット
203 ネットワーク
301 オブジェクト生成情報テーブル
302 オブジェクトプロファイリング情報テーブル
303 メンバオブジェクト情報
Claims (13)
- プログラムを実行するために確保したメモリ領域において、不要になったメモリ領域を自動的に解放する自動解放機能を有する仮想マシンが稼働する情報処理装置におけるメモリ管理方法であって、
前記情報処理装置の記憶部は、
前記メモリ領域として、前記自動解放機能の対象となる第1のメモリ領域と、
前記メモリ領域として、前記自動解放機能の対象外となる第2のメモリ領域と、を有し、
プログラムを実行するときに生成されるオブジェクトごとに、当該オブジェクトに係るオブジェクト生成命令と、前記オブジェクト生成命令により当該オブジェクトを前記第1のメモリ領域に生成した回数を示すオブジェクト生成回数と、前記自動解放機能により前記第1のメモリ領域を解放した回数を示すオブジェクトプロファイリング回数と、を含むオブジェクト解析情報を記憶しており、
前記情報処理装置の制御部は、
前記オブジェクト解析情報を参照して、前記オブジェクトのオブジェクト生成回数が、前記記憶部に記憶されている第1の閾値以上であるか否かを判定するステップと、
前記オブジェクト生成回数が前記第1の閾値以上であるとき、前記オブジェクト生成回数に対する前記オブジェクトプロファイリング回数の割合が、前記記憶部に記憶されている第2の閾値以上であるか否かを判定するステップと、
前記割合が前記第2の閾値以上であるとき、前記オブジェクト生成命令によるオブジェクトの生成先を前記第2のメモリ領域に変更するステップと、を実行する
ことを特徴とするメモリ管理方法。 - 前記情報処理装置の制御部は、
前記第1のメモリ領域に生成されたオブジェクトのうち、前記仮想マシンが直接参照可能なオブジェクト、および前記直接参照可能なオブジェクトが直接的または間接的に参照するオブジェクトを除くオブジェクトを特定するステップと、
前記オブジェクト解析情報を参照して、前記特定したオブジェクトのオブジェクト生成回数が前記第1の閾値以上であり、当該オブジェクト生成回数に対する前記オブジェクトプロファイリング回数の割合が前記第2の閾値以上であるとき、前記オブジェクト生成命令によるオブジェクトの生成先を前記第2のメモリ領域に変更するステップと、を実行する
ことを特徴とする請求項1に記載のメモリ管理方法。 - 前記情報処理装置の制御部は、
前記特定したオブジェクトにおいて、前記仮想マシンから直接参照されず、並びにいずれのオブジェクトからも参照されないオブジェクトである起点オブジェクト、および前記起点オブジェクトが直接的または間接的に参照するオブジェクトであるメンバオブジェクトを設定するステップと、
前記起点オブジェクトのオブジェクトプロファイリング回数に対する前記メンバオブジェクトのオブジェクトプロファイリング回数の割合が、前記記憶部に記憶されている第3の閾値以上であるか否かを判定するステップと、
前記割合が前記第3の閾値以上であるとき、前記メンバオブジェクトも前記第2のメモリ領域に移動するステップと、を実行する
ことを特徴とする請求項2に記載のメモリ管理方法。 - 前記自動解放機能は、世代別ガベージコレクションによる自動解放機能であり、
前記第1のメモリ領域は、長命でないオブジェクトが格納されるNew領域と、長命なオブジェクトが格納されるOld領域とを含んで構成される
ことを特徴とする請求項1から請求項3のいずれか一項に記載のメモリ管理方法。 - 前記オブジェクトプロファイリング回数が示す前記第1のメモリ領域の解放は、前記New領域および前記Old領域の両方を含む領域を対象にする解放である
ことを特徴とする請求項4に記載のメモリ管理方法。 - プログラムを実行するために確保したメモリ領域において、不要になったメモリ領域を自動的に解放する自動解放機能を有する仮想マシンが稼働する情報処理装置として機能させるメモリ管理プログラムであって、
前記情報処理装置の記憶部は、
前記メモリ領域として、前記自動解放機能の対象となる第1のメモリ領域と、
前記メモリ領域として、前記自動解放機能の対象外となる第2のメモリ領域と、を有し、
プログラムを実行するときに生成されるオブジェクトごとに、当該オブジェクトに係るオブジェクト生成命令と、前記オブジェクト生成命令により当該オブジェクトを前記第1のメモリ領域に生成した回数を示すオブジェクト生成回数と、前記自動解放機能により前記第1のメモリ領域を解放した回数を示すオブジェクトプロファイリング回数と、を含むオブジェクト解析情報を記憶しており、
前記メモリ管理プログラムは、前記情報処理装置の制御部に、
前記オブジェクト解析情報を参照して、前記オブジェクトのオブジェクト生成回数が、前記記憶部に記憶されている第1の閾値以上であるか否かを判定する処理と、
前記オブジェクト生成回数が前記第1の閾値以上であるとき、前記オブジェクト生成回数に対する前記オブジェクトプロファイリング回数の割合が、前記記憶部に記憶されている第2の閾値以上であるか否かを判定する処理と、
前記割合が前記第2の閾値以上であるとき、前記オブジェクト生成命令によるオブジェクトの生成先を前記第2のメモリ領域に変更する処理と、を実行させる
ことを特徴とするメモリ管理プログラム。 - 前記情報処理装置の制御部に、
前記第1のメモリ領域に生成されたオブジェクトのうち、前記仮想マシンが直接参照可能なオブジェクト、および前記直接参照可能なオブジェクトが直接的または間接的に参照するオブジェクトを除くオブジェクトを特定する処理と、
前記オブジェクト解析情報を参照して、前記特定したオブジェクトのオブジェクト生成回数が前記第1の閾値以上であり、当該オブジェクト生成回数に対する前記オブジェクトプロファイリング回数の割合が前記第2の閾値以上であるとき、前記オブジェクト生成命令によるオブジェクトの生成先を前記第2のメモリ領域に変更する処理と、を実行させる
ことを特徴とする請求項6に記載のメモリ管理プログラム。 - 前記情報処理装置の制御部に、
前記特定したオブジェクトにおいて、前記仮想マシンから直接参照されず、並びにいずれのオブジェクトからも参照されないオブジェクトである起点オブジェクト、および前記起点オブジェクトが直接的または間接的に参照するオブジェクトであるメンバオブジェクトを設定する処理と、
前記起点オブジェクトのオブジェクトプロファイリング回数に対する前記メンバオブジェクトのオブジェクトプロファイリング回数の割合が、前記記憶部に記憶されている第3の閾値以上であるか否かを判定する処理と、
前記割合が前記第3の閾値以上であるとき、前記メンバオブジェクトも前記第2のメモリ領域に移動する処理と、を実行させる
ことを特徴とする請求項7に記載のメモリ管理プログラム。 - プログラムを実行するために確保したメモリ領域において、不要になったメモリ領域を自動的に解放する自動解放機能を有する仮想マシンが稼働する情報処理装置であって、
前記メモリ領域として、前記自動解放機能の対象となる第1のメモリ領域と、
前記メモリ領域として、前記自動解放機能の対象外となる第2のメモリ領域と、を有し、
プログラムを実行するときに生成されるオブジェクトごとに、当該オブジェクトに係るオブジェクト生成命令と、前記オブジェクト生成命令により当該オブジェクトを前記第1のメモリ領域に生成した回数を示すオブジェクト生成回数と、前記自動解放機能により前記第1のメモリ領域を解放した回数を示すオブジェクトプロファイリング回数と、を含むオブジェクト解析情報を記憶している記憶部と、
前記オブジェクト解析情報を参照して、前記オブジェクトのオブジェクト生成回数が、前記記憶部に記憶されている第1の閾値以上であるか否かを判定する制御と、
前記オブジェクト生成回数が前記第1の閾値以上であるとき、前記オブジェクト生成回数に対する前記オブジェクトプロファイリング回数の割合が、前記記憶部に記憶されている第2の閾値以上であるか否かを判定する制御と、
前記割合が前記第2の閾値以上であるとき、前記オブジェクト生成命令によるオブジェクトの生成先を前記第2のメモリ領域に変更する制御と、を実行する制御部とを有する
ことを特徴とする情報処理装置。 - 前記情報処理装置の制御部は、
前記第1のメモリ領域に生成されたオブジェクトのうち、前記仮想マシンが直接参照可能なオブジェクト、および前記直接参照可能なオブジェクトが直接的または間接的に参照するオブジェクトを除くオブジェクトを特定する制御と、
前記オブジェクト解析情報を参照して、前記特定したオブジェクトのオブジェクト生成回数が前記第1の閾値以上であり、当該オブジェクト生成回数に対する前記オブジェクトプロファイリング回数の割合が前記第2の閾値以上であるとき、前記オブジェクト生成命令によるオブジェクトの生成先を前記第2のメモリ領域に変更する制御と、を実行する
ことを特徴とする請求項9に記載の情報処理装置。 - 前記情報処理装置の制御部は、
前記特定したオブジェクトにおいて、前記仮想マシンから直接参照されず、並びにいずれのオブジェクトからも参照されないオブジェクトである起点オブジェクト、および前記起点オブジェクトが直接的または間接的に参照するオブジェクトであるメンバオブジェクトを設定する制御と、
前記起点オブジェクトのオブジェクトプロファイリング回数に対する前記メンバオブジェクトのオブジェクトプロファイリング回数の割合が、前記記憶部に記憶されている第3の閾値以上であるか否かを判定する制御と、
前記割合が前記第3の閾値以上であるとき、前記メンバオブジェクトも前記第2のメモリ領域に移動する制御と、を実行する
ことを特徴とする請求項10に記載の情報処理装置。 - 前記自動解放機能は、世代別ガベージコレクションによる自動解放機能であり、
前記第1のメモリ領域は、長命でないオブジェクトが格納されるNew領域と、長命なオブジェクトが格納されるOld領域とを含んで構成される
ことを特徴とする請求項9から請求項11のいずれか一項に記載の情報処理装置。 - 前記オブジェクトプロファイリング回数が示す前記第1のメモリ領域の解放は、前記New領域および前記Old領域の両方を含む領域を対象にする解放である
ことを特徴とする請求項12に記載の情報処理装置。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2009236257A JP5199975B2 (ja) | 2009-10-13 | 2009-10-13 | メモリ管理方法、メモリ管理プログラム、及び、情報処理装置 |
| PCT/JP2010/053520 WO2011045949A1 (ja) | 2009-10-13 | 2010-03-04 | メモリ管理方法、メモリ管理プログラム、及び、情報処理装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2009236257A JP5199975B2 (ja) | 2009-10-13 | 2009-10-13 | メモリ管理方法、メモリ管理プログラム、及び、情報処理装置 |
Publications (3)
| Publication Number | Publication Date |
|---|---|
| JP2011085985A JP2011085985A (ja) | 2011-04-28 |
| JP2011085985A5 JP2011085985A5 (ja) | 2011-06-16 |
| JP5199975B2 true JP5199975B2 (ja) | 2013-05-15 |
Family
ID=43876004
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2009236257A Expired - Fee Related JP5199975B2 (ja) | 2009-10-13 | 2009-10-13 | メモリ管理方法、メモリ管理プログラム、及び、情報処理装置 |
Country Status (2)
| Country | Link |
|---|---|
| JP (1) | JP5199975B2 (ja) |
| WO (1) | WO2011045949A1 (ja) |
Families Citing this family (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20150242312A1 (en) * | 2013-04-19 | 2015-08-27 | Hitachi, Ltd. | Method of managing memory, computer, and recording medium |
| CN110543357B (zh) * | 2018-05-28 | 2023-01-13 | 华为云计算技术有限公司 | 管理应用程序对象的方法,相关装置及系统 |
Family Cites Families (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| 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 | プログラム実行装置およびその方法、並びにそこで実行されるプログラム |
| US7676511B2 (en) * | 2006-01-27 | 2010-03-09 | Sun Microsystems, Inc. | Method and apparatus for reducing object pre-tenuring overhead in a generational garbage collector |
| JP4555879B2 (ja) * | 2008-08-11 | 2010-10-06 | 株式会社日立製作所 | メモリ管理方法、メモリ管理プログラム、および、メモリ管理装置 |
-
2009
- 2009-10-13 JP JP2009236257A patent/JP5199975B2/ja not_active Expired - Fee Related
-
2010
- 2010-03-04 WO PCT/JP2010/053520 patent/WO2011045949A1/ja not_active Ceased
Also Published As
| Publication number | Publication date |
|---|---|
| WO2011045949A1 (ja) | 2011-04-21 |
| JP2011085985A (ja) | 2011-04-28 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US7904493B2 (en) | Method and system for object age detection in garbage collection heaps | |
| CN101542437B (zh) | 软件事务性存储器操作的优化 | |
| US8856752B2 (en) | Monitoring asset state to enable partial build | |
| Roemer et al. | Smarttrack: efficient predictive race detection | |
| US9417931B2 (en) | Unified metadata for external components | |
| KR20080071135A (ko) | 소프트웨어 트랜잭션 메모리 블록들을 포함하는 프로그램의컴파일을 위한 방법 | |
| EP3084598B1 (en) | Execution guards in dynamic programming | |
| WO2009055914A1 (en) | Static analysis defect detection in the presence of virtual function calls | |
| US7096339B2 (en) | System and method for detecting memory management programming errors | |
| US7406684B2 (en) | Compiler, dynamic compiler, and replay compiler | |
| JP5031470B2 (ja) | メモリ管理方法、情報処理装置及びメモリ管理プログラム | |
| US7409677B1 (en) | Method and system for creation and use of embedded trace description | |
| WO2008045763A1 (en) | Automatic native generation | |
| US12197324B1 (en) | Thread-local garbage collection | |
| US20080244324A1 (en) | Method and system for providing enhanced exception messages for exceptions thrown by virtual machines | |
| CN101493767A (zh) | 一种即时编译器辅助的垃圾收集中显式释放对象的插桩方法 | |
| US9158516B2 (en) | Dual mode evaluation for programs containing recursive computation | |
| CN110187884B (zh) | 一种多线程应用场景下的访存指令插桩优化方法 | |
| JP5199975B2 (ja) | メモリ管理方法、メモリ管理プログラム、及び、情報処理装置 | |
| US7693919B2 (en) | Eager reference-counting garbage collection | |
| US12190112B2 (en) | Cooperative garbage collection barrier elision | |
| US8056061B2 (en) | Data processing device and method using predesignated register | |
| EP3635561B1 (en) | Asynchronous operation query | |
| CN112487438B (zh) | 基于标识符一致性的堆对象Use-After-Free漏洞检测方法 | |
| US11106522B1 (en) | Process memory resurrection: running code in-process after death |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110308 |
|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20110308 |
|
| 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: 20130129 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20130208 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20160215 Year of fee payment: 3 |
|
| R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
| LAPS | Cancellation because of no payment of annual fees |