(57)【要約】【課題】  メモリリークの発生箇所の特定を精度良く、かつ検出に至る時間を短縮する。【解決手段】  ガベージコレクションを実装したコンピュータシステムにおけるメモリリーク検出装置であって、演算処理手段１０は、ガベージコレクションの前後に生成されるオブジェクト数の変化に関する情報を参照し、メモリリーク発生の可能性の有無を判定する。【選択図】  図１
2010182016.tif 000002
【特許請求の範囲】
【請求項１】
ガベージコレクションを実装したコンピュータシステムにおけるメモリリーク検出装置であって、
前記ガベージコレクションの前後に生成されるオブジェクト数の変化に関する情報を参照し、メモリリーク発生の可能性の有無を判定する演算処理手段、
を備えたことを特徴とするメモリリーク検出装置。
【請求項２】
前記演算処理手段は、
仮想マシン上で動作するプログラムにより生成されるメモリ情報を取得し、当該取得したメモリ情報から前記オブジェクトが生成されたときのスタックトレースと、前記オブジェクト生成後のガベージコレクション発生回数とを組にした関連情報を生成するサーバ処理部と、
前記サーバ処理部から前記関連情報を取得し、前記関連情報と過去に取得した関連情報とを比較して同種スタックトレースの合計数に変化があり、合計カベージコレクション発生回数が増加傾向にあるスタックトレースをメモリリークの可能性ありと判定し、外部に報知するクライアント処理部と、
を備えることを特徴とする請求項１に記載のメモリリーク検出装置。
【請求項３】
前記サーバ処理部は、
前記取得したメモリ情報から各オブジェクトを生成したスタックトレースの取得を行い、
前記取得したスタックトレースに一意の識別情報を付与し、
前記取得した１以上のスタックトレースについて前回取得したスタックトレースと比較し、同じスタックトレースの識別情報があれば前記カベージコレクション発生回数を更新して、前記識別情報と、前記スタックトレースと、前記オブジェクトが生成されてから発生したガベージコレクション発生回数とを組みにした第１の関連情報を生成し、
更に同種のスタックトレースの有無を判定し、同種スタックトレースがある場合は、当該同種スタックトレース合計数と、カベージコレクション発生合計数とからなる第２の関連情報を生成し、
前記生成した第２の関連情報を前記クライアント処理部に引き渡す、
ことを特徴とする請求項２に記載のメモリリーク検出装置。
【請求項４】
前記クライアント処理部は、
前記サーバ処理部から取得した第２の関連情報を参照し、前記第２の関連情報に含まれる前記スタクトレース合計数について前回取得した分との変化の有無を判定し、
変化ありと判定された場合、前記カベージコレクション発生回数を前記スタックトレースの合計数で割った平均値を計算し、前回平均値と比較して増加していた場合にメモリリーク発生の可能性ありと判定して外部に報知する、
ことを特徴とする請求項３に記載のメモリリーク検出装置。
【請求項５】
少なくともメモリを含む演算処理手段を備え、ガベージコレクションを実装したコンピュータシステムにおけるメモリリーク検出方法であって、
前記ガベージコレクションの前後に生成されるオブジェクト数の変化に関する情報を参照し、メモリリーク発生の可能性の有無を判定する演算処理ステップ、
を有することを特徴とするメモリリーク検出方法。
【請求項６】
前記演算処理ステップは、
仮想マシン上で動作するプログラムにより生成されるメモリ情報を取得し、当該取得したメモリ情報から前記オブジェクトが生成されたときのスタックトレースと、前記オブジェクト生成後のガベージコレクション発生回数とを組にした関連情報を生成する第１の演算処理ステップと、
前記第１のステップで生成された前記関連情報を取得し、前記関連情報と過去に取得した関連情報とを比較して同種スタックトレースの合計数に変化があり、合計ガベージコレクション発生回数が増加傾向にあるスタックトレースをメモリリークの可能性ありと判定し、外部に報知する第２の演算処理ステップと、
を含むことを特徴とする請求項５に記載のメモリリーク検出方法。
【請求項７】
前記第１の演算処理ステップは、
前記取得したメモリ情報から各オブジェクトを生成したスタックトレースの取得を行うサブステップと、
前記取得したスタックトレースに一意の識別情報を付与するサブステップと、
前記取得した１以上のスタックトレースについて前回取得したスタックトレースと比較し、同じスタックトレースの識別情報があれば前記カベージコレクション発生回数を更新して、前記識別情報と、前記スタックトレースと、前記オブジェクトが生成されてから発生したガベージコレクション発生回数とを組みにした第１の関連情報を生成するサブステップと、
更に同種のスタックトレースの有無を判定し、同種スタックトレースがある場合は、当該同種スタックトレース合計数と、カベージコレクション発生合計数とからなる第２の関連情報を生成するサブステップと、
前記生成した第２の関連情報を前記第２の演算処理ステップに引き渡すサブステップと、
を含むことを特徴とする請求項６に記載のメモリリーク検出方法。
【請求項８】
前記第２の演算処理ステップは、
前記第１の演算処理ステップから引き渡される前記第２の関連情報を参照し、前記第２の関連情報に含まれる前記スタクトレース合計数について前回取得した分との変化の有無を判定するサブステップと、
変化ありと判定された場合、前記カベージコレクション発生回数を前記スタックトレースの合計数で割った平均値を計算し、前回平均値と比較して増加していた場合にメモリリーク発生の可能性ありと判定して外部に報知するサブステップと、
を含むことを特徴とする請求項７に記載のメモリリーク検出方法。
【請求項９】
コンピュータ上で実行され、ガベージコレクションを実装したコンピュータシステムにおけるメモリリーク検出プログラムであって、
前記コンピュータに、
前記ガベージコレクションの前後に生成されるオブジェクト数の変化に関する情報を参照し、メモリリーク発生の可能性の有無を判定するメモリリーク検出処理、
を実行させることを特徴とするメモリリーク検出プログラム。
【請求項１０】
前記メモリリーク検出処理は、
仮想マシン上で動作するプログラムにより生成されるメモリ情報を取得し、当該取得したメモリ情報から前記オブジェクトが生成されたときのスタックトレースと、前記オブジェクト生成後のガベージコレクション発生回数とを組にした関連情報を生成する関連情報生成処理と、
前記関連情報生成処理で生成された前記関連情報を取得し、前記関連情報と過去に取得した関連情報とを比較して同種スタックトレースの合計数に変化があり、合計ガベージコレクション発生回数が増加傾向にあるスタックトレースをメモリリークの可能性ありと判定し、外部に報知する判定および報知処理と、
を含むことを特徴とする請求項９に記載のメモリリーク検出プログラム。
【請求項１１】
前記関連情報生成処理は、
前記取得したメモリ情報から各オブジェクトを生成したスタックトレースの取得を行うスタックトレース取得処理と、
前記取得したスタックトレースに一意の識別情報を付与する識別情報付与処理と、
前記取得した１以上のスタックトレースについて前回取得したスタックトレースと比較し、同じスタックトレースの識別情報があれば前記カベージコレクション発生回数を更新して、前記識別情報と、前記スタックトレースと、前記オブジェクトが生成されてから発生したガベージコレクション発生回数とを組みにした第１の関連情報を生成する第１の関連情報生成処理と、
更に同種のスタックトレースの有無を判定し、同種スタックトレースがある場合は、当該同種スタックトレース合計数と、カベージコレクション発生合計数とからなる第２の関連情報を生成する第２の関連情報生成処理と、
前記生成した第２の関連情報を前記判定および報知処理に引き渡す関連情報出力処理と、
を含むことを特徴とする請求項１０に記載のメモリリーク検出プログラム。
【請求項１２】
前記判定および報知処理は、
前記関連情報生成処理から引き渡される前記第２の関連情報を参照し、前記第２の関連情報に含まれる前記スタクトレース合計数について前回取得した分との変化の有無を判定する判定処理と、
変化ありと判定された場合、前記カベージコレクション発生回数を前記スタックトレースの合計数で割った平均値を計算し、前回平均値と比較して増加していた場合にメモリリーク発生の可能性ありと判定して外部に報知する報知処理と、
を含むことを特徴とする請求項１１に記載のメモリリーク検出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリリーク検出装置および方法ならびにプログラムに関し、特に、ガベージコレクションを実装した仮想マシンに用いて好適な技術に関する。
【背景技術】
【０００２】
ガベージコレクションとは、プログラムを実行するために確保されたメモリ領域のうち、そのプログラムの終了後も確保されたままになっているメモリ領域を自動的に解放して他のプログラムに使用させる機能である。
【０００３】
上述したガベージコレクションを実装した仮想マシン上で動作するプログラムのメモリリーク解析用ツールは、メモリ領域上に展開されている各オブジェクト（データを格納したメモリ領域）が割り当てられているメモリ使用量やインスタンシングされている数を報知することでメモリリーク候補を提示している。
【０００４】
例えば、特許文献１には、ガベージコレクションを実装するコンピュータシステムにおいて、スループットと応答性能とのバランスから最適なヒープサイズを求めるために、ガベージコレクション発生回数を利用する支援装置が開示されている。また、特許文献２には、オブジェクトの参照関係を利用してメモリリークの判断を行うメモリリークの検出方法が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−２０６６４４号公報
【特許文献２】特開２００７−４４１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述した特許文献１、２で提案されたメモリリーク検出方法によれば、メモリリークの発生箇所を精度良く特定することができない。その理由は、いずれもガベージコレクションの発生回数を調査することによってメモリリークの判断を行っており、例えば、オブジェクトが長時間メモリに存在することが必ずしもメモリリークを起こしていることにはならないためである。
【０００７】
また、特許文献１、２に開示された技術によれば、ガベージコレクションにより不要になったオブジェクトが自動的にメモリから回収されるため、プログラム上、どのルートで生成されたオブジェクトがメモリ上に残り続けているかを検出することが困難であり、特に、メモリリークが微量の場合、メモリリークが発生していることの検出自体も困難な場合があるという問題があった。
【０００８】
（発明の目的）
本発明の目的は、メモリリークの発生箇所の特定を精度良く、かつ検出に至るまでの時間を短縮する、メモリリーク検出装置および方法ならびにプログラムを提供することにある。
【課題を解決するための手段】
【０００９】
本発明の第１のメモリリーク検出装置は、ガベージコレクションを実装したコンピュータシステムにおけるメモリリーク検出装置であって、前記ガベージコレクションの前後に生成されるオブジェクト数の変化に関する情報を参照し、メモリリーク発生の可能性の有無を判定する演算処理手段を含む。
【００１０】
本発明の第２のメモリリーク検出方法は、少なくともメモリを含む演算処理手段を備え、ガベージコレクションを実装したコンピュータシステムにおけるメモリリーク検出方法であって、前記ガベージコレクションの前後に生成されるオブジェクト数の変化に関する情報を参照し、メモリリーク発生の可能性の有無を判定する演算処理ステップ、を含む。
【００１１】
本発明の第３のメモリリーク検出プログラムは、コンピュータ上で実行され、ガベージコレクションを実装したコンピュータシステムにおけるメモリリーク検出プログラムであって、前記コンピュータに、前記ガベージコレクションの前後に生成されるオブジェクト数の変化に関する情報を参照し、メモリリーク発生の可能性の有無を判定するメモリリーク検出処理、を実行させる。
【発明の効果】
【００１２】
本発明によれば、メモリリークの発生箇所の特定を精度良く、かつ検出に至るまでの時間を短縮した、メモリリーク検出装置および方法ならびにプログラムを提供することができる。
【００１３】
その理由は、演算制御手段が、ガベージコレクションの回数を参照するだけで無く、ガベージコレクションの前後に生成されるオブジェクト数の変化を考慮してメモリリーク発生の可能性の有無を判定するからである。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施の形態によるメモリリーク検出装置の構成を示すブロック図である。
【図２】本発明の実施の形態によるメモリリーク検出装置のサーバ処理部が生成する関連情報のデータ構造の一例を示す図である。
【図３】本発明の実施の形態によるメモリリーク検出装置の動作を示すフローチャートである。
【図４】本発明の実施の形態によるメモリリーク検出装置のサーバ処理部が生成する第１の関連情報と第２の関連情報のデータ構造の一例を示す図である。
【図５】本発明の実施の形態によるメモリリーク検出装置のクライアント処理部が生成するメモリリーク可能性候補一覧の報知形式の一例を示す図である。
【発明を実施するための形態】
【００１５】
次に、本発明の実施の形態について図面を参照して詳細に説明する。
【００１６】
（第１の実施の形態の構成）
図１は、本発明の第１の実施の形態によるメモリリーク検出装置１の構成を示すブロック図である。
【００１７】
図１を参照すると、本発明の第１の実施の形態によるメモリリーク検出装置１は、ガベージコレクションを実装したコンピュータシステム上で実現され、ガベージコレクションの前後に生成されるオブジェクト数の変化に関する情報を参照し、メモリリーク発生の可能性の有無を判定する、少なくともメモリを含む演算処理手段１０で実現される。
【００１８】
演算処理手段１０は、仮想マシン処理部１１と、サーバ処理部１２と、クライアント処理部１３とを含む構成となっている。
【００１９】
仮想マシン処理部１１は、例えば、Ｊａｖａ（登録商標）で生成されたプログラムのバイトコードをプラットフォームのネイティブコードに変更してプログラムを実行するプログラム実行手段であり、ここでは、上述したガベージコレクションを実装したＪＶＡ（Java Virtual Machine）を想定している。
【００２０】
周知のように、ＪＶＡ（登録商標）は、そのプログラム１１１実行時、ヒープ１１２、スタック１１３と称される演算処理手段１０のメモリ（メモリ領域）を使用する。オブジェクトのインスタンスは、上述したメモリ領域中、ヒープ１１１に割り当てられ、メソッド呼び出しのような命令はスタック１１２にそれぞれ割り当てられ記憶される。
【００２１】
サーバ処理部１２は、仮想マシン上で動作するプログラム１１１により生成されるメモリ情報を取得し、当該取得したメモリ情報からオブジェクトが生成されたときのスタックトレース（スタック１１３）と、オブジェクト生成後のガベージコレクション発生回数とを組にした関連情報としてのメモリ情報テーブルを生成する機能を有する。
【００２２】
このため、サーバ処理部１２は、メモリ情報取得部１２１と、ＩＤ付与部１２２と、メモリ情報整理部１２３と、メモリ情報保存部１２４と、メモリ情報送信部１２５と、を含む構成となっている。
【００２３】
メモリ情報取得部１２１は、ガベージコレクションを実装した仮想マシン上で動作するプログラム１１１のメモリ領域（ヒープ１１２およびスタック１１３）に割り当てられ記憶されたオブジェクトに関する情報の取得を行い、ＩＤ付与部１２２へ引き渡す。
【００２４】
ＩＤ付与部１２２は、メモリ情報取得部１２１が取得した各スタック１１３に対して一意の識別情報（ＩＤ）を付与してメモリ情報整理部１２３へ引き渡す。メモリ情報整理部１２３は、前回取得したメモリ情報を保存しているメモリ情報保存部１２４からメモリ情報テーブルを取得し、ＩＤ付与部１２２を介して取得された今回のメモリ情報から新規のメモリ情報テーブルを生成してメモリ情報送信部１２５へ引き渡す。
【００２５】
メモリ情報整理部１２３で生成された新規のメモリ情報テーブルは、図２（ａ）にそのデータ構造の一例が示されるように、ＩＤ付与部１２２で付与されたＩＤ毎、オブジェクトを生成したスタックトレースと、オブジェクトが生成されてから発生したガベージコレクション発生回数、を関連付けたメモリ情報テーブル（第１の関連情報）と、図２（ｂ）にそのデータ構造の一例が示されるように、スタックトレースの種類毎の個数と、合計ガベージコレクションの発生回数とを関連付けたメモリ情報テーブル（第２の関連情報）である。なお、ここでいうスタックトレースとは取得したスタック１１３の内容をいう。
【００２６】
上述したメモリ情報整理部１２３により生成された新規のメモリ情報テーブル（第２の関連情報）は、メモリ情報送信部１２５によってクライアント処理部１３へ送信される。
【００２７】
クライアント処理部１３は、サーバ処理部１２から関連情報としてのメモリ情報テーブルを取得し、このメモリ情報テーブルの内容と、過去に取得したメモリ情報テーブルの内容とを比較し、同種スタックトレースの合計数に変化があり、合計カベージコレクション発生回数が増加傾向にあるスタックトレースをメモリリークの可能性ありと判定して外部に報知する機能を有する。
【００２８】
このため、クライアント処理部１３は、メモリ情報受信部１３１と、メモリ情報解析部１３２と、メモリ情報保存部１３３と、メモリリーク警告表示部１３４と、を含む構成となっている。
【００２９】
メモリ情報受信部１３１は、サーバ処理部１２（のメモリ情報送信部１２５）から送信されるメモリ情報テーブルを受信してメモリ情報解析部１３２へ引き渡す。メモリ情報解析部１３２は、メモリ情報保存部１３３に保存された過去のメモリ情報から前回送信されたメモリ情報テーブルを取得し、今回取得したメモリ情報テーブルとの比較を行い、その結果、スタックトレースの数が増加し、かつ、合計カベヘージコレクション回数が増加傾向にあるスタックトレースはメモリリークしている可能性が高いと判定し、その情報をメモリリーク警告表示部１３４へ通知する。
【００３０】
メモリリーク警告表示部１３４は、メモリ情報解析部１３２でメモリリークの可能性が高いと判定された情報、すなわち、スタックトレースとガベージコレクションの発生回数とを外部へ報知するため、例えば、ＬＣＤ（Liquid Crystal Display Device）等の表示モニタへ表示する。
【００３１】
なお、ここでは、上述した仮想マシン処理部１１とサーバ処理部１２は、ＣＰＵ、メモリ、通信機能を含む入出力デバイスを構成要素とする１個のコンピュータシステム（サーバ）で実現され、クライアント処理部１３は、ネットワーク経由で接続される他のコンピュータシステム（端末等）で実現されるものとするが、上述した仮想マシン処理部１１と、サーバ処理部１２と、クライアント処理部１３が持つ全ての機能を１個のコンピュータシステムで実現してもよい。
【００３２】
（第１の実施の形態の動作）
次に、本発明の第１の実施の形態によるメモリリーク検出装置１の動作について図３に示すフローチャート、図４に示すメモリ情報テーブルのデータ構造の一例、および、図５に示すメモリリーク可能性候補一覧を参照して説明する。
【００３３】
図３のフローチャートを参照すると、まず、サーバ処理部１２のメモリ情報取得部１２１は、仮想マシン処理部１１から、仮想マシン上で動作するあるプログラム１１１のメモリ情報（ヒープ１１２、スタック１１３）について取得し、ＩＤ付与部１２２へ引き渡す。メモリ情報取得部１２１は、メモリ情報を取得するにあたり、システム内部でガベージコクション（ＧＣ）が発生した直後のタイミングで行う（ステップＳ３０１“ＹＥＳ”）。
【００３４】
メモリ情報取得部１２１は、仮想マシン処理部１１から取得したメモリ情報から、更に、各オブジェクトを作成したスタックトレースの取得を行い、例えば、図４（ａ）にそのデータ構造の一例が示されるように、各スタックトレースＡ、Ｂ、Ｃに対し一意のＩＤ（ＩＤ１〜ＩＤ６）を付与してメモリ情報整理部１２３へ引き渡す（ステップＳ１３２）。
【００３５】
ＩＤが付与されたスタックトレースを取得したメモリ情報整理部１２３は、その全てのスタックトレースについて以下に説明するステップＳ３０３〜Ｓ３０６の処理を行う。すなわち、メモリ情報整理部１２３は、ＩＤが付与されたスタックトレースのそれぞれについて、未処理のスタックトレースの有無を判定し（ステップＳ３０３）、未処理のスタックトレースがあれば（ステップＳ３０３“ＹＥＳ”）、メモリ情報保存部１２４を参照し、今回取得したスタックトレースのＩＤと同じスタックトレースのＩＤがメモリ情報保存部１２４に保存されているか否かの判定を行う（ステップＳ３０４）。
【００３６】
メモリ情報整理部１２３は、メモリ情報保存部１２４に保存されたメモリ情報テーブルに、今回取得したスタックトレースのＩＤと同じＩＤが付与されたスタックトレースがあれば（ステップＳ３０４“ＹＥＳ”）、ガベージコレクションの発生回数を＋１更新し（ステップＳ３０５）、なければ（ステップＳ３０４“ＮＯ”）、新規にエントリされる行を作成して領域割り当てを行う（ステップＳ３０６）。なお、ガベージコレクションでメモリ情報テーブルにあったＩＤと同じスタックトレースが取得できなかった場合は、エントリされた行をメモリ情報テーブルから削除する。
【００３７】
上述した処理（ステップＳ３０３〜Ｓ３０６）は、メモリ情報取得部１２１により今回取得され、ＩＤ付与部１２２によってＩＤが付与されたスタックトレースの全てに対し繰り返し実行される。
【００３８】
未処理のスタックトレースがなくなると（ステップＳ３０３“ＮＯ”）、メモリ情報整理部１２３は、図４（ａ）にそのデータ構造の一例が示されるように、スタックトレースに付与されたＩＤ、スタックトレース、オブジェクトが生成されてから発生したガベージコレクションの回数（ＧＣ発生回数）でフィールドが構成されるメモリ情報テーブルａを生成する。図４（ａ）に示す例では、ＩＤが付与されたスタックトレースＡ、Ｂ、Ｃ、Ａ、Ａ、Ｃ毎に、オブジェクトが生成されてから発生したＧＣ発生回数１、３、６、３、６、７がメモリ情報テーブルａに設定される。
【００３９】
メモリ情報整理部１２３は、更に、このメモリ情報テーブルａを参照して同種のスタックトレースの数を調査し、図４（ｂ）にそのデータ構造の一例が示されるように、ＩＤが付与されたスタックトレース毎、その合計となる個数と、ガベージコレクション発生合計数（合計ＧＣ回数）でフィールドが構成されたメモリ情報テーブルｂを生成する。図４（ｂ）に示す例では、図４（ａ）に示すメモリ情報テーブルから、スタックトレースＡについては、個数が３で合計ＧＣ回数が１０、タックトレースＢについては、個数が１で合計ＧＣ回数が３、タックトレースＣについては、個数が２で合計ＧＣ回数が１３、となるメモリ情報テーブルｂが再構成される。
【００４０】
続いてメモリ情報整理部１２３は、図４（ｂ）に示されるメモリ情報テーブルｂの内容をメモリ情報保存部１２４に保存し（ステップＳ３０７）、更に、そのメモリ情報テーブルｂの内容をメモリ情報送信部１２５によりクライアント処理部１３へ送信する（ステップＳ３０８）。
【００４１】
クライアント処理部１３は、サーバ処理部１２のメモリ情報送信部１２５から送信されるメモリ情報テーブルｂをメモリ情報受信部１３１で受信する（ステップＳ３０９）。そして、メモリ情報受信部１３１は、受信したメモリ情報テーブルｂをメモリ情報解析部１３２へ引き渡す。
【００４２】
メモリ情報解析部１３２は、メモリ情報受信部１３１により引き渡されたメモリ情報テーブルｂの内容と、メモリ情報保存部１３３に保存されてある前回のメモリ情報テーブルの内容とを比較することにより、スタックトレースの合計個数が、前回の合計個数と変化しているか否かを判定する（ステップＳ３１０）。
【００４３】
上述したスタックトレースの合計個数に変化がある場合（ステップＳ２１０“ＹＥＳ”）、メモリ情報解析部１３２は、ガベージコレクションの発生回数（ＧＣ発生回数）をスタックトレースの合計個数で割った平均値（合計ＧＣ回数／個数）を計算する。続いてメモリ情報解析部１３２は、この計算結果と前回までの計算値とを比較する（ステップＳ３１１）。ここで、増加傾向にあると判定された場合に（ステップＳ３１１“ＹＥＳ”）、メモリ情報解析部１３２は、該当するスタックトレースをメモリリークの対象候補としてその情報をメモリリーク警告表示部１３４に転送する。
【００４４】
メモリ情報解析部１３２からメモリリークの対象候補に関する情報を取得したメモリリーク警告表示部１３４は、例えば、図５にその表示形式の一例が示されるように、該当スタックトレースと、平均ガベージコレクション発生回数（平均ＧＣ回数）との組みから成る表示データを、メモリリーク可能性候補一覧データとして表示情報を生成し、不図示の表示モニタへ表示して外部へ報知する（ステップＳ３１２）。図５に示す例では、平均ＧＣ回数が６．５（合計ＧＣ回数：１３／個数：２）となっているスタックトレースＣが最上位にランクされたメモリリーク可能性候補として表示される。
【００４５】
（第１の実施の形態による効果）
本実施の形態によるメモリリーク検出装置１では、ガベージコレクションの前後に生成されるオブジェクト数の変化を考慮してメモリリーク発生の可能性の有無を判定することにより、プログラム上のどのルートで作成されたオブジェクトがメモリに残り続けているかを発見するのが容易になり、また、メモリリークが少量の場合でもその発見箇所の特定が容易になる。
【００４６】
また、あるオブジェクトが作成されたときのスタックトレースとその後のガベージコレクションの発生回数とを関連付けることで、プログラム上のある特定のルートを経由する処理中に作成されるオブジェクトはガベージコレクションの対象から外れていることがわかり、不要なオブジェクトがメモリ上に残存していることを外部に報知することができる。このように、メモリ上に残り続けるオブジェクトの特定が容易になり、したがって、メモリ不足に陥りコンピュータシステムを正常に使用できなくなる事態を回避することができる。
【００４７】
なお、本実施の形態１では、ガベージコレクションを実装する仮想マシンとしてＪＶＭ（登録商標）を例示したが、ＣやＣ＋＋言語のようにメモリ領域の解放を明示的に行うコンピュータシステムについても同様に適用が可能である。
【００４８】
また、図１の演算処理部１０が有する機能は、全てをソフトウェアによって実現しても、あるいはその少なくとも一部をハードウェアで実現してもよい。例えば、演算処理部１０が、ガベージコレクションの前後に生成されるオブジェクト数の変化に関する情報を参照し、メモリリーク発生の可能性の有無を判定するデータ処理は、１または複数のプログラムによりコンピュータ上で実現してもよく、また、その少なくとも一部をハードウェアで実現してもよい。
【００４９】
以上説明のように本発明のメモリリーク検出装置によれば、演算制御手段１０が、ガベージコレクションの前後に生成されるオブジェクト数の変化を考慮してメモリリーク発生の可能性の有無を判定することにより、メモリリークの発生箇所の特定を精度良く、かつ検出に至るまでの時間を短縮することができる。
【００５０】
なお、本発明のメモリリーク検出方法は、例えば、図１に示されるように、少なくともメもりを含む演算処理手段１０を備え、ガベージコレクションを実装したコンピュータシステムにおけるメモリリーク検出方法であって、例えば、図３のフローチャートに示されるように、ガベージコレクションの前後に生成されるオブジェクト数の変化に関する情報を参照し（Ｓ３０１〜Ｓ３０８）、メモリリーク発生の可能性の有無を判定する演算処理ステップ（Ｓ３０９〜Ｓ３１２）、を含む。
【００５１】
本発明のメモリリーク検出方法によれば、ガベージコレクションの前後に生成されるオブジェクト数の変化を考慮してメモリリーク発生の可能性の有無を判定することにより、メモリリークの発生箇所の特定を精度良く、かつ検出に至るまでの時間を短縮するメモリリーク検出方法を提供することができる。
【００５２】
また、本発明のメモリリーク検出プログラムは、コンピュータ上で実行され、ガベージコレクションを実装したコンピュータシステムにおけるメモリリーク検出プログラムであって、コンピュータに、例えば、図３のフローチャートに示されるように、ガベージコレクションの前後に生成されるオブジェクト数の変化に関する情報を参照し、メモリリーク発生の可能性の有無を判定するメモリリーク検出処理（ステップＳ３０１〜Ｓ３１２）、を実行させる。
【００５３】
本発明のメモリリーク検出プログラムによれば、コンピュータが、ガベージコレクションの前後に生成されるオブジェクト数の変化を考慮してメモリリーク発生の可能性の有無を判定するメモリリーク検出処理を実行することにより、メモリリークの発生箇所の特定を精度良く、かつ検出に至るまでの時間を短縮するメモリリーク検出プログラムを提供することができる。
【００５４】
以上好ましい実施の形態と実施例をあげて本発明を説明したが、本発明は必ずしも、上述実施の形態及び実施例に限定されるものでなく、その技術的思想の範囲内において様々に変形して実施することができる。
【符号の説明】
【００５５】
１：メモリリーク検出装置
１０：メモリを含む演算処理手段
１１：仮想マシン処理部
１２：サーバ処理部
１３：クライアント処理部
１１１：プログラム
１１２：ヒープ
１１３：スタック
１２１：メモリ情報取得部
１２２：ＩＤ付与部
１２３：メモリ情報整理部
１２４：メモリ情報保存部
１２５：メモリ情報送信部
１３１：メモリ情報受信部
１３２：メモリ情報解析部
１３３：メモリ情報保存部、
１３４：メモリリーク警告表示部
【図１】
2010182016.tif 000003
【図２】
2010182016.tif 000004
【図３】
2010182016.tif 000005
【図４】
2010182016.tif 000006
【図５】
2010182016.tif 000007