複数のプログラムを実行するプロセッサ、及び前記プロセッサに接続され、前記複数のプログラムを格納する記憶部を備える計算機であって、前記計算機は、前記複数のプログラムを実行することによって複数のオブジェクトを生成するプログラム実行部を備え、前記オブジェクトは、他のオブジェクトの識別情報を含む参照を有し、前記複数のオブジェクトは、複数の前記オブジェクトによって参照される共有オブジェクトを含み、前記プログラム実行部は、前記共有オブジェクトを参照する第1のオブジェクトと、前記共有オブジェクトに含まれる前記参照によって前記第1のオブジェクトから参照される第2のオブジェクトとの対応を特定し、前記プログラム毎に、当該プログラムが利用する前記オブジェクトを特定することを特徴とする計算機。前記計算機は、前記第1のオブジェクトの識別情報及び前記第2のオブジェクトの識別情報を含む追跡情報を格納し、前記プログラム実行部は、前記第2のオブジェクトの識別情報を含む前記参照を引数とする前記第1のオブジェクトからのメソッドの呼び出しを検出した場合に、当該メソッドに基づいて、前記第1のオブジェクトの識別情報及び前記第2のオブジェクトの識別情報を取得し、取得された前記第1のオブジェクトの識別情報及び前記第2のオブジェクトの識別情報を前記追跡情報に格納し、前記追跡情報に基づいて、前記プログラム毎に、当該プログラムが利用する前記オブジェクトを特定することを特徴とする請求項1に記載の計算機。前記計算機は、前記共有オブジェクトに対する、前記第2のオブジェクトを示す前記参照を引数とする前記第1のオブジェクトからのメソッドの呼び出しを検出するための追跡ルール情報を備え、前記プログラム実行部は、前記追跡ルール情報に基づいて、前記第2のオブジェクトの識別情報を含む前記参照を引数とする前記第1のオブジェクトからのメソッドの呼び出しを検出し、前記検出されたメソッドの操作対象である前記参照に、前記追跡情報に基づいて追跡すべき旨を表す追跡フラグを付与することを特徴とする請求項2に記載の計算機。前記計算機は、前記各プログラムによって使用されるリソース量を算出する算出部を備え、前記算出部は、前記プログラムによって生成された、所定の前記複数のオブジェクトから構成されるオブジェクト集合を含む、当該プログラムの使用リソース量の算出要求が入力された場合に、前記追跡情報に基づいて、前記オブジェクト集合に含まれる前記所定のオブジェクトにおける前記参照を追跡することによって前記プログラムが利用するオブジェクトを探索するオブジェクト探索処理を実行して、前記プログラムが利用する全てのオブジェクトを特定し、前記特定された各オブジェクトの使用リソース量を取得して、前記プログラムに使用されるリソース量を算出することを特徴とする請求項3に記載の計算機。前記算出部は、前記追跡情報の前記第1のオブジェクトの識別情報を参照して、前記オブジェクト集合の中から前記第1のオブジェクトを検索し、前記第1のオブジェクトが参照する前記共有オブジェクトを検索し、前記共有オブジェクトにおける前記参照の中から、前記追跡フラグが付与される前記参照を検索し、前記追跡フラグが付与された参照に基づいて前記追跡情報を参照して、当該参照によって参照される前記第2のオブジェクトに対応するエントリが存在するか否かを判定し、前記追跡フラグが付与された参照によって参照される前記第2のオブジェクトに対応するエントリが存在すると判定された場合には、前記第2のオブジェクトを新たな入力として前記オブジェクト探索処理を実行することを特徴とする請求項4に記載の計算機。前記計算機は、前記オブジェクトに含まれる参照のうち、追跡すべき前記参照を特定するための探索ルール情報を備え、前記算出部は、探索ルール情報に基づいて、前記処理対象であるオブジェクトにおける前記参照の中から前記追跡すべき参照を特定し、前記特定された追跡すべき参照が示す前記オブジェクトを入力として前記オブジェクト探索処理を実行することを特徴とする請求項4に記載の計算機。前記オブジェクトの識別情報は、所定の長さのビット列から構成され、前記参照に含まれるオブジェクトの識別情報である前記ビット列のうち、未使用のビットに前記追跡フラグを割り当てることを特徴とする請求項4に記載の計算機。前記計算機は、前記プログラム毎の使用リソース量の上限を表す閾値を格納し、前記算出部は、前記算出されたプログラムの使用リソース量が、当該プログラムに対応する前記閾値より大きいか否かを判定し、前記算出されたプログラムの使用リソース量が、当該プログラムに対応する前記閾値より大きいと判定された場合には、当該プログラムを終了させることを特徴とする請求項4に記載の計算機。複数のプログラムを実行するプロセッサ、及び前記プロセッサに接続され、前記複数のプログラムを格納する記憶部を備える計算機におけるリソース管理方法であって、前記計算機は、前記複数のプログラムを実行することによって複数のオブジェクトを生成するプログラム実行部を備え、前記オブジェクトは、他のオブジェクトの識別情報を含む参照を有し、前記複数のオブジェクトは、複数の前記オブジェクトによって参照される共有オブジェクトを含み、前記リソース管理方法は、前記プロセッサが、前記共有オブジェクトを参照する第1のオブジェクトと、前記共有オブジェクトに含まれる前記参照によって前記第1のオブジェクトから参照される第2のオブジェクトとの対応を特定するステップと、前記プロセッサが、前記プログラム毎に、当該プログラムが利用する前記オブジェクトを特定するステップと、を含むことを特徴とするリソース管理方法。前記計算機は、さらに、前記第1のオブジェクトの識別情報及び前記第2のオブジェクトの識別情報を含む追跡情報を格納し、前記リソース管理方法は、前記プロセッサが、前記第2のオブジェクトの識別情報を含む前記参照を引数とする前記第1のオブジェクトからのメソッドの呼び出しを検出した場合に、当該メソッドに基づいて、前記第1のオブジェクトの識別情報及び前記第2のオブジェクトの識別情報を取得するステップと、前記プロセッサが、取得された前記第1のオブジェクトの識別情報及び前記第2のオブジェクトの識別情報を前記追跡情報に格納するステップと、前記プロセッサが、前記追跡情報に基づいて、前記プログラム毎に、当該プログラムが利用する前記オブジェクトを特定するステップと、を含むことを特徴とする請求項9に記載のリソース管理方法。前記計算機は、さらに、前記共有オブジェクトに対する、前記第2のオブジェクトを示す前記参照を引数とする前記第1のオブジェクトからのメソッドの呼び出しを検出するための追跡ルール情報を備え、前記リソース管理方法は、前記プロセッサが、前記追跡ルール情報に基づいて、前記第2のオブジェクトの識別情報を含む前記参照を引数とする前記第1のオブジェクトからのメソッドの呼び出しを検出するステップと前記プロセッサが、前記検出されたメソッドの操作対象である前記参照に、前記追跡情報に基づいて追跡すべき旨を表す追跡フラグを付与するステップと、を含むことを特徴とする請求項10に記載のリソース管理方法。前記計算機は、さらに、前記各プログラムによって使用されるリソース量を算出する算出部を備え、前記リソース管理方法は、前記プロセッサが、前記プログラムによって生成された、所定の前記複数のオブジェクトから構成されるオブジェクト集合を含む、当該プログラムの使用リソース量の算出要求が入力された場合に、前記追跡情報に基づいて、前記オブジェクト集合に含まれる前記所定のオブジェクトにおける前記参照を追跡することによって前記プログラムが利用するオブジェクトを探索するオブジェクト探索処理を実行して、前記プログラムが利用する全てのオブジェクトを特定するステップと、前記特定された各オブジェクトの使用リソース量を取得して、前記プログラムの使用リソース量を算出するステップと、を含むことを特徴とする請求項11に記載のリソース管理方法。前記プログラムが利用する全てのオブジェクトを特定するステップでは、前記プロセッサが、前記追跡情報の前記第1のオブジェクトの識別情報を参照して、前記オブジェクト集合の中から前記第1のオブジェクトを検索するステップと、前記プロセッサが、前記第1のオブジェクトが参照する前記共有オブジェクトを検索するステップと、前記プロセッサが、前記共有オブジェクトにおける前記参照の中から、前記追跡フラグが付与される前記参照を検索するステップと、前記プロセッサが、前記追跡フラグが付与された参照に基づいて前記追跡情報を参照して、当該参照によって参照される前記第2のオブジェクトに対応するエントリが存在するか否かを判定するステップと、前記プロセッサが、前記追跡フラグが付与された参照によって参照される前記第2のオブジェクトに対応するエントリが存在すると判定された場合には、前記第2のオブジェクトを新たな入力として、新たに前記オブジェクト探索処理を実行するステップと、を含むことを特徴とする請求項12に記載のリソース管理方法。前記計算機は、さらに、前記オブジェクトに含まれる参照のうち、追跡すべき前記参照を特定するための探索ルール情報を備え、前記プログラムが利用する全てのオブジェクトを特定するステップでは、前記プロセッサが、探索ルール情報に基づいて、前記処理対象であるオブジェクトにおける前記参照の中から前記追跡すべき参照を特定するステップと、前記プロセッサが、前記特定された追跡すべき参照が示す前記オブジェクトを入力として前記オブジェクト探索処理を実行するステップと、を含むことを特徴とする請求項12に記載のリソース管理方法。前記オブジェクトの識別情報は、所定の長さのビット列から構成され、前記参照に含まれるオブジェクトの識別情報である前記ビット列のうち、未使用のビットに前記追跡フラグを割り当てることを特徴とする請求項12に記載のリソース管理方法。前記計算機は、前記プログラム毎の使用リソース量の上限を表す閾値を格納し、前記リソース管理方法は、前記プロセッサが、前記算出されたプログラムの使用リソース量が、当該プログラムに対応する前記閾値より大きいか否かを判定するステップと、前記プロセッサが、前記算出されたプログラムの使用リソース量が、当該プログラムに対応する前記閾値より大きいと判定された場合には、当該プログラムを終了させるステップと、を含むことを特徴とする請求項12に記載のリソース管理方法。アプリケーション毎に仮想マシンが分離されている場合、あるアプリケーションのメモリ使用量は、当該アプリケーションが実行される仮想マシンのヒープメモリの使用量に対応する。したがって、例えば、仮想マシン内の全オブジェクトのメモリ使用量を算出することによってアプリケーションの使用メモリ量を求めることができる。しかし、メモリ使用量を低減するために単一の仮想マシン上で複数のアプリケーションを動作させる場合、アプリケーション間で一部のオブジェクトが共有されるため、アプリケーション毎の消費メモリ量を求めることは難しい。各アプリケーションのメモリ使用量を求めるために、例えば、オブジェクトのグラフをたどり、各アプリケーションが参照するオブジェクトを探索することが考えられる。しかし、前述した方法では、参照関係から複数のアプリケーションによって共有されていることしか把握できない。また、特許文献1に記載の発明では、複数のアプリケーションによってオブジェクトが共有される状況を想定しておらず、そのまま適用することはできない。特許文献2に記載の発明では、アプリケーションそのものを変更する必要があり、既存のアプリケーションには適用できない。特許文献3に記載の発明では、クラスローダ単位でメモリ使用量を管理しているためアプリケーション単位のメモリ使用量を算出することができない。したがって、アプリケーション間で一部のオブジェクトが共有されていると、当該オブジェクト配下にオブジェクトがどのアプリケーションによって使用されているか把握することが困難となる。なぜなら、参照関係からは複数のアプリケーションによって共有されているとしか解釈できず、オブジェクトを正しく分類することができないためである。図13A、図13B及び図14は、本発明を完成するにあたり発明者が先立って検討した、アプリケーション及びオブジェクトの関係を表すオブジェクトグラフを示す説明図である。図13A及び図13Bは、各アプリケーションを独立の仮想マシン上で実行させた場合のオブジェクトグラフの一例を示す図である。図14は、複数のアプリケーションを一つの仮想マシン上で実行させた場合のオブジェクトグラフの一例を示す図である。図13に示すように、アプリケーションAは、アプリケーション自身のモジュールのオブジェクトであるオブジェクト1301、並びに、他のモジュールによって提供されるオブジェクト1302、1303、1304及び1305から構成されている。また、アプリケーションBは、アプリケーション自身のモジュールのオブジェクトであるオブジェクト1311、並びに、他のモジュールによって提供されるオブジェクト1312、1303、1314及び1315から構成されている。アプリケーションA及びアプリケーションBの両方に含まれるオブジェクト1303は同一の機能をもったオブジェクトであるが、各アプリケーションが異なる仮想マシン上で独立して実行されているため、実体は別のオブジェクトである。図14では、アプリケーションA及びアプリケーションBが同一の仮想マシン上で実行される。オブジェクト1303はアプリケーションA及びアプリケーションBによって共有される。したがって、オブジェクトグラフをたどるだけでは、オブジェクト1304及びオブジェクト1314がどのアプリケーションから利用されているか把握することができない。つまり、オブジェクト1303、オブジェクト1304及びオブジェクト1314のメモリ使用量は共有されているとしか分からない。本発明の目的は、前述したようなオブジェクトを正しく分類することである。本発明の代表的な一例を示せば以下の通りである。すなわち、複数のプログラムを実行するプロセッサ、及び前記プロセッサに接続され、前記複数のプログラムを格納する記憶部を備える計算機であって、前記計算機は、前記複数のプログラムを実行することによって複数のオブジェクトを生成するプログラム実行部を備え、前記オブジェクトは、他のオブジェクトの識別情報を含む参照を有し、前記複数のオブジェクトは、複数の前記オブジェクトによって参照される共有オブジェクトを含み、前記プログラム実行部は、前記共有オブジェクトを参照する第1のオブジェクトと、前記共有オブジェクトに含まれる前記参照によって前記第1のオブジェクトから参照される第2のオブジェクトとの対応を特定し、前記プログラム毎に、当該プログラムが利用する前記オブジェクトを特定する。本発明の一形態によれば、単一の計算機上で複数のプログラムを実行させる場合に、プログラム間でオブジェクトの共有が生じた場合であっても、共有オブジェクトにおける参照を追跡することによってプログラムが利用するオブジェクトを分類することができる。[第一の実施形態]図1は、本発明の第一の実施形態における計算機の構成例を示すブロック図である。計算機100は、プロセッサ101、アドレス変換装置102、メモリ103及び二次記憶装置104を備え、各構成はアドレス/データバス105を介して接続される。プロセッサ101は、メモリ103に格納されるプログラムを実行することによって、計算機が備える機能を実現する。アドレス変換装置102は、プロセッサ101が実行するプロセス毎に割り当てられた仮想アドレスと、メモリ103の物理アドレスとの間の変換処理を実行する。メモリ103は、プロセッサ101によって実行されるプログラム及び当該プログラムの実行に必要な情報を格納する。メモリ103には、仮想マシンを実現するためのプログラムが格納される。ここで、仮想マシンとは、OS及びハードウェアに依存することなくアプリケーション等を実行するための環境を実現するためのインタプリタを表す。二次記憶装置104は、装置の電源のON/OFFにかかわらずデータが格納されている。なお、メモリ103上に展開されるプログラムは、二次記憶装置104に格納されてもよい。この場合、二次記憶装置104からメモリ103上にプログラムが読み出され、プロセッサ101によって実行される。なお、計算機100は、ネットワークインタフェース及び入出力装置等の他の構成を含んでもよい。図2は、本発明の第一の実施形態における計算機100の論理構成の一例を示すブロック図である。計算機100は、メモリ103上に、作業用記憶部201、プログラム格納部204、プログラム実行部205、参照追跡テーブル格納部206、計数処理実行部207、参照追跡ルール格納部208及びオブジェクト探索ルール格納部209を備える。なお、前述した各構成は個別のハードウェアを用いて実現してもよい。作業用記憶部201は、処理の実行時に使用される記憶領域であり、ヒープメモリ202及びスタック203を含む。ヒープメモリ202にはオブジェクトが格納され、スタック203には計算結果が一時的に格納される。プログラム格納部204は、計算機が備える機能を実現するためのプログラム例えば、アプリケーションプログラムを格納する記憶領域である。プログラム実行部205は、プログラム格納部204に格納されるプログラムを実行する。具体的には、プログラム実行部205は、スタック203を一時的な作業領域として用いてプログラムを実行し、また、当該プログラムの実行結果に基づいてヒープメモリ202に格納される情報を更新する。参照追跡テーブル格納部206は、参照追跡テーブル401図4参照を格納する。参照追跡テーブル401は、追跡すべき参照に関する情報を格納する。ここで、参照とは、参照先を示すメモリ103上のアドレスオブジェクトIDを保持するデータ構造のことを表す。参照追跡テーブル401図4参照の詳細は、図4を用いて後述する。参照追跡ルール格納部208は、参照追跡ルールテーブル501図5参照を格納する。参照追跡ルールテーブル501は、追跡すべき参照を決定するためのルールを格納する。参照追跡ルールテーブル501の詳細は、図5を用いて後述する。オブジェクト探索ルール格納部209は、オブジェクト探索ルールテーブル601図6参照を格納する。オブジェクト探索ルールテーブル601は、ヒープメモリ202上のオブジェクトの探索方法を指定するルールを格納する。計数処理実行部207は、参照追跡テーブル401図4参照及びオブジェクト探索ルールテーブル601図6参照に基づいて、任意のオブジェクト集合をルート基点集合としてオブジェクト探索処理を実行し、各オブジェクトのメモリ使用量を算出する。なお、図2では、ヒープメモリ202上における不要なオブジェクトを自動的に回収する機能を有するガーベジコレクタ等の他の構成要素については説明を省略している。図3は、本発明の第一の実施形態におけるヒープメモリ202上のオブジェクトのデータ構造の一例を示す説明図である。図3では、オブジェクト301、オブジェクト315及びオブジェクト316の対応関係及びデータ構造を表す。オブジェクト301は、メタ情報及びフィールドから構成される。メタ情報は、オブジェクトID302、クラス303及びマークビット集合304を含む。オブジェクトID302は、オブジェクト301を一意に識別するための識別子である。例えば、オブジェクトID302には、オブジェクト301が格納されたメモリ領域の先頭アドレスが用いられる。クラス303は、オブジェクト301が属するクラスを定義するクラス情報を識別するための識別子である。図示していないが、クラス情報には、オブジェクトに対する操作を表すメソッドの集合、及び、各フィールドにおけるデータ構造を表す型情報が含まれる。オブジェクトに適用可能な操作は、クラス情報に含まれるメソッドの集合によって規定される。マークビット集合304は、モジュールに含まれるクラスのオブジェクト集合を識別するためのビット列である。ここで、モジュールには、アプリケーション及びライブラリ等を含むものとする。フィールドは、フィールド名305及びフィールド値306を含む。フィールド名305は、オブジェクト301中のフィールドを一意に識別する識別子である。フィールド値306は、オブジェクト301の状態を表す具体的なデータである。フィールド値306は、数値を格納できるデータ構造、又は、参照と呼ばれる他のオブジェクトのオブジェクトIDアドレスを格納できるデータ構造となっている。図3に示す例では、行307のフィールド名305にはcountが格納され、フィールド値306には数値20が格納される。行308のフィールド名305にはobserver1が格納され、フィールド値306には参照が格納される。また、行309のフィールド名305にはobserver2が格納され、フィールド値306には参照が格納される。本実施形態におけるフィールド値306に格納される参照は、オブジェクトID310及び追跡フラグ311から構成されるデータ構造である。オブジェクトID310は、参照先のオブジェクトの識別子である。オブジェクトID310にはメモリアドレスが用いられているため、各オブジェクトは互いに参照を通じてそれぞれの位置を指し示すこととなる。行307のフィールド値306には、オブジェクト315を指定するオブジェクトID3100x000200016進数が参照として格納される。行308のフィールド値306には、オブジェクト316を指定するオブジェクトID3100x000300016進数が参照として格納される。オブジェクト315及びオブジェクト316は、同様にオブジェクトID302及びクラス303を含むメタ情報から構成される。メタ情報は、オブジェクト301と同一のものであるため説明を省略する。なお、オブジェクト315及びオブジェクト316にはフィールドが含まれてもよい。前述したように参照を用いてオブジェクト間の関係を表すことによって、リンクリストやハッシュテーブル等の複雑なデータ構造を表現することができる。追跡フラグ311は、既定値が0であり、少なくとも1ビットの幅を持つデータである。追跡フラグ311は、計数処理実行部507が計数処理を実行する場合に、ルート集合となるオブジェクト集合とは別に、所定のオブジェクトを起点としてオブジェクトグラフをたどる必要があることを示す変数である。ただし、追跡フラグ311は独立したデータ項目である必要はなく、オブジェクトID302の未使用ビットに割り当ててもよい。例えば、4バイト境界でオブジェクトが配置される場合、アドレス値であるオブジェクトID302の下位2ビットは未使用の002進数であるため、当該下位2ビットのいずれかを追跡フラグ311に割り当てることができる。また、上位ビットに使用されていないビットがある場合には、当該未使用の上位ビットを追跡フラグ311として割り当ててもよい。なお、この場合、アドレス値として解釈する場合、追跡フラグ311を0に設定された後にアドレス値として使用する必要がある。上位ビットを追跡フラグ311として割り当てる場合には、アドレス変換装置102を用いて、参照のオブジェクトID310をそのままアドレス値として解釈できるように、複数の仮想アドレス領域にヒープメモリ202を割り当てることができる。この場合、アドレス値として解釈してもメモリに対する読み出し処理及び書き込み処理は正常に実行される。図4は、本発明の第一の実施形態における参照追跡テーブル401の一例を示す説明図である。参照追跡テーブル401は、追跡すべき参照に関する情報を格納する。参照追跡テーブル401は、参照先オブジェクトID402及び所属オブジェクトID403を含む。参照先オブジェクトID402は、追跡すべき参照が保持するオブジェクトIDである。すなわち、追跡すべき参照によって指定された参照先のオブジェクトのアドレス値である。例えば、図14において、オブジェクト1304及びオブジェクト1314への参照が追跡すべき参照となる。以下、追跡すべき参照によって指定された参照先のオブジェクトを参照先オブジェクトとも記載する。参照先オブジェクトID402には、追跡すべき参照をフィールドに保持するオブジェクトのオブジェクトIDをも含まれる。例えば、図14において、オブジェクト1303が追跡すべき参照をフィールドに保持するオブジェクトとなる。以下、追跡すべき参照を保持するオブジェクトを共有オブジェクトとも記載する。所属オブジェクトID403は、共有オブジェクトを指定する参照をフィールドに保持するオブジェクトのオブジェクトIDである。例えば、図14において、オブジェクト1302及びオブジェクト1312が共有オブジェクトを指定する参照をフィールドに保持するオブジェクトとなる。以下、共有オブジェクトを指定する参照をフィールドに保持するオブジェクトを所属オブジェクトとも記載する。また、所属オブジェクトは、共有オブジェクトをフィールドに必ずしも保持している必要はない。例えば、参照追跡テーブルのエントリを作成するメソッド呼び出し後に、フィールドの値がクリアされる場合がある。すなわち、後述するメソッド呼び出し処理によって、追跡すべき参照を発生させたオブジェクトともいえる。なお、計算機100は、共有オブジェクト毎に一つの参照追跡テーブル401を備えていてもよい。この場合、参照先オブジェクトID402には、共有オブジェクトのオブジェクトIDが含まれない。本実施形態では、計算機100が参照追跡テーブル401を備えることによって、オブジェクト間の参照関係を把握することが可能となる。より具体的には、計算機100は、参照追跡テーブル401を備えることによって、所属オブジェクトを追跡すべき参照の参照元として扱うことができる。すなわち、所属オブジェクトが参照先オブジェクトを参照することが分かる。なお、本発明は、参照追跡テーブル401のようにテーブル形式のデータに限定されず、同様の情報を保持するデータ形式であればどのような形式であってもよい。図5は、本発明の第一の実施形態における参照追跡ルールテーブル501の一例を示す説明図である。参照追跡ルールテーブル501は、プログラム実行部205が追跡すべき参照を特定するための情報を格納する。参照追跡ルールテーブル501は、クラス502、メソッド名503、代入値504及び引数番号505を含む。クラス502は、オブジェクトが所属するクラスを識別するための識別子である。メソッド名503は、クラス502に対応するクラスにおけるメソッドを識別するための識別子である。代入値504は、追跡フラグ311に代入する値である。引数番号505は、メソッドに設定された引数のうち、追跡すべき参照を示す引数の番号である。例えば、行513におけるメソッドには2つの引数が含まれており、2つ目の引数を示す22が引数番号505に格納される。引数番号505に0が格納される場合、メソッドの返り値を表す。なお、本発明は、参照追跡ルールテーブル501のようにテーブル形式のデータに限定されず、同様の情報を保持するデータ形式であればどのような形式であってもよい。図6は、本発明の第一の実施形態におけるオブジェクト探索ルールテーブル601の一例を示す説明図である。オブジェクト探索ルールテーブル601は、ヒープメモリ202上のオブジェクトの探索方法に関するルールを格納する。オブジェクト探索ルールテーブル601は、クラス602、フィールド603及び処理種別604を含む。クラス602は、オブジェクトが所属するクラスを識別するための識別子である。なお、クラス602は、クラス502と同一の情報である。フィールド603は、オブジェクトを構成するフィールドを識別するための識別子である。なお、フィールド603には、オブジェクトにおける全てのフィールドを表す記号が格納されてもよいし、また、複数のフィールドが格納されてもよい。処理種別604は、オブジェクト探索処理を実行するか否かを示す情報である。具体的には、処理種別604にはTRACE又はSKIPのいずれかが格納される。TRACEはオブジェクト探索処理の実行を示す。また、SKIPはオブジェクト探索処理の省略を示す。本実施形態の計数処理実行部207は、オブジェクト探索ルールテーブル601を参照して、クラス602及びフィールド603が一致するオブジェクトを探索し、探索されたオブジェクトに対して処理種別604に対応した処理を実行する。なお、オブジェクト探索ルールテーブル601に一致しない参照については、探索処理が必ず実行されるものとする。なお、本発明は、オブジェクト探索ルールテーブル601のようにテーブル形式のデータに限定されず、同様の情報を保持するデータ形式であればどのような形式であってもよい。図7は、本発明の第一の実施形態における参照追跡テーブル401の更新処理を説明するフローチャートである。プログラム実行部205が、参照追跡ルールテーブル501と一致する特定の識別子メソッドシグニチャを有するメソッドを呼び出した時に、以下で説明する参照追跡テーブル401の更新処理が実行される。より具体的には、共有オブジェクトに適用可能なメソッドが呼び出された時に参照追跡テーブル401の更新処理が実行される。まず、プログラム実行部205は、メソッド呼び出し命令を受け付けるとメソッド呼び出し処理を開始するステップS1。プログラム実行部205は、スタック203にメソッドの引数を格納プッシュし、さらに、メソッド呼び出し命令の対象となるレシーバオブジェクトをスタック203に格納プッシュし、メソッド呼び出し命令を実行するステップS2。なお、ここでの処理は一般的なメソッド呼び出しを含んでいるので、レシーバオブジェクトは共有オブジェクトに限定されるものではない。なお、メソッド呼び出し命令には、呼び出すメソッドのメソッド名が含まれており、プログラム実行部205は、メソッド名及びレシーバオブジェクトの属するクラスに基づいて、呼び出すメソッドを特定できる。次に、プログラム実行部205は、レシーバオブジェクトの属するクラス及び呼び出すメソッドのメソッド名に基づいて参照追跡ルールテーブル501を参照して、対応するエントリを検索するステップS3。具体的には、プログラム実行部205は、参照追跡ルールテーブル501のクラス502及びメソッド名503を参照し、レシーバオブジェクトが属するクラス及び呼び出すメソッドのメソッド名と一致するエントリが存在するか否かを検索する。プログラム実行部205は、前述の検索の結果、対応するエントリが存在するか否かを判定するステップS4。すなわち、追跡すべき参照を保持する共有オブジェクトを指定する参照であるか否かが判定される。ここで、エントリが存在すれば、レシーバオブジェクトを共有オブジェクトとみなし、メソッド呼び出しで引数として渡される参照を追跡できるようにする処理が実行される。対応するエントリが存在しないと判定された場合、プログラム実行部205は、更新処理を終了して、メソッド呼び出し処理を継続するステップS8。対応するエントリが存在すると判定された場合、プログラム実行部205は、対応するエントリの引数番号505が0であるか否かを判定するステップS5。ステップS3~ステップS5では、追跡すべき参照を特定するための処理であり、追跡すべき参照がある場合には、ステップS6において、参照追跡テーブル401に必要な情報が追加される。対応するエントリの引数番号505が0でないと判定された場合、プログラム実行部205は、参照追跡テーブル401を更新するステップS6。具体的には、以下のように、参照追跡テーブル401が更新される。まず、プログラム実行部205は、参照追跡テーブル401に新たなエントリを生成する。プログラム実行部205は、生成されたエントリの参照先オブジェクトID402に、引数番号505で指定された引数が示す参照におけるオブジェクトIDを格納する。すなわち、参照先オブジェクトのオブジェクトIDが格納される。また、プログラム実行部205は、生成されたエントリの参照先オブジェクトID402に、レシーバオブジェクトのオブジェクトIDを格納する。なお、共有オブジェクト毎に参照追跡テーブル401が存在する場合には当該処理は実行されなくともよい。プログラム実行部205は、生成されたエントリの所属オブジェクトID403に、スタック203から取得される現在のスタックフレームに所属するオブジェクトthis参照のオブジェクトIDを格納する。すなわち、所属オブジェクトのオブジェクトIDが格納される。さらに、プログラム実行部205は、引数番号505で指定された引数のアドレス値を出力する。以上の処理によって、参照先オブジェクトと、所属オブジェクトとの対応関係を把握することが可能となる。プログラム実行部205は、指定された引数が示す参照における追跡フラグ311に値を設定するステップS7。具体的には、プログラム実行部205は、指定された引数が示す参照の追跡フラグ311に、ステップS3において検索されたエントリの代入値504の値を代入する。その後、プログラム実行部205は、更新処理を終了して、メソッド呼び出し処理を継続するステップS8。メソッド呼び出し処理が完了すると、スタック203に格納された情報は破棄され、代わりにメソッドの帰り値がスタック203に格納プッシュされ、処理が終了する。ステップS5において、引数番号505が0であると判定された場合、プログラム実行部205は、メソッド呼び出し処理を継続するステップS9。当該メソッド呼び出し処理では、呼び出されたメソッドの帰り値の参照のアドレス値が出力される点がステップS8と異なる。次に、プログラム実行部205は、指定された引数が示す参照における追跡フラグ311に値を設定するステップS10。当該処理は、ステップS7と同一の処理である。なお、ステップS7及びステップS10において追跡フラグ311に値が設定された参照は、レシーバオブジェクトのフィールド等に複製されていることが期待される。当該複製された参照と、ステップS6において参照追跡テーブル401に新たに追加されたエントリとに基づいて、計数処理実行部207が集計処理を実行することとなる。図8は、第一の実施形態における計数処理実行部507が実行する集計処理について説明するフローチャートである。計数処理実行部207は、複数のオブジェクト集合の情報が含まれる集計処理の開始要求を受信すると集計処理を開始するステップS21。なお、集計処理は、計算機100を操作するオペレータからの指示を受けてから実行してもよいし、周期的に実行してもよい。ここで、オブジェクト集合は、当該モジュールに属するクラスのクラス情報に基づいて生成された全オブジェクトから構成される。フレームワーク図示省略がオブジェクト集合を把握しており、当該フレームワークによって各モジュールのオブジェクト集合の情報が入力される。なお、初期に入力されるオブジェクト集合には、モジュールに属するクラスのクラス情報から生成されたオブジェクト以外のオブジェクトは含まれない。したがって、後述するオブジェクト探索処理が実行されることとなる。なお、オブジェクト集合の情報には、当該オブジェクト集合に含まれるオブジェクトのオブジェクトIDが含まれる。計数処理実行部207は、複数のオブジェクト集合をグループリストGに追加するステップS22。具体的には、計数処理実行部207は、ヒープメモリ202に格納されるオブジェクトにおけるメタ情報のマークビット集合304をクリアし、複数のオブジェクト集合に、各オブジェクト集合を一意に識別するための識別子を付与する。例えば、1から始まる連続した数値を各オブジェクト集合に付与する方法が考えられる。さらに、計数処理実行部207は、識別子が付与された各オブジェクト集合をグループリストGに追加する。例えば、識別子が付与された各モジュールに対応するオブジェクト集合は、オブジェクト集合Siiは自然数と表される。ここで、オブジェクト集合Siは、複数のオブジェクトOnnは自然数を含む。このとき、グループリストはG=S1、S2、S3、...となる。次に、計数処理実行部207は、全オブジェクト集合について処理が完了したか否かを判定するステップS23。具体的には、グループリストGが空であるか否かが判定される。グループリストGが空である場合には、全オブジェクト集合について処理が完了したと判定される。全てのオブジェクト集合について処理が完了していないと判定された場合、計数処理実行部207は、グループリストGから一つのオブジェクト集合Siを選択するステップS24。選択方法は、例えば、i=1から順に選択する方法、オブジェクト集合に含まれる要素が少ないものから順に選択する方法などが考えられる。なお、本発明は選択方法に限定されない。計数処理実行部207は、選択されたオブジェクト集合に対してオブジェクト探索処理を実行するステップS25。なお、探索処理については、図9を用いて後述する。ステップS25では、オブジェクト探索ルールテーブル601に基づいてオブジェクト探索処理が実行される。当該オブジェクト探索処理によって、一つのオブジェクトを基点としてたどることができるオブジェクトが探索される。計数処理実行部207は、参照追跡ルールテーブル501を参照して、新たな基点となるオブジェクトを特定し、特定されたオブジェクトを選択されたオブジェクト集合に追加するステップS26。ステップS25におけるオブジェクト探索処理では、共有オブジェクトにおける参照によって指定されたオブジェクトが探索されていない可能性がある。これは、共有オブジェクトにおける参照によって指定された参照先オブジェクトがどの所属オブジェクトから参照されているか把握できないためである。そこで、ステップS26において、計数処理実行部207は、選択されたオブジェクト集合に、追跡すべき参照によって指定された参照先オブジェクトを追加する。これによって、当該参照先オブジェクトを基点としたオブジェクト探索処理が可能となる。ステップS26では具体的には、以下のような処理が実行される。計数処理実行部207は、参照追跡テーブル401の所属オブジェクトID403を参照して、選択されたオブジェクト集合、及び前ステップS25において辿ったオブジェクト、すなわち選択されたオブジェクト集合に対応するマークビットが立っているオブジェクトの中から、所属オブジェクトID403に一致するオブジェクトを抽出する。計数処理実行部207は、抽出されたオブジェクトそれぞれのマークビット集合304を参照して、選択されたオブジェクト集合に対応するビットが付与されているオブジェクトが存在するか否かを判定する。マークビット集合304に選択されたオブジェクト集合に対応するビットが付与されているオブジェクトがある場合、計数処理実行部207は、当該オブジェクトに対応するエントリの参照先オブジェクトID402を取得する。次に、計数処理実行部207は、ヒープメモリ202上の全オブジェクトの中から追跡フラグが0でない参照を抽出する。計数処理実行部207は、抽出された参照の中に、取得された参照先オブジェクトID402と一致する参照があるか否かを判定する。取得された参照先オブジェクトID402と一致する参照がある場合、計数処理実行部207は、当該参照によって指定された参照先オブジェクトを、選択されたオブジェクト集合に追加する。以上がステップS26における処理である。計数処理実行部207は、オブジェクト集合に新たに追加されたオブジェクトに対してオブジェクト探索処理図9参照を実行しステップS27、ステップS23に戻り同様の処理を実行する。ステップ23において、全てのオブジェクト集合について処理が完了したと判定された場合、計数処理実行部207は、各モジュールのメモリ使用量を算出するステップS28。具体的には、以下のような処理が実行される。計数処理実行部207は、ヒープメモリ202上の全オブジェクトのマークビット集合304を参照して、マークビット集合304に付与されたビットに基づいて、各モジュールに属するオブジェクトを検索する。さらに、計数処理実行部207は、検索されたオブジェクトから各モジュールのオブジェクト集合を構成する。なお、マークビット集合304には各モジュールに対応したビットが付与されており、計数処理実行部207は、当該ビットを参照することによって、各オブジェクトがどのモジュールに含まれるか把握できる。次に、計数処理実行部207は、各モジュールに含まれるオブジェクトのクラス情報図示省略等を参照して、各モジュールのメモリ使用量を算出する。なお、オブジェクト毎にメモリ使用量を算出する方法を用いてもよい。すなわち、本発明は、各オブジェクトにおけるメモリ使用量の算出方法に限定されない。以上の処理によって各モジュールのメモリ使用量を算出することができる。その後、計数処理実行部207は、算出された各モジュールのメモリ使用量を通知するための出力情報を生成し、処理を終了するステップS29。図9は、本発明の第一の実施形態におけるオブジェクト探索処理の詳細を説明するフローチャートである。まず、計数処理実行部207は、ステップS24において選択されたオブジェクト集合に含まれるオブジェクトを探索リストに追加するステップS31。計数処理実行部207は、全てのオブジェクトについて処理が完了したか否かを判定するステップS32。具体的には、探索リストが空であるか否かが判定される。探索リストが空である場合には、全てのオブジェクトについて処理が完了したと判定される。全てのオブジェクトについて処理が完了していないと判定された場合、計数処理実行部207は、探索リストからオブジェクトを一つ選択するステップS33。計数処理実行部207は、選択されたオブジェクトにマークビットを付与するステップS34。具体的には、計数処理実行部207は、選択されたオブジェクトのマークビット集合304に、ステップS24において選択されたオブジェクト集合に対応するマークビットをたてる。これによって、選択されたオブジェクトがどのモジュールを構成するオブジェクトであるかを把握することができる。例えば、ステップS22においてオブジェクト集合に付与された識別子に対応するマークビットを立てる方法が考えられる。オブジェクト集合に付与された識別子は、各オブジェクト集合固有の識別子であるため、マークビット集合304の対応する桁のビットに対応させることができる。オブジェクト集合S2の場合、2桁目のビットが対応しており、ステップS34では2桁目のビットを立てる処理が実行される。より詳細には、マークビット集合304の初期値が00000000である場合、オブジェクト集合S1にのみ所属するオブジェクトのマークビット集合304は00000001、オブジェクト集合S2にのみ所属するオブジェクトのマークビット集合304は00000010、オブジェクト集合S1及びオブジェクト集合S2に所属するオブジェクトは00000011となる。ステップS28では、当該マークビット集合304に基づいてオブジェクト集合に所属する全オブジェクトを把握することとなる。計数処理実行部207は、選択されたオブジェクトに基づいてオブジェクト探索ルールテーブル601を参照するステップS35。計数処理実行部207は、選択されたオブジェクトに追跡すべき参照が存在するか否かを判定するステップS36。選択されたオブジェクトにおける参照のうち、少なくとも一以上追跡すべき参照が存在する場合には、選択されたオブジェクトに追跡すべき参照が存在すると判定される。具体的には、以下のような処理が実行される。まず、計数処理実行部207は、選択されたオブジェクトのクラスと一致するクラス602であるエントリが存在するか否かを判定する。選択されたオブジェクトのクラスと一致するエントリが存在しないと判定された場合、計数処理実行部207は、当該オブジェクトにおける全ての参照を、追跡すべき参照に決定する。選択されたオブジェクトのクラスと一致するエントリが存在すると判定された場合、計数処理実行部207は、当該エントリのフィールド603及び処理種別604を参照する。当該エントリの処理種別604がTRACEの場合、計数処理実行部207は、選択されたオブジェクトにおけるフィールドのうち、フィールド603に一致するフィールドを追跡すべき参照に決定する。この場合、フィールド603に一致しないフィールドは追跡すべき参照として扱われない。一方、当該エントリの処理種別604がSKIPの場合、計数処理実行部207は、選択されたオブジェクトにおけるフィールドのうち、フィールド603に一致するフィールドを追跡すべき参照として扱わない。この場合、フィールド603に一致しないフィールドは追跡すべき参照として扱われる。なお、図6においてフィールド603に格納される所定の記号は、オブジェクトにおける全てのフィールドを意味する。追跡すべき参照が存在しないと判定された場合、計数処理実行部207は、ステップS32に戻り、同様の処理を実行する。このとき、計数処理実行部207は、探索リストから選択されたオブジェクトを削除する。選択されたオブジェクトに追跡すべき参照が存在すると判定された場合、計数処理実行部207は、探索リストに追加するオブジェクトを探索しステップS37、ステップS32に戻り同様の処理を実行する。具体的には、以下のような処理が実行される。まず、計数処理実行部207は、追跡すべき参照によって指定された参照先のオブジェクトのマークビット集合304を参照し、選択されたオブジェクトが所属するオブジェクト集合の識別子に対応するマークビットが付与されていない参照先オブジェクトを探索する。計数処理実行部207は、オブジェクト集合の識別子に対応するマークビットが付与されていない参照先オブジェクトを探索リストに追加する。また、計数処理実行部207は、選択されたオブジェクトを探索リストから削除する。以上の処理によって、新たに追加されたオブジェクトを基点とした探索処理が可能となる。ステップS32において、全てのオブジェクトについて処理が完了したと判定された場合、計数処理実行部207は、オブジェクト探索処理を終了して、次の処理を開始するステップS38。なお、本実施形態では、モジュールのメモリ使用量を算出する処理について説明したが、本発明はそれに限定されない。例えば、特定のクラスのオブジェクトの数を算出する処理も実行可能である。また、本実施形態では、仮想マシン上で実行する構成であったが、オブジェクトのメタ情報及びフィールド情報と同等の情報が得られればよく、仮想マシンを用いない計算機にも適用することができる。なお、第一の実施形態では、計数処理実行部207がオブジェクト探索処理を実行したが本発明はこれに限定されない。例えば、プログラム実行部205がオブジェクト探索処理を実行し、当該処理結果を計数処理実行部207に出力してもよい。第一の実施形態によれば、参照先オブジェクトを参照する所有オブジェクトを特定することができるため、複数のオブジェクトによって共有されるオブジェクトを含むモジュールが複数あっても、各モジュールに所属するオブジェクトを把握することができる。したがって、モジュール毎のメモリ使用量を正確に算出することができる。これによって、アプリケーションを改善してメモリ使用量を削減し、又はメモリリークを起こしているアプリケーションを特定することが可能となる。[第二の実施形態]第二の実施形態では、計算機上で実行されるモジュールのメモリ使用量を算出して、所定のメモリ使用量を超えないように計算機の計算機資源が管理される。以下、第一の実施形態との差異を中心に説明する。計算機のハードウェア構成は第一の実施形態と同一であるため説明を省略する。図10は、本発明の第二の実施形態における計算機100の論理構成の一例を示すブロック図である。作業用記憶部201、プログラム格納部204、プログラム実行部205、参照追跡テーブル格納部206、計数処理実行部207、参照追跡ルール格納部208、及びオブジェクト探索ルール格納部209は第一の実施形態と同一であるため説明を省略する。第二の実施形態では、新たに資源監視部210及び資源制限テーブル格納部211を備える点が第一の実施形態と異なる。資源監視部210は、計算機資源の不足が発生した場合に、モジュールの終了処理を実行して計算機資源を確保する。資源制限テーブル格納部211は、資源制限テーブル1101図11参照を格納する。資源制限テーブル1101については、図11を用いて後述する。図11は、本発明の第二の実施形態における資源制限テーブル1100の一例を示す説明図である。資源制限テーブル1101は、アプリケーション毎の計算機資源の使用量を制限するための情報を格納する。資源制限テーブル1101は、モジュール名1102及び許容メモリ使用量1103を含む。モジュール名1102は、モジュールを識別する識別子である。許容メモリ使用量1103は、モジュール名1102に対応するモジュールが使用可能なメモリ使用量である。図12は、本発明の第二の実施形態における資源監視部210によって実行される処理を説明するフローチャートである。当該処理は、プログラム実行部205がオブジェクト生成処理の実行時にヒープメモリ202の容量不足を検出した場合に、資源監視部210が呼び出された処理を開始するステップS51。資源監視部210は、資源制限テーブル1101のモジュール名1102に対応する各モジュールにおけるオブジェクト集合を入力として計数処理実行部207に計数処理の実行を依頼するステップS52。具体的には、資源監視部210は、モジュール名1102に対応する各モジュール含むクラスのオブジェクトをヒープメモリ202からすべて列挙することによって、各モジュールに対応するオブジェクト集合を取得する。なお、計数処理は第一の実施形態と同一であるため説明を省略する。計数処理実行部207は、計数処理を実行して、各モジュールのメモリ使用量を算出すし、当該算出結果を資源監視部210に出力する。算出結果が入力された資源監視部210は、資源制限テーブル1101を参照して、許容メモリ使用量1103の値より大きいメモリ使用量のモジュールを検索するステップS53。資源監視部210は、許容メモリ使用量1103の値より大きいメモリ使用量のモジュールが存在するか否かを判定するステップS54。該当するモジュールが存在しないと判定された場合、資源監視部210は、オブジェクト生成要求の失敗を示す例外を応答しステップS58、オブジェクト生成処理に戻るステップS57。該当するモジュールが存在しないと判定された場合、資源監視部210は、該当するモジュールのうち少なくとも1つのモジュールの終了を指示するステップS55。なお、本発明は、終了を指示するモジュールの数に限定されず、任意の数のモジュールに対して終了を指示してもよい。例えば、オブジェクトの生成処理の実行に必要なメモリ量を確保できるように必要な数のモジュールを終了させてもよい。その後、資源監視部210は、終了が指示されたモジュールの終了が完了するまで待機しステップS56、オブジェクト生成処理に戻るステップS57。第二の実施形態によれば、アプリケーション毎のメモリ使用量が、予め設定されたモジュール毎のメモリ使用量の上限値を超える場合には、当該モジュールを終了させることによって、特定のアプリケーションの過剰なメモリ確保を防止し、他のアプリケーションの動作に与える悪影響を回避することが可能となる。