(57)【特許請求の範囲】
【請求項１】
プログラムの実行により生成されたオブジェクトを配置する記憶領域と、前記プログラムの実行及び前記記憶領域の解放を行う制御部と有する計算機であって、
前記制御部は、
所定の契機で時間情報を更新し、
オブジェクトの生成時に、前記オブジェクトを生成するプログラムの情報と、該オブジェクト生成時の前記時間情報とを取得し、これを関連付けて記憶装置に記録し、
前記記憶領域に格納されたオブジェクトのうち後のプログラムの実行に不要なオブジェクトを検出し、該検出時の前記時間情報を取得し、
前記生成時の時間情報と、前記検出時の時間情報との差分を前記プログラムの情報と関連付けて、前記記憶装置に記録し、
オブジェクトの生成時に取得した前記オブジェクトを生成するプログラムの情報及び該オブジェクト生成時の前記時間情報が既に記録されている場合、該記録されているオブジェクトの情報に関連付けられた前記差分を取得し、
前記差分が所定の閾値を超える場合、前記不要なオブジェクトの検出の対象とならない他の記憶領域を前記差分の範囲に対応づけて確保し、前記オブジェクトを前記他の記憶領域に配置することを特徴とする計算機。
【請求項２】
請求項１に記載の計算機であって、
前記制御部は、
前記不要なオブジェクトの検出を実行したとき前記時間情報を更新することを特徴とする計算機。
【請求項３】
請求項１に記載の計算機であって、
前記制御部は、
前記記憶領域に格納されたオブジェクトの容量が容量閾値を超えたとき前記時間情報を更新することを特徴とする計算機。
【請求項４】
請求項３に記載の計算機であって、
前記制御部は、
前記記憶領域に格納されたオブジェクトの累積容量が前記容量閾値を超えたとき前記時間情報を更新し、前記累積容量をリセットすることを特徴とする計算機。
【請求項５】
請求項３又は４に記載の計算機であって、
前記制御部は、
ユーザが操作可能な入力装置を介して入力された値に基づいて前記容量閾値を設定することを特徴とする計算機。
【請求項６】
請求項１〜５の何れか一項に記載の計算機であって、
前記プログラムの情報は、前記オブジェクトを生成するメソッドに関する情報を少なくとも含むことを特徴とする計算機。
【請求項７】
請求項６に記載の計算機であって、
前記メソッドに関する情報は、メソッド名及び行番号を含むことを特徴とする計算機。
【請求項８】
請求項１〜７の何れか一項に記載の計算機であって、
前記制御部は、
前記記憶領域に格納されたオブジェクトが他のオブジェクトを参照していない若しくは他のオブジェクトから参照されていないとき、前記オブジェクトを不要オブジェクトとして検出することを特徴とする計算機。
【請求項９】
請求項８に記載の計算機であって、
前記制御部は、
前記差分、前記他の記憶領域を確保したときの前記時間情報及び前記他の記憶領域を特定する情報を関連付けて記憶し、
前記他の記憶領域を確保するとき、前記オブジェクトの差分及び前記時間情報が記憶されていない場合、前記不要なオブジェクトの検出の対象とならない他の記憶領域を確保することを特徴とする計算機。
【請求項１０】
請求項９に記載の計算機であって、
前記制御部は、
前記他の記憶領域を確保するとき、前記オブジェクトの差分及び前記時間情報が記憶されている場合、該オブジェクトの差分及び前記時間情報に関連付けられた前記他の記憶領域を特定する情報に基づいて、前記不要なオブジェクトの検出の対象とならない他の記憶領域に、前記オブジェクトを配置することを特徴とする計算機。
【請求項１１】
請求項９〜１０の何れか一項に記載の計算機であって、
前記制御部は、
ユーザが操作可能な入力装置を介して入力された値に基づいて前記所定の閾値を設定することを特徴とする計算機。
【請求項１２】
請求項９〜１１の何れか一項に記載の計算機であって、
前記制御部は、
前記他の記憶領域に格納されたオブジェクトが後のプログラムの実行に不要なオブジェクトである否かを判定し、不要なオブジェクトであると判定する場合、該不要なオブジェクトが配置された他の記憶領域を解放することを特徴とする計算機。
【請求項１３】
プログラムの実行により生成されたオブジェクトを配置する記憶領域と、前記プログラムの実行及び前記記憶領域の解放を行う制御部と有する計算機の制御方法であって、
前記制御部が、
所定の契機で時間情報を更新し、
オブジェクトの生成時に、前記オブジェクトを生成するプログラムの情報と、該オブジェクト生成時の前記時間情報とを取得し、これを関連付けて記録し、
前記記憶領域に格納されたオブジェクトのうち後のプログラムの実行に不要なオブジェクトを検出し、該検出時の前記時間情報を取得し、
前記生成時の時間情報と、前記検出時の時間情報との差分を前記プログラムの情報と関連付けて記録し、
オブジェクトの生成時に取得した前記オブジェクトを生成するプログラムの情報及び該オブジェクト生成時の前記時間情報が既に記録されている場合、該記録されているオブジェクトの情報に関連付けられた前記差分を取得し、
前記差分が所定の閾値を超える場合、前記不要なオブジェクトの検出の対象とならない他の記憶領域を前記差分の範囲に対応づけて確保し、前記オブジェクトを前記他の記憶領域に配置することを含む計算機の制御方法。
【請求項１４】
プログラムの実行により生成されたオブジェクトを配置する記憶領域と、前記プログラムの実行及び前記記憶領域の解放を行う制御部と有する計算機に、
所定の契機で時間情報を更新する機能と、
オブジェクトの生成時に、前記オブジェクトを生成するプログラムの情報と、該オブジェクト生成時の前記時間情報とを取得し、これを関連付けて記録する機能と、
前記記憶領域に格納されたオブジェクトのうち後のプログラムの実行に不要なオブジェクトを検出し、該検出時の前記時間情報を取得する機能と、
前記生成時の時間情報と、前記検出時の時間情報との差分を前記プログラムの情報と関連付けて記録し、
オブジェクトの生成時に取得した前記オブジェクトを生成するプログラムの情報及び該オブジェクト生成時の前記時間情報が既に記録されている場合、該記録されているオブジェクトの情報に関連付けられた前記差分を取得し、
前記差分が所定の閾値を超える場合、前記不要なオブジェクトの検出の対象とならない他の記憶領域を前記差分の範囲に対応づけて確保し、前記オブジェクトを前記他の記憶領域に配置する機能とを実現させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機、計算機の制御方法及びプログラムに係り、特に、計算機のメモリ管理を行う計算機、計算機の制御方法及びプログラムに関する。
【背景技術】
【０００２】
コンピュータプログラムを開発する上で、プログラムで利用するメモリ領域の確保・解放処理は不正領域参照などプログラムの不具合を起こしやすいことが知られている。特に、大規模なプログラム開発においては、プログラマが全てのメモリ確保・解放処理を完全に把握することは困難になりつつある。
【０００３】
これを解決する手段として、非特許文献１には、プログラム中でのメモリ管理を自動化するガベージコレクタが開示されている。ガーベッジコレクタは、プログラムが動的に確保したメモリ領域のうち、不要になったオブジェクトを判別し、そのオブジェクトが占有していた領域を解放する処理であるガーベッジコレクション（以下、「ＧＣ」という。）を実行する機能である。例えば、ガベージコレクタを利用するメモリ管理機能を有する言語処理系の１つであるＪａｖａ（登録商標）では、メモリ領域を確保するための手段が用意されており、Ｊａｖａプログラム開発者は、メモリ領域の確保を明示的に記述することで、ガベージコレクタが動的にＧＣを実施し、そのメモリの解放を行うようになっている。
【０００４】
ＧＣの実行形態は、大きく２つの方法がある。Ｊａｖａプログラムの実行と並行してＧＣを実行する方法と、Ｊａｖａプログラムの実行を停止してＧＣを実行する方法とである。前者は、Ｊａｖａプログラムの実行性能が低下するもののＧＣによる停止時間が短くなるという傾向がある。後者は、Ｊａｖａプログラムの実行性能が高いもののＧＣによる停止時間が長いという傾向がある。
【０００５】
後者を解決する手法として、非特許文献２には、ＧＣで管理するメモリ領域に加えて、ＧＣの管理対象外のメモリ領域（以下、「外部メモリ領域」という。）を有する計算機システムが提案されている。この計算機システムは、プログラム中の特定の区間内で生成されたオブジェクトを外部メモリ領域に配置するようになっている。特定区間の指定は、予めプログラム開発者によって明示的に記述されたプログラムの実行により指定されるようになっている。
【０００６】
この特定区間を指定するためのプログラムの記述を図２２に例示する。ＣＰＵは、プログラム中の“em=new ExplicitMemory();”を実行することにより、外部メモリ領域を確保する。ＣＰＵが、生成したオブジェクト“em”に対して“em.enter();”メソッドを呼び出してから”ｅｍ．ｅｘｉｔ（）；”メソッドを呼び出す間が指定区間となる。ＣＰＵは、この指定区間内に生成されたオブジェクトである“obj1”、“obj2”及び“obj3”を、確保された外部メモリ領域に配置する。確保した外部メモリ領域が不要になった場合、ＣＰＵは、生成したオブジェクト“em”に対し、“em.reclaim();”メソッドを呼び出し、外部メモリ領域を解放する。
【０００７】
この処理系の用途の1つは、一定の寿命(オブジェクトが生成されてから不要になるまでの期間)を持つオブジェクト群を外部メモリ領域に配置することである。これによりＪａｖａヒープへのオブジェクトの流入を削減し、ＧＣの発生を抑止でき処理系の応答性能を改善できる。
【０００８】
また、上述した非特許文献１には、オブジェクトが短寿命か長寿命かで異なるメモリ管理方法を適用する計算機システムについても開示がある。この計算機システムでは、Ｊａｖａヒープを短寿命領域と長寿命領域とに分割し、オブジェクト毎に自らの生存期間を示す年齢情報の管理を行い、それぞれの領域のＧＣを別々に管理するようになっている。先ず、ＣＰＵは、生成するオブジェクトを全て短寿命領域へと配置する。短寿命領域が枯渇した時、ＣＰＵは、ＧＣ処理を開始し、短寿命領域のオブジェクトを回収する。このとき、ＣＰＵは、生存したオブジェクトの年齢を1増加させる。この年齢が閾値を超えると、ＣＰＵは、長寿命のオジェクトであると見なし、当該オブジェクトを長寿命領域へ移動する。このように長寿命オブジェクトを別領域で管理することで、短寿命領域の管理を軽量化しプログラムの実行性能を向上させるようになっている。
【０００９】
更に、非特許文献１に開示された計算機システムのような、オブジェクトを短寿命と長寿命に分けて管理する手法を利用した計算機システムとして、非特許文献３には、オブジェクトの寿命管理にプログラム点を用いるシステムが開示されている。プログラム点とは、オブジェクトを生成するプログラムにおいて、そのプログラムがそのオブジェクトを生成する地点（オブジェクトを生成するコードの位置）である。計算機システムでは、オブジェクトの寿命を解析し、長寿命オブジェクトを生成する際、プログラム点を利用して、そのオブジェクトをはじめから長寿命領域に配置し、ＧＣ処理の軽減やオブジェクトの移動を削減することで実行性能を向上させるようになっている。
【００１０】
より具体的には、短寿命と長寿命で異なる管理手法を適用する非特許文献１のような計算機システムにおいて、ＣＰＵは、プログラムを実行する際に、オブジェクトと、そのオブジェクトが生成されるプログラム点とを関連付けて記録しておく。ＣＰＵは、オブジェクトを長寿命領域へ移動した際、そのオブジェクトが長寿命であるとして管理しておき、当該オブジェクトを生成したプログラム点を再度実行する際に、生成したオブジェクトを初めから長寿命領域へ配置するようになっている。
【先行技術文献】
【非特許文献】
【００１１】
【非特許文献１】Appel, A. W, Simple generational garbage collection and fast allocation, Software Practice and Experience ,1989.
【非特許文献２】小幡元樹, 西山博泰, 足立昌彦, 岡田浩一, 長瀬卓真，中島恵, Ｊａｖａにおける明示的メモリ管理, 情報処理学会論文誌，2009.
【非特許文献３】Stephan M. Blackburn, Sharad Singhai, Matthew Hertz, Pretenuring for Ｊａｖａ, ACM. Conference on Object-Oriented Programming, Systems, Languages and Applications, 2001.
【発明の概要】
【発明が解決しようとする課題】
【００１２】
非特許文献３に開示された計算機システムは、オブジェクトが短寿命であるか長寿命であるかを判別し、それぞれに応じてオブジェクトを管理するようになっているが、オブジェクトの寿命に依存して種々の処理を行う計算機システムでは、短寿命及び長寿命だけでなくオブジェクトの寿命の長さを解析することが必要である。オブジェクトの寿命を解析するとは、あるプログラム点で生成されたオブジェクトに対し、その生成から不要になるまでの期間を解析し、プログラム点及び生成されるオブジェクトと寿命の長さを関連付けることである。
【００１３】
例えば、ユーザによるプログラムの記述によって、メモリ領域の生成・削除を制御する計算機システムでは、プログラマがオブジェクトの寿命を調査し、それらを外部メモリ領域へ配置する必要がある。この場合、プログラマが各オブジェクトの寿命を把握しておく必要があり、大規模なフレームワークなどを利用したシステムなどでは、オブジェクトの寿命を把握することは困難である。
【００１４】
本発明は、プログラマ等の手によらずにオブジェクトの寿命を効率的に把握できるようにすることを目的の一つとする。また、把握したオブジェクトの寿命を利用して、計算機システムのメモリ管理の利便性を向上させることを目的の一つとする。
【課題を解決するための手段】
【００１５】
プログラムの実行により生成されたオブジェクトを配置する記憶領域と、前記プログラムの実行及び前記記憶領域の解放を行う制御部と有する計算機であって、前記制御部は、
所定の契機で時間情報を更新し、オブジェクトの生成時に、前記オブジェクトを生成するプログラムの情報と、該オブジェクト生成時の前記時間情報とを取得し、これを関連付けて記憶装置に記録し、前記記憶領域に格納されたオブジェクトのうち後のプログラムの実行に不要なオブジェクトを検出し、該検出時の前記時間情報を取得し、前記生成時の時間情報と、前記検出時の時間情報との差分を前記プログラムの情報と関連付けて、前記記録装置に記録することを特徴とする。
【発明の効果】
【００１６】
本発明によれば、人手によらずにオブジェクトの寿命を効率的に把握でき又把握したオブジェクトの寿命を利用して、計算機システムのメモリ管理の利便性を向上させることができるという効果を奏する。
【００１７】
本発明の更なる目的及び効果は、以下の記載等により更に明らかになるであろう。
【図面の簡単な説明】
【００１８】
【図１】本発明を適用した第１実施形態の構成を示すブロック図である。
【図２】本発明を適用した実施形態で実行するプログラムの例を示す図である。
【図３】本発明を適用した実施形態の生成点表の例を示す模式図である。
【図４】本発明を適用した実施形態のオブジェクト生成表の例を示す模式図である。
【図５】本発明を適用した実施形態の寿命情報表の例を示す模式図である。
【図６】本発明を適用した実施形態のオブジェクト管理部の処理を示すフローチャートである。
【図７】本発明を適用した実施形態のオブジェクト配置部の処理を示すフローチャートである。
【図８】本発明を適用した実施形態のオブジェクト寿命解析部の処理を示すフローチャートである。
【図９】本発明を適用した実施形態の計算機システムの動作処理の例を示す模式図である。
【図１０】本発明を適用した第１実施形態の変形例におけるオブジェクト管理部の処理を示すフローチャートである。
【図１１】本発明を適用した第１実施形態の変形例におけるオブジェクト生成表を示す模式図である。
【図１２】本発明を適用した実施形態の変形例における生成点表を示す模式図である。
【図１３】本発明を適用した第２実施形態の構成を示すブロック図である。
【図１４】本発明を適用した第２実施形態のオブジェクト配置部の処理を示すフローチャートである。
【図１５】本発明を適用した第２実施形態における計算機システムの動作処理を示す模式図である。
【図１６】本発明を適用した第３実施形態の構成を示したブロック図である。
【図１７】本発明を適用した実施形態の外部メモリ管理表を示す模式図である。
【図１８】本発明を適用した実施形態の外部オブジェクト配置部の処理を示すフローチャートである。
【図１９】本発明を適用した実施形態の外部メモリ確保部の処理を示すフローチャートである。
【図２０】本発明を適用した第３実施形態における計算機システムの動作処理を示す模式図である。
【図２１】図２０に示す計算機システムで実行するプログラムの例を示す図である。
【図２２】従来技術の計算機システムで使用するプログラムの例を示す図である。
【発明を実施するための形態】
【００１９】
以下に、図面を用いて、本発明を実施するため形態について、実施形態１〜３として詳細に説明する。
【００２０】
〔第１実施形態〕
図１に、本発明を適用した第１実施形態である計算機システム１００の構成を示す。計算機システム１００は、ＣＰＵ１、主記憶装置としてのメモリ２及び補助記憶装置３を備えたサーバ装置等の汎用の計算機装置から構成される。また、ネットワーク等を介して外部記憶装置４を備えている。入出力装置５は、ユーザの操作により種々のデータや閾値等を入力したりする装置である。表示装置６は、計算機システム１００で利用する種々の表や処理結果等を表示可能なモニタ装置である。
【００２１】
また、本実施形態において、計算機システム１００は、オブジェクト指向言語体系であるＪ２ＥＥ規格に準拠したＪａｖａＶＭ１０が、ＡＰサーバとして実装された構成となっている。
【００２２】
なお、本発明は、ＪａｖａＶＭ１０の構成に限定されるものではなく、オブジェクトの管理ができるプログラム処理系に適用することも可能である。
【００２３】
メモリ２には、ＪａｖａＶＭ１０を構成する機能部や、種々のデータやプログラムを格納する領域が構成・格納される。ＪａｖａＶＭ１０は、ＣＰＵ１とプログラムとの協同により、プログラム読込み部１１、プログラム実行部１２、ガベージコレクタ１３及びオブジェクト配置部１４Ａ、オブジェクト管理部１８及びオブジェクト寿命解析部１９を実現し、これらを含んで構成される。なお、ＪａｖａＶＭ１０は、これらの機能部以外にも種々の機能を有する。例えば、所定の契機で更新される時間情報である擬似経過情報２２は、ＪａｖａＶＭ１０が有する機能によって管理されるものである。
【００２４】
また、メモリ２は、種々のデータやプログラムとして、Ｊａｖａプログラム２０Ａ、擬似経過時間２２、オブジェクト生成表２３、生成点表２４及び寿命情報表２６を格納する。
【００２５】
Ｊａｖａヒープ２１は、ＪａｖａＶＭ１０によって管理されるメモリ領域であり、生成されたオブジェクトを配置するものである。
【００２６】
プログラム読込み部１１は、Ｊａｖａプログラム２０Ａを読み込む機能を有する。プログラム実行部１２は、読み込んだＪａｖａプログラム２０Ａに記述された命令を実行し、オブジェクトを生成する機能を有する。
【００２７】
図２に、Ｊａｖａプログラム２０Ａの一例を示す。このＪａｖａプログラム２０ＡはTestクラスの定義を含んでいる。Testクラスはmainメソッドの定義(２〜１０行目)を持つ。プログラム実行部１２が、Testクラスのmainメソッドの実行を開始すると、プログラムの実行点を３行目に移す。３行目はSampleクラスのオブジェクトを生成する処理を示す。プログラム実行部１２がこのプログラム点を実行することで、オブジェクトが生成され、オブジェクトは、Ｊａｖａヒープ２１から確保された領域に配置されるようになっている。プログラム実行部１２が３行目の処理を終えると、プログラム点を４行目に移し、プログラムの実行を続ける。
【００２８】
オブジェクト配置部１４Ａは、プログラム実行部１２がオブジェクトを生成すると、Ｊａｖａヒープ２１の領域を確保し、オブジェクトを配置する機能を有する。ガーベッジコレクタ１３は、Ｊａｖａヒープ２１に十分な空き領域が存在しない場合、ＧＣを実行し、Ｊａｖａヒープ２１を解放する機能を有する。
【００２９】
より具体的には、プログラム実行部１２がＪａｖａプログラム２０Ａに記述されたオブジェクト生成命令を実行し、オブジェクトが生成されると、オブジェクト配置部１４Ａは、Ｊａｖａヒープ２１からオブジェクトサイズ分以上の領域を確保する。このとき、Ｊａｖａヒープ２１が不足しており、オブジェクト配置部１４Ａが領域確保に失敗した場合、ガベージコレクタ１３が、ＧＣを実行し、Ｊａｖａヒープ２１にある不要なオブジェクトを回収して、領域を解放する。他方、オブジェクト配置部１４ＡがＪａｖａヒープ２１から領域を確保できた場合、確保した領域にオブジェクトを配置するようになっている。
【００３０】
オブジェクト管理部１８は、オブジェクト実行部１２が生成したオブジェクトに対して、オブジェクトの型、オブジェクトを生成するメソッド名及び行番号といった情報と、そのオブジェクトを生成した時の時間情報（後述する疑似経過時間２２の値）と、を関連付けて管理する機能を有する。より詳細には、オブジェクト管理部１８は、生成オブジェクトに関する型、メソッド名及び行番号等を生成点表２４（図３）で管理し、そのオブジェクトを生成した時の時間情報（擬似経過時間２２）である生成時間情報等を、オブジェクト生成表２７（図４）で管理し、これらを共通のＩＤ（生成点ＩＤ）に関連付けて管理するようになっている。
【００３１】
図３に、生成点表２４の構成例を示す。この表では、オブジェクトが生成された時点における当該オブジェクトに関する情報が登録される。オブジェクトが生成されると、オブジェクト管理部１８によって、夫々のオブジェクトに関する生成時点での情報が、生成点表２４に登録されるようになっている。生成点表２４は、オブジェクトの生成時点の情報を特定する生成点ＩＤ２７１、生成されたオブジェクトの型２７２、オブジェクトを生成したメソッドのメソッド名２７３及びそのオブジェクトをしたメソッド内の行番号２７４の情報からなる。例えば、生成点表２４の生成点ＩＤ“1”が付された１行目は、メソッド名が”ｍ１”であるメソッド内の行番号が”ｌｉｎｅ１”で、”Ｊａｖａ．ｌａｎｇ．Ｏｂｊｅｃｔ”オブジェクトが生成されたことを示している。
【００３２】
図４に、オブジェクト生成表２３の構成例を示す。この表では、オブジェクトが生成された時間に関する情報が登録される。オブジェクト生成表２３は、生成点ＩＤ２３１、オブジェクトＩＤ２３２及び生成時の時間情報である生成時間情報２３３が登録されるようになっている。生成点ＩＤ２３１は、生成点表２４（図３）の生成点ＩＤ２７１に対応する。オブジェクトＩＤ２３２は、生成点表２４(図３)の型２７２に格納されたオブジェクトの型２７２を特定するＩＤである。生成時時間情報２３３は、オブジェクトが生成された時の時間情報（擬似経過時間２２）を示す。
【００３３】
このように、オブジェクト生成表２３と、生成点表２４を参照することにより、両者の情報を対応付けることができるようになっている。例えば、オブジェクト生成表２３の１行目は、生成点ＩＤ２３１が“1”であるので、生成点表２４の生成点ＩＤ２７１が“1”である生成点情報を参照し、メソッド名＝“m1”の行番号＝“line１”で、オブジェクトの型＝”Java.lang.Object"という情報と対応することがわかる。同様に、それらの情報がオブジェクトを特定するＩＤ＝“O1”で、オブジェクトを生成した時の時間情報である生成時間情報＝“T1”と対応することがわかる。
【００３４】
疑似経過時間２２は、ＪａｖａＶＭ１０が管理する値である。ＪａｖａＶＭ１０は、独自に管理する疑似経過時間２２を持つ。この擬似経過時間２２は、計算機システム１００が有するシステム時間とは異なり、所定の契機で更新される時間である。所定の契機とは、メモリ２内の特定の記憶領域に格納されたデータの削除（無効）に関する処理である。第１実施形態では、ガーベッジコレクタ１３によりＧＣ処理の実行を契機として、ＪａｖａＶＭ１０が、擬似経過時間をインクリメント（Ｔ１→Ｔ２→Ｔ３・・・）するようになっている。
【００３５】
オブジェクト寿命解析部１９は、Ｊａｖａヒープ２１内に格納されたオブジェクトの要否判定を行い、不要となったオブジェクトを検出し、更に、そのオブジェクトの寿命を管理する機能を有する。ここで、オブジェックトの寿命とは、そのオブジェクトの生成若しくはそのオブジェクトがＪａｖａヒープ２１に配置された時の擬似経過時間２２（生成時時間情報）と、現在の擬似経過時間２２との差分である。また、「現在の」擬似経過時間２２とは、オブジェクト寿命解析部１９がオブジェクトの要否判定によって不要オブジェクトを抽出した時点の擬似経過時間２２である。
【００３６】
オブジェクトの要否判定は、オブジェクト寿命解析部１９が、Ｊａｖａヒープ２１に配置されているオブジェクトに対し、後のプログラム実行に不要なオブジェクトであるか否かを解析することによって行われる。オブジェクト寿命解析部１９は、後のプログラム実行に必要なオブジェクトは、プログラム実行中のスタックやレジスタ等から参照を辿ることで到達可能なオブジェクトであり、それ以外のオブジェクトを後のプログラム実行に不要なオブジェクトとする判定する。この処理は、例えば、ガベージコレクタ１３がＧＣを実行する際に実施するオブジェクトの要否判定処理と同様の処理手順である。不要と判定されたオブジェクトは、オブジェクト寿命解析部１９によって、不要オブジェクトとして検出される。
【００３７】
また、オブジェクトの寿命は、オブジェクト解析部１９によって不要オブジェクトとして検出されたオブジェクトが生成されたときの擬似経過時間２２と、そのオブジェクトが不要オブジェクトとして検出された時の擬似経過時間２２とに基づいて算出される。具体的には、オブジェクト解析部１９は、オブジェクト生成表２３を参照し、不要オブジェクトとして検出したオブジェクトのオブジェクトＩＤ２３２を指標に生成時間情報２３３を取得する。次いで、現時点の疑似経過時間２２を取得し、両者の差分を算出し、その差分を検出した不要オブジェクトの寿命とする。算出されたオブジェクトの寿命は、寿命情報表２６で管理される。
【００３８】
図５に、寿命情報表２６の構成例を示す。寿命情報表２６は、生成点ＩＤ２６１と、寿命２６２とからなる。生成点ＩＤ２６１は、生成点表２４の生成点ＩＤ２７１及びオブジェクト生成表２３の生成点ＩＤ２３１と対応するものである。オブジェクト解析部１９は、オブジェクトの寿命を算出する際に利用したオブジェクトＩＤ２３２（図４）を指標として生成点ＩＤ２３１を取得し、算出したオブジェクトの寿命２６２と対応付けて、寿命情報表２６に登録するようになっている。
【００３９】
以上が、計算機システム１００の構成である。次に、図６〜図８を用いて、計算機システム１００の処理動作について説明する。
【００４０】
図６に、オブジェクト管理部１８の処理を示す。
【００４１】
オブジェクト管理部１８は、プログラム実行部１２がオブジェクトを生成すると、そのオブジェクトに関する情報（オブジェクトの型、メソッド名及び行番号）をプログラム実行部１２から取得する(Ｓ１４０)。
【００４２】
次いで、オブジェクト管理部１８は、取得したそれらの値が、生成点表２４に登録されているかを確認する（Ｓ１４２）。オブジェクト管理部１８は、登録済みの場合（Ｓ１４２：Ｙｅｓ）、本処理を終了し、登録されていない場合（Ｓ１４２：Ｎｏ）、生成点表２４にプログラム実行部１２から取得したオブジェクトの型２７２、メソッド名２７３及び行番号２７４と、それらオブジェクトに関する情報を特定する生成点ＩＤ２７１を生成し、生成点表２４に登録する（Ｓ１４４）。
【００４３】
次いで、オブジェクト管理部１８は、擬似経過時間２２を取得し、オブジェクト生成表２３に生成時時間情報２３３を登録し、更に、対応する生成点ＩＤ２３１及びオブジェクトＩＤ２３２を供に登録し（Ｓ１４６）、処理を終了する。
【００４４】
図７に、オブジェクト配置部１４Ａの処理フローを示す。
【００４５】
先ず、オブジェクト配置部１４Ａは、生成されたオブジェクトのサイズ分の領域をＪａｖａヒープ２１から確保する（Ｓ１６０）。Ｊａｖａヒープ２１上に、サイズ分の領域が不足しており、領域確保に失敗した場合（Ｓ１６２：Ｎｏ）、オブジェクト配置部１４Ａは、ガベージコレクタ１３にＧＣの実行依頼を送信する（Ｓ１６４）。実行依頼を受けたガベージコレクタ１３によってＪａｖａヒープ２１上のオブジェクトが回収され、Ｊａｖａヒープ２１は解放される。Ｓ１６４で、ガベージコレクタ１３がオブジェクトの回収を終えたタイミングで、オブジェクト配置部１４Ａは、ＪａｖａＶＭ１０に対し疑似経過時間２２の更新依頼を送信する（Ｓ１６６）。更新依頼を受信したＪａｖａＶＭ１０によって、擬似経過時間２２がインクリメント（１の加算）されうことで、疑似経過時間２２が更新される。その後、処理をＳ１６０に戻す。
【００４６】
オブジェクト配置部１４Ａは、Ｊａｖａヒープ２１上に、生成するオブジェクトのサイズ分の領域を確保できた場合（Ｓ１６２：Ｙｅｓ）、確保した領域にオブジェクトを配置し、処理を終了する（Ｓ１４８）。
【００４７】
図８に、オブジェクト寿命解析部１９の処理フローを示す。
【００４８】
オブジェクト寿命解析部１９は、Ｊａｖａヒープ２１に配置されているオブジェクトに対し、後のプログラム実行に必要か否かを解析する（Ｓ１９０）。オブジェクト寿命解析部１９は、プログラム実行中のスタック又はレジスタなどから参照を辿り、当該オブジェクトに到達可能であるか否かを判定（Ｓ１９２）することで解析を行う。到達できないオブジェクトは、後のプログラム実行に不要なオブジェクトと判定される。
【００４９】
オブジェクト寿命解析部１９が、不要なオブジェクトを検出した場合（Ｓ１９２：Ｙｅｓ）、そのオブジェクトを抽出する（Ｓ１９４）。オブジェクト寿命解析部１９は、抽出したオブジェクトのオブジェクトＩＤ(例えば、“O1”)を指標にオブジェクト生成表２３から生成時時間情報２３３（例えば、“T1”)を取得し又現時点の疑似経過時間２２（“Tn”）を取得する（Ｓ１９６）。次いで、オブジェクト寿命解析部１９は、TnとＴ1との差分をオブジェクトＩＤ“O1”の寿命とする（Ｓ１９８）。
【００５０】
そして、オブジェクト寿命解析部１９は、オブジェクト生成表２３からオブジェクトＩＤ“O1”に対応する生成点ＩＤ２３１を取得し、算出した寿命２６４と関連付けて、寿命情報表２６に登録する（Ｓ２００）。
【００５１】
以上の構成及び処理を行う計算機システム１００が、オブジェクトの寿命を管理する全体的な流れについて、図９を用いて説明する。なお、図９の例では、Ｊａｖａプログラム２０Ａ（図２）を実行するものとして説明する。
【００５２】
図９に、計算機システム１００の全体的な処理の流れを模式的に示す。図９において、横軸５０は時間軸である。また、横軸５０上には、プログラム実行中に発生したＧＣのタイミングをプロットしている。ＧＣの発生に応じて疑似経過時間２２が1ずつ増加する様を示している。図中の黒三角印は、Ｊａｖａプログラム２０Ａがプログラムを実行し、オブジェクトを生成した時点を示し、Ｔ１、Ｔ２、Ｔ３及びＴ４の４つ時点を示している。Ｔ１~Ｔ４を指す各吹き出し中のコードは、夫々の時点で実行されるＪａｖａプログラム２０Ａ中の行の内容である。図中にある生成点表２４−１及びオブジェクト生成表２３−１は、Ｔ１においてＪａｖａプログラム２０Ａを実行したときの各表の内容を示し、生成点表２４−２及びオブジェクト生成表２３−２は、Ｔ２において、Ｊａｖａプログラム２０Ａを実行したときの各表の内容を示すものであり、各表がＴ１~Ｔ２において遷移する状態を表している。同様に、図中下方に示す寿命情報表２６−１及び２６-２は、Ｔ３~Ｔ４での遷移する状態を表している。
【００５３】
時間Ｔ１において、プログラム実行部１２がＪａｖａプログラムの３行目”Sample s1=new Sample();”を実行すると、プログラム実行部１２は、Sampleオブジェクト“ｓ”を生成する。この時、オブジェクト管理部１８が、生成したオブジェクトの型“Sample”、生成点のメソッド名“main”及び行番号“３”と、これらを特定する生成点ＩＤ“１”を生成点表２４−１に登録する。また、オブジェクト管理部１８は生成点ＩＤ“１”と、オブジェクトＩＤ“O1”及び生成時間情報＝「２」をオブジェクト生成表２３−１に登録する。
【００５４】
その後、プログラム実行部１２はＪａｖａプログラム２１の実行を進め、Ｔ２において、Ｊａｖａプログラム２０Ａの５行目“// any operations”を実行し、Objオブジェクト“o”を生成する。ここでも同様にオブジェクト管理部１８は、Objオブジェクト“o”の生成点での情報を生成点表２４−２及びオブジェクト生成表２３−２に登録する。
【００５５】
更に、プログラム実行部１２が処理を進め、時間Ｔ３において、Ｊａｖａプログラム２０Ａの８行目を実行すると、時間Ｔ１で作成したSampleオブジェクト“ｓ”不要になるものとする。オブジェクト寿命解析部１９は、Sampleオブジェクト“ｓ”が、不要になったことを検出する。Sampleオブジェクトを特定するＩＤ“O1”を用いて、オブジェクト生成表２３−２から生成点ＩＤ“1”及び生成時間情報＝「２」を取得する。また、オブジェクト寿命解析部１９は、現時点の疑似経過時間２２＝「５」を取得し、取得した生成時間情報＝「２」との差分「３」を算出し、これを寿命とする。オブジェクト寿命解析部１９は、生成点ＩＤ“１”及び寿命「３」を関連付けて寿命情報表２６−１に登録する。
【００５６】
また、プログラム実行部１２が、Ｊａｖａプログラム２０Ａの9行目“//any operations”を実行するとObjオブジェクト“o”が不要になるものとする。上述した、Ｔ３の場合と同様に、オブジェクト寿命解析部１９が、不要オブジェクト及びその寿命とを検出し、寿命情報表２６−２に登録する。この様にして、オブジェクト管理部１８と、オブジェクト寿命解析部１９とが生成点表２４、オブジェクト生成表２３及び寿命情報表２６を作成することで、オブジェクトの寿命管理を行うことができる。
【００５７】
以上、第１実施形態によれば、従来、人手により解析していたオブジェクトの寿命や、解析が難しかった大規模なシステムにおけるオブジェクトの寿命を動的に管理することができる。
特に、動的にオブジェクトの寿命を管理できるようにすることで、当該寿命情報を用いて、特定のオブジェクトを削除したり、ＧＣ対象外のメモリ領域に移動させたりといった種々のメモリ管理技術に応用することで、それら種々のメモリ管理技術の処理効率及び利便性を更に向上させる効果が期待できる。
【００５８】
また、そのオブジェクトがプログラム上のどの位置で生成されたものかも知り得るため、そのオブジェクトに対し、特別な処理を実装することも可能である。
【００５９】
＜第１実施形態の変形例＞
上述した第１実施形態では、プログラム実行部１２が生成したオブジェクトの生成点における情報が、生成点表２４及びオブジェクト生成表２３に既に登録済みである場合、登録しないように構成している（図６：Ｓ１８２参照）。この構成は、オブジェクト寿命解析部１９が行う、同じ生成点で生成されるオブジェクトの寿命解析を１回にでき、解析処理時間を短縮できるという効果がある。
【００６０】
ここで、同一の生成点で生成されるオブジェクトでも計算機システム１００の負荷状況に応じてその寿命が異なる場合も考えられる。この場合、同一の生成点で生成されるオブジェクトでもオブジェクト生成表２３等に登録し、オブジェクトの寿命解析を実施することも考えられる。以下に、第１の実施形態の変形例として、同一の生成点で生成されるオブジェクトが既にオブジェクト生成表２３等に登録されていても、オブジェクト生成表２３及びオブジェクト寿命情報表２６にそのオブジェクトに関する情報を登録する構成を説明する。
【００６１】
図１０に、変形例におけるオブジェクト管理部１８の処理を示す。
【００６２】
オブジェクト管理部１８は、プログラム実行部１２がオブジェクトを生成すると、オブジェクトに関する情報（オブジェクトの型、メソッド名、行番号）をプログラム実行部１２から取得する（Ｓ２２０）。オブジェクト管理部１８は、それらの値に基づいて生成点表２４に同一の値が登録済みか否かを判断する（Ｓ２２２）。オブジェクト管理部１８は、登録済みでないと判定する場合（Ｓ２２２：Ｎｏ）、生成点表２４にそれらの情報を登録し、本処理を終了する。
【００６３】
オブジェクト管理部１８は、登録済みであると判定する場合（Ｓ２２２：Ｙｅｓ）、生成点表２４上に登録されている同一の値に対応する生成点ＩＤ２７１を取得する。オブジェクト管理部１８は、生成点ＩＤ２７１に基づいて、オブジェクト生成表２３から、生成点ＩＤ２３１及びオブジェクトＩＤ２３２を読み出し、現在の疑似経過時間２２を生成時間情報２３３として、それら対応付けて、オブジェクト生成表２３に新たに登録し、本処理を終了する。
【００６４】
図１１は、同一の生成点で生成されたオブジェクトが、図１０の処理によって登録されたときのオブジェクト生成表２３の状態を示す。オブジェクトＩＤ２３２が“O1”と“Ｏ４”に対応する生成点ＩＤ２３１が、いずれも“1”となっている。即ち両者は、同一のオブジェクトの型、メソッド名及び行番号を有するオブジェクトが、異なる擬似時間情報２２（生成時間情報２３３）で生成されたことを意味する。
【００６５】
このようにして作成されたオブジェクト生成表２３を基に、オブジェクト寿命解析処理部１９が、オブジェクトの寿命を解析する。図１１に示すオブジェクト生成表２３において、オブジェクト寿命解析部１９がオブジェクトの寿命解析を実施すると、図１２に示すような寿命情報表２６が得られる。図１２において、１行目は生成点ＩＤ２６１が“1”であり、その寿命２６２が「１」であるのに対し、４行目も生成点ＩＤ２６２が“1”であるのに、その寿命２６２は「３」となっている。
【００６６】
しかしながら、この様な状態では、オブジェクト寿命解析部１９は、ある生成点で生成するオブジェクトの寿命を一意に決定することができない。そこで、オブジェクト寿命解析部１９は、寿命情報表２６で、同一の生成点ＩＤ２６１を有する寿命の平均を計算し、当該生成点ＩＤに対応する寿命を算出し、生成点とオブジェクトの寿命を１対１に対応付け、寿命情報表２６として保持する。
【００６７】
以上説明した変形例によれば、同一生成点で生成されたオブジェクトそれぞれに対し寿命解析を実施し、その平均値を同一生成点で生成されたオブジェクトの寿命とすることから、寿命解析の精度を比較的向上できるという効果がある。
【００６８】
〔第２実施形態〕
次に、本発明の第２実施形態について説明する。第１実施形態及びその変形例では、擬似経過時間２２の更新を、ガーベッジコレクタ１３のＧＣ発生を契機として更新するように構成した。これに対し第２実施形態は、擬似経過時間２２の更新契機を、オブジェクト配置部１４Ｂが、Ｊａｖａヒープ２１からオブジェクトを確保するための一定サイズの領域を確保したタイミングとすることを特徴の一つとするものである。
【００６９】
図１３に、本発明を適用した第２実施形態である計算機システム２００の構成を示す。計算機システム２００は、オブジェクト配置部１４Ｂの機能が、第１実施形態のオブジェクトは一部１４Ａとは異なり又領域確保情報２６を新たに有する構成となっている。また、第２実施形態では、Ｊａｖａヒープ２１が、短寿命オブジェクトを格納する短寿命領域２１１及び長寿命オブジェクトを格納する長寿命領域２１２をとる場合について、特に、説明する。更に、計算機システム２００は、オブジェクト生成表２３、生成点表２４及び寿命情報表２５の内容を含む寿命情報ファイル00が、外部記憶装置４に出力されるようになっている。
【００７０】
その他の機能部等の構成は第１実施形態と同様である。以下、第１実施形態との差異について主に説明する。
【００７１】
オブジェクト配置部１４Ｂは、第１実施形態のオブジェクト１４Ａと同様に、プログラム実行部１２が、Ｊａｖａプログラム２０Ａを実行することによって要求されたオブジェクトの生成を行い、Ｊａｖａヒープ２１の短寿命領域２１１に確保されたオブジェクトサイズ分の領域に、オブジェクトを配置する機能を有する。
【００７２】
オブジェクト配置分１４Ｂは、領域確保情報２６に、確保した分のメモリ容量を累積的に更新する機能を有するようになっている。ここで、オブジェクト配置部１４Ｂは、確保された領域に生成したオブジェクトを配置した後、今回の領域確保容量を領域確保情報２６に加算し、その累積値が閾値（容量閾値）を超える場合に、領域累積サイズをリセット（容量“０”）し、擬似経過時間２２の値に１を加算し、更新するようになっている。
【００７３】
逆に、短寿命領域２１１の領域確保に失敗した場合、オブジェクト配置部１４Ｂは、ガーベッジコレクタ１３にＧＣ実行要求を送信し、短寿命領域２１１を解放させるようになっている。
【００７４】
領域確保情報２６は、Ｊａｖａヒープ２１の短寿命領域２１1上で、オブジェクト配置部１４Ｂが確保している容量を示す情報である。容量は、オブジェクト配置部１４Ｂが領域確保情報２６をリセットするまで、累積的に加算されるようになっている。領域確保情報２６に累積加算された容量をリセットする際の容量閾値は、少なくとも短寿命領域２１１の容量以下であることが好ましい。なお、容量閾値は計算機システム２００に固定的に設定されたものでも良いし、入出力装置５を介して可変可能に入力することもできる。
【００７５】
以上の構成を有する計算機システム２００の処理動作について、図１４及び図１５を用いて説明する。
【００７６】
図１４に、オブジェクト配置部１４Ｂの処理フローを示す。
【００７７】
オブジェクト配置部１４Ｂは、プログラム実行部１２からのオブジェクト生成要求により、Ｊａｖａヒープ２１の短寿命領域２１１から、生成するオブジェクトのサイズ分の領域を確保する（Ｓ２５０）。
【００７８】
オブジェクト配置部１４Ｂは、領域確保の成否について判定を行う（Ｓ２５２）。オブジェクト配置部１４Ｂは、領域の確保に失敗した場合（Ｓ２５２：Ｎｏ）、ガベージコレクタ１３にＧＣの実行を要求し、Ｊａｖａヒープ２１の領域を解放させる(Ｓ２５４)。その後、オブジェクト配置部１４Ｂは、処理をＳ２００に戻す。これに対して、領域の確保に成功した場合（Ｓ２５２：Ｙｅｓ）、オブジェクト配置部１４Ｂは、確保したサイズを領域確保情報２６に加算する（Ｓ２５６）。
【００７９】
次いで、オブジェクト配置部１４Ｂは、今回確保した容量を加算した領域確保情報２６の容量が、容量閾値を超えているか否かの判定を行い（Ｓ２５８）、超えていない判定する場合、Ｓ２１０の処理に進む（Ｓ２６０：Ｎｏ）。これに対して、今回確保した容量を加算した領域確保情報２６の容量が、容量閾値を超えていると判定する場合（Ｓ２５８：Ｙｅｓ）、Ｓ２６４の処理に進む。
【００８０】
オブジェクト配置部１４Ｂは、現時点の擬似経過時間２２の値に１を加算し、擬似経過時間２２を更新する（Ｓ２６４）。その後、オブジェクト配置部１４Ｂは、容量確保情報２６の累積的な確保容量をリセット（“０”）にする（Ｓ２６６）。
【００８１】
Ｓ２５８：Ｎｏ、若しくはＳ２１６の後、オブジェクト配置部１４Ｂは、確保した領域に生成したオブジェクトを配置し（Ｓ２６０）、オブジェクト管理部１８に、今回生成及び配置したオブジェクトの生成情報を登録する指示を送信し（Ｓ２６２）、処理を終了する。
【００８２】
以上の動作処理を行うオブジェクト配置部１４Ｂを有する計算機システム２００の全体的な動作を説明する。
【００８３】
図１５に、計算機システム２００が実行する処理を模式的に示す。本図は、第１実施形態の図９に示した内容と類似するものである。図１５中で、ヒープ確保累積量５１は、擬似経過時間２２の各時間間隔における短寿命領域２１１の確保量の遷移を棒グラフで示す。また、実行されるプログラムは、Ｊａｖａプログラム２０Ａであり、図１５の各吹き出し内のコードや、生成点表２４、オブジェクト生成表２３及び寿命情報表２６の遷移も第１実施形態の図９と同様である。
【００８４】
以上のように、第２実施形態の計算機システム２００によれば、Ｊａｖａヒープ２１の短寿命領域２１１に確保されるオブジェクト容量に応じて、オブジェクトの寿命を管理することができる。特に、計算機システム２００では、閾値の設定により擬似経過時間２２の更新をより柔軟に変更することが可能でき、オブジェクトの寿命をより精度良く実行することができるという効果がある。この点、ＧＣの実行を契機に擬似経過時間２２を更新する第１実施形態の計算機システム１００から更に、利便性が向上するという効果を期待することができる。
【００８５】
また、この擬似経過時間２２を更新するために領域確保情報２６の容量閾値を柔軟に設定することができる構成は、寿命情報が低い精度で十分なケースにおいても、擬似経過時間２２の更新処理を少なくすることに利用することもでき、本更新処理のオーバヘッドを軽減するという効果がある。
【００８６】
なお、第２実施形態の計算機システム２００は、Ｊａｖａヒープ２１上の短寿命領域２１１を対象としてオブジェクトの寿命を管理する構成としたが、本発明はこの構成に限られるものではなく、長寿命領域２１２を対象として寿命の管理を行う構成とすることも可能である。
【００８７】
〔第３実施形態〕
次に、本発明を適用した第３実施形態である計算機システム３００について説明する。
【００８８】
図１６に、計算機システム３００の構成を示す。計算機システム３００は、第１及び第２実施形態における計算機システム１００及び２００の構成を概ね共通し、更に、その構成の特徴の一つとして、ＧＣの管理対象外のメモリ領域（以下、「外部メモリ領域」という。）を有する。ＪａｖａＶＭ１０の様なＪａｖａマシンでは、通常、オブジェクトを格納するメモリ領域としてＪａｖａヒープ２１を有する。上述のように、Ｊａｖａヒープ２１は、ガーベッジコレクタ１３によるＧＣ管理の対象となるメモリ領域である。これに対し、外部メモリ２５は、ガーベッジコレクタ１３によるＧＣ管理の対象とはならないメモリ領域である。
【００８９】
計算機システム３００は、オブジェクトの寿命に関連して、その配置先を外部メモリ領域２７或いはＪａｖａヒープ２１にするかの処理を行うことを特徴の一つとする。更に、計算機システム３００は、外部メモリ領域２７にオブジェクトを配置する際、寿命が近いオブジェクト同士を同一の外部メモリ領域２７に配置するようにすることを特徴の一つとする。
【００９０】
以下、実施形態１及び２との差異点について主に説明する。
【００９１】
先ず、計算機システム３００は、第２実施形態の計算機システム２００の構成に加えて、メモリ２に外部メモリ領域２７及び外部メモリ管理表２８を有する。更に、計算機システム３００は、ＪａｖａＶＭ１０の機能部として、オブジェクト配置部１４Ｃ、外部オブジェクト配置部１５、外部オブジェクト配置部１６及び外部メモリ解放部１７を有する。
【００９２】
外部メモリ領域２７は、ＣＧの対象外であると供にプログラム実行部１２が生成したオブジェクトを配置することが可能なメモリ領域である。なお、図１６では、簡単の為に外部メモリ領域２７を一つの纏まった領域として図示しているが、後述する外部メモリ確保部１６の機能により、複数の領域として確保・管理することができるものである。即ち外部メモリ領域２７は、複数確保されることが可能であり、同時に、個別に解放されることが可能なメモリ領域である。
【００９３】
オブジェクト配置部１４Ｃは、第１及び第２実施形態のオブジェクト配置部１４Ａ及び１４Ｂと同様に、オブジェクトの生成及び配置を行う機能部であるが、プログラム実行部からのオブジェクト配置要求ではなく、後述する外部オブジェクト配置部１５からの呼び出し命令を契機として処理を開始する点が異なる。その他の構成は同様である。
【００９４】
外部オブジェクト配置部１５は、プログラム実行部１２からのオブジェクトの配置命令を契機として呼び出される。外部オブジェクト配置部１５は、オブジェクトの配置命令を受けると、配置するオブジェクトに関する生成情報が、既に生成点表２４に登録されているかを判定する機能を有する。より詳細には、配置するオブジェクト型、メソッド名及び生成点の行番号をプログラム実行部１２から取得し、これらに基づいて生成点表２４を検索することで判定を行う。生成点表２４に、配置するオブジェクトに関するこれらの生成情報が記録されている場合、生成点ＩＤに基づいて寿命情報表２６から対応する寿命を取得する。取得した寿命が所定の閾値を超える場合、外部メモリ確保部１６に、処理を渡すようになっている。
【００９５】
他方、取得した寿命が所定の閾値以下である場合や生成するオブジェクトに関する生成情報が生成点表２４に登録されていない場合、処理をオブジェクト配置部１４Ｃに渡すようになっている。
【００９６】
ここで、所定の閾値は、入出力装置５を介して、ユーザが任意に設定することも可能であるし、固定値として予めシステムに設定するように構成することもできる。第３実施形態では、ユーザが任意に設定可能な構成であるものとする。
【００９７】
外部オブジェクト確保部１６は、外部オブジェクト配置部１５からの処理要求を受け、擬似経過時間及び生成するオブジェクトの寿命に関する情報が記録された外部メモリ管理表２８を参照し、外部メモリ領域２７への領域の確保を行う機能や、外部メモリ管理表２８の更新等を行う機能を有する。
【００９８】
図１７に、外部メモリ管理表２８の構成を模式的に示す。外部メモリ管理表２８は外部メモリ領域２７が確保された時点の生成時間情報２８１（擬似経過時間２２）と、そこに配置される対象となるオブジェクトの寿命２８２と、外部メモリ領域２７を特定する外部メモリＩＤ２８３とが夫々対応付けられて記録される表である。図１７中の1行目の例では、外部メモリＩＤが“ex1”である外部メモリ領域２７は、生成時間情報２８１（疑似経過時間２２）が“１”の時に確保され、そこへ配置されるオブジェクトの寿命が「１」であることを示している。この様に、外部メモリ管理表２８で疑似経過時間、オブジェクトの寿命及び外部メモリＩＤを関連付けて管理することで、同一の疑似経過時間２２に生成する同一の寿命を持つオブジェクトを同一の外部メモリへ配置することができるようになっている。
【００９９】
なお、第３実施形態では、外部メモリ領域２７へ配置するオブジェクトを生成した時の疑似経過時間２２及びそのオブジェクトの寿命が、外部メモリ管理表２８に登録された生成時間情報２８１及び寿命２８２に一致する例を説明するが、これらが完全に一致していなくても良い。例えば、所定の幅（余裕）を持って、疑似経過時間２２や寿命の値が一致するものとする構成であってもよい。
【０１００】
外部オブジェクト解放部１７は、外部メモリ領域２７の解放処理を行う機能を有する。ここで、外部メモリ領域２７の解放とは、外部メモリ領域２７のアドレスの無効、アドレスの無効並びに配置されているデータ（オブジェクト）の削除及びアドレスは無効にせずに、データ（オブジェクト）のみの削除という、全ての意味を含む。
【０１０１】
外部メモリ領域２７の解放処理は、入出力装置５を介して入力されたユーザからの解放指示、外部メモリ領域２７に配置されたオブジェクトが参照する若しくは参照される他のオブジェクトが無くなったとき或いはそれらプログラム実行部１２が実行するＪａｖａプログラム２１の終了といった種々の契機で実行されるようになっている。
【０１０２】
また、外部オブジェクト解放部１７は、外部メモリ領域２７を解放する際、外部メモリ管理表２８から、解放対象の外部メモリ領域２７の外部メモリＩＤ２８３と、それに対応する生成時間情報２８１及び寿命２８２を外部メモリ管理表２８上で無効（削除）にする処理を行うようになっている。
【０１０３】
次いで、計算機システム３００の各処理部の処理動作について説明する。
【０１０４】
図１８に、外部オブジェクト配置部１５の処理フローを示す。
【０１０５】
先ず、外部オブジェクト配置部１５は、プログラム実行部１２から、生成されたオブジェクトの型、メソッド名及び行番号を取得する（Ｓ３１０）。
【０１０６】
次いで、外部オブジェクト配置部１５は、それらの情報に基づいて生成点表２４を検索し、既に登録されているか否かの判定を行う（Ｓ３１２）。既に登録されていると判定する場合（Ｓ３１２：Ｙｅｓ）、外部オブジェクト配置部１５は、対応する生成点ＩＤ２７１を取得し、寿命情報表２６から生成点ＩＤ２７１に対応する寿命２６２を取得する（Ｓ３１４）。
【０１０７】
次いで、外部オブジェクト配置部１５は、取得した寿命２６２が、所定の閾値を超えるか否かを判定する（Ｓ３１６）。寿命２６２が所定の閾値を超えると判定する場合（Ｓ３１６：Ｙｅｓ）、外部メモリ確保部１６を呼び出し、オブジェクトの配置領域を確保させる（Ｓ３１８）。その後、外部オブジェクト配置部１５は、確保されたメモリ領域にオブジェクトを格納し、本処理を終了する（Ｓ３２０）。
【０１０８】
また、Ｓ３１２において、外部オブジェクト配置部１５は、プログラム実行部１２で生成されたオブジェクトの生成情報が生成点表２４に登録されていないと判定する場合（Ｓ３１２：Ｎｏ）或いはＳ３１６において、生成点ＩＤ２７１と対応する寿命２６２が所定の閾値以下と判定する場合（Ｓ３１２：Ｎｏ）、オブジェクト配置部１４Ｃに制御を移し、本処理を終了する。
【０１０９】
次に、外部メモリ確保部１６の処理について説明する。図１９に、外部メモリ確保部１６の処理フローを示す。
【０１１０】
外部メモリ確保部１６は、外部オブジェクト配置部１５から受信したオブジェクトの擬似経過時間２２及び寿命２６２に基づいて、外部メモリ管理表２８を検索し、これら擬似経過時間２２及び寿命２６２に対応する外部メモリＩＤが存在するか否かの判定を行う（Ｓ３４０）。
【０１１１】
存在すると判定する場合（Ｓ３４２：Ｙｅｓ）、外部メモリ確保部１６は、疑似経過時間２２及び寿命２６２に対応する外部メモリＩＤ２８３を取得し（Ｓ３４４）、当該外部メモリＩＤに対応する外部メモリ領域２７のアドレスを外部オブジェクト配置部１５に通知し（Ｓ３４６）、本処理を終了する。即ち外部メモリ確保部１６は、Ｓ３４６においてオブジェクトを配置するメモリ領域の確保を行う。
【０１１２】
他方、Ｓ３４２の判定において、対応する外部メモリＩＤ２８３が外部メモリ管理表２８３に存在しないと判定する場合（Ｓ３４２：Ｎｏ）、外部メモリ確保部１６は、メモリ２から外部メモリ領域２７新規に確保する（Ｓ３４８）。
【０１１３】
次いで、外部メモリ確保部１６は、新規に確保した外部メモリ領域２７を特定する外部メモリＩＤ２８３を生成し、外部メモリ管理表２８に登録すると供にオブジェクトの擬似経過時間２２及び寿命２６２を、生成時間情報２８１及び寿命２８２として、外部メモリＩＤ２８３と対応付けて、外部メモリ管理表２８に登録する（Ｓ３５０）。その後、外部メモリ確保部１６は、Ｓ３４６に進み、生成した外部メモリＩＤ２８３に対応するアドレスを外部オブジェクト配置部１５に通知し、本処理を終了する。
【０１１４】
図２０に、計算機システム３００が実行する処理例を模式的に示す。本図は、第１実施形態の図９及び第２実施形態の図１５に示した内容と類似するものであり、時間軸５０に沿って、擬似経過時間２２が更新される様を示している。擬似経過時間２２の更新契機は、第１実施形態で述べたＧＣ発生のタイミング若しくは実施形態２で述べた短寿命領域２１１に累積加算されたオブジェクト容量が閾値を超えたタイミングの何れでも適用可能であるが、図２０の説明では累積加算されたオブジェクト容量が閾値を超えたタイミングで、擬似経過時間２２が更新されるものとする。
【０１１５】
また、生成されたオブジェクトを外部メモリ領域２７に配置するか否かの判断で使用するオブジェクト寿命の閾値は、ユーザが入出力装置５を介して設定した“4”であるものとする。
【０１１６】
また、図２０は、外部メモリ領域２７、外部メモリ管理表２８について、時間Ｔ１、Ｔ２及びＴ４の時点で生成されたオブジェクトを例としてその状態遷移を示す。更に、生成点表２４及び寿命情報表２５は、既にオブジェクトの寿命解析が行われているものとする。
【０１１７】
また、図２０を用いた説明では、Ｊａｖａプログラム２０Ｃを適用するものとする。図２１に、Ｊａｖａプログラム２０Ｃを示す。このプログラムは“Test”クラスが定義されており、その中で“main”メソッドが定義されている。図２０の説明において、ＪａｖａＶＭ１０は、このプログラムを繰り返し実行するものとする。
【０１１８】
先ず、時間Ｔ１において、プログラム実行部１２がＪａｖａプログラム２０Ｃの３行目“Sample s1=new Sample();”を実行する際、Sampleオブジェクト“s1“を生成する。外部オブジェクト配置部１５は、生成するオブジェクトの型”Ｓａｍｐｌｅ”と、生成点のメソッド名“main”と、行番号“3”とに基づいて生成点表２４を検索し、対応する生成点ＩＤ“1”を取得する（生成点表の１行目）。
【０１１９】
外部オブジェクト配置部１６は、取得した生成点ＩＤ“1”に基づいて寿命情報表２５を検索し、対応する寿命“5”を取得する。ユーザにより予め設定された寿命の閾値は“４”であることから、外部オブジェクト配置部１５は、外部メモリ確保部１６に外部メモリ領域２７の確保を依頼し、領域確保の後、生成されたオブジェクト“s1”を、確保された領域に配置する（外部メモリ２５−１参照）。
【０１２０】
この外部メモリ領域２７の確保時において、外部メモリ確保部１６は、現在の疑似経過時間“2”と、外部メモリ領域２７に配置するオブジェクトの寿命“5”に基づいて、外部メモリ管理表２８−１を検索し、対応する外部メモリＩＤの取得を試みる。外部メモリ管理表２８−１には、対応する情報が存在しない為、外部メモリ確保部１６は、新たな外部メモリ領域をメモリ２から確保する。その後、外部メモリ確保部１６は、疑似経過時間“2”と、オブジェクトの寿命“5”と、新規に生成した外部メモリＩＤ“ex1”を、外部メモリ管理表２８に対応付けて登録する（外部メモリ管理表２８-２参照）。
【０１２１】
その後、時間Ｔ２において、プログラム実行部１２がＪａｖａプログラム２０Ｃの４行目“Obj o1=new Obj();”を実行する際、Objオブジェクト“o1”を生成する。外部オブジェクト配置部１５は、生成されたオブジェクトの情報等から生成点表２４及び寿命情報表２５を検索し、オブジェクト“o1”の寿命“5”を取得する。この寿命はユーザが設定したオブジェクト寿命の閾値“４”よりも大きい為、外部オブジェクト配置部２５は、外部メモリ確保部１６に外部メモリ領域２７の確保を依頼し、確保された領域にオブジェクト“o1”を配置する（外部メモリ領域２５-２参照）。
【０１２２】
このときの外部メモリ確保部１６は、以下のように動作する。外部メモリ確保部１６は、当該オブジェクトの疑似経過時間“2”と、そのオブジェクトの寿命“5”に基づいて、外部メモリ管理表２８−２を検索し、対応する外部メモリＩＤの取得を試みる。その結果、先の処理によって登録された外部メモリＩＤ“ex1”を検出する。そこで、外部メモリ確保部１６は、オブジェクト“o1”の配置先として、外部メモリ領域“ex1”を外部オブジェクト配置部１５に通知する。なお、今回は、外部メモリ確保部１５が、外部メモリ管理表２８−２上から対応する外部オブジェクトＩＤを検出することができたので、外部メモリ管理表２８−２への登録処理は行わない。
【０１２３】
更にその後、時刻Ｔ３において、プログラム実行部１２が、Ｊａｖａプログラム２０Ｃの６行目“Obj o2=new Obj();”を実行する際、Objオブジェクト“o2”を生成する。外部オブジェクト配置部１５は、生成されたオブジェクトの情報等に基づいて生成点表２４及び寿命情報表２５を検索し、オブジェクト“o2”の寿命“2”を取得する（生成点表２４の３行目、寿命情報表２５の３行目）。この寿命はユーザが設定したオブジェクト寿命の閾値“４”以下である為、オブジェクト配置部１４Ｃが、オブジェクト“o2”をＪａｖａヒープ２１の短寿命領域２１１に配置する。なお、今回は、外部メモリ確保部１５の処理は無い為、外部メモリ管理表２８への登録処理は発生しない。
【０１２４】
最後に、時刻Ｔ４において、プログラム実行部１２がＪａｖａプログラム２０Ｃの８行目“Sample s2=new Sample();”を実行する際、Sampleオブジェクト“s2”を生成する。外部オブジェクト配置部１６は、生成されたオブジェクトの情報等に基づいて生成点表２４及び寿命情報表２５を検索し、オブジェクト“s2”の寿命“10”を取得する（生成点表２４の４行目、寿命情報表２５の４行目）。この寿命はユーザが設定したオブジェクト寿命の閾値「４」よりも大きい為、外部オブジェクト配置部１５は、外部メモリ確保部１６に外部メモリ領域２７の確保を依頼し、確保された領域にオブジェクト“s2”を配置する。
【０１２５】
このときの外部メモリ確保部１６は、以下のように動作する。外部メモリ確保部１６は、オブジェクト“ｓ2”の疑似経過時間“5”と、そのオブジェクトの寿命“10”に基づいて、外部メモリ管理表２８−２を検索し、対応する外部メモリＩＤの取得を試みる。その結果、外部メモリ管理表２８−２には、該当する外部メモリＩＤが存在しない為、外部メモリ確保部１６は、新たな外部メモリ領域（ＩＤが“ex2”）をメモリ２から確保し、外部オブジェクト配置部１５に、新たな外部メモリ領域（ex２）を通知する。
【０１２６】
そして、外部メモリ確保部１６は、オブジェクト“s2”の疑似経過時間“5”と、オブジェクト“s2”の寿命“10”及び新たに生成した外部メモリＩＤ“ex2”とを外部メモリ管理表２８に登録する（外部メモリ管理表２８-３参照）。
【０１２７】
以上のように、この計算機システム３００は、オブジェクトの生成点を用いたオブジェクト寿命を利用し、配置する外部メモリ領域２７を変更することができるようになっている。このため生存期間がほぼ等しいオブジェクトを同一の外部メモリ領域２７に配置することができるという効果がある。一般に、同時期に生成されたオブジェクトが不要になるタイミングは、ほぼ同時期になる傾向がある。このことから、外部メモリ解放部１７によって、ある外部メモリ領域２７を解放する際、解放する外部メモリ領域２７に配置された１つのオブジェクトが不要であることを検出すれば、その外部メモリ領域２７に配置された他のオブジェクトも不要である可能性が高く、その外部メモリ領域２７を解放しても、システム上不具合が発生しない可能性も高いといえる。従って、外部メモリ領域２７の解放効率が向上するという効果がある。
【０１２８】
また、計算機システム３００は、オブジェクト寿命の閾値を、ユーザが任意に設定することができるように構成している。よって、オブジェクト寿命の閾値を調節することで、外部メモリ領域２７に配置するオブジェクトを柔軟に管理でき、ＪａｖａＶＭ１０のＧＣの発生回数を調整できるという効果がある。
【０１２９】
以上、本発明を実施するための形態について説明したが、本発明はこれらの構成に限定されるものではなく、その趣旨を逸脱しない範囲で種々の構成をとることが可能である。
【０１３０】
また、上述した各機能部を実現するソフトウェア等は、磁気的又は光学的な可搬の記録媒体に記録することもできるし、それらを用いてコンピュータにインストールすることもできる。更に、インターネット等のネットワークを介してダウンロードすることでコンピュータにインストールすることも可能である。
【符号の説明】
【０１３１】
１  ＣＰＵ
２  メモリ
３  補助記憶装置
４  外部記憶装置
５  入出力装置
１０  ＪａｖａＶＭ
１２  プログラム実行部
１３  ガーベッジコレクタ
１４Ａ、１４Ｂ、１４Ｃ  オブジェクト配置部
１５  外部オブジェクト配置部
１６  外部メモリ管理部
１７  外部メモリ解放部
１９  オブジェクト寿命解析部
２０Ａ、２０Ｃ  Ｊａｖａプログラム
２１  Ｊａｖａヒープ
２２  擬似経過時間
２３  オブジェククト生成表
２４  生成点表
２５  寿命情報表
２６  領域確保情報
２７  外部メモリ領域
２８  外部メモリ管理表
【図１】
0005618796.tif 000002
【図２】
0005618796.tif 000003
【図３】
0005618796.tif 000004
【図４】
0005618796.tif 000005
【図５】
0005618796.tif 000006
【図６】
0005618796.tif 000007
【図７】
0005618796.tif 000008
【図８】
0005618796.tif 000009
【図９】
0005618796.tif 000010
【図１０】
0005618796.tif 000011
【図１１】
0005618796.tif 000012
【図１２】
0005618796.tif 000013
【図１３】
0005618796.tif 000014
【図１４】
0005618796.tif 000015
【図１５】
0005618796.tif 000016
【図１６】
0005618796.tif 000017
【図１７】
0005618796.tif 000018
【図１８】
0005618796.tif 000019
【図１９】
0005618796.tif 000020
【図２０】
0005618796.tif 000021
【図２１】
0005618796.tif 000022
【図２２】
0005618796.tif 000023