(57)【特許請求の範囲】
【請求項１】
リソースリーク検出方法であって、
プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得するステップであって、前記ターゲットコードはプログラムコードの部分コードである、ステップと、
前記ターゲットリソースによって占用される第１の記憶リソース量を決定するステップと、
前記ターゲットリソースによって占用される前記第１の記憶リソース量が第１の事前設定された条件を満たすか否かを判定するステップであって、前記第１の事前設定された条件は、前記ターゲットリソースによって占用される前記第１の記憶リソース量がリソースリークを構成することとして設定される、ステップと、
前記ターゲットリソースによって占用される前記第１の記憶リソース量が前記第１の事前設定された条件を満たす場合、前記ターゲットコードの記憶場所をリソースリーク場所として決定するステップと、
を含み、
前記ターゲットリソースは少なくとも２つのターゲットサブリソースを含み、前記ターゲットサブリソースは、前記ターゲットコードを実行するプロセスにおいて呼び出される、前記ターゲットリソースの部分リソースであり、
前記方法は、
前記ターゲットコードの実行時に前記ターゲットサブリソースが呼び出される呼出パスを取得するステップと、
前記ターゲットサブリソースが占める前記第１の記憶リソース量における比例値を決定するステップと、
前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値が、第２の事前設定された条件を満たすか否かを判定するステップであって、前記第２の事前設定された条件は、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値がリソースリークを構成することとして設定される、ステップと、
前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値が前記第２の事前設定された条件を満たす場合、前記ターゲットサブリソースが呼び出される前記呼出パスをリソースリーク呼出パスとして決定するステップと、
を更に含む、方法。
【請求項２】
前記第１の事前設定された条件は、第１の事前設定された閾値又は第１の事前設定された増加規則を含み、前記第１の事前設定された閾値は、前記第１の記憶リソース量がリソースリークを構成する前記第１の記憶リソース量の最小値よりも大きいこととして設定され、前記第１の事前設定された増加規則は、前記第１の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定され、前記リソース周期は、前記ターゲットリソースが記憶空間を占用するライフサイクルであり、
前記ターゲットリソースによって占用される前記第１の記憶リソース量が第１の事前設定された条件を満たすか否かを判定する前記ステップは、
前記ターゲットリソースによって占用される前記第１の記憶リソース量が前記第１の事前設定された閾値よりも大きいか否かを判定し、前記ターゲットリソースによって占用される前記第１の記憶リソース量が前記第１の事前設定された閾値よりも大きい場合、前記ターゲットリソースによって占用される前記第１の記憶リソース量が前記第１の事前設定された条件を満たすと決定するステップ、又は、
前記ターゲットリソースによって占用される前記第１の記憶リソース量が、前記リソース周期において前記第１の事前設定された増加規則を満たすか否かを判定し、前記ターゲットリソースによって占用される前記第１の記憶リソース量が、前記リソース周期において前記第１の事前設定された増加規則を満たす場合、前記ターゲットリソースによって占用される前記第１の記憶リソース量が前記第１の事前設定された条件を満たすと決定するステップ、
を含む、請求項１に記載の方法。
【請求項３】
前記第２の事前設定された条件は、第２の事前設定された閾値又は第２の事前設定された増加規則を含み、前記第２の事前設定された閾値は、前記第１の記憶リソース量の比例値が、リソースリークを構成する、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値の最小値よりも大きいこととして設定され、前記第２の事前設定された増加規則は、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定され、前記リソース周期は、前記ターゲットリソースが記憶空間を占用するライフサイクルであり、
前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値が、第２の事前設定された条件を満たすか否かを判定する前記ステップは、
前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値が、前記第２の事前設定された閾値よりも大きいか否かを判定し、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値が前記第２の事前設定された閾値よりも大きい場合、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値が前記第２の事前設定された条件を満たすと決定するステップ、又は、
前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値が、前記リソース周期において前記第２の事前設定された増加規則を満たすか否かを判定し、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値が、前記リソース周期において前記第２の事前設定された増加規則を満たす場合、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値が前記第２の事前設定された条件を満たすと決定するステップ、
を含む、請求項１に記載の方法。
【請求項４】
前記ターゲットコードの前記記憶場所は、少なくとも２つの記憶場所単位を含み、前記記憶場所単位の各々はサブコードを記憶し、前記少なくとも２つの記憶場所単位に記憶された前記サブコードは前記ターゲットコードを構成し、
前記方法は、
前記記憶場所単位に記憶された前記サブコードの実行時に呼び出されるターゲットサブリソースを取得するステップであって、前記少なくとも２つの記憶場所単位に記憶された前記サブコードの実行時に呼び出されるターゲットサブリソースが、前記ターゲットリソースを構成する、ステップと、
前記記憶場所単位に記憶された前記サブコードの実行時に呼び出される前記ターゲットサブリソースの占める前記第１の記憶リソース量における比例値を決定するステップと、
前記比例値が第３の事前設定された条件を満たすか否かを判定するステップであって、前記第３の事前設定された条件は、前記記憶場所単位に記憶された前記サブコードの実行時に呼び出される前記ターゲットサブリソースの占める前記第１の記憶リソース量における前記比例値がリソースリークを構成することとして設定される、ステップと、
前記比例値が前記第３の事前設定された条件を満たす場合、前記記憶場所単位をリソースリーク場所単位として決定するステップと、
を更に含む、請求項１に記載の方法。
【請求項５】
前記第３の事前設定された条件は、第３の事前設定された閾値又は第３の事前設定された増加規則を含み、前記第３の事前設定された閾値は、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値が、リソースリークを構成する、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値の最小値よりも大きいこととして設定され、前記第３の事前設定された増加規則は、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定され、前記リソース周期は、前記ターゲットリソースが記憶空間を占用するライフサイクルであり、
前記比例値が前記第３の事前設定された条件を満たすか否かを判定する前記ステップは、
前記比例値が前記第３の事前設定された閾値よりも大きいか否かを判定し、前記比例値が前記第３の事前設定された閾値よりも大きい場合、前記比例値が前記第３の事前設定された条件を満たすと決定するステップ、又は、
前記比例値が前記リソース周期において前記第３の事前設定された増加規則を満たすか否かを判定し、前記比例値が前記リソース周期において前記第３の事前設定された増加規則を満たす場合、前記比例値が前記第３の事前設定された条件を満たすと決定するステップ、
を含む、請求項４に記載の方法。
【請求項６】
リソースリーク検出装置であって、
プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得するように構成される第１の取得モジュールであって、前記ターゲットコードはプログラムコードの部分コードである、第１の取得モジュールと、
前記ターゲットリソースによって占用される第１の記憶リソース量を決定するように構成される第１の決定モジュールと、
前記ターゲットリソースによって占用される前記第１の記憶リソース量が第１の事前設定された条件を満たすか否かを判定するように構成される第１の判定モジュールであって、前記第１の事前設定された条件は、前記ターゲットリソースによって占用される前記第１の記憶リソース量がリソースリークを構成することとして設定される、第１の判定モジュールと、
前記第１の判定モジュールの判定結果が、前記ターゲットリソースによって占用される前記第１の記憶リソース量が前記第１の事前設定された条件を満たすことであるとき、前記ターゲットコードの記憶場所をリソースリーク場所として決定するように構成されるリーク場所決定モジュールと、
を備え、
前記ターゲットリソースは少なくとも２つのターゲットサブリソースを含み、前記ターゲットサブリソースは、前記ターゲットコードを実行するプロセスにおいて呼び出される、前記ターゲットリソースの部分リソースであり、
前記装置は、
前記ターゲットコードの実行時に前記ターゲットサブリソースが呼び出される呼出パスを取得するように構成される第２の取得モジュールと、
前記ターゲットサブリソースが占める前記第１の記憶リソース量における比例値を決定するように構成される第２の決定モジュールと、
前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値が、第２の事前設定された条件を満たすか否かを判定するように構成される第２の判定モジュールであって、前記第２の事前設定された条件は、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値がリソースリークを構成することとして設定される、第２の判定モジュールと、
前記第２の判定モジュールの判定結果が是であるとき、前記ターゲットサブリソースが呼び出される前記呼出パスをリソースリーク呼出パスとして決定するように構成されるリークパス決定モジュールと、
を更に備える、装置。
【請求項７】
前記第１の事前設定された条件は、第１の事前設定された閾値又は第１の事前設定された増加規則を含み、前記第１の事前設定された閾値は、前記第１の記憶リソース量がリソースリークを構成する前記第１の記憶リソース量の最小値よりも大きいこととして設定され、前記第１の事前設定された増加規則は、前記第１の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定され、前記リソース周期は、前記ターゲットリソースが記憶空間を占用するライフサイクルであり、
前記第１の判定モジュールは、第１の判定サブモジュール又は第２の判定サブモジュールを有し、
前記第１の判定サブモジュールは、前記ターゲットリソースによって占用される前記第１の記憶リソース量が前記第１の事前設定された閾値よりも大きいか否かを判定し、前記第１の判定サブモジュールの判定結果が是であるとき、前記第１の判定モジュールの判定結果が是であると決定するように構成され、
前記第２の判定サブモジュールは、前記ターゲットリソースによって占用される前記第１の記憶リソース量が、前記リソース周期において前記第１の事前設定された増加規則を満たすか否かを判定し、前記第２の判定サブモジュールの判定結果が是であるとき、前記第１の判定モジュールの判定結果が是であると決定するように構成される、
請求項６に記載の装置。
【請求項８】
前記第２の事前設定された条件は、第２の事前設定された閾値又は第２の事前設定された増加規則を含み、前記第２の事前設定された閾値は、前記第１の記憶リソース量の比例値が、リソースリークを構成する、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値の最小値よりも大きいこととして設定され、前記第２の事前設定された増加規則は、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定され、前記リソース周期は、前記ターゲットリソースが記憶空間を占用するライフサイクルであり、
前記第２の判定モジュールは、第３の判定サブモジュール又は第４の判定サブモジュールを有し、
前記第３の判定サブモジュールは、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値が、前記第２の事前設定された閾値よりも大きいか否かを判定し、前記第３の判定サブモジュールの判定結果が是であるとき、前記第２の判定モジュールの判定結果が是であると決定するように構成され、
前記第４の判定サブモジュールは、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値が、前記リソース周期において前記第２の事前設定された増加規則を満たすか否かを判定し、前記第４の判定サブモジュールの判定結果が是であるとき、前記第２の判定モジュールの判定結果が是であると決定するように構成される、
請求項６に記載の装置。
【請求項９】
前記ターゲットコードの前記記憶場所は、少なくとも２つの記憶場所単位を含み、前記記憶場所単位の各々はサブコードを記憶し、前記少なくとも２つの記憶場所単位に記憶された前記サブコードは前記ターゲットコードを構成し、
前記装置は、
前記記憶場所単位に記憶された前記サブコードの実行時に呼び出されるターゲットサブリソースを取得するように構成される第３の取得モジュールであって、前記少なくとも２つの記憶場所単位に記憶された前記サブコードの実行時に呼び出されるターゲットサブリソースが、前記ターゲットリソースを構成する、第３の取得モジュールと、
前記記憶場所単位に記憶された前記サブコードの実行時に呼び出される前記ターゲットサブリソースの占める前記第１の記憶リソース量における比例値を決定するように構成される第３の決定モジュールと、
前記比例値が第３の事前設定された条件を満たすか否かを判定するように構成される第３の判定モジュールであって、前記第３の事前設定された条件は、前記記憶場所単位に記憶された前記サブコードの実行時に呼び出される前記ターゲットサブリソースの占める前記第１の記憶リソース量における前記比例値がリソースリークを構成することとして設定される、第３の判定モジュールと、
前記第３の判定モジュールの判定結果が是であるとき、前記記憶場所単位をリソースリーク場所単位として決定するように構成されるリーク場所単位決定モジュールと、
を更に備える、請求項６に記載の装置。
【請求項１０】
前記第３の事前設定された条件は、第３の事前設定された閾値又は第３の事前設定された増加規則を含み、前記第３の事前設定された閾値は、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値が、リソースリークを構成する、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値の最小値よりも大きいこととして設定され、前記第３の事前設定された増加規則は、前記ターゲットサブリソースが占める前記第１の記憶リソース量における前記比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定され、前記リソース周期は、前記ターゲットリソースが記憶空間を占用するライフサイクルであり、
前記第３の判定モジュールは、第５の判定サブモジュール又は第６の判定サブモジュールを有し、
前記第５の判定サブモジュールは、前記比例値が前記第３の事前設定された閾値よりも大きいか否かを判定し、前記第５の判定サブモジュールの判定結果が是であるとき、前記第３の判定モジュールの判定結果が是であると決定するように構成され、
前記第６の判定サブモジュールは、前記比例値が前記リソース周期において前記第３の事前設定された増加規則を満たすか否かを判定するように構成され、前記リソース周期は前記第１の記憶リソース量の占用される周期であり、且つ、前記第６の判定サブモジュールの判定結果が是であるとき、前記第３の判定モジュールの判定結果が是であると決定するように構成される、
請求項９に記載の装置。
【請求項１１】
メモリ、リソースリーク検出装置及び表示装置を備えるリソースリーク検出システムであって、
前記メモリは、リソースリーク検出プログラムを記憶するように構成され、
前記リソースリーク検出装置は、前記メモリに記憶された前記リソースリーク検出プログラムを実行して、請求項１乃至５のいずれか一項に記載のリソースリーク検出方法を実行するように構成され、
前記表示装置は、前記リソースリーク検出装置によって得られたリソースリーク検出結果を表示するように構成される、
システム。
【請求項１２】
コンピュータに請求項１乃至５のいずれか一項に記載の方法を実行させるプログラム。
【請求項１３】
請求項１２に記載のプログラムを記憶したコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、２０１４年８月２６日に中国知識産権局に提出された「リソースリーク検出の方法、装置及びシステム」と題された中国特許出願第２０１４１０４２５６００．２号に対する優先権を主張し、その全体が参照により本明細書に組み込まれる。
【０００２】
本発明はコンピュータ分野に関し、特に、リソースリーク検出の方法、装置及びシステムに関する。
【背景技術】
【０００３】
実行中のプロセスでは、プログラムは通常、メモリ、ファイルハンドル、セマフォ、メッセージカプセル、データベース接続プール等のいくつかのリソースを呼び出す。プログラムの実行が終了すると、呼び出されたリソースは適時に解放される必要がある。リソースリークとは、リリース省略や無効なメモリアクセス等の問題により、プログラムが使用されなくなったリソースを解放できず、結果としてリソースを再利用できないことを指す。リソースが絶えずリークするにつれて、システム内に利用可能なリソースが少なくなる。その結果、システム性能が低下し、最終的にリソースが不十分であるために、サービスを提供したりサービスを処理することさえできなってしまう。
【０００４】
従来技術では、メモリ割当て時、メモリが割り当てられた回数と割り当てられたメモリのサイズとがログファイルに記録される。メモリ解放時には、メモリが解放された回数と解放されたメモリのサイズとがログファイルに記録される。メモリが割り当てられた回数と、割り当てられたメモリのサイズと、メモリが解放された回数と、解放されたメモリのサイズとに従って、メモリが解放されなかった回数と未解放のメモリのサイズが決定される。このように、メモリリークが検出される。従来技術では、全てのメモリ割当てとメモリ解放を追跡し記録する必要があり、これにより、検出オーバヘッドが高くなり、効率が低くなってしまう。従来技術は、プログラムのテスト段階又はデバッグ段階でのみ使用可能であり、プログラムが実際に動作するオンライン環境ではメモリリーク検出を行うことができない。実際にプログラムが実行されたときに発生する比較的検出の難しいメモリリークを検出することができず、検出されなかったメモリリークがサービスに損害を与えたり、サービスを中断したりすることさえある。
【発明の概要】
【０００５】
本発明の実施形態は、性能オーバヘッドを低減し、リソースリーク検出効率を改善することのできるリソースリーク検出の方法、装置及びシステムを提供する。
【０００６】
本発明の実施形態の第１の態様は、リソースリーク検出方法を提供する。本方法は、
プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得するステップであって、ターゲットコードはプログラムコードの部分コードである、ステップと、
ターゲットリソースによって占用される第１の記憶リソース量を決定するステップと、
ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすか否かを判定するステップであって、第１の事前設定された条件は、ターゲットリソースによって占用される第１の記憶リソース量がリソースリークを構成することとして設定される、ステップと、
ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たす場合、ターゲットコードの記憶場所をリソースリーク場所として決定するステップと、
を含む。
【０００７】
第１の態様の第１の可能な実施方式では、ターゲットリソースは少なくとも２つのターゲットサブリソースを含む。ターゲットサブリソースは、ターゲットコードを実行するプロセスにおいて呼び出される、ターゲットリソースの部分リソースである。本方法は更に、
ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを取得するステップと、
ターゲットサブリソースが占める第１の記憶リソース量における比例値を決定するステップと、
ターゲットサブリソースが占める第１の記憶リソース量における比例値が、第２の事前設定された条件を満たすか否かを判定するステップであって、第２の事前設定された条件は、ターゲットサブリソースが占める第１の記憶リソース量における比例値がリソースリークを構成することとして設定される、ステップと、
ターゲットサブリソースが占める第１の記憶リソース量における比例値が第２の事前設定された条件を満たす場合、ターゲットサブリソースが呼び出される呼出パスをリソースリーク呼出パスとして決定するステップと、
を含む。
【０００８】
第１の態様の第２の可能な実施方式では、第１の事前設定された条件は、第１の事前設定された閾値又は第１の事前設定された増加規則を含む。第１の事前設定された閾値は、第１の記憶リソース量がリソースリークを構成する第１の記憶リソース量の最小値よりも大きいこととして設定され、第１の事前設定された増加規則は、第１の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、
ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすか否かを判定するステップは、
ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された閾値よりも大きいか否かを判定し、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された閾値よりも大きい場合、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすと決定するステップ、又は、
ターゲットリソースによって占用される第１の記憶リソース量が、リソース周期において第１の事前設定された増加規則を満たすか否かを判定し、ターゲットリソースによって占用される第１の記憶リソース量が、リソース周期において第１の事前設定された増加規則を満たす場合、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすと決定するステップ、
を含む。
【０００９】
第１の態様の第１の可能な実施方式に関して、第１の態様の第３の可能な実施方式では、第２の事前設定された条件は、第２の事前設定された閾値又は第２の事前設定された増加規則を含む。第２の事前設定された閾値は、第１の記憶リソース量の比例値が、リソースリークを構成する、ターゲットサブリソースが占める第１の記憶リソース量における比例値の最小値よりも大きいこととして設定され、第２の事前設定された増加規則は、ターゲットサブリソースが占める第１の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、
ターゲットサブリソースが占める第１の記憶リソース量における比例値が、第２の事前設定された条件を満たすか否かを判定するステップは、
ターゲットサブリソースが占める第１の記憶リソース量における比例値が、第２の事前設定された閾値よりも大きいか否かを判定し、ターゲットサブリソースが占める第１の記憶リソース量における比例値が第２の事前設定された閾値よりも大きい場合、ターゲットサブリソースが占める第１の記憶リソース量における比例値が第２の事前設定された条件を満たすと決定するステップ、又は、
ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソース周期において第２の事前設定された増加規則を満たすか否かを判定し、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソース周期において第２の事前設定された増加規則を満たす場合、ターゲットサブリソースが占める第１の記憶リソース量における比例値が第２の事前設定された条件を満たすと決定するステップ、
を含む。
【００１０】
第１の態様の第４の可能な実施方式では、ターゲットコードの記憶場所は、少なくとも２つの記憶場所単位を含む。記憶場所単位の各々はサブコードを記憶し、少なくとも２つの記憶場所単位に記憶されたサブコードはターゲットコードを構成する。本方法は更に、
記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースを取得するステップであって、少なくとも２つの記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースが、ターゲットリソースを構成する、ステップと、
記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値を決定するステップと、
比例値が第３の事前設定された条件を満たすか否かを判定するステップであって、第３の事前設定された条件は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値がリソースリークを構成することとして設定される、ステップと、
比例値が第３の事前設定された条件を満たす場合、記憶場所単位をリソースリーク場所単位として決定するステップと、
を含む。
【００１１】
第１の態様の第４の可能な実施方式に関して、第１の態様の第５の可能な実施方式では、第３の事前設定された条件は、第３の事前設定された閾値又は第３の事前設定された増加規則を含む。第３の事前設定された閾値は、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソースリークを構成する、ターゲットサブリソースが占める第１の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第３の事前設定された増加規則は、ターゲットサブリソースが占める第１の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、
比例値が第３の事前設定された条件を満たすか否かを判定するステップは、
比例値が第３の事前設定された閾値よりも大きいか否かを判定し、比例値が第３の事前設定された閾値よりも大きい場合、比例値が第３の事前設定された条件を満たすと決定するステップ、又は、
比例値がリソース周期において第３の事前設定された増加規則を満たすか否かを判定し、比例値がリソース周期において第３の事前設定された増加規則を満たす場合、比例値が第３の事前設定された条件を満たすと決定するステップ、
を含む。
【００１２】
本発明の実施形態の第２の態様は、リソースリーク検出装置を提供する。本装置は、
プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得するように構成される第１の取得モジュールであって、ターゲットコードはプログラムコードの部分コードである、第１の取得モジュールと、
ターゲットリソースによって占用される第１の記憶リソース量を決定するように構成される第１の決定モジュールと、
ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすか否かを判定するように構成される第１の判定モジュールであって、第１の事前設定された条件は、ターゲットリソースによって占用される第１の記憶リソース量がリソースリークを構成することとして設定される、第１の判定モジュールと、
第１の判定モジュールの判定結果が是であるとき、ターゲットコードの記憶場所をリソースリーク場所として決定するように構成されるリーク場所決定モジュールと、
を備える。
【００１３】
第２の態様の第１の可能な実施方式では、ターゲットリソースは少なくとも２つのターゲットサブリソースを含む。ターゲットサブリソースは、ターゲットコードを実行するプロセスにおいて呼び出される、ターゲットリソースの部分リソースである。本装置は更に、
ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを取得するように構成される第２の取得モジュールと、
ターゲットサブリソースが占める第１の記憶リソース量における比例値を決定するように構成される第２の決定モジュールと、
ターゲットサブリソースが占める第１の記憶リソース量における比例値が、第２の事前設定された条件を満たすか否かを判定するように構成される第２の判定モジュールであって、第２の事前設定された条件は、ターゲットサブリソースが占める第１の記憶リソース量における比例値がリソースリークを構成することとして設定される、第２の判定モジュールと、
第２の判定モジュールの判定結果が是であるとき、ターゲットサブリソースが呼び出される呼出パスをリソースリーク呼出パスとして決定するように構成されるリークパス決定モジュールと、
を備える。
【００１４】
第２の態様の第２の可能な実施方式では、第１の事前設定された条件は、第１の事前設定された閾値又は第１の事前設定された増加規則を含む。第１の事前設定された閾値は、第１の記憶リソース量がリソースリークを構成する第１の記憶リソース量の最小値よりも大きいこととして設定され、第１の事前設定された増加規則は、第１の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、
第１の判定モジュールは、第１の判定サブモジュール又は第２の判定サブモジュールを含み、
第１の判定サブモジュールは、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された閾値よりも大きいか否かを判定し、第１の判定サブモジュールの判定結果が是であるとき、第１の判定モジュールの判定結果が是であると決定するように構成され、
第２の判定サブモジュールは、ターゲットリソースによって占用される第１の記憶リソース量が、リソース周期において第１の事前設定された増加規則を満たすか否かを判定し、第２の判定サブモジュールの判定結果が是であるとき、第１の判定モジュールの判定結果が是であると決定するように構成される。
【００１５】
第２の態様の第１の可能な実施方式に関して、第１の態様の第３の可能な実施方式では、第２の事前設定された条件は、第２の事前設定された閾値又は第２の事前設定された増加規則を含む。第２の事前設定された閾値は、第１の記憶リソース量の比例値が、リソースリークを構成する、ターゲットサブリソースが占める第１の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第２の事前設定された増加規則は、ターゲットサブリソースが占める第１の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、
第２の判定モジュールは、第３の判定サブモジュール又は第４の判定サブモジュールを含み、
第３の判定サブモジュールは、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、第２の事前設定された閾値よりも大きいか否かを判定し、第３の判定サブモジュールの判定結果が是であるとき、第２の判定モジュールの判定結果が是であると決定するように構成され、
第４の判定サブモジュールは、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソース周期において第２の事前設定された増加規則を満たすか否かを判定し、第４の判定サブモジュールの判定結果が是であるとき、第２の判定モジュールの判定結果が是であると決定するように構成される。
【００１６】
第１の態様の第４の可能な実施方式では、ターゲットコードの記憶場所は、少なくとも２つの記憶場所単位を含む。記憶場所単位の各々はサブコードを記憶し、少なくとも２つの記憶場所単位に記憶されたサブコードはターゲットコードを構成する。本装置は更に、
記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースを取得するように構成される第３の取得モジュールであって、少なくとも２つの記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースが、ターゲットリソースを構成する、第３の取得モジュールと、
記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値を決定するように構成される第３の決定モジュールと、
比例値が第３の事前設定された条件を満たすか否かを判定するように構成される第３の判定モジュールであって、第３の事前設定された条件は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値がリソースリークを構成することとして設定される、第３の判定モジュールと、
第３の判定モジュールの判定結果が是であるとき、記憶場所単位をリソースリーク場所単位として決定するように構成されるリーク場所単位決定モジュールと、
を備える。
【００１７】
第２の態様の第４の可能な実施方式に関して、第１の態様の第５の可能な実施方式では、第３の事前設定された条件は、第３の事前設定された閾値又は第３の事前設定された増加規則を含む。第３の事前設定された閾値は、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソースリークを構成する、ターゲットサブリソースが占める第１の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第３の事前設定された増加規則は、ターゲットサブリソースが占める第１の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、
第３の判定モジュールは、第５の判定サブモジュール又は第６の判定サブモジュールを含み、
第５の判定サブモジュールは、比例値が第３の事前設定された閾値よりも大きいか否かを判定し、第５の判定サブモジュールの判定結果が是であるとき、第３の判定モジュールの判定結果が是であると決定するように構成され、
第６の判定サブモジュールは、比例値がリソース周期において第３の事前設定された増加規則を満たすか否かを判定するように構成され、リソース周期は第１の記憶リソース量の占用される周期であり、且つ、第６の判定サブモジュールの判定結果が是であるとき、第３の判定モジュールの判定結果が是であると決定するように構成される。
【００１８】
本発明の実施形態の第３の態様は、リソースリーク検出システムを提供する。本システムは、メモリ、リソースリーク検出装置及び表示装置を備え、
メモリは、リソースリーク検出プログラムを記憶するように構成され、
リソースリーク検出装置は、メモリに記憶されたリソースリーク検出プログラムを実行して、第１の態様と、第１の態様の第１の可能な実施方式、第２の可能な実施方式、第３の可能な実施方式及び第４の可能な実施方式とのうちいずれか１つに係るリソースリーク検出方法を実行するように構成され、
表示装置は、リソースリーク検出装置によって得られたリソースリーク検出結果を表示するように構成される。
【００１９】
本発明の実施形態では、プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得し、ターゲットリソースによって占用される第１の記憶リソース量を決定し、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすと決定されたとき、ターゲットコードの記憶場所をリソースリーク場所として決定することができる。このように、プログラムのターゲットコードを追跡することができ、更に検出により、ターゲットコードの記憶場所をリソースリーク場所として決定することができる。本発明の実施形態では、プログラムのターゲットコードを追跡し、ターゲットコードはプログラムコードの部分コードである。プログラムの全てのコードを追跡する必要がなく、ターゲットコードの実行時に呼び出されるターゲットリソースのみを検出することが必要となる。また、全てのリソース割当てと解放を追跡する必要がなく、性能スオーバーヘッドが低く、通常のサービス実行に影響が出ない。このように、プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、リソースリーク検出効率が改善される。
【００２０】
更に、プログラムのテスト段階又はデバッグ段階だけでなく、プログラムが実際に動作するオンライン環境においても、リーク検出を実行することができる。したがって、プログラムが正式に動作しているときに発生するリソースリーク問題を検出することができる。本発明の実施形態では、プログラムのターゲットコードを追跡することによりリソースリーク場所を検出することができるので、リソースリーク検出精度を改善することができる。また、プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、偽陰性率が低下する。
【図面の簡単な説明】
【００２１】
本発明の実施形態又は従来技術における技術的解決策をより明確に説明するために、以下、実施形態又は従来技術を説明するために必要な添付図面を簡潔に説明する。明らかながら、添付図面は以下の説明において、本発明の一部の実施形態を示すものに過ぎない。当業者であれば、これらの添付図面から創意工夫なく他の図面を更に導出できるであろう。
【図１】本発明の第１の実施形態に係るリソースリーク検出方法の概略図である。
【図２】本発明の第２の実施形態に係るリソースリーク検出方法の概略図である。
【図３】本発明の第３の実施形態に係るリソースリーク検出方法の概略図である。
【図４】本発明の実施形態に係るリソースリーク検出装置の概略構造図である。
【図５】本発明の実施形態に係る検出端末の概略構造図である。
【図６】本発明の実施形態に係るリソースリーク検出システムの概略構造図である。
【発明を実施するための形態】
【００２２】
以下、本発明の実施形態において添付図面を参照しながら、本発明の実施形態における技術的解決策を明確且つ完全に説明する。明らかながら、説明される実施形態は本発明の実施形態の一部に過ぎず、全部ではない。当業者が本発明の実施形態に基づいて創意工夫なく得た他の実施形態は、全て本発明の保護範囲に包含されるものとする。
【００２３】
本発明の実施形態は、リソースリーク検出の方法及び装置を提供する。本発明の実施形態におけるリソースリーク検出装置は、スマートフォン、タブレットコンピュータ、コンピュータ、サーバ等の、プログラムを実行可能な端末装置を含んでよい。更に、本発明の実施形態におけるリソースリーク検出装置は更に、リソース検出クライアント等のクライアントモジュールを端末装置に備えてよい。
【００２４】
本発明の実施形態は、アンドロイド（Android）オペレーティングシステムやLinuxオペレーティングシステムのようなオペレーティングシステムにおけるリソースリーク検出に適用可能であり、更に、オフィスソフトウェアや通信ソフトウェアのようなアプリケーションプログラムにおけるリソースリーク検出に適用可能であるリソースリーク検出の解決策を提供し、本発明の実施形態において特に限定されない。本発明の実施形態におけるプログラムは、AndroidオペレーティングシステムやLinuxオペレーティングシステム等のオペレーティングシステムを含んでよく、更に、端末装置にインストールされたアプリケーションプログラムを含んでよく、更に、端末装置で実行されるプロセス等を含んでよく、本発明の実施形態において特に限定されない。具体的な実施形態を用いて以下に説明する。
【００２５】
図１を参照する。図１は、本発明の第１の実施形態に係る、リソースリーク検出方法のフローチャートである。図１に示されるように、本実施形態の手順は、以下のステップを含む。
【００２６】
Ｓ１０１．プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得する。ターゲットコードはプログラムコードの部分コードである。
【００２７】
任意の実施方式では、本発明の実施形態におけるプログラムは、AndroidオペレーティングシステムやLinuxオペレーティングシステム等のオペレーティングシステムを含んでよく、更に、端末装置にインストールされたアプリケーションプログラムを含んでよく、更に、端末装置で実行されるプロセス等を含んでよく、本発明の本実施形態において特に限定されない。
【００２８】
更に任意に、本発明の本実施形態では、ターゲットリソースは、プログラムのターゲットコードが実行されるプロセスで呼び出される。ターゲットリソースは、例えば、メモリ、ファイルハンドル、セマフォ、メッセージカプセル及びデータベース接続プールである。プログラムのターゲットコードの実行が終了した後、呼び出されたターゲットリソースは適時に解放される必要がある。ターゲットコードはプログラムコードの部分コードであり、ターゲットコードは、本発明の本実施形態においてリーク検出を行う必要のあるコードである。
【００２９】
更に、プログラムコードは、複数のグループのターゲットコードを含んでよい。プログラムコードは、プログラムコードの開発及び設計時に、機能モジュール及びメモリセグメント等のカテゴリに従って、複数のターゲットコードグループが得られるように分類されてよい。例えば、プログラムがプロセスである場合、プログラムコードは、異なるモジュールを得るために、プログラムコードの機能に従って分割されてよい。ここでは、各モジュールがターゲットコードグループに対応する。代替として、プログラムコードは、異なるサイズのメモリセグメントを得るために、プログラムコードに割り当てられたメモリブロックのサイズに従って分割されてよい。ここでは、各メモリセグメントがターゲットコードのグループに対応する。プログラムがLinuxオペレーティングシステムのスラブメモリである場合、プログラムコードは、複数のターゲットコードグループを得るために、異なるスラブメモリプールに従って分割されてよい。
【００３０】
更に、プログラムコードが複数のターゲットコードグループを含む場合、各ターゲットコードグループの実行時に呼び出されるターゲットリソースは、別々に取得されてよい。全てのターゲットコードグループの実行時に呼び出されるターゲットリソースの合計が、プログラムコードの実行時に呼び出されるリソースを構成する。
【００３１】
Ｓ１０２．ターゲットリソースによって占用される第１の記憶リソース量を決定する。
【００３２】
任意の実施方式では、ターゲットリソースによって占用される第１の記憶リソース量の初期値は０に設定されてよく、リソース割当ての申請時、ターゲットリソースによって占用される第１の記憶リソース量＝初期値＋割り当てられるリソースの量である。リソース解放が終了した後、ターゲットリソースによって占用される第１の記憶リソース＝初期値＋割り当てられたリソースの量−解放されたリソースの量である。したがって、ターゲットリソースによって占用される第１の記憶リソース量は、初期値と、割り当てられたリソースの量と、解放されたリソースの量とを用いて、決定することができる。具体的な実施時には、ターゲットリソースによって占用される第１の記憶リソース量は、リソース量又は具体的な測定値、例えばメモリバイト数であってよい。
【００３３】
Ｓ１０３．ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすか否かを判定する。第１の事前設定された条件は、ターゲットリソースによって占用される第１の記憶リソース量がリソースリーク条件に適合することである。
【００３４】
Ｓ１０３の判定結果が是であるとき、ステップＳ１０４が実行される。Ｓ１０３の判定結果が、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たさないことであるとき、プログラムの別のターゲットコードの実行時に呼び出される必要があるターゲットリソースを再度取得するために、ステップＳ１０１〜ステップＳ１０３に戻る。
【００３５】
任意の実施方式では、ターゲットリソースによって占用される第１の記憶リソース量は、限定ではないが、占有メモリ量、占有ファイルハンドル量、占有セマフォ量、占有メッセージカプセル量、占有データベース接続プール量等を含むが、本発明の本実施形態では特に限定されない。
【００３６】
更に、本発明の本実施形態では、第１の事前設定された条件は、ターゲットリソースによって占用される第１の記憶リソース量がリソースリークを構成することとして設定される。更に、第１の事前設定された条件は、第１の事前設定された閾値又は第１の事前設定された増加規則を含んでよい。第１の事前設定された閾値は、第１の記憶リソース量がリソースリークを構成する第１の記憶リソース量の最小値よりも大きいこととして設定される。第１の事前設定された増加規則は、第１の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。更に、ステップＳ１０３において、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすか否かを判定するステップは、具体的には、
ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された閾値よりも大きいか否かを判定し、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された閾値よりも大きい場合、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすと決定するステップ、又は、
ターゲットリソースによって占用される第１の記憶リソース量が、リソース周期において第１の事前設定された増加規則を満たすか否かを判定し、ターゲットリソースによって占用される第１の記憶リソース量が、リソース周期において第１の事前設定された増加規則を満たす場合、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすと決定するステップ、
を含んでよい。
【００３７】
具体的な実施時には、第１の事前設定された条件は、第１の事前設定された閾値又は第１の事前設定された増加規則を含んでよい。第１の事前設定された閾値は、第１の記憶リソース量がリソースリークを構成する第１の記憶リソース量の最小値よりも大きいこととして設定される。第１の事前設定された増加規則は、第１の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。更に、リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、具体的には、ターゲットリソースの割当ての申請時とリソース解放の終了時との間の間隔であってよい。
【００３８】
本発明の本実施形態では、ターゲットリソースによって占用される第１の記憶リソース量が、リソース周期において第１の事前設定された増加規則を満たすか否かを決定し、ターゲットリソースによって占用される第１の記憶リソース量が、リソース周期において第１の事前設定された増加規則を満たす場合、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすと決定することができる。例えば、各リソース周期においてターゲットリソースによって占用される第１の記憶リソース量を用いて増加変化線グラフが描出されてよく、第１の事前設定された増加規則が満たされるか否かは、増加変化曲線を用いて判定されてよい。具体的な実施時には、ターゲットリソースによって占用される第１の記憶リソース量が、リソース周期において第１の事前設定された増加規則を満たすか否かは、Mann-Kendallテスト法、線形回帰、Sen勾配推定法等のアルゴリズムを用いて判定されてよい。Mann-Kendallテスト法（Mannによって最初に提案され、更にKendallによって改良された）は、傾向をテストするために用いられるアルゴリズムである。線形回帰は、統計的な回帰分析を用いる統計的分析方法であり、線形関数モデリングの変種間の量的関係に基づく。Sen勾配推定法は、Henri  Theil及びPranab  K．  Senによって提案された勾配推定アルゴリズムを参照する。
【００３９】
Ｓ１０４．ターゲットコードの記憶場所をリソースリーク場所として決定する。
【００４０】
任意の実施方式では、Ｓ１０３の判定結果が是であるとき、すなわち、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすと決定されたとき、ターゲットコードの記憶場所がリソースリーク場所として決定される。具体的な実施時には、ターゲットコードの記憶場所は、具体的には、ターゲットコードが記憶されたファイルと、ターゲットコードの行番号とを含んでよい。
【００４１】
更に任意に、プログラムコードが複数のターゲットコードグループを含むとき、ステップＳ１０１〜Ｓ１０３は、ターゲットコードのグループ毎に同時に実行されてよい。Ｓ１０３の判定結果が是の場合、第１の事前設定された条件を満たすターゲットコードグループの数（Ｍとして記録）が、事前設定された量（Ｋとして記録：Ｋは、プログラム内のリソースリーク場所の事前設定された最大量）よりも大きいとき、ターゲットコードのＫ個の記憶場所が、第１の事前設定された条件を満たす複数のターゲットコードグループから、リソースリーク場所として決定されてよい。例えば、事前設定された量が３であり、第１の事前設定された条件を満たすターゲットコードのグループ数が５である。５は３よりも大きく、第１の事前設定された条件を満たすターゲットコードの５個のグループは、それぞれターゲットコード１、ターゲットコード２、ターゲットコード３、ターゲットコード４、ターゲットコード５である。ターゲットコード１の実行時、ターゲットリソース１が呼び出され、ターゲットリソース１によって占用される第１の記憶リソース量はリソース量１である。ターゲットコード２の実行時、ターゲットリソース２が呼び出され、ターゲットリソース２によって占用される第１の記憶リソース量はリソース量２である。ターゲットコード３の実行時、ターゲットリソース３が呼び出され、ターゲットリソース３によって占用される第１の記憶リソース量はリソース量３である。ターゲットコード４の実行時、ターゲットリソース４が呼び出され、ターゲットリソース４によって占用される第１の記憶リソース量はリソース量４である。ターゲットコード５の実行時、ターゲットリソース５が呼び出され、ターゲットリソース５によって占用される第１の記憶リソース量はリソース量５である。リソース量１、リソース量２、リソース量３、リソース量４及びリソース量５の値は、比較及びソートされてよい。比較結果がリソース量５＞リソース量２＞リソース量４＞リソース量１＞リソース量３である場合、比較的大きなリソース量の事前設定された量は、リソース量５、リソース量２及びリソース量４である。リソース量５、リソース量２、リソース量４に対応するターゲットコード５、ターゲットコード２、ターゲットコード４の記憶場所が、それぞれリソースリーク場所として決定されてよい。
【００４２】
更に任意に、ステップＳ１０３の後、本発明の本実施形態で提供されるリソースリーク検出方法は更に、
リソースリーク検出結果についての情報を出力するステップ、
を含んでよい。
【００４３】
具体的な実施時には、リソースリーク検出結果についての情報は、ターゲットコードの属性情報、ターゲットリソースによって占用される第１の記憶リソース量、リソースリーク場所についての情報、リソースリーク呼出パスについての情報、リソースリーク呼出パスによって占用されるリソース量についての情報を含む。リソースリーク検出結果についての情報は、リソース割当て時に記録されてよい。リソースリーク検出結果についての情報を出力することにより、リソースリークの位置決め精度を向上させることができ、位置決め作業負荷を低減することができ、位置決め作業者の技能要求を低減することができる。加えて、研究室で再現を行う必要がなくなり、リソースリークの位置決め効率が向上する。
【００４４】
本発明の本実施形態では、プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得し、ターゲットリソースによって占用される第１の記憶リソース量を決定し、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすと決定されたとき、ターゲットコードの記憶場所をリソースリーク場所として決定することができる。このように、プログラムのターゲットコードを追跡することができ、更に、検出により、ターゲットコードの記憶場所をリソースリーク場所として決定することができる。本発明の本実施形態では、プログラムのターゲットコードを追跡し、ターゲットコードはプログラムコードの部分コードである。プログラムの全てのコードを追跡する必要がなく、ターゲットコードの実行時に呼び出されるターゲットリソースのみを検出することが必要となる。また、全てのリソース割当てと解放を追跡する必要がなく、性能スオーバーヘッドが低く、通常のサービス実行に影響が出ない。このように、プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、リソースリーク検出効率が改善される。
【００４５】
更に、プログラムのテスト段階又はデバッグ段階だけでなく、プログラムが実際に動作するオンライン環境においても、リーク検出を実行することができる。したがって、プログラムが正式に動作しているときに発生するリソースリーク問題を検出することができる。本発明の本実施形態では、プログラムのターゲットコードを追跡し、リソースリーク場所を検出することができ、それによりリソースリーク検出精度が改善される。プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、それにより偽陰性率が低下する。
【００４６】
図２を参照する。図２は、本発明の第２の実施形態に係るリソースリーク検出方法の概略図である。図２に示されるように、本発明の本実施形態で提供される方法は、図１に示される方法に基づいて実施されてよい。具体的には、本発明の本実施形態におけるステップＳ２０１〜Ｓ２０４は、図１に示される方法のステップＳ１０４の後に実行されてよい。
【００４７】
図２に示されるように、本発明の本実施形態で提供されるリソースリーク検出方法は更に、ステップＳ２０１〜Ｓ２０４を含んでよい。
【００４８】
Ｓ２０１．ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを取得する。ターゲットリソースは、少なくとも２つのターゲットサブリソースを含んでよい。ターゲットサブリソースは、ターゲットコードを実行するプロセスで呼び出されるターゲットリソースの部分リソースである。
【００４９】
具体的な実施時には、呼出パスは関数呼出スタックを用いて表現されてよく、ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスが得られる。ターゲットリソースは少なくとも２つのターゲットサブリソースを含んでよい。ターゲットサブリソースは、ターゲットコードを実行するプロセスで呼び出されるターゲットリソースの部分リソースである。
【００５０】
更に任意に、論理呼出パスを得るために、特定の規則に従って呼出パスがマッピングされてよい。例えば、Ｓ１０４で決定されたリソースリーク場所について、層タイプの数は、リソース割当てのための関数呼出スタックの階層数に基づいて分類して求めることができる。Ｍ個の論理呼出パスは各層タイプ毎に事前設定され、Ｍ個の論理呼出パスは０，１，２，…，Ｍ−１と付番される。リソース割当てのための関数呼出スタックの中間層のリターンアドレスが求められて整数に変換され、その後、Ｍを用いてモジュロ演算が行われ、得られた結果が論理呼出パス番号として用いられる。この場合、ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを取得することができる。
【００５１】
Ｓ２０２．ターゲットサブリソースが占める第１の記憶リソース量における比例値を決定する。
【００５２】
具体的な実施時には、ターゲットサブリソースが占める第１の記憶リソース量における比例値が決定されてよい。例えば、第１の記憶リソース量は、メモリバイト数１０００ｋｂであり、ターゲットサブリソースが占める第１の記憶リソース量における比例値は、２００ｋｂである。
【００５３】
Ｓ２０３．ターゲットサブリソースが占める第１の記憶リソース量における比例値が、第２の事前設定された条件を満たすか否かを判定する。第２の事前設定された条件は、ターゲットサブリソースが占める第１の記憶リソース量における比例値がリソースリークを構成することとして設定される。Ｓ２０３の判定結果が是であるとき、ステップＳ２０４が実行される。Ｓ２０３の判定結果が否であるとき、ステップＳ２０１に戻るか、又はステップＳ１０１に戻る。
【００５４】
更に、第２の事前設定された条件は、ターゲットサブリソースが占める第１の記憶リソース量における比例値がリソースリークを構成することとして設定される。第２の事前設定された条件は、第２の事前設定された閾値又は第２の事前設定された増加規則を含んでよい。第２の事前設定された閾値は、第１の記憶リソース量の比例値が、リソースリークを構成する、ターゲットサブリソースが占める第１の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第２の事前設定された増加規則は、ターゲットサブリソースが占める第１の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。具体的には、ステップＳ２０３において、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、第２の事前設定された条件を満たすか否かを判定するステップは、具体的には、
ターゲットサブリソースが占める第１の記憶リソース量における比例値が、第２の事前設定された閾値よりも大きいか否かを判定し、ターゲットサブリソースが占める第１の記憶リソース量における比例値が第２の事前設定された閾値よりも大きい場合、ターゲットサブリソースが占める第１の記憶リソース量における比例値が第２の事前設定された条件を満たすと決定するステップ、又は、
ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソース周期において第２の事前設定された増加規則を満たすか否かを判定し、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソース周期において第２の事前設定された増加規則を満たす場合、ターゲットサブリソースが占める第１の記憶リソース量における比例値が第２の事前設定された条件を満たすと決定するステップ、
を含んでよい。
【００５５】
具体的な実施時には、第２の事前設定された条件は、第２の事前設定された閾値又は第２の事前設定された増加規則を含んでよい。第２の事前設定された閾値は、第１の記憶リソース量の比例値が、リソースリークを構成する、ターゲットサブリソースが占める第１の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第２の事前設定された増加規則は、ターゲットサブリソースが占める第１の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、具体的には。ターゲットリソースの割当ての申請時とリソース解放の終了時との間の間隔であってよい。
【００５６】
本発明の本実施形態では、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソース周期において第２の事前設定された増加規則を満たすか否かを決定することができる。ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソース周期において第２の事前設定された増加規則を満たす場合、ターゲットサブリソースが占める第１の記憶リソース量における比例値が第２の事前設定された条件を満たすと決定される。例えば、各リソース周期においてターゲットサブリソースが占める第１の記憶リソース量における比例値を用いて増加変化線グラフが描出されてよく、第２の事前設定された増加規則が満たされるか否かは、増加変化曲線を用いて判定されてよい。具体的な実施時には、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソース周期において第２の事前設定された増加規則を満たすか否かは、Mann-Kendallテスト法、線形回帰、Sen勾配推定法等のアルゴリズムを用いて決定されてよい。
【００５７】
Ｓ２０４．ターゲットサブリソースが呼び出される呼出パスをリソースリーク呼出パスとして決定する。
【００５８】
任意の実施方式では、Ｓ２０３の判定結果が是であるとき、すなわち、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソース周期において第２の事前設定された増加規則を満たすと決定されたとき、ターゲットサブリソースの呼び出される呼出パスが、リソースリーク呼出パスとして決定される。
【００５９】
本発明の本実施形態を実施することにより、ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを得ることができ、ターゲットサブリソースが占める第１の記憶リソース量における比例値を決定することができる。ターゲットサブリソースが占める第１の記憶リソース量における比例値が第２の事前設定された条件を満たすと決定されたとき、ターゲットサブリソースが呼び出される呼出パスをリソースリーク呼出パスとして決定することができる。このように、呼出パスを追跡することができ、更に、検出により、呼出パスをリソースリーク呼出パスとして決定することができる。このように、リソースリークを更に位置付けることができ、リソースリークの検出精度が改善される。プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、それにより偽陰性率が低下し、リソースリーク検出効率が改善される。
【００６０】
図３を参照する。図３は、本発明の第３の実施形態に係るリソースリーク検出方法の概略図である。図３に示されるように、本発明の本実施形態で提供される方法は、図１に示される方法に基づいて実施されてよい。本発明の本実施形態におけるステップＳ３０１〜Ｓ３０４は、図１に示される方法のステップＳ１０４の後に実行されてよい。更に任意に、本発明の本実施形態と図２に示される第２の実施形態とで提供される方法は、同時に実行されてもよい。或いは、図３に示される第３の実施形態が最初に実行され、次に図２に示される第２の実施形態が実行される。本発明の本実施形態では、具体的な実施方式は限定されない。
【００６１】
図３に示されるように、本発明の本実施形態で提供されるリソースリーク検出方法は、ステップＳ３０１〜Ｓ３０４を含んでよい。本発明の本実施形態では、ターゲットコードの記憶場所は、少なくとも２つの記憶場所単位を含んでよい。各記憶場所単位はサブコードを記憶し、少なくとも２つの記憶場所単位に記憶されるサブコードが、ターゲットコードを構成する。
【００６２】
Ｓ３０１．記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースを取得する。少なくとも２つの記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースが、ターゲットリソースを構成する。
【００６３】
具体的な実施時には、ターゲットコードの記憶場所は、具体的には、ターゲットコードが記憶されたファイルと、ターゲットコードの行番号とを含んでよい。ターゲットコードは、少なくとも２つの記憶場所単位を得るために、ファイル又は行番号に従って分類されてよい。更に任意に、記憶場所単位は、論理的位置を取得するために、特定の規則に従ってマッピングされてよい。例えば、Ｎ個の論理的位置がターゲットコード毎に事前設定され、Ｎ個の論理的位置は、０，１，２，…，Ｎ−１と付番される。ターゲットコードの記憶場所を表すファイル名と行番号が整数に変換され、整数が加算され（乗算等の別の演算を行う）、Ｎを用いてモジュロ演算が行われ、得られた結果が論理的位置番号として用いられ、それにより記憶場所単位を決定する。更に任意に、記憶場所単位は更に、割り当てられたリソースサイズ等の別の次元を参照して分割されてよい。例えば、記憶場所単位は、割り当てられたメモリブロックのバイト数に基づいて、一定数のブロックタイプに分割されてよい。
【００６４】
Ｓ３０２．記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値を決定する。
【００６５】
具体的な実施時には、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値が決定されてよい。例えば、第１の記憶リソース量はメモリバイト数１０００ｋｂであり、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値は２０ｋｂである。
【００６６】
Ｓ３０３．比例値が第３の事前設定された条件を満たすか否かを判定する。第３の事前設定された条件は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値が、リソースリークを構成することとして設定される。
【００６７】
Ｓ３０３の判定結果が是であるとき、ステップＳ３０４が実行される。Ｓ３０３の判定結果が否であるとき、ステップＳ３０１に戻るか、或いはステップＳ１０１に戻る。
【００６８】
更に、第３の事前設定された条件は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値が、リソースリークを構成することとして設定される。第３の事前設定された条件は、第３の事前設定された閾値又は第３の事前設定された増加規則を含んでよい。第３の事前設定された閾値は、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソースリークを構成する、ターゲットサブリソースが占める第１の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第３の事前設定された増加規則は、ターゲットサブリソースが占める第１の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。更に、ステップＳ３０３において、比例値が第３の事前設定された条件を満たすか否かを判定するステップは、具体的には、
比例値が第３の事前設定された閾値よりも大きいか否かを判定し、比例値が第３の事前設定された閾値よりも大きい場合、比例値が第３の事前設定された条件を満たすと決定するステップ、又は、
比例値がリソース周期において第３の事前設定された増加規則を満たすか否かを判定し、リソース周期は第１の記憶リソース量の占用される周期であり、且つ、比例値がリソース周期において第３の事前設定された増加規則を満たす場合、比例値が第３の事前設定された条件を満たすと決定するステップ、
を含んでよい。
【００６９】
具体的な実施時には、第３の事前設定された条件は、第３の事前設定された閾値又は第３の事前設定された増加規則を含んでよい。第３の事前設定された閾値は、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソースリークを構成する、ターゲットサブリソースが占める第１の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第３の事前設定された増加規則は、ターゲットサブリソースが占める第１の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。更に、リソース周期は、第１の記憶リソース量の占用される周期であり、具体的には、ターゲットリソースの割当ての申請時とリソース解放の終了時との間の間隔であってよい。
【００７０】
本発明の本実施形態では、比例値がリソース周期において第３の事前設定された増加規則を満たすか否かを判定することができる。比例値がリソース周期において第３の事前設定された増加規則を満たす場合、比例値が第３の事前設定された条件を満たすと決定される。例えば、各リソース周期において比例値を用いて増加変化線グラフが描出されてよく、第３の事前設定された増加規則が満たされるか否かは、増加変化曲線を用いて判定されてよい。具体的な実施時には、比例値がリソース周期において第３の事前設定された増加規則を満たすか否かは、Mann-Kendallテスト法、線形回帰、Sen勾配推定法等のアルゴリズムを用いて判定されてよい。
【００７１】
Ｓ３０４．記憶場所単位をリソースリーク場所単位として決定する。
【００７２】
任意の実施方式では、Ｓ３０３の判定結果が是であるとき、すなわち、比例値がリソース周期において第３の事前設定された増加規則を満たすと決定されたとき、記憶場所単位がリソースリーク場所単位として決定される。
【００７３】
本発明の本実施形態の実施では、ターゲットコードの記憶場所は、少なくとも２つの記憶場所単位を含んでよく、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースを得ることができる。記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値が決定され、比例値が第３の事前設定された条件を満たすと決定されたとき、記憶場所がリソースリーク場所単位として決定される。このように、ターゲットコードの記憶場所の記憶場所単位を追跡することができ、更に、検出により、記憶場所単位をリソースリーク場所単位として決定することができる。このように、リソースリークを更に位置付けることができ、リソースリークの検出精度が改善される。プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、それにより偽陰性率が低下し、リソースリーク検出効率が改善される。
【００７４】
以下、本発明の実施形態によって提供されるリソースリーク検出装置について、図４を参照して詳細に説明する。
【００７５】
留意すべきこととして、図４に示されるリソースリーク検出装置は、本発明の図１〜図３に示される実施形態のいずれか１つの方法を実行するように構成され、図１〜図３のいずれか１つに基づくリソースリーク検出方法を実行するエンティティである。説明を容易にするために、本発明の本実施形態に関連する部分のみが示される。開示されない具体的な技術的詳細については、図１〜図３に示される実施形態のいずれか１つを参照されたい。本発明の本実施形態のリソースリーク検出装置は、スマートフォン、タブレットコンピュータ、コンピュータ、サーバ等の、プログラムを実行可能な端末装置を含んでよい。
【００７６】
図４に示されるように、図４は、本発明の実施形態に係るリソースリーク検出装置の概略構造図である。本発明の本実施形態で提供されるリソースリーク検出装置は、第１の取得モジュール４０１、第１の決定モジュール４０２、第１の判定モジュール４０３及びリーク場所決定モジュール４０４を備えてよい。
【００７７】
第１の取得モジュール４０１は、プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得するように構成される。ターゲットコードはプログラムコードの部分コードである。
【００７８】
任意の実施方式では、本発明の実施形態におけるプログラムは、AndroidオペレーティングシステムやLinuxオペレーティングシステム等のオペレーティングシステムを含んでよく、更に、端末装置にインストールされたアプリケーションプログラムを含んでよく、更に、端末装置で実行されるプロセス等を含んでよく、本発明の実施形態において特に限定されない。
【００７９】
更に、任意に、本発明の本実施形態では、ターゲットリソースは、プログラムのターゲットコードが実行されるプロセスで呼び出される。ターゲットリソースは、例えば、メモリ、ファイルハンドル、セマフォ、メッセージカプセル及びデータベース接続プールである。プログラムのターゲットコードの実行が終了した後、呼び出されたターゲットリソースは適時に解放される必要がある。ターゲットコードはプログラムコードの部分コードであり、ターゲットコードは、本発明の本実施形態においてリーク検出を行う必要のあるコードである。
【００８０】
更に、プログラムコードは、複数のグループのターゲットコードを含んでよい。プログラムコードは、プログラムコードの開発及び設計時に、機能モジュール及びメモリセグメント等のカテゴリに従って、複数のターゲットコードグループが得られるように分類されてよい。例えば、プログラムがプロセスである場合、プログラムコードは、異なるモジュールを得るために、プログラムコードの機能に従って分割されてよい。ここでは、各モジュールがターゲットコードグループに対応する。代替として、プログラムコードは、異なるサイズのメモリセグメントを得るために、プログラムコードに割り当てられたメモリブロックのサイズに従って分割されてもよい。ここでは、各メモリセグメントがターゲットコードグループに対応する。プログラムがLinuxオペレーティングシステムのスラブメモリである場合、プログラムコードは、複数のターゲットコードグループを得るために、異なるスラブメモリプールに従って分割されてよい。
【００８１】
更に、プログラムコードが複数のターゲットコードグループを含む場合、各ターゲットコードグループの実行時に呼び出されるターゲットリソースは、別々に取得されてよい。全てのターゲットコードグループの実行時に呼び出されるターゲットリソースの合計が、プログラムコードの実行時に呼び出されるリソースを構成する。
【００８２】
第１の決定モジュール４０２は、ターゲットリソースによって占用される第１の記憶リソース量を決定するように構成される。
【００８３】
任意の実施方式では、ターゲットリソースによって占用される第１の記憶リソース量の初期値は０に設定されてよく、リソース割当ての申請時、ターゲットリソースによって占用される第１の記憶リソース量＝初期値＋割り当てられたリソースの量である。リソース解放が終了した後、ターゲットリソースによって占用される第１の記憶リソース量＝初期値＋割り当てられたリソースの量−解放されたリソースの量である。したがって、第１の決定モジュール４０２は、初期値と、割り当てられたリソースの量と、解放されたリソースの量とを用いて、ターゲットリソースによって占用される第１の記憶リソース量を決定してよい。具体的な実施時には、ターゲットリソースによって占用される第１の記憶リソース量は、リソース量又は具体的な測定値、例えばメモリバイト数であってよい。
【００８４】
第１の判定モジュール４０３は、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすか否かを判定するように構成される。第１の事前設定された条件は、ターゲットリソースによって占用される第１の記憶リソース量がリソースリーク条件に適合することである。
【００８５】
任意の実施方式では、ターゲットリソースによって占用される第１の記憶リソース量は、限定ではないが、占有メモリ量、占有ファイルハンドル量、占有セマフォ量、占有メッセージカプセル量、占有データベース接続プール量等を含むが、本発明の本実施形態では特に限定されない。
【００８６】
更に、第１の事前設定された条件は、ターゲットリソースによって占用される第１の記憶リソース量がリソースリークを構成することとして設定される。更に、第１の事前設定された条件は、第１の事前設定された閾値又は第１の事前設定された増加規則を含む。第１の事前設定された閾値は、第１の記憶リソース量がリソースリークを構成する第１の記憶リソース量の最小値よりも大きいこととして設定される。第１の事前設定された増加規則は、第１の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。第１の判定モジュール４０３は、第１の判定サブモジュール又は第２の判定サブモジュールを有してよい。
【００８７】
第１の判定サブモジュールは、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された閾値よりも大きいか否かを判定し、第１の判定サブモジュールの判定結果が是であるとき、第１の判定モジュール４０３の判定結果が是であると決定するように構成される。
【００８８】
第２の判定サブモジュールは、ターゲットリソースによって占用される第１の記憶リソース量が、リソース周期において第１の事前設定された増加規則を満たすか否かを判定し、第２の判定サブモジュールの判定結果が是であるとき、第１の判定モジュール４０３の判定結果が是であると決定するように構成される。
【００８９】
具体的な実施時には、第１の事前設定された条件は、第１の事前設定された閾値又は第１の事前設定された増加規則を含んでよい。第１の事前設定された閾値は、第１の記憶リソース量がリソースリークを構成する第１の記憶リソース量の最小値よりも大きいこととして設定される。第１の事前設定された増加規則は、第１の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。更に、リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、具体的には、ターゲットリソースの割当ての申請時とリソース解放の終了時との間の間隔であってよい。
【００９０】
本発明の本実施形態では、第２の判定サブモジュールは、ターゲットリソースによって占用される第１の記憶リソース量が、リソース周期において第１の事前設定された増加規則を満たすか否かを判定し、ターゲットリソースによって占用される第１の記憶リソース量が、リソース周期において第１の事前設定された増加規則を満たす場合、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすと決定してよい。例えば、各リソース周期においてターゲットリソースによって占用される第１の記憶リソース量を用いて増加変化線グラフが描出されてよく、第１の事前設定された増加規則が満たされるか否かは、増加変化曲線を用いて判定されてよい。具体的な実施時には、ターゲットリソースによって占用される第１の記憶リソース量が、リソース周期において第１の事前設定された増加規則を満たすか否かは、Mann-Kendallテスト法、線形回帰、Sen勾配推定法等のアルゴリズムを用いて判定されてよい。Mann-Kendallテスト法（Mannによって最初に提案され、更にKendallによって改良された）は、傾向をテストするために用いられるアルゴリズムである。線形回帰は、統計的な回帰分析を用いる統計的分析方法であり、線形関数モデリングの変種間の量的関係に基づく。Sen勾配推定法は、Henri  Theil及びPranab  K．  Senによって提案された勾配推定アルゴリズムを参照する。
【００９１】
リーク場所決定モジュール４０４は、第１の判定モジュール４０３の判定結果が是であるとき、ターゲットコードの記憶場所をリソースリーク場所として決定するように構成される。
【００９２】
任意の実施方式では、第１の判定モジュール４０３の判定結果が是であるとき、すなわち、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすと決定されたとき、ターゲットコードの記憶場所がリソースリーク場所として決定される。具体的な実施時には、ターゲットコードの記憶場所は、具体的には、ターゲットコードが記憶されたファイルと、ターゲットコードの行番号とを含んでよい。
【００９３】
更に任意に、プログラムコードが複数のターゲットコードグループを含むとき、第１の事前設定された条件を満たすターゲットコードグループの数（Ｍとして記録）が、事前設定された量（Ｋとして記録：Ｋは、プログラム内のリソースリーク場所の事前設定された最大量）よりも大きい場合、ターゲットコードのＫ個の記憶場所が、第１の事前設定された条件を満たす複数のターゲットコードグループから、リソースリーク場所として決定されてよい。例えば、事前設定された量が３であり、第１の事前設定された条件を満たすターゲットコードのグループ数が５である。５は３よりも大きく、第１の事前設定された条件を満たすターゲットコードの５個のグループは、それぞれターゲットコード１、ターゲットコード２、ターゲットコード３、ターゲットコード４、ターゲットコード５である。ターゲットコード１の実行時、ターゲットリソース１が呼び出され、ターゲットリソース１によって占用される第１の記憶リソース量はリソース量１である。ターゲットコード２の実行時、ターゲットリソース２が呼び出され、ターゲットリソース２によって占用される第１の記憶リソース量がリソース量２である。ターゲットコード３の実行時、ターゲットリソース３が呼び出され、ターゲットリソース３によって占用される第１の記憶リソース量がリソース量３である。ターゲットコード４の実行時、ターゲットリソース４が呼び出され、ターゲットリソース４によって占用される第１の記憶リソース量がリソース量４である。ターゲットコード５の実行時、ターゲットリソース５が呼び出され、ターゲットリソース５によって占用される第１の記憶リソース量がリソース量５である。リソース量１、リソース量２、リソース量３、リソース量４及びリソース量５の値は、比較及びソートされてよい。比較結果がリソース量５＞リソース量２＞リソース量４＞リソース量１＞リソース量３である場合、比較的大きなリソース量の事前設定された量は、リソース量５、リソース量２及びリソース量４である。リソース量５、リソース量２、リソース量４に対応するターゲットコード５、ターゲットコード２、ターゲットコード４の記憶場所が、それぞれリソースリーク場所として決定されてよい。
【００９４】
更に任意に、本発明の本実施形態で提供される装置は更に、出力モジュールを備えてよい。
【００９５】
出力モジュールは、リソースリーク検出結果についての情報を出力するように構成される。
【００９６】
具体的な実施時には、リソースリーク検出結果についての情報は、ターゲットコードの属性情報、ターゲットリソースによって占用される第１の記憶リソース量、リソースリーク場所についての情報、リソースリーク呼出パスについての情報、リソースリーク呼出パスによって占用されるリソース量についての情報を含む。リソースリーク検出結果についての情報は、リソース割当て時に記録されてよい。リソースリーク検出結果についての情報を出力することにより、リソースリークの位置決め精度を向上させることができ、位置決め作業負荷を低減することができ、位置決め作業者の技能要求を低減することができる。加えて、研究室で再現を行う必要がなくなり、リソースリークの位置決め効率が向上する。
【００９７】
更に任意に、本発明の本実施形態で提供されるリソースリーク検出装置は更に、第２の取得モジュール４０５、第２の決定モジュール４０６、第２の判定モジュール４０７及びリークパス決定モジュール４０８を備えてよい。
【００９８】
第２の取得モジュール４０５は、ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを取得するように構成される。ターゲットリソースは、少なくとも２つのターゲットサブリソースを含む。ターゲットサブリソースは、ターゲットコードを実行するプロセスで呼び出されるターゲットリソースの部分リソースである。
【００９９】
具体的な実施時には、呼出パスは関数呼出スタックを用いて表現されてよく、ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスが得られる。ターゲットリソースは少なくとも２つのターゲットサブリソースを含んでよい。ターゲットサブリソースは、ターゲットコードを実行するプロセスで呼び出されるターゲットリソースの部分リソースである。
【０１００】
更に任意に、論理呼出パスを得るために、特定の規則に従って呼出パスがマッピングされてよい。例えば、リーク場所決定モジュール４０４によって決定されたリソースリーク場所について、層タイプの数は、リソース割当てのための関数呼出スタックの階層数に基づいて分類して求めることができる。Ｍ個の論理呼出パスは各層タイプ毎に事前設定され、Ｍ個の論理呼出パスは０，１，２，…，Ｍ−１と付番される。リソース割当てのための関数呼出スタックの中間層のリターンアドレスが求められて整数に変換され、その後、Ｍを用いてモジュロ演算が行われ、得られた結果が論理呼出パス番号として用いられる。この場合、ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを取得することができる。
【０１０１】
第２の決定モジュール４０６は、ターゲットサブリソースが占める第１の記憶リソース量における比例値を決定するように構成される。
【０１０２】
具体的な実施時には、第２の決定モジュール４０６は、ターゲットサブリソースが占める第１の記憶リソース量における比例値を決定してよい。例えば、第１の記憶リソース量は、メモリバイト数１０００ｋｂであり、ターゲットサブリソースが占める第１の記憶リソース量における比例値は２００ｋｂである。
【０１０３】
第２の判定モジュール４０７は、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、第２の事前設定された条件を満たすか否かを判定するように構成される。第２の事前設定された条件は、ターゲットサブリソースが占める第１の記憶リソース量における比例値がリソースリークを構成することとして設定される
任意の実施方式では、第２の事前設定された条件は、ターゲットサブリソースが占める第１の記憶リソース量における比例値がリソースリークを構成することとして設定される。第２の事前設定された条件は、第２の事前設定された閾値又は第２の事前設定された増加規則を含んでよい。第２の事前設定された閾値は、第１の記憶リソース量の比例値が、リソースリークを構成する、ターゲットサブリソースが占める第１の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第２の事前設定された増加規則は、ターゲットサブリソースが占める第１の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。更に、第２の判定モジュール４０７は、第３の判定サブモジュール又は第４の判定サブモジュールを有してよい。
【０１０４】
第３の判定サブモジュールは、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、第２の事前設定された閾値よりも大きいか否かを判定し、第３の判定サブモジュールの判定結果が是であるとき、第２の判定モジュール４０７の判定結果が是であると決定するように構成される。
【０１０５】
第４の判定サブモジュールは、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソース周期において第２の事前設定された増加規則を満たすか否かを判定し、第４の判定サブモジュールの判定結果が是であるとき、第２の判定モジュール４０７の判定結果が是であると決定するように構成される。
【０１０６】
具体的な実施時には、第２の事前設定された条件は、第２の事前設定された閾値又は第２の事前設定された増加規則を含んでよい。第２の事前設定された閾値は、第１の記憶リソース量の比例値が、リソースリークを構成する、ターゲットサブリソースが占める第１の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第２の事前設定された増加規則は、ターゲットサブリソースが占める第１の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、具体的には、ターゲットリソースの割当ての申請時とリソース解放の終了時との間の間隔であってよい。
【０１０７】
本発明の本実施形態では、第４の判定サブモジュールは、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソース周期において第２の事前設定された増加規則を満たすか否かを判定し、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソース周期において第２の事前設定された増加規則を満たす場合、ターゲットサブリソースが占める第１の記憶リソース量における比例値が第２の事前設定された条件を満たすと決定してよい。例えば、各リソース周期においてターゲットサブリソースが占める第１の記憶リソース量における比例値を用いて増加変化線グラフが描出されてよく、第２の事前設定された増加規則が満たされるか否かは、増加変化曲線を用いて判定されてよい。具体的な実施時には、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソース周期において第２の事前設定された増加規則を満たすか否かは、Mann-Kendallテスト法、線形回帰、Sen勾配推定法等のアルゴリズムを用いて決定されてよい。
【０１０８】
リークパス決定モジュール４０８は、第２の判定モジュール４０７の判定結果が是であるとき、ターゲットサブリソースが呼び出される呼出パスをリソースリーク呼出パスとして決定するように構成される。
【０１０９】
任意の実施方式では、第２の判定モジュール４０７の判定結果が是であるとき、すなわち、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソース周期において第２の事前設定された増加規則を満たすと決定されたとき、リークパス決定モジュール４０８は、ターゲットサブリソースが呼び出される呼出パスを、リソースリーク呼出パスとして決定する。
【０１１０】
更に任意に、本発明の本実施形態で提供されるリソースリーク検出装置は更に、第３の取得モジュール４０９、第３の決定モジュール４１０、第３の判定モジュール４１１及びリーク場所単位決定モジュール４１２を有してよい。
【０１１１】
ターゲットコードの記憶場所は、少なくとも２つの記憶場所単位を含む。各記憶場所単位はサブコードを記憶し、少なくとも２つの記憶場所単位に記憶されるサブコードが、ターゲットコードを構成する。
【０１１２】
第３の取得モジュール４０９は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースを取得するように構成される。少なくとも２つの記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースが、ターゲットリソースを構成する。
【０１１３】
具体的な実施時には、ターゲットコードの記憶場所は、具体的には、ターゲットコードが記憶されたファイルと、ターゲットコードの行番号とを含んでよい。ターゲットコードは、少なくとも２つの記憶場所単位を得るために、ファイル又は行番号に従って分類されてよい。更に任意に、記憶場所単位は、論理的位置を取得するために、特定の規則に従ってマッピングされてよい。例えば、Ｎ個の論理的位置がターゲットコード毎に事前設定され、Ｎ個の論理的位置は、０，１，２，…，Ｎ−１と付番される。ターゲットコードの記憶場所を表すファイル名と行番号が整数に変換され、整数が加算され（或いは、乗算等の別の演算を行う）、Ｎを用いてモジュロ演算が行われ、得られた結果が論理的位置番号として用いられ、それにより記憶場所単位を決定する。更に任意に、記憶場所単位は更に、割り当てられたリソースサイズ等の別の次元を参照して分割されてよい。例えば、記憶場所単位は、割り当てられたメモリブロックのバイト数に基づいて、一定数のブロックタイプに分割されてよい。
【０１１４】
第３の決定モジュール４１０は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値を決定するように構成される。
【０１１５】
具体的な実施時には、第３の決定モジュール４１０は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値を決定してよい。例えば、第１の記憶リソース量はメモリバイト数１０００ｋｂであり、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値は２０ｋｂである。
【０１１６】
第３の判定モジュール４１１は、比例値が第３の事前設定された条件を満たすか否かを判定するように構成される。第３の事前設定された条件は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値が、リソースリークを構成することとして設定される。
【０１１７】
任意の実施方式では、第３の事前設定された条件は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値が、リソースリークを構成することとして設定される。更に、第３の事前設定された条件は、第３の事前設定された閾値又は第３の事前設定された増加規則を含む。第３の事前設定された閾値は、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソースリークを構成する、ターゲットサブリソースが占める第１の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第３の事前設定された増加規則は、ターゲットサブリソースが占める第１の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。第３の判定モジュール４１１は、第５の判定サブモジュール又は第６の判定サブモジュールを有してよい。
【０１１８】
第５の判定サブモジュールは、比例値が第３の事前設定された閾値よりも大きいか否かを判定し、第５の判定サブモジュールの判定結果が是であるとき、第３の判定モジュール４１１の判定結果が是であると決定するように構成される。
【０１１９】
第６の判定サブモジュールは、比例値がリソース周期において第３の事前設定された増加規則を満たすか否かを判定するように構成される。リソース周期は、第１の記憶リソース量の占用される周期である。且つ、第６の判定サブモジュールの判定結果が是であるとき、第３の判定モジュール４１１の判定結果が是であると決定するように構成される。
【０１２０】
具体的な実施時には、第３の事前設定された条件は、第３の事前設定された閾値又は第３の事前設定された増加規則を含んでよい。第３の事前設定された閾値は、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソースリークを構成する、ターゲットサブリソースが占める第１の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第３の事前設定された増加規則は、ターゲットサブリソースが占める第１の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、具体的には、ターゲットリソースの割当ての申請時とリソース解放の終了時との間の間隔であってよい。
【０１２１】
本発明の本実施形態では、第６の判定サブモジュールは、比例値がリソース周期において第３の事前設定された増加規則を満たすか否かを判定し、比例値がリソース周期において第３の事前設定された増加規則を満たす場合、比例値が第３の事前設定された条件を満たすと決定してよい。各リソース周期において比例値を用いて増加変化線グラフが描出されてよく、第３の事前設定された増加規則が満たされるか否かは、増加変化曲線を用いて判定されてよい。具体的な実施時には、比例値がリソース周期において第３の事前設定された増加規則を満たすか否かは、Mann-Kendallテスト法、線形回帰、Sen勾配推定法等のアルゴリズムを用いて判定されてよい。
【０１２２】
リーク場所単位決定モジュール４１２は、第３の判定モジュール４１１の判定結果が是であるとき、記憶場所単位をリソースリーク場所単位として決定するように構成される。
【０１２３】
任意の実施方式では、第３の判定モジュール４１１の判定結果が是であるとき、すなわち、比例値がリソース周期において第３の事前設定された増加規則を満たすと決定されたとき、リーク場所単位決定モジュール４１２は、記憶場所単位をリソースリーク場所単位として決定してよい。
【０１２４】
本発明の本実施形態を実施することにより、プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得し、ターゲットリソースによって占用される第１の記憶リソース量を決定し、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすと決定されたとき、ターゲットコードの記憶場所をリソースリーク場所として決定することができる。本発明の本実施形態では、プログラムのターゲットコードを追跡し、ターゲットコードはプログラムコードの部分コードである。プログラムの全てのコードを追跡する必要がなく、ターゲットコードの実行時に呼び出されるターゲットリソースのみを検出することが必要となる、また、全てのリソース割当てと解放を追跡する必要がなく、性能スオーバーヘッドが低く、通常のサービス実行に影響が出ない。このように、プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、オーバヘッドが低減され、リソースリーク検出効率が改善される。
【０１２５】
更に、プログラムのテスト段階又はデバッグ段階だけでなく、プログラムが実際に動作するオンライン環境においても、リーク検出を実行することができる。したがって、プログラムが正式に動作しているときに発生するリソースリーク問題を検出することができる。本発明の本実施形態では、プログラムのターゲットコードを追跡し、リソースリーク場所を検出することができ、それによりリソースリーク検出精度が改善される。プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、それにより偽陰性率が低下し、リソースリーク検出効率が改善される。
【０１２６】
更に、ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを得ることができ、ターゲットサブリソースが占める第１の記憶リソース量における比例値を決定することができる。ターゲットサブリソースが占める第１の記憶リソース量における比例値が第２の事前設定された条件を満たすと決定されたとき、ターゲットサブリソースが呼び出される呼出パスをリソースリーク呼出パスとして決定することができる。このように、呼出パスを追跡することができ、更に、検出により、呼出パスをリソースリーク呼出パスとして決定することができる。このように、リソースリークを更に位置付けることができ、リソースリークの検出精度が改善される。
【０１２７】
更に、ターゲットコードの記憶場所は、少なくとも２つの記憶場所単位を含んでよい。記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースが取得されてよい。記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値が決定され、比例値が第３の事前設定された条件を満たすと決定されたとき、記憶場所がリソースリーク場所単位として決定される。このように、ターゲットコードの記憶場所の記憶場所単位を追跡することができ、更に、検出により、記憶場所単位をリソースリーク場所単位として決定することができる。このように、リソースリークを更に位置付けることができ、リソースリークの検出精度が改善される。
【０１２８】
留意すべきこととして、第１の取得モジュール、第１の決定モジュール、第１の判定モジュール及びリーク場所決定モジュールは、独立して設けられるプロセッサであってよく、検出端末のプロセッサに組み込まれることによって実装されてよく、或いは、プログラムコードの形式で検出端末のメモリに記憶されてよい。第２の取得モジュール、第２の決定モジュール、第２の判定モジュール及びリークパス決定モジュールは、データ収集モジュールと同様に実装され、ここでは説明を省略する。第３の取得モジュール、第３の決定モジュール、第３の判定モジュール及びリーク場所単位決定モジュールは、データ収集モジュールと同様に実装され、ここでは説明を省略する。検出端末のプロセッサは、前述のモジュールの機能を呼び出して実行する。プロセッサは、中央処理装置（Central  Processing  Unit，ＣＰＵ）、或いは特定用途向け集積回路（Application  Specific  Integrated  Circuit，ＡＳＩＣ）、或いは本発明の実施形態を実現するように構成される１つ以上の集積回路であってよい。
【０１２９】
図５を参照する。図５は、本発明の実施形態に係る検出端末の概略構造図である。本実施形態で提供される検出端末は、図１〜図３のいずれか１つに示される方法に対応し、図１〜図３のいずれか１つに示されるリソースリーク検出方法を実行するエンティティである。図５には、具体的な実現形式が示される。本発明の本実施形態における検出端末は、受信器５０１、送信器５０２、メモリ５０３及びプロセッサ５０４を備える。受信器５０１、送信器５０２及びメモリ５０３は、全てプロセッサ５０４に接続される。例えば、受信器５０１、送信器５０２及びメモリ５０３は、バスを用いてプロセッサ５０４に接続されてよい。当然ながら、検出端末は、アンテナ、ベースバンド処理コンポーネント、中間周波処理コンポーネント、入出力装置等の汎用部品を更に備えてよく、本発明の本実施形態では特に限定されない。
【０１３０】
受信器５０１及び送信器５０２は、一体化してトランシーバを構成してよい。
【０１３１】
メモリ５０３は、実行可能プログラムコードを記憶するように構成される。プログラムコードはコンピュータ動作命令を含む。メモリ５０３は、高速ＲＡＭメモリを含んでよく、更に、少なくとも１つの磁気ディスクメモリ等の不揮発性メモリ（non-volatile  memory）を含んでよい。
【０１３２】
プロセッサ５０４は、中央処理装置又は特定用途向け集積回路であってよく、或いは、本発明の実施形態を実現する１つ以上の集積回路として構成されてよい。
【０１３３】
メモリ５０３はプログラムコードグループを記憶し、プロセッサ５０４は、メモリ５０３に記憶されたプログラムコードを呼び出して、以下の動作すなわち
プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得するステップであって、ターゲットコードはプログラムコードの部分コードである、ステップと、
ターゲットリソースによって占用される第１の記憶リソース量を決定するステップと、
ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすか否かを判定するステップであって、第１の事前設定された条件は、ターゲットリソースによって占用される第１の記憶リソース量がリソースリークを構成することとして設定される、ステップと、
ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たす場合、ターゲットコードの記憶場所をリソースリーク場所として決定するステップと、
を実行する。
【０１３４】
任意の実施方式では、ターゲットリソースは少なくとも２つのターゲットサブリソースを含む。ターゲットサブリソースは、ターゲットコードを実行するプロセスで呼び出されるターゲットリソースの一部のリソースである。プロセッサ５０４は更に、
ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを取得するように構成され、
ターゲットサブリソースが占める第１の記憶リソース量における比例値を決定するように構成され、
ターゲットサブリソースが占める第１の記憶リソース量における比例値が、第２の事前設定された条件を満たすか否かを判定するように構成され、第２の事前設定された条件は、ターゲットサブリソースが占める第１の記憶リソース量における比例値がリソースリークを構成することとして設定され、
ターゲットサブリソースが占める第１の記憶リソース量における比例値が第２の事前設定された条件を満たす場合、ターゲットサブリソースが呼び出される呼出パスをリソースリーク呼出パスとして決定するように構成される。
【０１３５】
任意の実施方式では、第１の事前設定された条件は、第１の事前設定された閾値又は第１の事前設定された増加規則を含む。第１の事前設定された閾値は、第１の記憶リソース量がリソースリークを構成する第１の記憶リソース量の最小値よりも大きいこととして設定される。第１の事前設定された増加規則は、第１の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。プロセッサ５０４が、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすか否かを判定するステップは、
ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された閾値よりも大きいか否かを判定し、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された閾値よりも大きい場合、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすと決定するステップ、又は、
ターゲットリソースによって占用される第１の記憶リソース量が、リソース周期において第１の事前設定された増加規則を満たすか否かを判定し、ターゲットリソースによって占用される第１の記憶リソース量が、リソース周期において第１の事前設定された増加規則を満たす場合、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすと決定するステップ、
を含む。
【０１３６】
任意の実施方式では、第２の事前設定された条件は、第２の事前設定された閾値又は第２の事前設定された増加規則を含む。第２の事前設定された閾値は、第１の記憶リソース量の比例値が、リソースリークを構成する、ターゲットサブリソースが占める第１の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第２の事前設定された増加規則は、ターゲットサブリソースが占める第１の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。プロセッサ５０４が、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、第２の事前設定された条件を満たすか否かを判定するステップは、
ターゲットサブリソースが占める第１の記憶リソース量における比例値が、第２の事前設定された閾値よりも大きいか否かを判定し、ターゲットサブリソースが占める第１の記憶リソース量における比例値が第２の事前設定された閾値よりも大きい場合、ターゲットサブリソースが占める第１の記憶リソース量における比例値が第２の事前設定された条件を満たすと決定するステップ、又は、
ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソース周期において第２の事前設定された増加規則を満たすか否かを判定し、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソース周期において第２の事前設定された増加規則を満たす場合、ターゲットサブリソースが占める第１の記憶リソース量における比例値が第２の事前設定された条件を満たすと決定するステップ、
を含む。
【０１３７】
任意の実施方式では、ターゲットコードの記憶場所は、少なくとも２つの記憶場所単位を含む、各記憶場所単位はサブコードを記憶し、少なくとも２つの記憶場所単位に記憶されるサブコードが、ターゲットコードを構成する。プロセッサ５０４は更に、
記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースを取得するように構成され、少なくとも２つの記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースが、ターゲットリソースを構成し、
記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値を決定するように構成され、
比例値が第３の事前設定された条件を満たすか否かを判定するように構成され、第３の事前設定された条件は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第１の記憶リソース量における比例値がリソースリークを構成することとして設定され、
比例値が第３の事前設定された条件を満たす場合、記憶場所単位をリソースリーク場所単位として決定するように構成される。
【０１３８】
任意の実施方式では、第３の事前設定された条件は、第３の事前設定された閾値又は第３の事前設定された増加規則を含む。第３の事前設定された閾値は、ターゲットサブリソースが占める第１の記憶リソース量における比例値が、リソースリークを構成する、ターゲットサブリソースが占める第１の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第３の事前設定された増加規則は、ターゲットサブリソースが占める第１の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。プロセッサ５０４が、比例値が第３の事前設定された条件を満たすか否かを判定するステップは、
比例値が第３の事前設定された閾値よりも大きいか否かを判定し、比例値が第３の事前設定された閾値よりも大きい場合、比例値が第３の事前設定された条件を満たすと決定するステップ、又は、
比例値がリソース周期において第３の事前設定された増加規則を満たすか否かを判定し、比例値がリソース周期において第３の事前設定された増加規則を満たす場合、比例値が第３の事前設定された条件を満たすと決定するステップ、
を含む。
【０１３９】
前述の技術的解決策では、受信器、送信器、メモリ及びプロセッサを備える検出端末が提供される。プロセッサは、プログラムのターゲットコードの実行時に呼び出されるターゲットリソース、ターゲットリソースによって占用される第１の記憶リソース量を決定することができ、また、ターゲットリソースによって占用される第１の記憶リソース量が第１の事前設定された条件を満たすと決定されたとき、ターゲットコードの記憶場所をリソースリーク場所として決定することができる。このように、プログラムのターゲットコードを追跡することができ、更に、検出により、ターゲットコードの記憶場所をリソースリーク場所として決定することができる。全てのリソース割当てと解放を追跡する必要がなく、よって性能オーバヘッドが低減される。
【０１４０】
更に、プログラムのテスト段階又はデバッグ段階だけでなく、プログラムが実際に動作するオンライン環境においても、リーク検出を実行することができる。したがって、プログラムが正式に動作しているときに発生するリソースリーク問題を検出することができる。本発明の本実施形態では、プログラムのターゲットコードを追跡し、リソースリーク場所を検出することができ、それによりリソースリーク検出精度が改善される。プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、それにより偽陰性率が低下し、リソースリーク検出効率が改善される。
【０１４１】
図６を参照する。図６は、本発明の実施形態に係るリソースリーク検出システムの概略構造図である。図に示されるように、本発明の本実施形態で更に提供されるリソースリーク検出システムは、メモリ６０１、リソースリーク検出装置６０２及び表示装置６０３を備えてよい。メモリ６０１は、リソースリーク検出プログラムを記憶するように構成される。リソースリーク検出装置６０２は、メモリ６０１に記憶されたリソースリーク検出プログラムを実行して、図１〜図３のいずれか１つに示されるリソースリーク検出方法を実行するように構成される。表示装置６０３は、リソースリーク検出装置によって得られたリソースリーク検出結果を表示するように構成される。更に、表示装置６０３は、表示パネルを有してよい。例えば、表示パネルは、ＬＣＤ（Liquid  Crystal  Display、液晶ディスプレイ）、ＯＬＥＤ（Organic  Light  Emitting  Diode、有機発光ダイオード）等の形で構成されてよい。更に、リソースリーク検出装置によって取得され表示装置６０３によって表示されるリソースリーク検出結果は、リソースリーク場所、リソースリーク呼出パス、リソースリーク場所単位等を含んでよい。リソースリーク検出装置６０２の構造及び機能については、図４に示される実施形態の関連説明を参照することができ、ここでは詳細な説明を省略する。留意すべきこととして、本実施形態で提供される装置は、図１〜図３のいずれか１つのリソースリーク検出方法に対応する。
【０１４２】
本願で提供されるいくつかの実施形態では、開示された装置及び方法は、他の方法で実現されてもよいことが理解されるべきである。例えば、説明された装置の実施形態は例示に過ぎない。例えば、モジュール又はユニットの分割は、論理機能の分割に過ぎず、実際の実施では他の分割であってよい。例えば、複数のユニット又はモジュールは別のシステムに組み合わせ、或いは統合されてよい。或いは、一部の機能は無視されるか、或いは実行されなくてよい。加えて、表示又は議論された相互結合又は直接結合又は通信接続は、いくつかのインタフェースを用いて実現されてよい。装置、モジュール又はユニット間の間接結合又は通信接続は、電子的、機械的その他の形式で実施されてよい。
【０１４３】
別個の部品として記載されたモジュール又はユニットは、物理的に分離していてもいなくてもよく、モジュール又はユニットとして表示された部品は物理的なモジュール又はユニットであってもなくてもよく、１つの位置に配置されてもよいし、複数のネットワークモジュール又はユニットに分散されてもよい。これらのモジュール又はユニットの一部又は全部は、本願の実施形態の解決策の目的を達成するために実際の必要に応じて選択されてよい。
【０１４４】
加えて、本発明の実施形態における機能モジュール又はユニットは、１つの処理モジュール又はユニットに統合されてよい。或いは、モジュール又はユニットの各々は、物理的に単独で存在してよい。或いは、２つ以上のモジュール又はユニットは、１つのモジュール又はユニットに統合される。統合されたモジュール又はユニットは、ハードウェアの形式で実現されてよく、或いは、ソフトウェア機能ユニットの形式で実現されてよい。
【０１４５】
統合されたモジュール又はユニットがソフトウェア機能モジュール又はユニットの形で実現され、独立した製品として販売或いは使用される場合、統合されたモジュール又はユニットはコンピュータ可読記憶媒体に記憶されてよい。そのような理解に基づき、本発明の技術的解決策は本質的に、或いは先行技術に寄与する部分や、技術的解決策の全部又は一部は、ソフトウェア製品の形式で実現することができる。コンピュータソフトウェア製品は、記憶媒体に記憶され、コンピュータ装置（パーソナルコンピュータ、サーバ、或いはネットワーク装置であってよい）に、本願の実施形態で説明された方法のステップの全部又は一部を実行するよう指示するためのいくつかの命令を含む。上記の記憶媒体は、ＵＳＢフラッシュドライブ、リムーバブルハードディスク、リードオンリメモリ（ROM、Read-Only  Memory）、ランダムアクセスメモリ（ＲＡＭ、Random  Access  Memory）、磁気ディスク、光ディスク等の、プログラムコードを記憶できる任意の媒体を含む。
【０１４６】
以上の説明は、本願の具体的な実施方式に過ぎず、本願の保護範囲を限定するものではない。本願に開示された技術的範囲内で当業者が容易に想到できる変形又は置換は、いかなるものも本願の保護範囲に包含されるものとする。したがって、本願の保護範囲は、特許請求の範囲の保護範囲に属するものとする。
【図１】
0006446125.tif 000002
【図２】
0006446125.tif 000003
【図３】
0006446125.tif 000004
【図４】
0006446125.tif 000005
【図５】
0006446125.tif 000006
【図６】
0006446125.tif 000007