(57)【要約】【課題】メモリリークの原因になるデータを容易に絞り込むことができるメモリリーク原因分析システムを提供する。【解決手段】残存データ特定手段８１は、プログラムの実行によってメモリに記憶される一のデータと、その一のデータの変化により影響を受ける依存関係にあると特定される他のデータとを関連付けた情報である依存情報をもとに、メモリ上に保持され続ける所定のデータと依存関係を有するデータをメモリ上に残存する残存データと特定する。リークデータ候補抽出手段８２は、残存データ特定手段８１が特定した残存データのうち、データの種類ごとの残存データ数が、先に特定した時よりも後に特定した時のほうが多い種類の残存データをメモリリークの候補データとして抽出する。依存関係連結手段８３は、メモリリーク候補抽出手段８２が抽出した各候補データの依存関係において共通するデータを連結する。【選択図】図２９
2011141761.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの実行によってメモリに記憶される一のデータと、当該一のデータの変化により影響を受ける依存関係にあると特定される他のデータとを関連付けた情報である依存情報をもとに、前記メモリ上に保持され続ける所定のデータと依存関係を有するデータをメモリ上に残存する残存データと特定する残存データ特定手段と、
前記残存データ特定手段が特定した残存データのうち、データの種類ごとの残存データ数が、先に特定した時よりも後に特定した時のほうが多い種類の残存データをメモリリークの候補データとして抽出するリークデータ候補抽出手段と、
前記メモリリーク候補抽出手段が抽出した各候補データの依存関係において共通するデータを連結する依存関係連結手段とを備えた
ことを特徴とするメモリリーク原因分析システム。
【請求項２】
リークデータ候補抽出手段は、残存データ特定手段が特定した残存データに付与されたデータの識別情報をもとに、先に特定した時の残存データと後に特定した時の残存データとで識別情報が一致する残存データをメモリリークの候補データとして抽出する
請求項１記載のメモリリーク原因分析システム。
【請求項３】
メモリ上のデータの種類と当該各データが依存するデータを示す情報とを含み、実行するプログラムに応じて定義される情報であるプロファイル情報から、所定の記述条件に合致する部分を一つのデータに関する情報の記述範囲と判定し、当該記述範囲からデータの種類とデータの識別情報とを抽出するデータ抽出手段と、
前記プロファイル情報における各データが依存するデータを示す情報から、一のデータと依存関係にある他のデータを特定して依存情報を作成する依存関係特定手段とを備え、
前記依存関係特定手段は、前記データ抽出手段が抽出した一のデータを示す識別情報が、他のデータが依存するデータを示す情報における識別情報の中に存在するか否かを前記プロファイル情報中の全てのデータに対して検索することにより当該一のデータと他のデータとが依存関係にあるか否かを特定し、
残存データ特定手段は、前記依存関係特定手段が作成した依存情報をもとにメモリ上の残存データを特定する
請求項１または請求項２記載のメモリリーク原因分析システム。
【請求項４】
依存関係連結手段が連結した各候補データの依存関係を可視化した可視化情報を生成する依存関係可視化手段を備え、
前記依存関係可視化手段は、依存関係連結手段が連結した依存関係の一部または全部が共通する部分を含む全ての種類のデータにおける依存情報を用いて前記依存関係をグラフ化し、前記共通する部分が依存情報に含まれる個数を算出し、当該個数を前記グラフにおいて対応する部分に付加した可視化情報を生成する
請求項１から請求項３のうちのいずれか１項に記載のメモリリーク原因分析システム。
【請求項５】
リークデータ候補抽出手段が抽出したデータの種類ごとに、当該種類のデータの依存関係と、依存関係を有するデータの組合せの数とを対応付けた種類別データ組合せ情報を作成する種類別データ組合せ情報作成手段と、
前記種類別データ組合せ情報作成手段が作成した種類別データ組合せ情報を記憶する依存関係記憶手段とを備え、
前記種類別データ組合せ情報作成手段は、作成した種類別データ組合せ情報を前記依存関係記憶手段に記憶させ、
依存関係連結手段は、前記依存関係記憶手段に記憶された種類別データ組合せ情報における依存関係のうち共通するデータを連結し、前記種類別データ組合せ情報におけるデータの組合せの数を対応する依存関係部分に関連付ける
請求項１から請求項４のうちのいずれか１項に記載のメモリリーク原因分析システム。
【請求項６】
依存関係記憶手段に記憶された種類別データ組合せ情報をもとに、指定された種類のデータごとの依存情報に含まれる各データ間を線で繋ぐことによりグラフ化した可視化情報を生成するデータ別可視化手段を備えた
請求項５記載のメモリリーク原因分析システム。
【請求項７】
依存関係記憶手段に記憶された種類別データ組合せ情報における各データに付加されたデータサイズをもとに、指定された種類のデータごとの依存情報に含まれる各データ間を線で繋ぎ、当該各データに前記データサイズを付加してグラフ化した可視化情報を生成するデータサイズ可視化手段を備えた
請求項５または請求項６記載のメモリリーク原因分析システム。
【請求項８】
メモリ上に記憶されたデータの種類と当該データのデータサイズとを含む情報から、所定の記述条件に合致する部分を一つのデータに関する情報の記述範囲と判定し、当該記述範囲からデータの種類と、当該種類のデータのデータサイズとを抽出するデータサイズ抽出手段と、
前記データサイズ抽出手段が抽出したデータの種類ごとに、前記データサイズを対応付けたデータサイズ対応情報を作成するデータサイズ対応情報作成手段とを備え、
前記データサイズ対応情報作成手段は、作成したデータサイズ対応情報を依存関係記憶手段に記憶させ、
前記データサイズ可視化手段は、依存関係記憶手段に記憶されたデータサイズ対応情報をもとに可視化情報を生成する
請求項７記載のメモリリーク原因分析システム。
【請求項９】
プログラムの実行によってメモリに記憶される一のデータと、当該一のデータの変化により影響を受ける依存関係にあると特定される他のデータとを関連付けた情報である依存情報をもとに、前記メモリ上に保持され続ける所定のデータと依存関係を有するデータをメモリ上に残存する残存データと特定し、
特定された前記残存データのうち、データの種類ごとの残存データ数が、先に特定した時よりも後に特定した時のほうが多い種類の残存データをメモリリークの候補データとして抽出し、
抽出された前記各候補データの依存関係において共通するデータを連結する
ことを特徴とするメモリリーク原因分析方法。
【請求項１０】
コンピュータに、
プログラムの実行によってメモリに記憶される一のデータと、当該一のデータの変化により影響を受ける依存関係にあると特定される他のデータとを関連付けた情報である依存情報をもとに、前記メモリ上に保持され続ける所定のデータと依存関係を有するデータをメモリ上に残存する残存データと特定する残存データ特定処理、
前記残存データ特定処理で特定した残存データのうち、データの種類ごとの残存データ数が、先に特定した時よりも後に特定した時のほうが多い種類の残存データをメモリリークの候補データとして抽出するリークデータ候補抽出処理、および、
前記メモリリーク候補抽出処理で抽出した各候補データの依存関係において共通するデータを連結する依存関係連結処理
を実行させるためのメモリリーク原因分析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリリーク原因分析システム、メモリリーク原因分析方法、及び、メモリリーク原因分析プログラムに関し、特に、メモリリークの原因になるデータをユーザが分析しやすくするメモリリーク原因分析システム、メモリリーク原因分析方法、及び、メモリリーク原因分析プログラムに関する。
【背景技術】
【０００２】
コンピュータプログラム（以下、プログラムと称す）が起こすエラーの一つにメモリリークがある。メモリリークとは、プログラムの動作中に、コンピュータの記憶領域（以下、メモリと称す）において使用可能なメモリの容量が徐々に減っていく現象のことである。通常、プログラムを作成するユーザは、プログラムの処理を実行するために一定量のメモリを確保し、必要がなくなり次第メモリを解放するようにプログラムを設計する。しかし、ユーザによるプログラムの設計間違いや不備があると、プログラムが処理のために確保したメモリ領域が解放されずに残存していくことになる。これがメモリリークである。
【０００３】
メモリリークによってプログラムが利用可能なメモリが減少すると、プログラムの異常終了、動作不安定、処理性能の低下などの問題が生じる。メモリリークを解決するためには、プログラム、またはプログラムが動作するコンピュータを再起動すればよい。しかし、電子商取引システムや経理系基幹システムなど、ミッションクリティカルなシステムを稼動させるプログラムを適用するコンピュータなどでは、再起動を実行することが困難な場合がある。このため、プログラム及びシステムを稼動する前のデバッグ作業において、メモリリークの原因となるプログラムを見つけることが重要となっている。そこで、メモリリークの原因を発見する様々な技術が提案されている。
【０００４】
特許文献１には、メモリ上のデータを抽出して、各データに対してメモリリークの危険性を分析することで、ユーザがメモリリークの原因になる箇所のデータを特定しやすくするメモリリークの原因箇所検出方法、及びその実行プログラムが記載されている。ここで、データとは、メモリ上に生成されるプログラム中の実際の値や文字列である。プログラミング言語によっては、データをインスタンスやオブジェクトと呼ぶこともある。
【０００５】
特許文献１に記載されたシステムでは、先の時刻と後の時刻におけるメモリ上のデータをそれぞれ抽出し、その差分になるデータに対してメモリリークの危険度を表す重み値を付与する。このとき、各データのサイズに応じて重みの値を変え、依存先データの重み値を依存元データの重み値に加算していくことで、最終的なデータの重み値を求める。これによって、ユーザは、メモリリークを引き起こす可能性のデータを簡単に見つけることができ、メモリリーク発生源の調査にかかる労力を減らすことができる。
【０００６】
また、特許文献２には、メモリリークの発生を検出するメモリリーク検出方法が記載されている。特許文献２に記載された検出方法では、コンピュータプログラムをｐ１回実行した場合のメモリの内容から同一のパターンの出現回数ａ１を計測し、また、コンピュータプログラムをｐ２回実行した場合のメモリの内容から同一のパターンの出現回数ａ２を計測する。そして、出現回数ａ１及びａ２の差が、コンピュータプログラムの実行回数ｐ１及びｐ２の差の整数倍である場合に、メモリリークが発生したことを検出する。
【０００７】
なお、特許文献３には、オブジェクトの依存関係が解消した場合に解放処理を実行する画像処理装置について記載されている。特許文献３に記載された画像処理装置では、複数のオブジェクトの依存関係を示す依存関係情報及び各オブジェクトが解放可能か否かを示す解放可能情報を記録する管理テーブルを参照し、解放可能なオブジェクトの依存関係が解消した場合に解放処理を行う。
【０００８】
また、特許文献４には、メモリリーク調査手段が記載されている。特許文献４に記載されたメモリリーク調査手段は、ルートセットから指定期間内に新規生成されたオブジェクトのうち、生存しているオブジェクトへ至る参照パス上の各オブジェクトを表示する。ユーザは、この画面を参照してメモリリークの調査に必要な情報を得ることができる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００５−３０１６６０号公報（段落００２４−００４９、図６、図８、図９）
【特許文献２】特開２００７−４２００７号公報（段落００１５−００１６）
【特許文献３】特開２００９−１９９３０３号公報（段落０１２７、段落０１３７−０１４７、図１２）
【特許文献４】特開２００６−３５０８７６号公報（段落００１５，００１７、図９）
【発明の概要】
【発明が解決しようとする課題】
【００１０】
特許文献１及び特許文献２に記載された方法では、先の時刻と後の時刻における増加データの有無とその増加データのサイズからメモリリークの可能性があるデータを抽出する。しかし、この場合、メモリ上に残存すべきデータであったとしても、また、将来的にはメモリ上から解放されるデータであったとしても、メモリリークを引き起こす可能性のあるデータとして扱われてしまう。そのため、メモリリークの発生原因などを正確に分析することができないという課題がある。
【００１１】
また、メモリ上に存在するデータの関係は複雑に絡み合っていることが多い。特許文献４に記載されたメモリリーク調査手段が表示する参照パス上のオブジェクトを眺めただけでは、メモリリークの原因になるデータを絞り込むことは困難である。このような場合であっても、メモリリークの原因になるデータを容易に絞り込めることが望ましい。
【００１２】
そこで、本発明は、メモリリークの原因になるデータを容易に絞り込むことができるメモリリーク原因分析システム、メモリリーク原因分析方法、及び、メモリリーク原因分析プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明によるメモリリーク原因分析システムは、プログラムの実行によってメモリに記憶される一のデータと、その一のデータの変化が影響を与える依存関係にあると特定される他のデータとを関連付けた情報である依存情報をもとに、メモリ上に保持され続ける所定のデータと依存関係を有するデータをメモリ上に残存するデータと特定する残存データ特定手段と、残存データ特定手段が時刻ごとに特定した残存データのうち、データの種類ごとの残存データ数が、先の時刻よりも後の時刻のほうが多い種類の残存データをメモリリークの候補データとして抽出するリークデータ候補抽出手段と、メモリリーク候補抽出手段が抽出した各候補データの依存関係において共通するデータを連結する依存関係連結手段とを備えたことを特徴とする。
【００１４】
本発明によるメモリリーク原因分析方法は、プログラムの実行によってメモリに記憶される一のデータと、その一のデータの変化が影響を与える依存関係にあると特定される他のデータとを関連付けた情報である依存情報をもとに、メモリ上に保持され続ける所定のデータと依存関係を有するデータをメモリ上に残存するデータと特定し、時刻ごとに特定された残存データのうち、データの種類ごとの残存データ数が、先の時刻よりも後の時刻のほうが多い種類の残存データをメモリリークの候補データとして抽出し、抽出された各候補データの依存関係において共通するデータを連結することを特徴とする。
【００１５】
本発明によるメモリリーク原因分析プログラムは、コンピュータに、プログラムの実行によってメモリに記憶される一のデータと、その一のデータの変化が影響を与える依存関係にあると特定される他のデータとを関連付けた情報である依存情報をもとに、メモリ上に保持され続ける所定のデータと依存関係を有するデータをメモリ上に残存するデータと特定する残存データ特定処理、残存データ特定処理で時刻ごとに特定した残存データのうち、データの種類ごとの残存データ数が、先の時刻よりも後の時刻のほうが多い種類の残存データをメモリリークの候補データとして抽出するリークデータ候補抽出処理、及び、メモリリーク候補抽出処理で抽出した各候補データの依存関係において共通するデータを連結する依存関係連結処理を実行させることを特徴とする。
【発明の効果】
【００１６】
本発明によれば、メモリリークの原因になるデータを容易に絞り込むことができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の第１の実施形態におけるメモリリーク原因分析システムの構成例を示すブロック図である。
【図２】トレース情報の例を示す説明図である。
【図３】データの依存関係を連結する例を示す説明図である。
【図４】第１の実施形態における動作の例を示すフローチャートである。
【図５】プロファイル中に記載されたメモリ上のデータの種類、及び、データのＩＤ番号の例を示す説明図である。
【図６】データの依存関係を特定する動作の例を示すフローチャートである。
【図７】データの依存関係を示す情報の例を示す説明図である。
【図８】メモリ上に残存するデータを特定する動作の例を示すフローチャートである。
【図９】メモリ上に残存するデータを特定する動作の例を示す説明図である。
【図１０】メモリリークの候補データを特定する動作の例を示すフローチャートである。
【図１１】メモリリークの候補データを特定する動作の例を示す説明図である。
【図１２】メモリリークの候補データを特定する別の方法の動作の例を示す説明図である。
【図１３】メモリリークの候補データの依存関係を連結する動作の例を示すフローチャートである。
【図１４】メモリリークの候補データの依存関係を連結する際に用いられる情報の例を示す説明図である。
【図１５】連結したメモリリークの候補データの依存関係を可視化した例を示す説明図である。
【図１６】依存関係連結表の別の例を示す説明図である。
【図１７】連結したメモリリークの候補データの依存関係を可視化した別の例を示す説明図である。
【図１８】本発明の第２の実施形態におけるメモリリーク原因分析システムの構成例を示すブロック図である。
【図１９】第２の実施形態における動作の例を示すフローチャートである。
【図２０】拡張依存関係一覧表の例を示す説明図である。
【図２１】データ別に可視化された依存関係の例を示す説明図である。
【図２２】本発明の第３の実施形態におけるメモリリーク原因分析システムの構成例を示すブロック図である。
【図２３】第２の実施形態における動作の例を示すフローチャートである。
【図２４】プロファイル中におけるメモリ上のデータのサイズの記載例を示す説明図である。
【図２５】データサイズ一覧表の例を示す説明図である。
【図２６】データの依存関係とデータサイズとを可視化した例を示す説明図である。
【図２７】データの依存関係とデータ数に比例したデータサイズとを可視化した例を示す説明図である。
【図２８】データの依存関係をデータサイズに比例してデータノードを変えて可視化した例を示す説明図である。
【図２９】本発明によるメモリリーク原因分析システムの最小構成の例を示すブロック図である。
【発明を実施するための形態】
【００１８】
以下、本発明の実施形態を図面を参照して説明する。以下の説明では、プログラミング言語の一つであるＪａｖａ（登録商標）で使用されるデータを例に説明する。また、以下の説明で、データの種類とは、メモリ上に生成されるプログラム中の実際の値や文字列の型、もしくは関数のことを意味する。他にも、データの種類は、データの属性と言うこともできる。例えば、Ｊａｖａ（登録商標）言語におけるＳｔｒｉｎｇやＶｅｃｔｏｒなどのクラス名や、ｃｈａｒ［］やｂｙｔｅ［］などの配列の型がデータの種類に相当する。
【００１９】
また、以下の説明で、データの依存関係とは、あるデータが他のデータに依存している、または依存されていることを表す。言い換えると、データの依存関係とは、あるデータの変化により他のデータが影響を受ける関係と言うこともできる。例えば、データＡとデータＢとが依存関係にある場合、データＡの値が変更されることによってデータＢの値も同時に変更されたり、データＢが削除されなければデータＡが削除されなかったりする。
【００２０】
実施形態１．
図１は、本発明の第１の実施形態におけるメモリリーク原因分析システムの構成例を示すブロック図である。本実施形態におけるメモリリーク原因分析システム１００は、データ抽出手段１１０と、依存関係特定手段１２０と、残存データ特定手段１３０と、リークデータ候補抽出手段１４０と、依存関係連結手段１５０と、依存関係可視化手段１６０とを備えている。また、メモリリーク原因分析システム１００には、入力装置２１０と、出力装置２２０とが接続される。ただし、メモリリーク原因分析システム１００自身が、入力装置２１０と、出力装置２２０とを備えていてもよい。本実施形態におけるメモリリーク原因分析システム１００は、メモリ上のデータの依存関係を結合して表示する。
【００２１】
入力装置２１０は、先の時刻及び後の時刻のそれぞれの時点におけるメモリ上のデータの種類と、各データの依存関係とに関する情報を含むプロファイルをメモリリーク原因分析システム１００に入力するためのインターフェースである。入力されるプロファイルは、先の時刻におけるプロファイルと、後の時刻におけるプロファイルの２種類である。これらのプロファイルは、それぞれが独立した２つのテキストファイルであってもよいし、先の時刻のプロファイルと、後の時刻のプロファイルとが１つのテキストファイルになっていてもよい。なお、プロファイルの形式は、メモリ上のデータの種類と、各データの依存関係とに関する情報を認識できる形式であれば、テキストファイルに限定されない。
【００２２】
データ抽出手段１１０は、入力されたプロファイルの中からメモリ上のデータの種類と、データのＩＤ番号とが含まれる情報の範囲を特定する。具体的には、データ抽出手段１１０は、入力装置２１０から先の時刻におけるプロファイル及び後の時刻におけるプロファイルが入力されると、それらのプロファイルの中から、先の時刻及び後の時刻のそれぞれの時点におけるメモリ上のデータの種類とデータのＩＤ番号とが記述された情報の範囲（以下、記述範囲と記すこともある。）を特定する。上述の通り、データの種類とは、値や文字列の型、関数、データの属性などであり、例えば、Ｓｔｒｉｎｇやｂｙｔｅなどのクラス（関数）名を表す文字列である。また、データのＩＤ番号とは、データを一意に識別するための番号であり、その一例が、各データをメモリ上に生成する際に使用したクラス（関数）の手順を表すトレース情報を指す番号である。
【００２３】
図２は、データをメモリ上に生成する際のトレース情報の例を示す説明図である。例えば、データのＩＤ番号が「３０３４５７」の場合、図２に例示する９行目〜１４行目までの内容が、クラス（関数）の手順を表すトレース情報である。このように、トレース情報を指す番号をデータＩＤ番号として使用してもよい。
【００２４】
なお、プロファイルは、実行するプログラムに応じて定義され、各プロファイルには、メモリ上に残存するデータの関連情報（メモリ上のデータの種類と、データの依存関係とに関する情報を含む）が一定の記述形式で記述されている。プロファイルの記述形式はプログラミング言語によって異なるため、データ抽出手段１１０は、プロファイルの中から一つのデータの記述を特定するための条件（以下、記述条件と記す。）を予め複数記憶しておく。そして、記述条件のいずれかを用いて一つのデータに関する情報の記述範囲を判定できた場合、データ抽出手段１１０は、その記述条件をプロファイルに適合した記述条件と判断し、その記述条件を用いて記述範囲に含まれるデータをそれぞれ特定していけばよい。
【００２５】
すなわち、データ抽出手段１１０は、所定の記述条件に合致するプロファイル中の部分を、一つのデータに関する情報の記述範囲と判定し、その記述範囲からデータの種類とデータのＩＤ番号とを抽出する。データ抽出手段１１０は、このようにして、先の時刻及び後の時刻のそれぞれ時点におけるメモリ上のデータの種類とデータのＩＤ番号とを各プロファイル（先の時刻におけるプロファイル及び後の時刻におけるプロファイル）から抽出する。
【００２６】
依存関係特定手段１２０は、データ抽出手段１１０から、先の時刻及び後の時刻のそれぞれの時点におけるメモリ上のデータの種類とデータのＩＤ番号とを受け取り、先の時刻及び後の時刻のそれぞれの時点における各データの依存関係を特定する。
【００２７】
上述の通り、データの依存関係とは、メモリ上に存在するデータがプログラム中において他のどのデータから依存されているか、または、プログラム中において他のどのデータを依存しているかを表すものである。データの依存関係には、「あるデータを依存する他のデータがさらに別のデータを依存している」といった、一つのデータに対して依存関係が複数連なっている関係が含まれる。また、データの依存関係には、他のどのデータも依存していない、または、他のどのデータからも依存されていないといった関係も含まれる。
【００２８】
なお、依存関係特定手段１２０は、データ抽出手段１１０がデータの種類とデータのＩＤ番号を特定するための記述条件を利用してデータを抽出する場合と同様に、依存関係を特定するための記述条件を実行するプログラムに応じて予め複数定義しておく。そして、依存関係特定手段１２０は、その記述条件に基づいて依存関係を特定すればよい。
【００２９】
残存データ特定手段１３０は、先の時刻及び後の時刻のそれぞれの時点におけるメモリ上のデータの依存関係を依存関係特定手段１２０から受け取り、先の時刻及び後の時刻のそれぞれの時点でメモリ上に残存するデータを特定する。なお、残存データ特定手段１３０が依存関係特定手段１２０から受け取る依存関係は、プログラムに応じて予め定義された記述条件に基づいて特定されている。そのため、残存データ特定手段１３０は、実行するプログラムとは独立した依存関係をもとにメモリ上に残存する残存データを特定しているとも言える。メモリ上に残存するデータか否かは、各データの依存関係の中で、例えば、ＲＯＯＴデータ、またはＣＬＳデータと依存関係を持つか否かを判定することで特定できる。
【００３０】
ここで、ＲＯＯＴデータ及びＣＬＳデータとは、アプリケーションが起動し続ける間、メモリ上に保持され続けるデータのことである。ＲＯＯＴデータ及びＣＬＳデータと依存関係があるデータは、メモリ上から削除されることがない。そのため、残存データ特定手段１３０は、受け取った依存関係のうち、メモリ上に保持され続けるＲＯＯＴデータやＣＬＳデータといった所定のデータとの依存関係を有する依存情報を残存データと特定する。
【００３１】
リークデータ候補抽出手段１４０は、先の時刻及び後の時刻のそれぞれの時点でメモリ上に残存するデータを残存データ特定手段１３０から受け取り、先の時刻と後の時刻との間で増加傾向にある残存データをメモリリークの候補データとして特定する。先の時刻と後の時刻との間で増加傾向にあるデータとは、「先の時刻と後の時刻との間でデータの種類ごとの数が１倍以上に増加している」という条件を満たすデータを指す。すなわち、リークデータ候補抽出手段１４０は、データの種類ごとの残存データ数が、先の時刻よりも後の時刻のほうが多い種類のデータをメモリリークの候補データとして抽出する。
【００３２】
なお、複数の時刻におけるメモリリークの候補データを特定する場合、リークデータ候補抽出手段１４０は、時刻の経過順にデータの種類ごとの数が１倍以上に増加しているデータをメモリリークの候補データとして特定すればよい。例えば、時刻１、時刻２及び時刻３の時点におけるメモリリークの候補データを抽出する場合について説明する。ここで、各時刻は、時刻１、時刻２、時刻３の順に経過するものとする。この場合、リークデータ候補抽出手段１４０は、時刻２の時点におけるデータ数が時刻１の時点におけるデータ数の１倍以上増加している、かつ、時刻３の時点におけるデータ数が時刻２の時点におけるデータ数の１倍以上増加していることを条件とし、この条件を満たすデータをメモリリークの候補データと判定すればよい。
【００３３】
依存関係連結手段１５０は、メモリリークの候補データの依存関係をリークデータ候補抽出手段１４０から受け取り、それぞれのメモリリークの候補データの依存関係を連結する。依存関係を連結するとは、あるメモリリークの候補データの依存関係と、別のあるメモリリークの候補データの依存関係との間で共通の依存データが存在する場合に、そのデータ同士の依存関係を一つに統合することを指す。すなわち、依存関係連結手段１５０は、各候補データの依存関係において共通するデータを連結する。
【００３４】
図３は、依存関係連結手段１５０がデータの依存関係を連結する例を示す説明図である。図３では、各ノードがデータを表しており、各ノードを繋ぐリンクが依存関係を表している。例えば、図３に例示するデータＡの依存関係は、「データＡ−データＢ−データＣ」になっている。ハイフンは、データとデータの間に依存関係があることを示している。同様に、図３に例示するデータＤの依存関係は、「データＤ−データＥ−データＢ」になっている。ここで、データＡの依存関係とデータＤとの依存関係には、データＢが共通の依存関係のデータとして存在する。
【００３５】
この場合、図３に例示する「データＡの依存関係とデータＤの依存関係を連結した結果」に示すように、「データＡ−データＢ−データＣ」の依存関係に加えて、データＢからデータＥ、データＥからデータＤへの各リンクが新たに張られたものが、データＡの依存関係とデータＤの依存関係を連結した結果になる。
【００３６】
依存関係可視化手段１６０は、連結されたメモリリークの候補データの依存関係を依存関係連結手段１５０から受け取り、メモリリークの候補データの依存関係を可視化して出力装置２２０に出力させる。本発明の実施形態では、依存関係を可視化する方法として、図３に示すように、データをノード、データとデータの依存関係をリンクで表す方法を一例として説明する。ただし、依存関係を可視化する方法は、上述の場合に限定されない。依存関係可視化手段１６０は、例えば、先に示した「データＡ−データＢ−データＣ」の形式のように、データとデータの依存関係をハイフンで表現したテキスト情報を用いて依存関係を出力させてもよい。このとき、依存関係可視化手段１６０は、データの種類ごとに、依存関係を有するデータ間の関係を組にした結果をファイルに出力してもよい。例えば、Ｓｔｒｉｎｇデータの依存情報が「データＡ−データＢ−データＣ」の場合、依存関係可視化手段１６０は、依存関係を有するデータＡとデータＢ、及び、データＢとデータＣとをそれぞれ組にした結果「データＡ−データＢ，データＢ−データＣ」をファイルに出力してもよい。
【００３７】
出力装置２２０は、依存関係可視化手段１６０が生成したメモリリークの候補データの依存関係の可視化結果を出力する。出力装置２２０は、例えば、ディスプレイ装置などにより実現される。
【００３８】
データ抽出手段１１０と、依存関係特定手段１２０と、残存データ特定手段１３０と、リークデータ候補抽出手段１４０と、依存関係連結手段１５０と、依存関係可視化手段１６０とは、例えば、プログラム（メモリリーク原因分析プログラム）によって動作するＣＰＵによって実現される。データ抽出手段１１０と、依存関係特定手段１２０と、残存データ特定手段１３０と、リークデータ候補抽出手段１４０と、依存関係連結手段１５０と、依存関係可視化手段１６０とは、同一のＣＰＵによって実現されてもよい。この場合、プログラムは、例えば、メモリリーク原因分析システム１００が備えるプログラム記憶装置（図示せず）に記憶される。ＣＰＵは、そのプログラムを読み込み、そのプログラムにしたがって、データ抽出手段１１０、依存関係特定手段１２０、残存データ特定手段１３０、リークデータ候補抽出手段１４０、依存関係連結手段１５０、及び、依存関係可視化手段１６０として動作すればよい。
【００３９】
また、データ抽出手段１１０と、依存関係特定手段１２０と、残存データ特定手段１３０と、リークデータ候補抽出手段１４０と、依存関係連結手段１５０と、依存関係可視化手段１６０とは、それぞれが専用のハードウェアで実現されていてもよい。
【００４０】
なお、上記説明では、入力情報として、先の時刻のプロファイルと、後の時刻のプロファイルとを用いて、各種処理を行う場合について説明した。ただし、入力されるプロファイルは、任意の二点の時刻におけるプロファイルに限定されない。上記手段（より、具体的には、データ抽出手段１１０と、依存関係特定手段１２０と、残存データ特定手段１３０と、リークデータ候補抽出手段１４０と、依存関係連結手段１５０と、依存関係可視化手段１６０）は、複数の時刻のプロファイルを用いて、各種処理を行ってもよい。ただし、複数の時刻のプロファイルを用いた各種処理についても、先の時刻のプロファイルと、後の時刻のプロファイルとを用いた処理と同様であるため、説明を省略する。
【００４１】
次に、動作について説明する。図４は、第１の実施形態における動作の例を示すフローチャートである。まず、先の時刻及び後の時刻におけるそれぞれのプロファイルが入力装置２１０を介して、メモリリーク原因分析システム１００のデータ抽出手段１１０に入力される（ステップＡ１）。
【００４２】
ここで、プロファイルには、メモリ上のデータの種類と、データのＩＤ番号と、メモリ上にあるデータがプログラム中において他のどのデータから依存されているか、または、プログラム中において他のどのデータを依存しているかを表す依存情報とが含まれている。
【００４３】
先の時刻及び後の時刻におけるそれぞれのプロファイルが入力されると、データ抽出手段１１０は、それぞれのプロファイルを参照して、先の時刻及び後の時刻のそれぞれの時点におけるメモリ上のデータの種類と、データのＩＤ番号とを抽出する（ステップＡ２）。そして、データ抽出手段１１０は、先の時刻及び後の時刻のそれぞれの時点におけるメモリ上のデータの種類と、データのＩＤ番号とを依存関係特定手段１２０に渡す。
【００４４】
以下、データ抽出手段１１０が、メモリ上のデータの種類と、データのＩＤ番号とをプロファイルから抽出する動作の例を説明する。なお、メモリ上のデータの種類と、データのＩＤ番号とをプロファイルから抽出する方法は、 先の時刻及び後の時刻において同一であるため、動作例の説明を単一化する。
【００４５】
図５は、プロファイル中に記載されたメモリ上のデータの種類、及び、データのＩＤ番号の例を示す説明図である。図５に例示する部分３０のように、プロファイル中には、メモリ上のデータの種類と、データのＩＤ番号とが記載された部分が存在する。
【００４６】
まず、データ抽出手段１１０は、プロファイル中のメモリ上のデータの種類と、データのＩＤ番号とが記載された部分を特定する。例えば、図５に示す例の場合、データ抽出手段１１０は、１行目「ＳＩＴＥＳ  ＢＥＧＩＮ  （・・・」の文字列や、３行目「ｒａｎｋ  ｓｅｌｆ・・・」の文字列などからプロファイル中のメモリ上のデータの種類と、データのＩＤ番号とが記載された部分を特定する。
【００４７】
図５に例示するプロファイルの場合、４行目から１３行目の各末尾にメモリ上のデータの種類と、データのＩＤ番号とが記載されている。例えば、４行目の末尾には、「・・・３０３４５７  ｂｙｔｅ［］」という文字列が存在し、「３０３４５７」がデータのＩＤ番号を表し、「ｂｙｔｅ［］」がメモリ上のデータの種類を表す。同様に、５行目の末尾には、「・・・３０３４９８  ｃｈａｒ［］」という文字列が存在し、「３０３４９８」がデータのＩＤ番号を表し、「ｃｈａｒ［］」がメモリ上のデータの種類を表す。
【００４８】
このようにして、データ抽出手段１１０は、プロファイル中の全てのメモリ上のデータの種類と、データのＩＤ番号とを抽出する。なお、プロファイル中の全てのメモリ上のデータの種類と、データのＩＤ番号とが抽出できた否かを判定する場合、データ抽出手段１１０は、例えば、図５に例示する４行目から１３行目の先頭に記載される番号（ｒａｎｋ）の連続が途絶えたことをメモリ上のデータが全て抽出できたと判定する条件として利用してもよい。
【００４９】
なお、プログラミング言語によってプロファイルの記述フォーマットは異なる。そのため、メモリ上のデータの種類とデータのＩＤ番号とをプロファイルから抽出する処理（具体的には、プロファイル中のメモリ上のデータの種類とデータのＩＤ番号とが記載された部分を特定する処理、及び、メモリ上のデータの種類とデータのＩＤ番号とを抽出する処理）について、本実施形態と同じ処理手順にならない場合もある。
【００５０】
そのような場合、使用するプログラミング言語のプロファイルの記述フォーマットに合わせた抽出条件（記述条件）を複数種類作成しておき、データ抽出手段１１０は、その抽出条件に基づいてメモリ上のデータの種類と、データのＩＤ番号とが記載された部分を特定すればよい。
【００５１】
依存関係特定手段１２０は、データ抽出手段１１０が先の時刻及び後の時刻におけるそれぞれのプロファイル中のメモリ上のデータの種類とデータのＩＤ番号とを抽出した後、先の時刻及び後の時刻それぞれの時点における各データの依存関係を特定する（ステップＡ３）。
【００５２】
図６は、データの依存関係を特定する動作の例を示すフローチャートである。また、図７は、データの依存関係を示す情報の例を示す説明図である。なお、データの依存関係を特定する動作及びデータの依存関係を示す情報の形式は、先の時刻及び後の時刻で同様である。
【００５３】
依存関係特定手段１２０は、データ抽出手段１１０が抽出したデータの中から、依存関係の特定を行っていない未検査のデータを１つ選択する（ステップＳ１）。依存関係特定手段１２０は、例えば、図５に例示する４行目に記載のデータの種類「ｂｙｔｅ［］」を選択する。次に、依存関係特定手段１２０は、ステップＳ１で選択したデータのＩＤ番号を使って、プロファイルの中に該当するデータが存在するか否かを検索する（ステップＳ２）。
【００５４】
例えば、ステップＳ１で選択したデータの種類「ｂｙｔｅ［］」のＩＤ番号は、図５に例示する４行目に記載されている「３０３４５７」である。このＩＤ番号を使って図７に例示するプロファイルの中から「３０３４５７」のＩＤ番号を持つデータを検索すると、図７に例示する７行目に「ＡＲＲ  ５００００１６ｅ  （ｓｚ＝・・・」のデータが存在することが分かる。
【００５５】
次に、依存関係特定手段１２０は、ステップＳ２の検索処理によって該当するデータが存在するか否かを判定する（ステップＳ３）。該当するデータが存在する場合は（ステップＳ３のはい）、ステップＳ４の処理へ進む。一方、該当するデータが存在しない場合は（ステップＳ３のいいえ）、ステップＳ５の処理へ進む。図７に示す例では、ステップＳ２の処理によってデータのＩＤ番号「３０３４５７」に対する図７の７行目「ＡＲＲ  ５００００１６ｅ  （ｓｚ＝・・・」のデータが存在することが分かっている。そこで、まず、ステップＳ４の処理へ進む場合について説明する。
【００５６】
依存関係特定手段１２０は、ステップＳ３の処理でヒットしたデータがＲＯＯＴデータ、またはＣＬＳデータか否かを確認する（ステップＳ４）。ステップＳ３の処理でヒットしたデータがＲＯＯＴデータ、またはＣＬＳデータである場合（ステップＳ４のはい）、ステップＳ６の処理へ進む。一方、ステップＳ３の処理でヒットしたデータがＲＯＯＴデータ、またはＣＬＳデータではない場合（ステップＳ４のいいえ）、ステップＳ２の処理へ戻る。
【００５７】
図７に例示するプロファイルの場合、依存関係特定手段１２０は、プロファイルの各行の先頭文字列を参照することにより、ステップＳ３の処理でヒットしたデータがＲＯＯＴデータ、またはＣＬＳデータか否かを判定できる。図７に例示するプロファイルの場合、ＲＯＯＴデータ、ＣＬＳデータは、１行目と９行目に示されていることが分かる。
【００５８】
図７を参照すると、ステップＳ３の処理でヒットしたデータ「ＡＲＲ  ５００００１６ｅ  （ｓｚ＝・・・」は、ＲＯＯＴデータ、またはＣＬＳデータではない（ステップＳ４のいいえ）。そのため、ステップＳ２の処理へ戻り、以降、同様の処理が行われる。
【００５９】
一方、ステップＳ４において、ステップＳ３の処理でヒットしたデータ「ＡＲＲ  ５００００１６ｅ  （ｓｚ＝・・・」のＩＤ番号「５００００１６ｅ」を元にしてプロファイル中を検索する。すると、図７に例示する６行目の「ｂｕｆｆｅｒ  ５００００１６ｅ」がヒットする。この時、タブ区切りされた行は、その上位行に含まれる情報として扱うものとする。つまり、図７に例示する５行目と６行目は、図７に例示する４行目の「ＯＢＪ  ５００００１６ｄ  （ｓｚ＝・・・」に含まれる情報である。図７に例示する４行目の「ＯＢＪ  ５００００１６ｄ  （ｓｚ＝・・・」は、ＲＯＯＴデータ、またはＣＬＳデータではない。そのため、依存関係特定手段１２０は、図７に例示する４行目のＩＤ番号「５００００１６ｄ」を元にしてプロファイル中を検索する。すると、図７に例示する１０行目の「ｃｏｎｓｔａｎｔ  ｐｏｏｌ  ｅｎｔｒｙ  ８０  ５００００１６ｄ」がヒットする。図７に例示する１０行目の「ｃｏｎｓｔａｎｔ  ｐｏｏｌ  ｅｎｔｒｙ  ８０  ５００００１６ｄ」は、図７に例示する９行目「ＣＬＳ  ５００００１２ａ  （ｎａｍｅ＝・・・」に含まれる情報である。ここで、図７に例示する９行目「ＣＬＳ  ５００００１２ａ  （ｎａｍｅ＝・・・」は、ＣＬＳデータに所属するデータである。この場合（ステップＳ４のはい）、ステップＳ６の処理へ進む。
【００６０】
依存関係特定手段１２０は、図５に例示する４行目に記載されたデータの種類「ｂｙｔｅ［］」が図７の９行目「ＣＬＳ  ５００００１２ａ  （ｎａｍｅ＝・・・」によって、これ以上依存関係が存在しないと判定し（ステップＳ６）、ステップＳ７の処理へ進む。
【００６１】
次に、データ抽出手段１１０が抽出したデータの中で、依存関係の特定を行っていない未検査のデータが存在するか否かを確認する（ステップＳ７）。未検査のデータが存在する場合（ステップＳ７のはい）、ステップＳ１の処理へ戻り、依存関係特定手段１２０は、新たに未検査のデータを一つ選択して、ステップＳ１以降同様の処理を続ける。一方、未検査のデータが存在しない場合（ステップＳ７のいいえ）、依存関係特定手段１２０は、一連の処理を終了する。
【００６２】
次に、依存関係特定手段１２０の別の処理例を図５、図６及び図７を使って説明する。例えば、依存関係特定手段１２０は、図５に例示する５行目に記載されたデータの種類「ｃｈａｒ［］」を選択する（図６におけるステップＳ１）。依存関係特定手段１２０は、選択したデータの種類「ｃｈａｒ［］」のＩＤ番号が図５に例示する５行目に記載された「３０３４９８」であることが分かる。そのため、依存関係特定手段１２０は、このＩＤ番号を使って図７に例示するプロファイルの中から「３０３４９８」のＩＤ番号を持つデータを検索する（図６におけるステップＳ２）。この場合、図７における８行目「ＡＲＲ  ５０００７ｂｆ１  （ｓｚ＝・・・」のデータがヒットする（図６におけるステップＳ３のはい）。
【００６３】
図７に例示する８行目「ＡＲＲ  ５０００７ｂｆ１  （ｓｚ＝・・・」は、ＲＯＯＴデータ、またはＣＬＳデータではない（図６におけるステップＳ４のいいえ）。そのため、依存関係特定手段１２０は、図７に例示する８行目のＩＤ番号「５０００７ｂｆ１」を元にしてプロファイル中を検索する（図６におけるステップＳ２）。すると、図７に例示する３行目の「ｖａｌｕｅ  ５０００７ｂｆ１」がヒットする（図６におけるステップＳ３のはい）。図７に例示する３行目の「ｖａｌｕｅ  ５０００７ｂｆ１」は、図７に例示する２行目の「ＯＢＪ  ５０００８ｄ０ａ  （ｓｚ＝・・・」に含まれる情報である。次に、図７に例示する２行目の「ＯＢＪ  ５０００８ｄ０ａ  （ｓｚ＝・・・」は、ＲＯＯＴデータ、またはＣＬＳデータではない。（図６におけるステップＳ４のいいえ）。そのため、依存関係特定手段１２０は、図７に例示する２行目のＩＤ番号「５０００８ｄ０ａ」を元にしてプロファイル中を検索する（図６におけるステップＳ２）。すると、何もヒットしないことが分かるため（図６におけるステップＳ３のいいえ）、図６におけるステップＳ５の処理へ進む。
【００６４】
依存関係特定手段１２０は、図５に例示する５行目に記載されたデータの種類「ｃｈａｒ［］」が図７に例示する２行目の「ＯＢＪ  ５０００８ｄ０ａ  （ｓｚ＝・・・」に、これ以上依存関係が存在しないと判定し（図６におけるステップＳ５）、図６におけるステップＳ７の処理へ進む。なお、図６におけるステップＳ７の処理は、上述の具体例と同様である。
【００６５】
依存関係特定手段１２０が先の時刻及び後の時刻におけるそれぞれのプロファイル中のデータの依存関係を特定した後、残存データ特定手段１３０は、先の時刻及び後の時刻のそれぞれの時点におけるメモリ上のデータの依存関係を受け取り、先の時刻及び後の時刻のそれぞれの時点においてメモリ上に残存するデータを特定する（ステップＡ４）。
【００６６】
図８は、メモリ上に残存するデータを特定する動作の例を示すフローチャートである。また、図９は、メモリ上に残存するデータを特定する動作の例を示す説明図である。図９に例示するＡ，Ｂ，Ｃ，Ｄ，Ｅ及びＦはデータであり、各データを結ぶ線は各データ間で依存関係があることを示す。残存データ特定手段１３０は、依存関係特定手段１２０が特定した各データの依存関係を使って、先の時刻及び後の時刻における各データが、ＲＯＯＴデータまたはＣＬＳデータと依存関係を持つか否かを確認する（ステップＴ１）。
【００６７】
先の時刻及び後の時刻における各データが、ＲＯＯＴデータまたはＣＬＳデータと依存関係を持つ場合（ステップＴ１のはい）、残存データ特定手段１３０は、そのデータをメモリ上に残存するデータと判定し（ステップＴ２）、処理を終了する。一方、先の時刻及び後の時刻における各データが、ＲＯＯＴデータまたはＣＬＳデータと依存関係を持たない場合（ステップＴ１のいいえ）、残存データ特定手段１３０は、そのデータをメモリ上には残存しないデータと判定し（ステップＴ３）、処理を終了する。
【００６８】
例えば、図９に例示するＳｔｒｉｎｇデータの依存関係は、「Ｓｔｒｉｎｇ−Ｃ−Ｂ−Ａ−ＲＯＯＴ」と示されることから、ＳｔｒｉｎｇデータがＲＯＯＴデータと依存関係があることが分かる。そのため、残存データ特定手段１３０は、Ｓｔｒｉｎｇデータをメモリ上に残存するデータと判定して処理を終了する。
【００６９】
また、図９に例示するＶｅｃｔｏｒデータの依存関係は、「Ｖｅｃｔｏｒ−Ｆ−Ｅ−Ｄ」と示されることから、Ｖｅｃｔｏｒデータは、ＲＯＯＴデータまたはＣＬＳデータとの依存関係がないことが分かる。そのため、残存データ特定手段１３０は、Ｖｅｃｔｏｒデータをメモリ上には残存しないデータと判定して処理を終了する。残存データ特定手段１３０は、先の時刻及び後の時刻における全てのデータに対して、同様の処理を行う。
【００７０】
残存データ特定手段１３０が先の時刻及び後の時刻の各データに対してメモリ上に残存するデータを特定した後、リークデータ候補抽出手段１４０は、先の時刻と後の時刻との間で増加傾向にあるデータをメモリリークの候補データとして抽出する（ステップＡ５）。
【００７１】
図１０は、メモリリークの候補データを特定する動作の例を示すフローチャートである。また、図１１は、メモリリークの候補データを特定する動作の例を示す説明図である。図１１に例示する要素は、候補データごとのデータの種類を表す。
【００７２】
リークデータ候補抽出手段１４０は、残存データ特定手段１３０が特定した先の時刻及び後の時刻においてメモリ上に残存するデータを使って、各データの種類ごとに、後の時刻におけるデータのデータ数が、先の時刻におけるデータのデータ数に対して１倍以上に増加しているか否かを確認する（ステップＵ１）。
【００７３】
後の時刻におけるデータ数が先の時刻のデータ数に対して１倍以上に増加している場合（ステップＵ１のはい）、リークデータ候補抽出手段１４０は、その種類のデータをメモリリークの候補データと判定し（ステップＵ２）、処理を終了する。一方、後の時刻におけるデータ数が先の時刻のデータ数に対して１倍以上に増加していない場合（すなわち、増加が１倍未満の場合）（ステップＵ１のいいえ）、リークデータ候補抽出手段１４０は、その種類のデータをメモリリークの候補データではないと判定し（ステップＵ３）、処理を終了する。
【００７４】
例えば、図１１に示す例のように、先の時刻においてメモリ上に残存するデータの種類が、Ｄａｔｅデータ２個、Ｓｔｒｉｎｇデータ４個、及び、Ｖｅｃｔｏｒデータ２個であるとする。また、後の時刻においてメモリ上に残存するデータの種類が、Ｄａｔｅデータ３個、Ｓｔｒｉｎｇデータ３個、及び、ｂｙｔｅ［］データが３個であるとする。
【００７５】
この場合、後の時刻におけるＤａｔｅデータ数は、先の時刻におけるＤａｔｅデータ数の１．５倍であり、増加していると言える。そのため、リークデータ候補抽出手段１４０は、Ｄａｔｅデータをメモリリークの候補データと判定する。一方、後の時刻におけるＳｔｒｉｎｇデータ数は、先の時刻におけるＳｔｒｉｎｇデータ数の０．７５倍であり、減少していると言える。そのため、リークデータ候補抽出手段１４０は、Ｓｔｒｉｎｇデータをメモリリークの候補データではないと判定する。
【００７６】
また、先の時刻において２個存在したＶｅｃｔｏｒデータ数は、後の時刻において０個になっており、減少していると言える。そのため、リークデータ候補抽出手段１４０は、Ｓｔｒｉｎｇデータをメモリリークの候補データではないと判定する。さらに、ｂｙｔｅ［］データ数は、先の時刻において存在おらず、後の時刻において３個に増加しているので、リークデータ候補抽出手段１４０は、メモリリークの候補データと判定する。このように、リークデータ候補抽出手段１４０は、先の時刻もしくは後の時刻に存在する全ての種類のデータに対して、同様の処理を行う。
【００７７】
上記説明では、リークデータ候補抽出手段１４０がメモリリークの候補データを抽出する方法として、データの種類ごとに、先の時刻と後の時刻におけるデータ数を比較する場合について説明した。ただし、メモリリークの候補データを抽出する方法は、先の時刻と後の時刻とのデータ数を比較する方法に限定されない。リークデータ候補抽出手段１４０は、さらに、後の時刻における残存データのＩＤ番号を先の時刻におけるデータのＩＤ番号と比較して、メモリリークの候補データを抽出してもよい。この場合、リークデータ候補抽出手段１４０は、データのＩＤ番号として、データ抽出手段１１０が抽出した各データのＩＤ番号を用いればよい。すなわち、リークデータ候補抽出手段１４０は、先の時刻における残存データと後の時刻における残存データとで残存データのＩＤ番号が一致する残存データをメモリリークの候補データとして抽出すればよい。
【００７８】
図１２は、メモリリークの候補データを抽出する別の方法（すなわち、データのＩＤ番号を比較する方法）の動作の例を示す説明図である。例えば、図１２に例示するパターンＡにおいて、先の時刻においてメモリ上に残存するデータの種類は、Ｄａｔｅ（ＩＤ＝１）、Ｄａｔｅ（ＩＤ＝２）、及び、Ｄａｔｅ（ＩＤ＝３）の３個であるとする。また、後の時刻においてメモリ上に残存するデータの種類は、Ｄａｔｅ（ＩＤ＝１）、Ｄａｔｅ（ＩＤ＝２）、及び、Ｄａｔｅ（ＩＤ＝３）の３個であるとする。この場合、先の時刻におけるデータのＩＤ番号（ＩＤ＝１〜３）と後の時刻におけるデータのＩＤ番号は全て一致し、かつ、データ数は１倍以上に増加していると言える。そのため、リークデータ候補抽出手段１４０は、ＩＤ＝１〜３で示されるデータをメモリリークの候補データと判定する。
【００７９】
一方、図１２に例示するパターンＢにおいて、先の時刻においてメモリ上に残存するデータの種類は、Ｄａｔｅ（ＩＤ＝１）、Ｄａｔｅ（ＩＤ＝２）、及び、Ｄａｔｅ（ＩＤ＝３）の３個であるとする。また、後の時刻においてメモリ上に残存するデータの種類は、Ｄａｔｅ（ＩＤ＝４）、Ｄａｔｅ（ＩＤ＝５）、及び、Ｄａｔｅ（ＩＤ＝６）の３個であるとする。この場合、先の時刻におけるデータのＩＤ番号（ＩＤ＝１〜３）と後の時刻におけるデータのＩＤ番号（ＩＤ＝４〜６）ではＩＤ番号が一致しない。すなわち、先の時刻におけるＤａｔｅ（ＩＤ＝１）、Ｄａｔｅ（ＩＤ＝２）、及び、Ｄａｔｅ（ＩＤ＝３）の３つのデータは、後の時刻において残存していないことが分かる。そのため、リークデータ候補抽出手段１４０は、ＩＤ＝１〜３で示されるデータをメモリリークの候補データではないと判定する。
【００８０】
このように、後の時刻における残存データのＩＤ番号を先の時刻におけるデータのＩＤ番号と比較してメモリリークの候補データを抽出する方法を用いることで、先の時刻と後の時刻におけるデータ数を比較するよりも、より正確にメモリリークの候補データを抽出することができる。
【００８１】
リークデータ候補抽出手段１４０が先の時刻と後の時刻との間で増加傾向にあるデータをメモリリークの候補データとして抽出した後、依存関係連結手段１５０は、全てのメモリリークの候補データの依存関係を連結する（ステップＡ６）。
【００８２】
図１３は、メモリリークの候補データの依存関係を連結する動作の例を示すフローチャートである。また、図１４は、メモリリークの候補データの依存関係を連結する際に用いられる情報の例を示す説明図である。依存関係連結手段１５０は、まず、リークデータ候補抽出手段１４０が抽出したメモリリークの候補データの依存関係を使って、各メモリリークの候補データに対する依存関係一覧表を作成する（ステップＶ１）。ここで、依存関係一覧表とは、残存データ特定手段１３０が特定したメモリリークの候補データの種類と、そのデータの種類の依存関係とを表にしたものである。図１４に示す依存関係一覧表３１０は、その一例である。依存関係連結手段１５０は、例えば、メモリリークの候補データの種類と依存関係とを対応付けて依存関係一覧表を作成すればよい。
【００８３】
例えば、図１４に例示する依存関係一覧表３１０には、データの種類列と、依存関係列とが含まれる。図１４に示す例では、ＳｔｒｉｎｇやＶｅｃｔｏｒなどのメモリリークの候補データの種類名がデータの種類列に設定され、ＲＯＯＴ−ＡやＡ−Ｂなどのように、文字列とハイフンでメモリリークの候補データの依存関係を表した情報が依存関係列に設定されていることを示す。
【００８４】
ここで、図１４に例示するように、Ｓｔｒｉｎｇ、Ｖｅｃｔｏｒ、Ｄａｔｅ、及び、ｂｙｔｅ［］の４つのメモリリークの候補データの依存関係がそれぞれ存在するとする。また、各メモリリークの候補データの依存関係において、ノードがメモリリークの候補データを表し、リンクがメモリリークの候補データとメモリリークの候補データの依存関係の繋がりを表すものとする。ここで、ステップＶ１において依存関係連結手段１５０がこれらの４つ依存関係（すなわち、Ｓｔｒｉｎｇ、Ｖｅｃｔｏｒ、Ｄａｔｅ、及び、ｂｙｔｅ［］それぞれの依存関係）ごとにメモリリークの候補データの依存関係をまとめたものが、図１４に例示する依存関係一覧表３１０である。
【００８５】
次に、依存関係連結手段１５０は、ステップＶ１の処理で作成した依存関係一覧表を用いて同一の依存関係の数をカウントし、依存関係連結表を作成して（ステップＶ２）、一連の処理を終了する。
【００８６】
ここで、依存関係連結表は、依存関係一覧表をもとに、依存関係の種類とその依存関係の数とを対応付けた表である。図１４に示す依存関係連結表３２０は、その一例である。図１４に例示する依存関係連結表３２０には、依存関係列と、カウント数列とが含まれる。図１４に示す例では、ＲＯＯＴ−ＡやＡ−Ｂなどのように、文字列とハイフンでメモリリークの候補データの依存関係を表した情報が依存関係列に設定され、依存関係一覧表３１０内で同一の依存関係が存在する個数を表す数値がカウント数列に設定されていることを示す。
【００８７】
ステップＶ２において、依存関係連結手段１５０は、例えば、図１４に例示する依存関係一覧表３１０の依存関係列の中から任意の一つの依存関係を選択し、その依存関係が依存関係一覧表３１０内で何個存在するかを数えて、依存関係連結表３２０に設定する。
例えば、依存関係連結手段１５０が、図１４に例示する依存関係一覧表３１０の依存関係列の中からＲＯＯＴ−Ａを選択したとする。この場合、ＲＯＯＴ−Ａが依存関係一覧表３１０内に４個存在することが分かる。そこで、依存関係連結手段１５０は、依存関係連結表３２０の依存関係列にＲＯＯＴ−Ａ、カウント数列に個数「４」を対応付けて設定する。
【００８８】
依存関係連結手段１５０は、同様の処理を依存関係一覧表３１０の依存関係列の全ての依存関係に対して行い、図１４に例示する依存関係連結表３２０を作成して、一連の処理を終了する。
【００８９】
依存関係連結手段１５０がメモリリークの候補データの依存関係を連結した後、依存関係可視化手段１６０は、連結したメモリリークの候補データの依存関係を可視化する（ステップＡ７）。図１５は、連結したメモリリークの候補データの依存関係を可視化した例を示す説明図である。
【００９０】
依存関係可視化手段１６０は、依存関係連結手段１５０が作成した依存関係連結表を使って、連結したメモリリークの候補データの依存関係を可視化する。図１５は、連結したメモリリークの候補データの依存関係を可視化した例を示す説明図である。例えば、図１４の依存関係連結表３２０を使って、連結したメモリリークの候補データの依存関係を可視化すると、図１５に示す例のようになる。このように、依存関係可視化手段１６０は、依存関係連結手段１５０が連結した各候補データの依存関係の一部または全部が共通する部分を含む全ての種類のデータにおける依存情報を用いて依存関係をグラフ化する。このとき、依存関係可視化手段１６０は、共通する部分が依存情報に含まれる個数を算出し、その個数をグラフにおいて対応する部分に付加した情報を生成してもよい。なお、ここでいうグラフとは、棒グラフや円グラフ等に代表される統計図表ではなく、ノードとリンクを使ったネットワーク図を指す。
【００９１】
依存関係可視化手段１６０は、図１５に例示するように、依存関係連結表の依存関係列に記載のメモリリークの候補データの依存関係をノードとリンクを使って可視化してもよい。その際、依存関係可視化手段１６０は、各リンクに依存関係連結表のカウント数列に設定されたメモリリークの候補データ間の依存関係の数をラベル情報として付加してもよい。
【００９２】
依存関係可視化手段１６０は、例えば、図１４に例示する依存関係連結表３２０における依存関係列の２行目「ＲＯＯＴ−Ａ」という情報を使って、ＲＯＯＴノードとＡノードを作成する。そして、依存関係可視化手段１６０は、ＲＯＯＴノードとＡノードをリンクで繋いで、そのリンクに依存関係連結表３２０におけるカウント数列の２行目「４」を付加する。依存関係可視化手段１６０は、依存関係連結表に記載された全ての情報に対して同様の処理を行い、その結果を出力装置２２０に表示させる。
【００９３】
なお、図１５には、連結したメモリリークの候補データの依存関係について可視化した結果を、ＲＯＯＴノードを上位に配置し、Ｓｔｒｉｎｇ、Ｖｅｃｔｏｒ、ｂｙｔｅ［］、及び、Ｄａｔｅの各メモリリークの候補データの種類を下位に配置して表示させる場合について例示した。ただし、依存関係可視化手段１６０が可視化した結果を表示させる方法は、図１５に例示する方法に限定されない。依存関係可視化手段１６０は、図１５に例示する配置を逆にして（すなわち、Ｓｔｒｉｎｇ、Ｖｅｃｔｏｒ、ｂｙｔｅ［］、及び、Ｄａｔｅの各メモリリークの候補データの種類を上位に配置し、ＲＯＯＴノードを下位に配置して）表示させてもよい
【００９４】
さらに、依存関係可視化手段１６０は、各ノードやリンクをユーザが見やすいように変化させて配置してもよい。例えば、依存関係可視化手段１６０は、ユーザが見やすいように、カウント数に応じてリンクを太く表示する、もしくは、リンクを多く持つノードの色を変えて表示するなどの方法を用いて各ノードやリンクに装飾を施してもよい。
【００９５】
依存関係連結手段１５０が作成した依存関係連結表を使って、依存関係可視化手段１６０が連結したメモリリークの候補データの依存関係を可視化する他の例について説明する。図１６は、依存関係連結表の別の例を示す説明図である。また、図１７は、連結したメモリリークの候補データの依存関係を可視化した別の例を示す説明図である。例えば、図１６に例示する依存関係連結表３３０を使って連結したメモリリークの候補データの依存関係を可視化すると、図１７に例示するように表示される。
【００９６】
依存関係可視化手段１６０は、例えば、図１６に例示する依存関係連結表３３０における依存関係列の２行目「ＲＯＯＴ−Ａ」という情報を使って、ＲＯＯＴノードとＡノードを作成する。そして、依存関係可視化手段１６０は、ＲＯＯＴノードとＡノードをリンクで繋いで、そのリンクに依存関係連結表３３０におけるカウント数列の２行目「３」を付加する。依存関係可視化手段１６０は、依存関係連結表に記載された全ての情報に対して同様の処理を行い、その結果を出力装置２２０に表示させる。
【００９７】
なお、入力装置２１０は、例えば、キーボードのような入力装置であり、先の時刻及び後の時刻におけるそれぞれのプロファイルを、メモリリーク原因分析システム１００のデータ抽出手段１１０に入力する。また、出力装置２２０は、例えば、ディスプレイのような出力装置であり、メモリリーク原因分析システム１００の依存関係可視化手段１６０によって作成されたメモリリークの候補データの依存関係を可視化した結果を出力する。
【００９８】
以上のように、第１の実施形態によれば、まず、残存データ特定手段１３０が、依存情報をもとに、メモリ上に保持され続ける所定のデータと依存関係を有するデータをメモリ上に残存するデータと特定する。次に、リークデータ候補抽出手段１４０が、特定された残存データのうち、データの種類ごとの残存データ数が、先の時刻よりも後の時刻のほうが多い種類のデータをメモリリークの候補データとして抽出する。そして、依存関係連結手段１５０が、抽出された各候補データの依存関係において共通するデータを連結する。そのため、メモリリークの原因になるデータを容易に絞り込むことができる。
【００９９】
具体的には、まず、データ抽出手段１１０が、先の時刻及び後の時刻のそれぞれの時点におけるプロファイルを使って、先の時刻及び後の時刻のそれぞれの時点でメモリ上に残存するデータの種類とデータのＩＤ番号とを抽出する。次に、依存関係特定手段１２０が、それらデータの種類とデータのＩＤ番号とを使って、先の時刻及び後の時刻のそれぞれの時点におけるデータの依存関係を特定する。そして、残存データ特定手段１３０が、それらデータの依存関係を使って、先の時刻及び後の時刻のそれぞれの時点においてメモリ上に残存するデータを特定する。そして、リークデータ候補抽出手段１４０が、それら残存データを使って先の時刻と後の時刻との間で増加傾向にあるデータをメモリリークの候補データとして抽出する。さらに、依存関係連結手段１５０は、それらメモリリークの候補データの依存関係を結合し、依存関係可視化手段１６０は、結合した結果を可視化する。
【０１００】
このような方法を用いることで、ユーザは、メモリリークの原因となるデータを正確に特定しやすくなる。なぜなら、ユーザは、可視化されたメモリリークの候補データの依存関係を参照することによって、リンクの繋がりが多いデータや、同一の依存関係の数が多いデータや、データの依存関係のかたまりなどが発見しやすくなる。その結果、ユーザは、メモリリークの原因と関連の強いと想定されるデータの絞り込みを早くできるようになるからである。
【０１０１】
例えば、図１６に例示する依存関係連結表３３０を使って連結したメモリリークの候補データの依存関係は、図１７に例示する状態で可視化される。図１７に示す例では、ＲＯＯＴデータを基点として、「Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｓｔｒｉｎｇ，Ｖｅｃｔｏｒ及びＤａｔｅ」というデータの依存関係の固まりと、「Ｆ，Ｇ，Ｈ，Ｉ，Ｊ，ｂｙｔｅ［］及びＨａｓｈＭａｐ」というデータの依存関係の固まりの二つの固まりが存在することが分かる。ユーザは、図１７に例示する情報をもとに、「データ数やリンク数が多い固まりは、メモリリークの原因となる部分をより含んでいる可能性がある」などといった見方ができる。このようにして、ユーザは、メモリリークの原因になるデータを容易に絞り込むことができる。
【０１０２】
実施形態２．
図１８は、本発明の第２の実施形態におけるメモリリーク原因分析システムの構成例を示すブロック図である。第１の実施形態と同様の構成要素については、図１と同一の符号を付して説明を省略する。第２の実施形態におけるメモリリーク原因分析システム１００は、データ抽出手段１１０と、依存関係特定手段１２０と、残存データ特定手段１３０と、リークデータ候補抽出手段１４０と、依存関係表作成手段４１０と、依存関係表記憶装置４２０と、データ別可視化手段４３０とを備えている。
【０１０３】
依存関係表作成手段４１０は、リークデータ候補抽出手段１４０によって抽出されたメモリリークの候補データの種類と、データの依存関係と、データ数とを対応付けた拡張依存関係一覧表を作成する。拡張依存関係一覧表は、図１４に例示する依存関係一覧表３１０にデータ数列を加えた情報を含む表である。ここで、データ数とは、依存関係を有するデータの組合せの数のことである。依存関係表作成手段４１０は、第１の実施形態において依存関係連結手段１５０が依存関係一覧表を作成する処理と同様に、候補データの種類とデータの依存関係とを対応付け、さらに、データの依存関係の個数をカウントして、その値をデータ数とすればよい。また、依存関係表作成手段４１０は、作成した拡張依存関係一覧表を依存関係表記憶装置４２０に記憶させる。
【０１０４】
依存関係表記憶装置４２０は、依存関係表作成手段４１０が作成した拡張依存関係一覧表を記憶する。
【０１０５】
データ別可視化手段４３０は、依存関係表記憶装置４２０に記憶された拡張依存関係一覧表を取り出し、各データの依存関係を可視化する。
【０１０６】
依存関係表作成手段４１０と、データ別可視化手段４３０は、例えば、プログラム（メモリリーク原因分析プログラム）によって動作するＣＰＵによって実現される。データ抽出手段１１０と、依存関係特定手段１２０と、残存データ特定手段１３０と、リークデータ候補抽出手段１４０と、依存関係表作成手段４１０と、データ別可視化手段４３０とは、同一のＣＰＵによって実現されてもよい。この場合、プログラムは、例えば、メモリリーク原因分析システム１００が備えるプログラム記憶装置（図示せず）に記憶される。ＣＰＵは、そのプログラムを読み込み、そのプログラムに従って、データ抽出手段１１０、依存関係特定手段１２０、残存データ特定手段１３０、リークデータ候補抽出手段１４０、依存関係表作成手段４１０、及び、データ別可視化手段４３０として動作すればよい。
【０１０７】
また、データ抽出手段１１０と、依存関係特定手段１２０と、残存データ特定手段１３０と、リークデータ候補抽出手段１４０と、依存関係表作成手段４１０と、データ別可視化手段４３０とは、それぞれが専用のハードウェアで実現されていてもよい。また、依存関係表記憶装置４２０は、例えば、ハードディスクのような記憶装置によって実現される。
【０１０８】
次に、本実施形態の動作について説明する。図１９は、第２の実施形態における動作の例を示すフローチャートである。入力データをもとに、依存関係特定手段１２０がデータの種類とデータのＩＤ番号とを使ってデータの依存関係を特定してから、リークデータ候補抽出手段１４０が残存データを使ってメモリリークの候補データを抽出するまでの動作は、図４におけるステップＡ１〜Ａ５までの処理と同様である。
【０１０９】
すなわち、依存関係特定手段１２０が、データ抽出手段１１０が抽出したデータの種類とデータのＩＤ番号とを使ってデータの依存関係を特定する処理、残存データ特定手段１３０が、依存関係特定手段１２０が特定したデータの依存関係を使って、メモリ上に残存するデータを特定する処理、及び、リークデータ候補抽出手段１４０が、残存データ特定手段１３０が特定した残存データを使って、先の時刻と後の時刻との間で増加傾向にあるデータをメモリリークの候補データとして抽出する処理は、第１の実施形態と同様である。
【０１１０】
以下、リークデータ候補抽出手段１４０が、残存データ特定手段１３０が特定した先の時刻及び後の時刻のそれぞれの時点でメモリ上に残存するデータを使って、先の時刻と後の時刻との間で増加傾向にあるデータをメモリリークの候補データとして抽出した（ステップＡ５）後の処理について説明する。
【０１１１】
依存関係表作成手段４１０は、メモリリークの候補データの種類と、データの依存関係と、データ数とをまとめて、拡張依存関係一覧表を作成する（ステップＡ１１）。図２０は、拡張依存関係一覧表の例を示す説明図である。図２０に例示する拡張依存関係一覧表４４０は、データの種類列と、依存関係列と、データ数列とを含む。例えば、図２０に例示する拡張依存関係一覧表４４０の２行目は、データの種類がＳｔｒｉｎｇであり、Ｓｔｒｉｎｇデータの他のデータとの依存関係が、「ＲＯＯＴ−Ａ、Ａ−Ｂ、Ｂ−Ｃ、Ｃ−Ｓｔｒｉｎｇ」であり、同一の依存関係を持つＳｔｒｉｎｇデータは、５個存在する、ということを表す。
【０１１２】
依存関係表記憶装置４２０は、依存関係表作成手段４１０が作成した拡張依存関係一覧表を記憶する。すなわち、依存関係表作成手段４１０は、作成した拡張依存関係一覧表を依存関係表記憶装置４２０に記憶させる（ステップＡ１２）。
【０１１３】
データ別可視化手段４３０は、依存関係表記憶装置４２０に記憶される拡張依存関係一覧表４４０を取り出し、拡張依存関係一覧表に含まれる各データの依存関係を可視化する（ステップＡ１３）。図２１は、データ別に可視化された依存関係の例を示す説明図である。以下、データ別可視化手段４３０が依存関係を可視化する処理について具体的に説明する。
【０１１４】
データ別可視化手段４３０は、まず、依存関係表記憶装置４２０に記憶される拡張依存関係一覧表のデータの種類と、データ数とを使って、ユーザが見たいデータを選択できるようにするためのリストを作成する。例えば、データ別可視化手段４３０は、データの種類ごとにデータの数を算出し、その算出結果をデータの種類名と合わせたリストを作成してもよい。
【０１１５】
例えば、図２１に例示する可視化結果の左側に表示されたプルダウンメニューのように、データの種類名とそのデータの数を表示してもよい。例えば、図２１に例示するプルダウンメニューを参照することにより、ユーザは、最上位にＳｔｒｉｎｇデータが表示され、そのデータの数が５個存在することが分かる。例えば、ユーザが「Ｓｔｒｉｎｇ（５）」を選択することで、データ別可視化手段４３０は、Ｓｔｒｉｎｇデータの依存関係を可視化結果の右側に表示させる。
【０１１６】
なお、データ別可視化手段４３０がデータの依存関係を表示させる方法は、第１の実施形態において依存関係可視化手段１６０が依存関係を表示させる方法と同様の方法を用いてもよい。例えば、データ別可視化手段４３０は、図２１に例示するように、各データをノードで表し、データとデータの依存関係をリンクで表わすようにしてもよい。ただし、データ別可視化手段４３０が依存関係を表す方法は、図２１に例示する可視化結果のように、ユーザによって選択された一つのデータの種類ごとにそのデータの依存関係を表す方法に限定されない。例えば、データ別可視化手段４３０は、ユーザにより複数のデータの種類が同時に選択された場合に、それら複数のデータの種類の依存関係を同時に表示させてもよい。この場合、複数のデータの種類をユーザに選択させるため、データ別可視化手段４３０は、プルダウンメニューの代わりにリストボックスで可視化結果を表示させてもよい。
【０１１７】
なお、データ別可視化手段４３０は、第１の実施形態における依存関係可視化手段１６０に含まれていてもよい。さらに、データ別可視化手段４３０が各データの依存関係を個別に生成した結果と、依存関係可視化手段１６０が各データの依存関係を連結した依存関係結果とを同時に出力させる構成であってもよい。
【０１１８】
以上のように、第２の実施形態によれば、第１の実施形態の構成に加え、依存関係表作成手段４１０が、リークデータ候補抽出手段１４０が抽出したデータの種類ごとに、その種類のデータの依存関係と、依存関係を有するデータの組合せの数とを対応付けた依存関係一覧表を作成する。依存関係表作成手段４１０が作成した依存関係一覧表を依存関係表記憶装置４２０に記憶させると、データ別可視化手段４３０は、依存関係表記憶装置４２０に記憶された各候補の依存関係のうち共通するデータを連結する。そして、データ別可視化手段４３０は、その依存関係一覧表をもとに、指定された種類のデータごとの依存関係に含まれる各データ間を線で繋ぐことによりグラフ化した可視化情報を生成する。このように、指定された種類のデータごとに可視化情報を生成することで、メモリリークの原因になるデータをより容易に絞り込むことができる。
【０１１９】
具体的には、まず、データ抽出手段１１０が、先の時刻及び後の時刻のそれぞれの時点におけるプロファイルを使って、先の時刻及び後の時刻のそれぞれの時点でメモリ上に残存するデータの種類とデータのＩＤ番号とを抽出する。次に、依存関係特定手段１２０が、それらデータの種類とデータのＩＤ番号とを使って、先の時刻及び後の時刻のそれぞれの時点におけるデータの依存関係を特定する。そして、残存データ特定手段１３０が、それらデータの依存関係を使って、先の時刻及び後の時刻のそれぞれの時点においてメモリ上に残存するデータを特定する。そして、リークデータ候補抽出手段１４０が、それら残存データのうち、時間と共に増加傾向にあるデータをメモリリークの候補データとして抽出する。
【０１２０】
さらに、依存関係表作成手段４１０が、メモリリークの候補データとして抽出されたデータの種類と、データの依存関係と、データ数とをまとめた拡張依存関係一覧表を作成し、その拡張依存関係一覧表に基づいて、データ別可視化手段４３０が、各データの依存関係を個別に可視化する。このような方法を用いることで、ユーザは、メモリリークの原因となるデータの個別の依存関係を容易に確認することができるため、メモリリークの原因分析が早くできるようになる。
【０１２１】
実施形態３．
図２２は、本発明の第３の実施形態におけるメモリリーク原因分析システムの構成例を示すブロック図である。第１の実施形態、及び、第２の実施形態と同様の構成要素については、図１及び図１８と同一の符号を付して説明を省略する。第３の実施形態におけるメモリリーク原因分析システム１００は、データ抽出手段１１０と、依存関係特定手段１２０と、残存データ特定手段１３０と、リークデータ候補抽出手段１４０と、依存関係表作成手段４１０と、依存関係表記憶装置４２０と、データサイズ抽出手段５１０と、データサイズ表作成手段５２０と、データサイズ可視化手段５３０とを備えている。
【０１２２】
データサイズ抽出手段５１０は、依存関係特定手段１２０が特定した先の時刻及び後の時刻のそれぞれ時点におけるデータの依存関係を使って、先の時刻及び後の時刻のそれぞれの時点におけるデータの種類ごとのデータのサイズを抽出する。データのサイズとは、データの容量の大きさのことである。
【０１２３】
データサイズ抽出手段５１０は、例えば、一定の記述形式で記述されたプロファイルに含まれる依存情報から、データのサイズを記述した部分を抽出することでデータのサイズを抽出してもよい。なお、データサイズの記述形式はプログラミング言語によって異なる。そのため、データサイズ抽出手段５１０は、第１の実施形態でデータ抽出手段１１０がデータを抽出する場合と同様、一つのデータのサイズの記述を特定するための条件を予め複数記憶しておき、所定の記述条件に合致する部分を一つのデータに関する情報の記述範囲と判定する。そして、データサイズ抽出手段５１０は、その記述範囲からデータの種類と、その種類のデータのデータサイズとを抽出すればよい。
【０１２４】
なお、データサイズ抽出手段５１０は、第１の実施形態における依存関係特定手段１２０に含まれていてもよい。
【０１２５】
データサイズ表作成手段５２０は、データサイズ抽出手段５１０が抽出した後の時刻の時点におけるデータの種類ごとのデータのサイズと、リークデータ候補抽出手段１４０が抽出したメモリリークの候補データとを使って、データの種類と、データのサイズとをまとめたデータサイズ一覧表を作成する。データサイズ一覧表は、データの種類列と、データサイズ列とを含む表である。データサイズ表作成手段５２０は、例えば、メモリリークの候補データの種類とデータサイズとを対応付けて依存関係一覧表を作成すればよい。ここで、データサイズ表作成手段５２０は、第２の実施形態における依存関係表作成手段４１０に含まれていてもよい。また、データサイズ表作成手段５２０は、作成したデータサイズ一覧表を依存関係表記憶装置４２０に記憶させる。
【０１２６】
データサイズ可視化手段５３０は、依存関係表記憶装置４２０に記憶される拡張依存関係一覧表と、データサイズ一覧表とを取り出し、各データの依存関係を可視化する。ここで、データサイズ可視化手段５３０は、第２の実施形態におけるデータ別可視化手段４３０に含まれていてもよい。
【０１２７】
データサイズ抽出手段５１０と、データサイズ表作成手段５２０と、データサイズ可視化手段５３０とは、例えば、プログラム（メモリリーク原因分析プログラム）によって動作するＣＰＵによって実現される。データ抽出手段１１０と、依存関係特定手段１２０と、残存データ特定手段１３０と、リークデータ候補抽出手段１４０と、依存関係表作成手段４１０と、データサイズ抽出手段５１０と、データサイズ表作成手段５２０と、データサイズ可視化手段５３０とが、同一のＣＰＵによって実現されてもよい。この場合、プログラムは、例えば、メモリリーク原因分析システム１００が備えるプログラム記憶装置（図示せず）に記憶される。ＣＰＵは、そのプログラムを読み込み、そのプログラムに従って、データ抽出手段１１０、依存関係特定手段１２０、残存データ特定手段１３０、リークデータ候補抽出手段１４０、依存関係表作成手段４１０、データサイズ抽出手段５１０、データサイズ表作成手段５２０、及び、データサイズ可視化手段５３０として動作すればよい。
【０１２８】
また、データ抽出手段１１０と、依存関係特定手段１２０と、残存データ特定手段１３０と、リークデータ候補抽出手段１４０と、依存関係表作成手段４１０と、データサイズ抽出手段５１０と、データサイズ表作成手段５２０と、データサイズ可視化手段５３０とは、それぞれが専用のハードウェアで実現されていてもよい。
【０１２９】
次に、本実施形態の動作について説明する。図２３は、第３の実施形態における動作の例を示すフローチャートである。入力データをもとに、依存関係特定手段１２０がデータの種類とデータのＩＤ番号とを使ってデータの依存関係を特定してから、リークデータ候補抽出手段１４０が残存データを使ってメモリリークの候補データを抽出するまでの動作は、図４におけるステップＡ１〜Ａ５までの処理と同様である。
【０１３０】
すなわち、依存関係特定手段１２０が、データ抽出手段１１０が抽出したデータの種類とデータのＩＤ番号とを使ってデータの依存関係を特定する処理、残存データ特定手段１３０が、依存関係特定手段１２０が特定したデータの依存関係を使って、メモリ上に残存するデータを特定する処理、及び、リークデータ候補抽出手段１４０が、残存データ特定手段１３０が特定した残存データを使って、先の時刻と後の時刻との間で増加傾向にあるデータをメモリリークの候補データとして抽出する処理は、第１の実施形態と同様である。以下、依存関係特定手段１２０が、先の時刻及び後の時刻のそれぞれの時点におけるデータの依存関係を特定した（ステップＡ３）後の処理について説明する。
【０１３１】
データサイズ抽出手段５１０は、先の時刻及び後の時刻のそれぞれにおいてデータの種類に対するデータのサイズを抽出する（ステップＡ２１）。図２４は、プロファイル中におけるメモリ上のデータのサイズの記載例を示す説明図である。なお、データの依存関係を特定する動作については、第１の実施形態における依存関係特定手段１２０の動作の説明ですでに述べているため、ここでは説明を省略する。以下、データのサイズを抽出する処理の動作について説明する。
【０１３２】
例えば、図２４に例示するプロファイルが、依存関係特定手段１２０が特定したデータの依存関係の一部であるとする。このとき、データサイズ抽出手段５１０は、例えば、図２４に例示するプロファイルの１行目「ＯＢＪ  ５０００８ｄ０ａ  （ｓｚ＝２４，ｔｒａｃｅ＝３０３４４５，・・・」の中から「ｓｚ＝」というデータのサイズを表す文字列を基点として、データのサイズ値「２４」を抽出する。同様に、データサイズ抽出手段５１０は、図２４に例示するプロファイルの３行目「ＡＲＲ  ５００００１６ｅ  （ｓｚ＝１０００，ｔｒａｃｅ＝３０３４５７，・・・」の中から、データのサイズ値「１０００」を抽出する。データサイズ抽出手段５１０は、同様の処理を用いて、依存関係特定手段１２０が特定した全ての依存関係のデータからデータサイズを抽出する。なお、データの種類の一つであるＲＯＯＴデータ及びＣＬＳデータは、データのサイズが存在しないため、データサイズの抽出処理を行わない。
【０１３３】
図２４に示す例では、データのサイズを表す文字列の基点として、文字列「ｓｚ＝」が使用されている。ただし、データのサイズを表す文字列は、各プログラミング言語のプロファイルの記述形式によって異なる。そのため、データサイズ抽出手段５１０は、プロファイルの中から一つのデータの記述を特定するための条件（すなわち、記述条件）を予め複数記憶しておく。そして、記述条件のいずれかを用いて一つのデータに関するサイズを含む情報の記述範囲を判定できた場合、データサイズ抽出手段５１０は、その記述条件をプロファイルに適合した記述条件と判断し、その記述条件を用いて記述範囲に含まれるデータのサイズをそれぞれ特定していけばよい。
【０１３４】
なお、データサイズ抽出手段５１０は、依存関係特定手段１２０がデータの依存関係を特定する時と同じタイミングでデータのサイズを抽出してもよい。
【０１３５】
データサイズ抽出手段５１０が、先の時刻及び後の時刻のそれぞれの時点においてデータの種類ごとのデータのサイズを抽出した後、データサイズ表作成手段５２０は、残存データ特定手段１３０が特定した残存データごとに、データサイズ抽出手段５１０が抽出したデータのサイズと、データの種類とをまとめて、データサイズ一覧表を作成する（ステップＡ２２）。
【０１３６】
図２５は、データサイズ一覧表の例を示す説明図である。データサイズ表作成手段５２０は、例えば、図２５に例示する形式でデータサイズ一覧表５４０を作成する。図２５に例示するデータサイズ一覧表５４０は、データの種類列と、データサイズ列とを含む。例えば、図２５に例示するデータサイズ一覧表５４０の２行目は、「Ｓｔｒｉｎｇデータのデータサイズは、２４である」ということを表す。同様に、図２５に例示するデータサイズ一覧表５４０の３行目は、「ｂｙｔｅ［］データのデータサイズは、１０００である」ということを表す。
【０１３７】
ここで、データサイズ表作成手段５２０は、図２０に例示する拡張依存関係一覧表４４０における各データの種類にデータのサイズを付記する形式（すなわち、データサイズ一覧表５４０を拡張依存関係一覧表４４０に含める形式）でデータサイズ一覧表５４０を作成してもよい。
【０１３８】
また、データサイズ表作成手段５２０は、依存関係表作成手段４１０が拡張依存関係一覧表を作成する時と同じタイミングでデータサイズ一覧表を作成してもよい。また、データサイズ表作成手段５２０は、依存関係表作成手段４１０に含まれていてもよい。
【０１３９】
なお、上記説明では、データサイズ表作成手段５２０が、残存データ特定手段１３０が特定した残存データごとにデータサイズ一覧表を作成する場合について説明した。他にも、データサイズ表作成手段５２０は、リークデータ候補抽出手段１４０が抽出したデータごとにデータサイズ一覧表を作成してもよい。
【０１４０】
依存関係表記憶装置４２０は、データサイズ表作成手段５２０が作成したデータサイズ一覧表と、依存関係表作成手段４１０が作成した拡張依存関係一覧表とを記憶する。すなわち、データサイズ表作成手段５２０は、作成したデータサイズ一覧表を依存関係表記憶装置４２０に記憶させ、また、依存関係表作成手段４１０は、作成した拡張依存関係一覧表を依存関係表記憶装置４２０に記憶させる（ステップＡ２３）。
【０１４１】
データサイズ可視化手段５３０は、依存関係表記憶装置４２０に記憶されるデータサイズ一覧表と、拡張依存関係一覧表とを取り出し、各データの依存関係と、データサイズとを可視化する（ステップＡ２４）。図２６は、データの依存関係とデータサイズとを可視化した例を示す説明図である。また、図２７は、データの依存関係とデータ数に比例したデータサイズとを可視化した例を示す説明図である。また、図２８は、データの依存関係をデータサイズに比例してデータノードを変えて可視化した例を示す説明図である。
【０１４２】
データサイズ可視化手段５３０は、第２の実施形態におけるデータ別可視化手段４３０と同様に、まず、依存関係表記憶装置４２０に記憶される拡張依存関係一覧表４４０のデータの種類と、データ数とを使って、ユーザが見たいデータを選択できるようにするためのリストを作成する。また、データサイズ可視化手段５３０は、ユーザの選択したデータの依存関係をノードとリンクを使って可視化する。これに加えて、データサイズ可視化手段５３０は、依存関係表記憶装置４２０に記憶されるデータサイズ一覧表５４０のデータの種類と、データサイズとを使って、ノードで表される各データにサイズを付加する。
【０１４３】
例えば、図２６に示す例では、Ｓｔｒｉｎｇデータの依存関係として、ＲＯＯＴ，Ａ，Ｂ及びＣの４つのデータが表示されている。ここで、各データのデータサイズが図２５に例示するデータサイズ一覧表５４０に設定されたサイズであるとする。このとき、Ｓｔｒｉｎｇデータのサイズは２４と分かるため、図２６に例示するＳｔｒｉｎｇデータのノードには、データサイズ「２４ｂｙｔｅｓ」が付加される。ここでは、データのサイズの単位は全てｂｙｔｅｓであるものとする。
【０１４４】
同様に、図２５に例示するデータサイズ一覧表５４０を参照すると、Ａデータのデータサイズは１００であり、Ｂデータのデータサイズは５であり、Ｃデータのデータサイズは２６０であることが分かる。この場合、データサイズ可視化手段５３０は、図２６のＡデータのノードに、データサイズ「１００ｂｙｔｅｓ」を、Ｂデータのノードに、データサイズ「５ｂｙｔｅｓ」を、Ｃデータのノードに、データサイズ「２６０ｂｙｔｅｓ」をそれぞれ付加する。なお、図２６に例示するＲＯＯＴノードにはデータサイズが存在しないため、データサイズ可視化手段５３０は、ＲＯＯＴノードに何も付加しない。
【０１４５】
また、データサイズ可視化手段５３０は、図２７に例示するように、各データに付加するデータサイズを、データの個数に比例させた値に変えてもよい。例えば、図２７に示す例では、Ｓｔｒｉｎｇデータは、同一の依存関係を持つＳｔｒｉｎｇデータが５個あるため、Ｓｔｒｉｎｇデータの依存関係に含まれるＲＯＯＴ，Ａ，Ｂ及びＣの４つの各データのデータサイズを５倍した値に変更して表示させる。図２７に示す例では、Ｓｔｒｉｎｇデータのデータサイズは、「２４＊５＝１２０ｂｙｔｅｓ」、Ａデータのデータサイズは、「１００＊５＝５００ｂｙｔｅｓ」、Ｂデータのデータサイズは、「５＊５＝２５ｂｙｔｅｓ」、Ｃデータのデータサイズは、「２６０＊５＝１３００ｂｙｔｅｓ」とそれぞれ変更される。なお、図２７に例示するＲＯＯＴノードにはデータサイズが存在しないため、データサイズ可視化手段５３０は、ＲＯＯＴノードに何も付加しない。
【０１４６】
他にも、データサイズ可視化手段５３０は、図２８に例示するように、データを表すノードの大きさをデータサイズに比例させて変更することにより各データの依存関係を表示させてもよい。例えば、図２５に例示するデータサイズ一覧表５４０によれば、Ｓｔｒｉｎｇデータのデータサイズは２４、Ａデータのデータサイズは１００、Ｂデータのデータサイズは５、Ｃデータのデータサイズは２６０である。そこで、データサイズ可視化手段５３０は、これらのデータのデータサイズの比率に応じて、図２８に例示するように、各データを表すノードの大きさを変更して表示させてもよい。
【０１４７】
このように、データサイズ可視化手段５３０は、図２６に例示するように、データサイズを各データに付与した形式で依存関係を可視化してもよい。また、データサイズ可視化手段５３０は、図２７に例示するように、残存データ数をデータサイズに乗じた値を各データに付与した形式で依存関係を可視化してもよい。また、データサイズ可視化手段５３０は、図２８に例示するように、データサイズに応じてノードの大きさを変化させた形式で依存関係を可視化してもよい。
【０１４８】
なお、データサイズ可視化手段５３０は、データ別可視化手段４３０に含まれていてもよい。また、データサイズ可視化手段５３０が可視化データを表示させる仕組みとして、メモリリーク原因分析システム１００が起動される前に予め一つの表示方法が指定されていてもよい。他にも、可視化データを表示させる仕組みとして、ユーザがメモリリーク原因分析システム１００を使用している途中で表示方法を自由に選択、変更できる仕組みを備えていてもよく、同時に複数の表示方法でデータの依存関係を表示できる仕組みを備えていてもよい。
【０１４９】
以上のように、第３の実施形態によれば、第１の実施形態の構成に加え、データサイズ可視化手段５３０が、依存関係表記憶装置４２０に記憶された依存関係表における各データに付加されたデータサイズをもとに、指定された種類のデータごとの依存関係に含まれる各データ間を線で繋ぎ、その各データにデータサイズを付加してグラフ化した可視化情報を生成する。このように、指定された種類のデータごとにデータサイズまで含めた可視化情報を生成することで、メモリリークの原因になるデータをより容易に絞り込むことができる。
【０１５０】
具体的には、まず、データ抽出手段１１０が、先の時刻及び後の時刻のそれぞれの時点におけるプロファイルを使って、先の時刻及び後の時刻のそれぞれの時点でメモリ上に残存するデータの種類とデータのＩＤ番号とを抽出する。次に、依存関係特定手段１２０が、それらデータの種類とデータのＩＤ番号とを使って、先の時刻及び後の時刻のそれぞれの時点におけるデータの依存関係を特定する。そして、残存データ特定手段１３０が、それらデータの依存関係を使って、先の時刻及び後の時刻のそれぞれの時点においてメモリ上に残存するデータを特定する。そして、リークデータ候補抽出手段１４０が、それら残存データのうち、時間と共に増加傾向にあるデータをメモリリークの候補データとして抽出する。
【０１５１】
次に、依存関係表作成手段４１０が、メモリリークの候補データとして抽出されたデータの種類と、データの依存関係と、データ数とをまとめた拡張依存関係一覧表を作成する。また、データサイズ抽出手段５１０が、メモリ上に残存するデータを使って、メモリ上に残存するデータのサイズを抽出する。そして、データサイズ表作成手段５２０が、それらデータのサイズを使って、データのサイズと、データの種類とをまとめたデータサイズ一覧表を作成する。そのデータサイズ一覧表と、拡張依存関係一覧表とを使って、データサイズ可視化手段５３０が、メモリリークの候補データにデータサイズを付加した依存関係を可視化する。このような方法を用いることで、ユーザは、メモリリークの原因となるデータを、例えば、データサイズの大きさという視点から絞り込むことが可能になり、メモリリークの原因分析が早くできるようになる。
【０１５２】
次に、本発明によるメモリリーク原因分析システムの最小構成の例を説明する。図２９は、本発明によるメモリリーク原因分析システムの最小構成の例を示すブロック図である。本発明によるメモリリーク原因分析システムは、プログラム（例えば、ｊａｖａ（登録商標）を用いたプログラム）の実行によってメモリに記憶される一のデータと、その一のデータの変化により影響を受ける依存関係にあると特定される他のデータとを関連付けた情報である依存情報をもとに、メモリ上に保持され続ける所定のデータ（例えば、ＲＯＯＴデータやＣＬＳデータ）と依存関係を有するデータをメモリ上に残存する残存データと特定する残存データ特定手段８１（例えば、残存データ特定手段１３０）と、残存データ特定手段８１が特定した残存データのうち、データの種類（例えば、メモリ上に生成されるプログラム中の実際の値、文字列の型、関数）ごとの残存データ数が、先に特定した時（例えば、前の時刻）よりも後に特定した時（例えば、後の時刻）のほうが多い種類の残存データをメモリリークの候補データとして抽出するリークデータ候補抽出手段８２（例えば、リークデータ候補抽出手段１４０）と、メモリリーク候補抽出手段８２が抽出した各候補データの依存関係において共通するデータを連結する依存関係連結手段８３（例えば、依存関係連結手段１５０）とを備えている。
【０１５３】
そのような構成により、メモリリークの原因になるデータを容易に絞り込むことができる。
【０１５４】
なお、少なくとも以下に示すようなメモリリーク原因分析システムも、上記に示すいずれかの実施形態に開示されている。
【０１５５】
（１）プログラム（例えば、ｊａｖａ（登録商標）を用いたプログラム）の実行によってメモリに記憶される一のデータと、その一のデータの変化により影響を受ける依存関係にあると特定される他のデータとを関連付けた情報である依存情報をもとに、メモリ上に保持され続ける所定のデータ（例えば、ＲＯＯＴデータやＣＬＳデータ）と依存関係を有するデータをメモリ上に残存する残存データと特定する残存データ特定手段（例えば、残存データ特定手段１３０）と、残存データ特定手段が特定した残存データのうち、データの種類（例えば、メモリ上に生成されるプログラム中の実際の値、文字列の型、関数）ごとの残存データ数が、先に特定した時（例えば、前の時刻）よりも後に特定した時（例えば、後の時刻）のほうが多い種類の残存データをメモリリークの候補データとして抽出するリークデータ候補抽出手段（例えば、リークデータ候補抽出手段１４０）と、メモリリーク候補抽出手段が抽出した各候補データの依存関係において共通するデータを連結する依存関係連結手段（例えば、依存関係連結手段１５０）とを備えたメモリリーク原因分析システム。
【０１５６】
（２）リークデータ候補抽出手段（例えば、リークデータ候補抽出手段１４０）が、残存データ特定手段が特定した残存データに付与されたデータの識別情報（例えば、データのＩＤ番号）をもとに、先に特定した時の残存データ（例えば、先の時刻における残存データ）と後に特定した時の残存データ（例えば、後の時刻における残存データ）とで識別情報が一致する（例えば、データＩＤ番号が一致する）残存データをメモリリークの候補データとして抽出するメモリリーク原因分析システム。
【０１５７】
（３）メモリ上のデータの種類とその各データが依存するデータを示す情報とを含み、実行するプログラムに応じて定義される情報であるプロファイル情報（例えば、プロファイル）から、所定の記述条件に合致する部分を一つのデータに関する情報の記述範囲と判定し、その記述範囲からデータの種類とデータの識別情報（例えば、データＩＤ番号）とを抽出するデータ抽出手段（例えば、データ抽出手段１１０）と、プロファイル情報における各データが依存するデータを示す情報から、一のデータと依存関係にある他のデータを特定して依存情報を作成する依存関係特定手段（例えば、依存関係特定手段１２０）とを備え、依存関係特定手段が、データ抽出手段が抽出した一のデータを示す識別情報（例えば、データＩＤ番号）が、他のデータが依存するデータを示す情報における識別情報（例えば、データＩＤ番号）の中に存在するか否かをプロファイル情報中の全てのデータに対して検索することによりその一のデータと他のデータとが依存関係にあるか否かを特定し、残存データ特定手段が、依存関係特定手段が作成した依存情報をもとにメモリ上の残存データを特定するメモリリーク原因分析システム。
【０１５８】
（４）依存関係連結手段が連結した各候補データの依存関係を可視化した可視化情報（例えば、図９に例示する情報）を生成する依存関係可視化手段（例えば、依存関係可視化手段１６０）を備え、依存関係可視化手段が、依存関係連結手段が連結した依存関係の一部または全部が共通する部分を含む全ての種類のデータにおける依存情報を用いて依存関係をグラフ（例えば、図１４に例示するグラフ）化し、共通する部分が依存情報に含まれる個数（例えば、依存関係連結表３２０）を算出し、その個数をグラフにおいて対応する部分に付加した可視化情報（例えば、図１５に例示する情報）を生成するメモリリーク原因分析システム。
【０１５９】
（５）リークデータ候補抽出手段が抽出したデータの種類ごとに、その種類のデータの依存関係と、依存関係を有するデータの組合せの数とを対応付けた種類別データ組合せ情報（例えば、拡張依存関係一覧表）を作成する種類別データ組合せ情報作成手段（例えば、依存関係表作成手段４１０）と、種類別データ組合せ情報作成手段が作成した種類別データ組合せ情報を記憶する依存関係記憶手段（例えば、依存関係表記憶装置４２０）とを備え、種類別データ組合せ情報作成手段が、作成した種類別データ組合せ情報を依存関係記憶手段に記憶させ、依存関係連結手段（例えば、データ別可視化手段４３０）が、依存関係記憶手段に記憶された種類別データ組合せ情報における依存関係のうち共通するデータを連結し、種類別データ組合せ情報におけるデータの組合せの数を対応する依存関係部分に関連付けるメモリリーク原因分析システム。
【０１６０】
（６）依存関係記憶手段に記憶された種類別データ組合せ情報をもとに、指定された種類のデータごとの依存情報に含まれる各データ間を線で繋ぐことによりグラフ化した可視化情報（例えば、図２１に例示する情報）を生成するデータ別可視化手段（例えば、データ別可視化手段４３０）を備えたメモリリーク原因分析システム。
【０１６１】
（７）依存関係記憶手段に記憶された種類別データ組合せ情報における各データに付加されたデータサイズ（例えば、図２４に例示するデータサイズ）をもとに、指定された種類のデータごとの依存情報に含まれる各データ間を線で繋ぎ、その各データにデータサイズを付加してグラフ化した可視化情報（例えば、図２５、図２６に例示する情報）を生成するデータサイズ可視化手段（例えば、データサイズ可視化手段５３０）を備えたメモリリーク原因分析システム。
【０１６２】
（８）メモリ上に記憶されたデータの種類とそのデータのデータサイズとを含む情報から、所定の記述条件に合致する部分を一つのデータに関する情報の記述範囲と判定し、その記述範囲からデータの種類と、その種類のデータのデータサイズとを抽出するデータサイズ抽出手段（例えば、データサイズ抽出手段５１０）と、データサイズ抽出手段が抽出したデータの種類ごとに、データサイズを対応付けたデータサイズ対応情報（例えば、データサイズ一覧表５４０）を作成するデータサイズ対応情報作成手段（例えば、データサイズ表作成手段５２０）とを備え、データサイズ対応情報作成手段が、作成したデータサイズ対応情報を依存関係記憶手段に記憶させ、データサイズ可視化手段が、依存関係記憶手段に記憶されたデータサイズ対応情報をもとに可視化情報を生成するメモリリーク原因分析システム。
【産業上の利用可能性】
【０１６３】
本発明は、メモリリークの原因になるデータをユーザが分析しやすくするメモリリーク原因分析システムに好適に適用される。例えば、本発明は、メモリリークの原因となるデータの特定作業や、デバッグ業務などに用いることができる。
【０１６４】
（付記１）プログラムの実行によってメモリに記憶される一のデータと、当該一のデータの変化により影響を受ける依存関係にあると特定される他のデータとを関連付けた情報である依存情報をもとに、前記メモリ上に保持され続ける所定のデータと依存関係を有するデータをメモリ上に残存する残存データと特定する残存データ特定手段と、前記残存データ特定手段が特定した残存データのうち、データの種類ごとの残存データ数が、先に特定した時よりも後に特定した時のほうが多い種類の残存データをメモリリークの候補データとして抽出するリークデータ候補抽出手段と、前記メモリリーク候補抽出手段が抽出した各候補データの依存関係において共通するデータを連結する依存関係連結手段とを備えたことを特徴とするメモリリーク原因分析システム。
【０１６５】
（付記２）依存関係連結手段が連結した各候補データの依存関係を可視化した可視化情報を生成する依存関係可視化手段を備え、前記依存関係可視化手段は、依存関係連結手段が連結した依存関係の一部または全部が共通する部分を含む全ての種類のデータにおける依存情報を用いて、データの種類ごとに、依存関係を有するデータ間の関係を組にした結果をファイルに出力する付記１記載のメモリリーク原因分析システム。
【０１６６】
（付記３）依存関係記憶手段に記憶された種類別データ組合せ情報をもとに、指定された種類のデータごとの依存情報に含まれる各データ間を線で繋ぐことによりグラフ化した可視化情報を生成するデータ別可視化手段を備え、前記データ別可視化手段は、データの種類ごとにグラフ化した可視化情報を複数同時に表示する付記１記載のメモリリーク原因分析システム。
【０１６７】
（付記４）データ別可視化手段は、依存関係記憶手段に記憶された種類別データ組合せ情報をもとに、指定された種類のデータごとの依存情報に含まれるデータのうち依存関係を有するデータ間を線で繋ぎ、線で繋がれた両データの依存関係と同一の依存関係を有する依存情報の数を前記線に付加した可視化情報を生成する付記１記載のメモリリーク原因分析システム。
【０１６８】
（付記５）データサイズ対応情報作成手段は、種類別データ組合せ情報作成手段が種類別データ組合せ情報を作成する前もしくは後にデータサイズ対応情報を作成するメモリリーク原因分析システム。
【符号の説明】
【０１６９】
１００  メモリリーク原因分析システム
１１０  データ抽出手段
１２０  依存関係特定手段
１３０  残存データ特定手段
１４０  リークデータ候補抽出手段
１５０  依存関係連結手段
１６０  依存関係可視化手段
２１０  入力装置
２２０  出力装置
４１０  依存関係表作成手段
４２０  依存関係表記憶装置
４３０  データ別可視化手段
５１０  データサイズ抽出手段
５２０  データサイズ表作成手段
５３０  データサイズ可視化手段
【図１】
2011141761.tif 000003
【図２】
2011141761.tif 000004
【図３】
2011141761.tif 000005
【図４】
2011141761.tif 000006
【図５】
2011141761.tif 000007
【図６】
2011141761.tif 000008
【図７】
2011141761.tif 000009
【図８】
2011141761.tif 000010
【図９】
2011141761.tif 000011
【図１０】
2011141761.tif 000012
【図１１】
2011141761.tif 000013
【図１２】
2011141761.tif 000014
【図１３】
2011141761.tif 000015
【図１４】
2011141761.tif 000016
【図１５】
2011141761.tif 000017
【図１６】
2011141761.tif 000018
【図１７】
2011141761.tif 000019
【図１８】
2011141761.tif 000020
【図１９】
2011141761.tif 000021
【図２０】
2011141761.tif 000022
【図２１】
2011141761.tif 000023
【図２２】
2011141761.tif 000024
【図２３】
2011141761.tif 000025
【図２４】
2011141761.tif 000026
【図２５】
2011141761.tif 000027
【図２６】
2011141761.tif 000028
【図２７】
2011141761.tif 000029
【図２８】
2011141761.tif 000030
【図２９】
2011141761.tif 000031