【手続補正書】
【提出日】平成23年3月8日(2011.3.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プログラムを実行するために確保したメモリ領域において、不要になったメモリ領域を自動的に解放する自動解放機能を有する仮想マシンが稼働する情報処理装置におけるメモリ管理方法であって、
前記情報処理装置の記憶部は、
前記メモリ領域として、前記自動解放機能の対象となる第１のメモリ領域と、
前記メモリ領域として、前記自動解放機能の対象外となる第２のメモリ領域と、を有し、
プログラムを実行するときに生成されるオブジェクトごとに、当該オブジェクトに係るオブジェクト生成命令と、前記オブジェクト生成命令により当該オブジェクトを前記第１のメモリ領域に生成した回数を示すオブジェクト生成回数と、前記自動解放機能により前記第１のメモリ領域を解放した回数を示すオブジェクトプロファイリング回数と、を含むオブジェクト解析情報を記憶しており、
前記情報処理装置の制御部は、
前記オブジェクト解析情報を参照して、前記オブジェクトのオブジェクト生成回数が、前記記憶部に記憶されている第１の閾値以上であるか否かを判定するステップと、
前記オブジェクト生成回数が前記第１の閾値以上であるとき、前記オブジェクト生成回数に対する前記オブジェクトプロファイリング回数の割合が、前記記憶部に記憶されている第２の閾値以上であるか否かを判定するステップと、
前記割合が前記第２の閾値以上であるとき、前記オブジェクト生成命令によるオブジェクトの生成先を前記第２のメモリ領域に変更するステップと、を実行する
ことを特徴とするメモリ管理方法。
【請求項２】
前記情報処理装置の制御部は、
前記第１のメモリ領域に生成されたオブジェクトのうち、前記仮想マシンが直接参照可能なオブジェクト、および前記直接参照可能なオブジェクトが直接的または間接的に参照するオブジェクトを除くオブジェクトを特定するステップと、
前記オブジェクト解析情報を参照して、前記特定したオブジェクトのオブジェクト生成回数が前記第１の閾値以上であり、当該オブジェクト生成回数に対する前記オブジェクトプロファイリング回数の割合が前記第２の閾値以上であるとき、前記オブジェクト生成命令によるオブジェクトの生成先を前記第２のメモリ領域に変更するステップと、を実行する
ことを特徴とする請求項１に記載のメモリ管理方法。
【請求項３】
前記情報処理装置の制御部は、
前記特定したオブジェクトにおいて、前記仮想マシンから直接参照されず、並びにいずれのオブジェクトからも参照されないオブジェクトである起点オブジェクト、および前記起点オブジェクトが直接的または間接的に参照するオブジェクトであるメンバオブジェクトを設定するステップと、
前記起点オブジェクトのオブジェクトプロファイリング回数に対する前記メンバオブジェクトのオブジェクトプロファイリング回数の割合が、前記記憶部に記憶されている第３の閾値以上であるか否かを判定するステップと、
前記割合が前記第３の閾値以上であるとき、前記メンバオブジェクトも前記第２のメモリ領域に移動するステップと、を実行する
ことを特徴とする請求項２に記載のメモリ管理方法。
【請求項４】
前記自動解放機能は、世代別ガベージコレクションによる自動解放機能であり、
前記第１のメモリ領域は、長命でないオブジェクトが格納されるNew領域と、長命なオブジェクトが格納されるOld領域とを含んで構成される
ことを特徴とする請求項１から請求項３のいずれか一項に記載のメモリ管理方法。
【請求項５】
前記オブジェクトプロファイリング回数が示す前記第１のメモリ領域の解放は、前記New領域および前記Old領域の両方を含む領域を対象にする解放である
ことを特徴とする請求項４に記載のメモリ管理方法。
【請求項６】
プログラムを実行するために確保したメモリ領域において、不要になったメモリ領域を自動的に解放する自動解放機能を有する仮想マシンが稼働する情報処理装置として機能させるメモリ管理プログラムであって、
前記情報処理装置の記憶部は、
前記メモリ領域として、前記自動解放機能の対象となる第１のメモリ領域と、
前記メモリ領域として、前記自動解放機能の対象外となる第２のメモリ領域と、を有し、
プログラムを実行するときに生成されるオブジェクトごとに、当該オブジェクトに係るオブジェクト生成命令と、前記オブジェクト生成命令により当該オブジェクトを前記第１のメモリ領域に生成した回数を示すオブジェクト生成回数と、前記自動解放機能により前記第１のメモリ領域を解放した回数を示すオブジェクトプロファイリング回数と、を含むオブジェクト解析情報を記憶しており、
前記メモリ管理プログラムは、前記情報処理装置の制御部に、
前記オブジェクト解析情報を参照して、前記オブジェクトのオブジェクト生成回数が、前記記憶部に記憶されている第１の閾値以上であるか否かを判定する処理と、
前記オブジェクト生成回数が前記第１の閾値以上であるとき、前記オブジェクト生成回数に対する前記オブジェクトプロファイリング回数の割合が、前記記憶部に記憶されている第２の閾値以上であるか否かを判定する処理と、
前記割合が前記第２の閾値以上であるとき、前記オブジェクト生成命令によるオブジェクトの生成先を前記第２のメモリ領域に変更する処理と、を実行させる
ことを特徴とするメモリ管理プログラム。
【請求項７】
前記情報処理装置の制御部に、
前記第１のメモリ領域に生成されたオブジェクトのうち、前記仮想マシンが直接参照可能なオブジェクト、および前記直接参照可能なオブジェクトが直接的または間接的に参照するオブジェクトを除くオブジェクトを特定する処理と、
前記オブジェクト解析情報を参照して、前記特定したオブジェクトのオブジェクト生成回数が前記第１の閾値以上であり、当該オブジェクト生成回数に対する前記オブジェクトプロファイリング回数の割合が前記第２の閾値以上であるとき、前記オブジェクト生成命令によるオブジェクトの生成先を前記第２のメモリ領域に変更する処理と、を実行させる
ことを特徴とする請求項６に記載のメモリ管理プログラム。
【請求項８】
前記情報処理装置の制御部に、
前記特定したオブジェクトにおいて、前記仮想マシンから直接参照されず、並びにいずれのオブジェクトからも参照されないオブジェクトである起点オブジェクト、および前記起点オブジェクトが直接的または間接的に参照するオブジェクトであるメンバオブジェクトを設定する処理と、
前記起点オブジェクトのオブジェクトプロファイリング回数に対する前記メンバオブジェクトのオブジェクトプロファイリング回数の割合が、前記記憶部に記憶されている第３の閾値以上であるか否かを判定する処理と、
前記割合が前記第３の閾値以上であるとき、前記メンバオブジェクトも前記第２のメモリ領域に移動する処理と、を実行させる
ことを特徴とする請求項７に記載のメモリ管理プログラム。
【請求項９】
プログラムを実行するために確保したメモリ領域において、不要になったメモリ領域を自動的に解放する自動解放機能を有する仮想マシンが稼働する情報処理装置であって、
前記メモリ領域として、前記自動解放機能の対象となる第１のメモリ領域と、
前記メモリ領域として、前記自動解放機能の対象外となる第２のメモリ領域と、を有し、
プログラムを実行するときに生成されるオブジェクトごとに、当該オブジェクトに係るオブジェクト生成命令と、前記オブジェクト生成命令により当該オブジェクトを前記第１のメモリ領域に生成した回数を示すオブジェクト生成回数と、前記自動解放機能により前記第１のメモリ領域を解放した回数を示すオブジェクトプロファイリング回数と、を含むオブジェクト解析情報を記憶している記憶部と、
前記オブジェクト解析情報を参照して、前記オブジェクトのオブジェクト生成回数が、前記記憶部に記憶されている第１の閾値以上であるか否かを判定する制御と、
前記オブジェクト生成回数が前記第１の閾値以上であるとき、前記オブジェクト生成回数に対する前記オブジェクトプロファイリング回数の割合が、前記記憶部に記憶されている第２の閾値以上であるか否かを判定する制御と、
前記割合が前記第２の閾値以上であるとき、前記オブジェクト生成命令によるオブジェクトの生成先を前記第２のメモリ領域に変更する制御と、を実行する制御部とを有する
ことを特徴とする情報処理装置。
【請求項１０】
前記情報処理装置の制御部は、
前記第１のメモリ領域に生成されたオブジェクトのうち、前記仮想マシンが直接参照可能なオブジェクト、および前記直接参照可能なオブジェクトが直接的または間接的に参照するオブジェクトを除くオブジェクトを特定する制御と、
前記オブジェクト解析情報を参照して、前記特定したオブジェクトのオブジェクト生成回数が前記第１の閾値以上であり、当該オブジェクト生成回数に対する前記オブジェクトプロファイリング回数の割合が前記第２の閾値以上であるとき、前記オブジェクト生成命令によるオブジェクトの生成先を前記第２のメモリ領域に変更する制御と、を実行する
ことを特徴とする請求項９に記載の情報処理装置。
【請求項１１】
前記情報処理装置の制御部は、
前記特定したオブジェクトにおいて、前記仮想マシンから直接参照されず、並びにいずれのオブジェクトからも参照されないオブジェクトである起点オブジェクト、および前記起点オブジェクトが直接的または間接的に参照するオブジェクトであるメンバオブジェクトを設定する制御と、
前記起点オブジェクトのオブジェクトプロファイリング回数に対する前記メンバオブジェクトのオブジェクトプロファイリング回数の割合が、前記記憶部に記憶されている第３の閾値以上であるか否かを判定する制御と、
前記割合が前記第３の閾値以上であるとき、前記メンバオブジェクトも前記第２のメモリ領域に移動する制御と、を実行する
ことを特徴とする請求項１０に記載の情報処理装置。
【請求項１２】
前記自動解放機能は、世代別ガベージコレクションによる自動解放機能であり、
前記第１のメモリ領域は、長命でないオブジェクトが格納されるNew領域と、長命なオブジェクトが格納されるOld領域とを含んで構成される
ことを特徴とする請求項９から請求項１１のいずれか一項に記載の情報処理装置。
【請求項１３】
前記オブジェクトプロファイリング回数が示す前記第１のメモリ領域の解放は、前記New領域および前記Old領域の両方を含む領域を対象にする解放である
ことを特徴とする請求項１２に記載の情報処理装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１２
【補正方法】変更
【補正の内容】
【００１２】
上記目的を達成するために、本発明は、Javaシステムのような、メモリ管理機構を有する言語処理実行システムにおいて、まず、FullGCによってOld領域で解放される長命なオブジェクトの参照関係を解析することで、参照関係のルートに当たるオブジェクト（以下、「起点オブジェクト」という。）を動的に検出する。次に、オブジェクト生成命令ごとに、そのオブジェクト生成命令によって生成した起点オブジェクトがFullGCによってOld領域で解放される割合をプロファイリングすることで、長命な起点オブジェクトを生成しているオブジェクト生成命令を検出する。そして、長命な起点オブジェクトを生成しているオブジェクト生成命令については、そのオブジェクト生成先を外部ヒープに変更し、起点オブジェクトを外部ヒープ領域に生成するようにする。さらに、起点オブジェクトから参照されているオブジェクト（以下、「メンバオブジェクト」という。）について、メンバオブジェクトがCopyGCによるNew領域からOld領域への移動対象となった場合には、起点オブジェクトが解放されることによって一緒に解放される割合の高いメンバオブジェクトを起点オブジェクトと同じ外部ヒープに移動させる。
このようにして、外部ヒープ領域に格納すべき長命なオブジェクトを外部ヒープ領域に格納することができるので、GCの発生、特に、FullGCの発生を抑止することができる。
詳細は後記する。