(57)【特許請求の範囲】
【請求項１】
クラスファイルに含まれるバイトコードを用いて処理を実行する複数のアプリケーションを備えた情報処理装置であって、
前記複数のアプリケーションに含まれるアプリケーションがオブジェクトを生成した場合に、前記オブジェクトが使用したリソースの情報を集計する集計手段と、
前記オブジェクトは前記集計手段による前記リソースの集計処理を実行している最中に生成されたか否かを判定する判定手段と、
前記アプリケーションに対応するクラスファイルに、前記集計処理を実行するための第一のバイトコードを挿入する挿入手段と
を備え、
前記挿入手段にて挿入された前記第一のバイトコードが実行されることにより、前記第一のバイトコードを実行した前記アプリケーションが識別され、前記アプリケーションおよび前記オブジェクトが使用するリソースの情報が対応付けて記憶部に登録され、
前記集計手段は、前記記憶部に登録された情報に基づいて、アプリケーションごとのリソースの使用量を集計し、
前記挿入手段は、前記第一のバイトコードによる前記集計処理が実行中であるか否かを判定するための第二のバイトコードを、新たなオブジェクトのクラスファイルに挿入し、
前記第二のバイトコードが実行されることにより、前記新たなオブジェクトは前記集計処理を実行している最中に生成されたと判定された場合には、前記新たなオブジェクトは前記集計処理の実行対象から除外され、
前記新たなオブジェクトは前記集計処理を実行している最中に生成されていないと判定された場合には、前記新たなオブジェクトは前記集計処理の実行対象として、
前記アプリケーションの処理が実行されることを特徴とする情報処理装置。
【請求項２】
前記挿入手段は、前記アプリケーションを前記情報処理装置にインストールする際に、前記アプリケーションに対応する管理テーブルを生成するための第三のバイトコードを挿入し、
前記第三のバイトコードが実行されることにより、前記アプリケーションに対応する前記管理テーブルが前記記憶部に生成され、
前記第一のバイトコードが実行された際に、前記アプリケーションが生成したオブジェクトが使用するリソースの情報は、前記アプリケーションに対応する管理テーブルに登録されることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記挿入手段は、前記集計処理の実行対象となるアプリケーションを設定するための第四のバイトコードを挿入し、
前記第一のバイトコードが実行された場合、前記第四のバイトコードが実行された際に設定されるアプリケーションが、前記集計手段により、対象として集計されることを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記第四のバイトコードは、ユーザにより前記情報処理装置に新たにインストールされたアプリケーションを対象とするように構成されることを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記挿入手段は、集計する対象となるリソースの種類を設定するための第五のバイトコードを挿入し、
前記第一のバイトコードが実行された場合、前記第五のバイトコードが実行された際に設定されるリソースが、前記集計手段により、集計されることを特徴とする請求項１乃至４のいずれか一項に記載の情報処理装置。
【請求項６】
前記リソースの種類は、メモリ、スレッド、ソケット、およびファイルディスクリプタの少なくともいずれかであることを特徴とする請求項５に記載の情報処理装置。
【請求項７】
クラスファイルに含まれるバイトコードを用いて処理を実行する複数のアプリケーションを備えた情報処理装置の制御方法であって、
前記複数のアプリケーションに含まれるアプリケーションがオブジェクトを生成した場合に、前記オブジェクトが使用したリソースの情報を集計する集計工程と、
前記オブジェクトは前記集計工程における前記リソースの集計処理を実行している最中に生成されたか否かを判定する判定工程と、
前記アプリケーションに対応するクラスファイルに、前記集計処理を実行するための第一のバイトコードを挿入する挿入工程と
を有し、
前記挿入工程にて挿入された前記第一のバイトコードが実行されることにより、前記第一のバイトコードを実行した前記アプリケーションが識別され、前記アプリケーションおよび前記オブジェクトが使用するリソースの情報が対応付けて記憶部に登録され、
前記集計工程において、前記記憶部に登録された情報に基づいて、アプリケーションごとのリソースの使用量が集計され、
前記挿入工程において、前記第一のバイトコードによる前記集計処理が実行中であるか否かを判定するための第二のバイトコードが、新たなオブジェクトのクラスファイルに挿入され、
前記第二のバイトコードが実行されることにより、前記新たなオブジェクトは前記集計処理を実行している最中に生成されたと判定された場合には、前記新たなオブジェクトは前記集計処理の実行対象から除外され、
前記新たなオブジェクトは前記集計処理を実行している最中に生成されていないと判定された場合には、前記新たなオブジェクトは前記集計処理の実行対象となることを特徴とする情報処理装置の制御方法。
【請求項８】
コンピュータを、
クラスファイルに含まれるバイトコードを用いて処理を実行する複数のアプリケーションに含まれるアプリケーションがオブジェクトを生成した場合に、前記オブジェクトが使用したリソースの情報を集計する集計手段、
前記オブジェクトは前記集計手段による前記リソースの集計処理を実行している最中に生成されたか否かを判定する判定手段、
前記アプリケーションに対応するクラスファイルに、前記集計処理を実行するための第一のバイトコードを挿入する挿入手段
として機能させ、
前記挿入手段にて挿入された前記第一のバイトコードが実行されることにより、前記第一のバイトコードを実行した前記アプリケーションが識別され、前記アプリケーションおよび前記オブジェクトが使用するリソースの情報が対応付けて記憶部に登録され、
前記集計手段は、前記記憶部に登録された情報に基づいて、アプリケーションごとのリソースの使用量を集計し、
前記挿入手段は、前記第一のバイトコードによる前記集計処理が実行中であるか否かを判定するための第二のバイトコードを、新たなオブジェクトのクラスファイルに挿入し、
前記第二のバイトコードが実行されることにより、前記新たなオブジェクトは前記集計処理を実行している最中に生成されたと判定された場合には、前記新たなオブジェクトは前記集計処理の実行対象から除外され、
前記新たなオブジェクトは前記集計処理を実行している最中に生成されていないと判定された場合には、前記新たなオブジェクトは前記集計処理の実行対象となることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置およびその制御方法、並びにプログラムに関する。特に、単一のプロセス上で複数のアプリケーションを動作させる情報処理装置における資源管理技術に関する。
【背景技術】
【０００２】
情報処理装置の１つであるＭＦＰ（Ｍｕｌｔｉ  Ｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ）には、ドキュメントのコピーやスキャン、印刷などの機能を実現するアプリケーションを動作させることができる。このようなアプリケーションは、ＣＰＵやメモリの使用量を抑えるため、ＭＦＰでは同じプロセス上で実行することが多い。１つのプロセス上で使用する全体のメモリ量は知ることができるため、１つのアプリケーションしか実行しない場合は、アプリケーションのメモリ使用量も知ることができる。しかし、単一のプロセス上で複数のアプリケーションを実行する場合、プロセス全体のメモリ使用量しか知ることができないので、アプリケーション毎のメモリ使用量を知ることは困難である。
【０００３】
例えば、使用するヒープメモリの内容をダンプし（以後、ヒープダンプ）、ＭＦＰ以外の情報処理装置上で解析すれば、アプリケーション毎のメモリ使用量を計測できる。また、アプリケーションを修正し、１つ１つのアプリケーションがメモリ計測を行えば、ＭＦＰ上でも、アプリケーション毎のメモリ使用量を計測できる。しかし、既存のアプリケーションの構成を修正せずには、メモリ計測が行えない。
【０００４】
一方、既存のアプリケーションを修正せずに、パフォーマンスの解析を行う方法として、特許文献１のような技術がある。特許文献１が示す方法では、既存のアプリケーションがロードするクラスのバイトコードを監視して、実行されるメソッドを動的に特定し、実行時間を計測することで、実行中のアプリケーションのパフォーマンスを解析できる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−２３８２３３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１の方法では、アプリケーションが使用するメモリを解析することができない。
【０００７】
本発明は、上記の問題点に鑑み、単一のプロセス上で複数のアプリケーションを動作させる情報処理装置において、既存のアプリケーションでも、アプリケーション毎のメモリ使用量を情報処理装置上で計測可能にすることを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために本願発明は以下の構成を有する。すなわち、クラスファイルに含まれるバイトコードを用いて処理を実行する複数のアプリケーションを備えた情報処理装置であって、前記複数のアプリケーションに含まれるアプリケーションがオブジェクトを生成した場合に、前記オブジェクトが使用したリソースの情報を集計する集計手段と、前記オブジェクトは前記集計手段による前記リソースの集計処理を実行している最中に生成されたか否かを判定する判定手段と、前記アプリケーションに対応するクラスファイルに、前記集計処理を実行するための第一のバイトコードを挿入する挿入手段とを備え、前記挿入手段にて挿入された前記第一のバイトコードが実行されることにより、前記第一のバイトコードを実行した前記アプリケーションが識別され、前記アプリケーションおよび前記オブジェクトが使用するリソースの情報が対応付けて記憶部に登録され、前記集計手段は、前記記憶部に登録された情報に基づいて、アプリケーションごとのリソースの使用量を集計し、前記挿入手段は、前記第一のバイトコードによる前記集計処理が実行中であるか否かを判定するための第二のバイトコードを、新たなオブジェクトのクラスファイルに挿入し、前記第二のバイトコードが実行されることにより、前記新たなオブジェクトは前記集計処理を実行している最中に生成されたと判定された場合には、前記新たなオブジェクトは前記集計処理の実行対象から除外され、前記新たなオブジェクトは前記集計処理を実行している最中に生成されていないと判定された場合には、前記新たなオブジェクトは前記集計処理の実行対象として、前記アプリケーションの処理が実行される。
【発明の効果】
【０００９】
本発明により、単一のプロセス上で複数のアプリケーションを動作させる情報処理装置において、既存のアプリケーションでも、アプリケーション毎のメモリ使用量を情報処理装置上で計測できる。
【図面の簡単な説明】
【００１０】
【図１】本願発明に係る情報処理装置のハードウェアの構成例を示す図。
【図２】本願発明に係る情報処理システム全体のソフトウェアの構成例を示す図。
【図３】第一の実施形態に係るソフトウェアの構成例を示す図。
【図４】ソフトウェアによりバイトコードを挿入する際の流れを説明するための図。
【図５】操作パネルが表示する画面の一例を示す図。
【図６】オブジェクト管理テーブルにオブジェクトを追加する例を説明するための図。
【図７】第一の実施形態に係るアプリケーションをインストールする際のフローチャート。
【図８】第一の実施形態に係るアプリケーションを開始する際のフローチャート。
【図９】第一の実施形態に係るオブジェクト集計処理のフローチャート。
【図１０】第二の実施形態に係るアプリケーションメモリ管理部の構成例を示す図。
【図１１】第二の実施形態に係るアプリケーションを開始する際のフローチャート。
【図１２】第二の実施形態に係る処理のフローチャート。
【図１３】第二の実施形態に係る処理のフローチャート。
【図１４】第三の実施形態に係るアプリケーションメモリ管理部の構成例を示す図。
【図１５】第三の実施形態に係るアプリケーションをインストールする際のフローチャート。
【図１６】第三の実施形態に係るオブジェクト集計処理のフローチャート。
【図１７】第四の実施形態に係るアプリケーションを開始する際のフローチャート。
【図１８】第四の実施形態に係る集計処理のフローチャート。
【発明を実施するための形態】
【００１１】
以下、本発明を実施するための形態について図面を用いて説明する。
【００１２】
＜第一の実施形態＞
［ハードウェア構成］
本発明の第一の実施形態について説明する。図１は、本発明の各実施形態に共通する情報処理装置を収容するハードウェア構成の一例である。
【００１３】
情報処理装置１００は、コントローラユニット１０１、スキャナ１１２、プリンタ１１３、および操作パネル１１４を備える。コントローラユニット１０１は、バス１１７、１１８を介して、スキャナ１１２、プリンタ１１３とそれぞれ接続される。
【００１４】
ＣＰＵ１０２は、情報処理装置１００のソフトウェアプログラムを実行し、装置全体の制御を行う。ＲＯＭ１０３は、リードオンリーメモリであり、装置のブートプログラムや固定パラメータ等が格納されている。ＲＡＭ１０４は、ランダムアクセスメモリであり、ＣＰＵ１０２が装置を制御する際に、一時的なデータの格納などに使用する。外部記憶装置１０５は、インストールされたアプリケーションやアプリケーションのデータや印刷データの格納など、様々なデータの格納に使用する。ＵＳＢＨ  Ｉ／Ｆ制御部１０６はＵＳＢホストインタフェースを制御するためのものであり、さまざまなＵＳＢデバイスとの通信を制御する。
【００１５】
スキャナＩ／Ｆ制御部１０７は、バス１１７を介してスキャナ１１２に接続され、スキャナ１１２の制御を行う。プリンタＩ／Ｆ制御部１０８は、バス１１８を介してプリンタ１１３に接続され、プリンタ１１３の制御を行う。ＮＶＲＡＭ１０９は、不揮発性のメモリであり、アプリケーション管理装置の各種設定値が保存される。パネル制御部１１０は、操作パネル１１４を制御し、各種情報の表示、ユーザからの指示入力を行う。ネットワークＩ／Ｆ制御部１１１は、ネットワーク１１６とのデータの送受信を制御する。ネットワーク１１６は、情報処理装置１００以外の情報処理装置１２０とも接続されている。この情報処理装置１２０はネットワーク１１６を介して、印刷ジョブの送信や、情報処理装置１００上で動くアプリケーションの起動、停止、インストール、アンインストールを情報処理装置１００に命令することができる。
【００１６】
バス１１５は、ＣＰＵ１０２、ＲＯＭ１０３、ＲＡＭ１０４、外部記憶装置１０５、およびＵＳＢＨ  Ｉ／Ｆ制御部１０６が接続される。また、バス１１５は、スキャナＩ／Ｆ制御部１０７、プリンタＩ／Ｆ制御部１０８、ＮＶＲＡＭ１０９、パネル制御部１１０、およびネットワークＩ／Ｆ制御部１１１とも接続される。バス１１５は、ＣＰＵ１０２からの制御信号や各装置間のデータ信号が送受信されるシステムバスである。
【００１７】
［ソフトウェア構成］
図２は、本発明の各実施形態に共通する情報処理システム全体のソフトウェアの構成例を説明するための図である。図２は、情報処理装置１００のＣＰＵ１０２やＲＡＭ１０４、あるいは外部記憶装置１０５などの各ハードウェア上で動作するソフトウェアの構成例を表す。なお、これらの各モジュールにおける処理は、ＣＰＵ１０２の命令により、ＲＯＭ１０３や外部記憶装置１０５に格納されているプログラムを読み出し、ＲＡＭ１０４をワークエリアとして所定の処理を実行することで実現する。また、所定の処理を実行することで生成される全ての情報は、ＲＡＭ１０４もしくは外部記憶装置１０５に格納する。なお、このような各モジュールにおける処理は、以降でも同様であるため、以降では記載を省略する。
【００１８】
図２に示すソフトウェア構成は説明の便宜上、階層構造で表現されているが、必ずしも上位層と下位層が明確になっているわけではなく、機能によっては並列な関係をとりうる。つまり、本発明のソフトウェア構造の様態は、この形式に限定されるものではない。
【００１９】
ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）２００は、プロセスの管理、メモリ管理、入出力管理を実行する。Ｎａｔｉｖｅアプリ２０１は、コピー等、機器の基本的な機能を実現するプログラムである。Ｊａｖａソフト部２０２は、ＪａｖａＶＭ２０３、アプリケーションプラットフォーム２０４、アプリケーションＡ２０５、アプリケーションＢ２０６、およびＪａｖａエージェント２０８から構成される。
【００２０】
ＪａｖａＶＭ２０３は、Ｊａｖａプログラムを実行する仮想マシンである。アプリケーションプラットフォーム２０４は、単一のＪａｖａＶＭ２０３上で少なくとも一つ以上のアプリケーションプログラムの起動、停止、インストール、アンインストールといったアプリケーションのライフサイクルの管理を行うプログラムである。
【００２１】
アプリケーションＡ２０５、アプリケーションＢ２０６は、アプリケーションプラットフォーム２０４上で動作するアプリケーションプログラムである。アプリケーションプラットフォーム２０４、アプリケーションＡ２０５、およびアプリケーションＢ２０６は、ＪａｖａＶＭ２０３から一つのＪａｖａアプリケーション２０７として処理される。Ｊａｖａエージェント２０８は、ＪａｖａＶＭ２０３によってロードされ、アプリケーションプラットフォーム２０４がロードするクラスの監視等を行う。
【００２２】
図３は、Ｊａｖａソフト部２０２を構成するモジュールの一例を示す。ＪａｖａＶＭ２０３は、バイトコード実行部３０１、ヒープメモリ３０３、およびシステムクラスローダ３０４を備える。
【００２３】
バイトコード実行部３０１は、Ｊａｖａ（登録商標）のプログラムコードであるバイトコードを解釈し、実行する。オブジェクト生成部３０２は、バイトコード実行部３０１で実行されるプログラムコードの指示に従い、クラスをインスタンス化してＪａｖａオブジェクトを生成する。ヒープメモリ３０３は、ＪａｖａＶＭ２０３が管理するメモリ領域であり、Ｊａｖａプログラムの実行によって生成されたＪａｖａオブジェクトを保持する。システムクラスローダ３０４は、ＪａｖａＶＭ２０３の管理するクラスのロードを行う。ＪａｖａＶＭ２０３の管理するクラスにはアプリケーションプラットフォーム２０４とＪａｖａエージェント２０８も含まれる。
【００２４】
アプリケーションプラットフォーム２０４は、アプリケーション管理部３０５、アプリケーションメモリ管理部３０６、およびアプリ用クラスローダ管理部３０８を備える。アプリケーション管理部３０５は、アプリケーションの起動、停止、インストール、アンインストールといったアプリケーションのライフサイクルの管理を行う。アプリケーションメモリ管理部３０６は、アプリケーション毎にオブジェクト管理テーブル３０７の生成およびその管理を行い、アプリケーション毎のメモリ使用量（記憶領域に対する消費量）を管理する。オブジェクト管理テーブル３０７は、各アプリケーションに対応付けて生成されて記憶部に保持され、アプリケーションが生成するＪａｖａオブジェクトを管理する。
【００２５】
アプリ用クラスローダ管理部３０８は、アプリ用クラスローダ管理テーブル３０９を備え、アプリケーション毎のアプリ用クラスローダ３１０の管理を行う。そのため、アプリケーションを情報処理装置１００の外部記憶装置１０５にインストールする時、システムクラスローダ３０４は、アプリ用クラスローダ３１０のクラスをロードして、アプリ用クラスローダ３１０を生成する。アプリ用クラスローダ３１０は、外部記憶装置１０５に記憶されているアプリケーションＡクラスファイル３１１からクラスファイルを読み込み、クラスのロードを行う。
【００２６】
Ｊａｖａエージェント２０８は、クラスロード監視部３１３とバイトコード挿入部３１２を備える。クラスロード監視部３１３は、システムクラスローダ３０４がクラスファイルを取得するのを検知し、バイトコード挿入部３１２を実行する。バイトコード挿入部３１２は、システムクラスローダ３０４が取得したクラスファイルのバイトコードに、さらにバイトコードを挿入して、新しいクラスファイルに変換する。つまり、バイトコード実行部３０１は、この新しいクラスファイルのバイトコードを解釈し、実行する。
【００２７】
表１は、オブジェクト管理テーブル３０７の構成例を示す。オブジェクト管理テーブル３０７は、生成オブジェクトとメモリ使用量とを対として管理する。オブジェクト管理テーブル３０７は、アプリケーションメモリ管理部３０６によってアプリケーション毎に生成される。生成オブジェクトは、アプリケーションが生成するＪａｖａオブジェクトを参照する。メモリ使用量は、生成オブジェクトが使用しているメモリのサイズである。
【００２８】
【表１】
0006548379.tif 000002
【００２９】
表２は、アプリ用クラスローダ管理テーブル３０９の構成例を示す。アプリ用クラスローダ管理テーブル３０９は、アプリケーションの識別子であるアプリケーションＩＤとそのアプリケーションが使用するアプリ用クラスローダ３１０とを対として管理する。
【００３０】
【表２】
0006548379.tif 000003
【００３１】
［処理概要］
図４は、クラスＸのクラスファイル４０１に含まれるＪａｖａオブジェクトを生成するバイトコードの後に、バイトコード挿入部３１２がオブジェクト管理テーブル生成処理を実行するバイトコードを新しく挿入する場合の一例を示す。
【００３２】
外部記憶装置１０５に記憶しているクラスＸのクラスファイル４０１のバイトコード４０２は、オブジェクト生成時に実行する処理のバイトコードである。以降、バイトコード挿入部３１２がバイトコードを挿入する前の、クラスファイルのバイトコードを「オリジナルのバイトコード」と呼ぶ。クラスＸのクラスファイル４０１がシステムクラスローダ３０４に読み込まれると、クラスロード監視部３１３がそれを検知する。その後、バイトコード挿入部３１２は、オリジナルのバイトコードの後に、オブジェクト管理テーブル生成処理を実行するバイトコードを新しく挿入する。そして、バイトコード挿入部３１２は、オリジナルのバイトコードと挿入後のバイトコード４０３をバイトコード実行部３０１に渡す。このバイトコードを挿入する処理により、外部記憶装置１０５にあるクラスＸのクラスファイル４０１に変化はない。しかし、バイトコード実行部３０１は、オブジェクト管理テーブル生成処理を含むクラスファイルとしてバイトコード４０４を解釈し、実行する。オブジェクト生成部３０２は、バイトコード実行部３０１が実行する命令に従い、クラスＸをインスタンス化してＪａｖａオブジェクトｘ４０５を生成し、ヒープメモリ３０３に記憶させる。そして、オブジェクト生成時の処理を実行した後、オブジェクト生成部３０２は、アプリケーションメモリ管理部３０６にオブジェクト管理テーブル３０７を生成させる。
【００３３】
次に本実施形態のメモリ使用量の計測を行う処理の流れについて、例を用いて簡単に説明する。
【００３４】
図５は、操作パネル１１４が表示する画面の一例を示す図である。操作パネル１１４の画面には、アプリケーションＡ２０５を実行するためのアプリアイコン５０１が表示されている。ユーザが操作パネル１１４のアプリアイコン５０１を選択すると、パネル制御部１１０がそれを検知して、ＣＰＵ１０２にアプリケーションＡ２０５を実行するように指示する。アプリケーションＡ２０５が実行されると、アプリケーションＡ２０５は、オブジェクト生成部３０２にクラスをインスタンス化してＪａｖａオブジェクトを生成するように命令する。アプリケーションメモリ管理部３０６は、オブジェクト生成部３０２がＪａｖａオブジェクトを生成した後に、アプリケーションメモリ管理部３０６にあるオブジェクト管理テーブル３０７に生成したＪａｖａオブジェクトを追加する。
【００３５】
生成したＪａｖａオブジェクトを追加する様子を図６に示す。例として、アプリケーションＡ２０５の実行中に、クラスＡ６０１をインスタンス化して、ｏｂｊｅｃｔＡ００１、ｏｂｊｅｃｔＡ００２、・・・、ｏｂｊｅｃｔＡ１００というＪａｖａオブジェクトを順に生成するものとする。ここで、クラスＡ６０１は変数ｖａｌやメソッドｆｏｏ（）が定義されており、ｏｂｊｅｃｔＡ００１やｏｂｊｅｃｔＡ００２などを生成する際には、これらの変数やメソッドも定義される。図６（ａ）に示すように、オブジェクト生成部３０２は、クラスＡ６０１をインスタンス化してｏｂｊｅｃｔＡ００１を生成する。そして、オブジェクト生成部３０２は、ｏｂｊｅｃｔＡ００１をアプリケーションメモリ管理部３０６に渡す。
【００３６】
アプリケーションメモリ管理部３０６は、ｏｂｊｅｃｔＡ００１を受け取ると、ｏｂｊｅｃｔＡ００１に関する情報をオブジェクト管理テーブル３０７に追加する。同様に、ｏｂｊｅｃｔＡ００２が生成されると、ｏｂｊｅｃｔＡ００２に関する情報がオブジェクト管理テーブル３０７に追加され、図６（ｂ）に示すようになる。このようにして、アプリケーションＡ２０５の実行中に、生成したＪａｖａオブジェクトの情報をオブジェクト管理テーブル３０７に追加する。そして、アプリケーションメモリ管理部３０６は、オブジェクト管理テーブル３０７に含まれるＪａｖａオブジェクトのメモリ使用量を集計する。図６（ｃ）は、メモリ使用量を集計した結果を示す。アプリケーション管理部３０５は、このメモリ使用量の集計結果を参照することにより、アプリケーション実行中にアプリケーションＡ２０５のメモリ使用量を取得することができる。
【００３７】
［処理フロー］
次に本実施形態の処理の流れについて、図７〜図９を用いて説明する。
【００３８】
（アプリケーションインストール処理）
図７は、アプリケーションプラットフォーム２０４のアプリケーション管理部３０５がアプリケーションＡ２０５をインストールする際の処理を示すフローチャートである。本フローチャートは、ＣＰＵ１０２が外部記憶装置１０５等に格納されたプログラムを読み出して実行することにより、各処理主体の部位として機能させることで実現する。
【００３９】
Ｓ７０１にて、情報処理装置１２０がアプリケーションＡ２０５のインストールを命令すると、ネットワーク１１６を介して、ネットワークＩ／Ｆ制御部１１１がその命令を受けとり、ＣＰＵ１０２にアプリケーションＡ２０５のインストールを命令する。ＣＰＵ１０２がアプリケーションＡ２０５のインストール命令を受けると、アプリケーション管理部３０５はアプリケーションＡ２０５のインストールを開始する。
【００４０】
アプリケーションＡ２０５のインストールを開始すると、Ｓ７０２にて、アプリ用クラスローダ管理部３０８は、アプリケーションＡ２０５のアプリ用クラスローダ３１０をアプリ用クラスローダ管理テーブル３０９に追加する。この時、アプリケーションＡ２０５のアプリ用クラスローダ３１０がまだロードされていないため、システムクラスローダ３０４は、外部記憶装置１０５にあるアプリ用クラスローダ３１０のクラスファイルを読み込む。
【００４１】
Ｓ７０３にて、クラスロード監視部３１３は、Ｓ７０２のクラスファイル読込を検知して、バイトコード挿入部３１２にバイトコードの挿入命令を送る。バイトコード挿入部３１２は、アプリ用クラスローダ３１０のクラスファイルにあるＪａｖａオブジェクトを生成する処理のバイトコードの後に、オブジェクト管理テーブル生成処理のバイトコードを挿入する。このオブジェクト管理テーブル生成処理は、オブジェクト生成部３０２がＳ７０８を実行する処理である。なお、オブジェクト管理テーブル生成処理のバイトコードは、Ｊａｖａオブジェクトを生成する処理のバイトコードの前に挿入されても良い。バイトコード挿入部３１２がバイトコードを挿入し終えると、Ｓ７０４に進む。
【００４２】
Ｓ７０４にて、バイトコード実行部３０１は、バイトコード挿入部３１２から渡されるバイトコードを解釈して実行する。
【００４３】
Ｓ７０５にて、オブジェクト生成部３０２は、Ｓ７０４で実行される命令に従い、アプリ用クラスローダ３１０のクラスをインスタンス化してＪａｖａオブジェクトを生成する。
【００４４】
Ｓ７０６にて、オブジェクト生成部３０２は、アプリ用クラスローダ３１０のクラスファイルに含まれるＪａｖａオブジェクト生成時の処理を実行する。
【００４５】
Ｓ７０７にて、オブジェクト生成部３０２は、オブジェクト管理テーブル生成処理を実行する。なお、Ｓ７０３においてＪａｖａオブジェクトを生成する処理のバイトコードの前にオブジェクト管理テーブル生成処理のバイトコードを挿入した場合は、Ｓ７０７、Ｓ７０６の順で処理が実行される。
【００４６】
Ｓ７０８にて、アプリケーションメモリ管理部３０６は、アプリケーションＡ２０５のオブジェクト管理テーブル３０７を生成する。この時、オブジェクト生成部３０２は、生成したアプリ用クラスローダ３１０をアプリケーションメモリ管理部３０６に渡す。アプリケーションメモリ管理部３０６は、渡されたアプリ用クラスローダ３１０に対応するオブジェクト管理テーブル３０７を生成する。アプリ用クラスローダ３１０をインスタンス化したＪａｖａオブジェクトは、アプリケーション毎に生成される。そのため、アプリ用クラスローダ３１０とオブジェクト管理テーブル３０７とが一対一に対応していれば、実質上は、オブジェクト管理テーブル３０７がアプリケーション毎に生成されることになる。
【００４７】
Ｓ７０９にて、アプリケーション管理部３０５は、アプリ用クラスローダ３１０の生成以外の他のインストール処理を実行する。他のインストール処理には、例えば、アプリ用クラスローダ管理部３０８が、アプリ用クラスローダ管理テーブル３０９に、アプリケーションＩＤとアプリ用クラスローダを追加する処理などがある。
【００４８】
Ｓ７１０にて、アプリケーション管理部３０５は、アプリケーションＡ２０５のインストールを終了する。
【００４９】
（アプリケーション実行処理）
次に、インストールしたアプリケーションＡ２０５を起動する場合について説明する。アプリケーションＡ２０５の起動は、ユーザが情報処理装置１２０から起動を命令すると、ネットワーク１１６を介して、ネットワークＩ／Ｆ制御部がその命令を受けとり、ＣＰＵ１０２にアプリケーションＡ２０５の起動を命令する。ＣＰＵ１０２がアプリケーションＡ２０５の起動命令を受けると、アプリケーション管理部３０５はアプリケーションＡ２０５を起動する。アプリケーションＡ２０５が起動されると、パネル制御部１１０が操作パネル１１４にアプリケーションＡ２０５のアプリアイコン５０１を表示する。ユーザはこのアプリアイコン５０１を選択することにより、アプリケーションＡ２０５を実行させる。
【００５０】
図８は、インストールしたアプリケーションＡ２０５を実行開始して終了するまでの処理を示すフローチャートである。本フローチャートは、ＣＰＵ１０２が外部記憶装置１０５等に格納されたプログラムを読み出して実行することにより、各処理主体の部位として機能させることで実現する。
【００５１】
Ｓ８０１にて、ユーザが操作パネル１１４にあるアプリケーションＡ２０５のアプリアイコン５０１を選択する。アプリアイコン５０１が選択されると、ネットワーク１１６を介して、ネットワークＩ／Ｆ制御部１１１がその命令を受けとり、ＣＰＵ１０２にアプリケーションＡ２０５の処理を実行開始するように命令する。そして、アプリケーションＡ２０５は、アプリケーションＡ２０５の処理を実行開始する。
【００５２】
Ｓ８０２にて、アプリケーションＡ２０５は、処理の実行中に、クラスをインスタンス化してＪａｖａオブジェクトを生成するか否かを判定する。Ｊａｖａオブジェクトを生成する場合は（Ｓ８０２にてＹＥＳ）Ｓ８０３に進み、Ｊａｖａオブジェクトを生成しない場合は（Ｓ８０２にてＮＯ）Ｓ８１０に進む。
【００５３】
Ｓ８０３にて、アプリ用クラスローダ３１０は、Ｊａｖａオブジェクトを生成する前に、そのＪａｖａオブジェクトのクラスがロードされているか否かを判定する。クラスがロードされている場合は（Ｓ８０３にてＹＥＳ）Ｓ８０６に進み、クラスがロードされていない場合は（Ｓ８０３にてＮＯ）Ｓ８０４に進む。
【００５４】
Ｓ８０４にて、生成するＪａｖａオブジェクトのクラスがロードされていない場合、アプリ用クラスローダ３１０は、そのクラスのロードを行う。アプリ用クラスローダ３１０は、外部記憶装置１０５にあるアプリケーションＡクラスファイル３１１からクラスファイルを読み込む。
【００５５】
Ｓ８０５にて、クラスロード監視部３１３は、Ｓ８０４のクラスファイル読込を検知すると、バイトコード挿入部３１２にバイトコードの挿入命令を送る。バイトコード挿入部３１２は、クラスファイルにあるＪａｖａオブジェクトを生成する処理のバイトコードの後に、オブジェクト集計処理のバイトコードを挿入する。オブジェクト集計処理は、オブジェクト生成部３０２がＳ８０９にて実行する処理である。なお、オブジェクト集計処理を実行するバイトコードは、Ｊａｖａオブジェクトを生成する処理のバイトコードの前に挿入されても良い。バイトコード挿入部３１２がバイトコードを挿入し終えると、クラスのロードが終わり、Ｓ８０６に進む。
【００５６】
Ｓ８０６にて、バイトコード実行部３０１は、バイトコード挿入部３１２に渡されるバイトコードを解釈して実行する。
【００５７】
Ｓ８０７にて、オブジェクト生成部３０２は、Ｓ８０６で実行される命令に従い、クラスをインスタンス化してＪａｖａオブジェクトを生成する。
【００５８】
Ｓ８０８にて、オブジェクト生成部３０２は、クラスファイルに含まれるＪａｖａオブジェクト生成時の処理を実行する。
【００５９】
Ｓ８０９にて、でオブジェクト生成部３０２は、オブジェクト集計処理を実行する。なお、Ｓ８０５でＪａｖａオブジェクトを生成する処理のバイトコードの前にオブジェクト集計処理のバイトコードを挿入した場合は、Ｓ８０９、Ｓ８０８の順で処理が実行される。オブジェクト集計処理の実行が終了すると、Ｓ８１０に進む。
【００６０】
Ｓ８１０にて、アプリケーションＡ２０５は、処理が終了したか否かを判定する。処理を終了していない場合は（Ｓ８１０にてＮＯ）Ｓ８０２に進み、終了した場合は（Ｓ８１０にてＹＥＳ）Ｓ８１１に進む。
【００６１】
Ｓ８１１にて、アプリケーションＡ２０５は、処理を終了する。
【００６２】
次に、Ｓ８０１〜Ｓ８１１の流れを具体的に説明する。例として、アプリケーションＡ２０５は次の３つの処理を実行するアプリケーションとする。１つ目の処理で、クラスＡ６０１をインスタンス化したｏｂｊｅｃｔＡ００１を生成する。ここでは、クラスＡ６０１はまだアプリ用クラスローダ３１０にロードされていないとする。２つ目の処理で、クラスＡ６０１をインスタンス化したｏｂｊｅｃｔＡ００２を生成する。３つ目の処理で、ｏｂｊｅｃｔＡ００１にある変数ｖａｌの値を“０”にする（ｖａｌ＝０）。
【００６３】
ユーザが操作パネル１１４に表示されているアプリアイコン５０１を選択すると、ＣＰＵ１０２はアプリケーションＡ２０５の処理を実行する。１つ目の処理で、アプリケーションＡ２０５がｏｂｊｅｃｔＡ００１を生成するので、Ｓ８０２はＹｅｓになる。１つ目の処理では、まだクラスＡ６０１がロードされていないので、Ｓ８０３はＮｏになり、アプリ用クラスローダ３１０はクラスＡ６０１をロードする。クラスＡ６０１をロードする時、バイトコード挿入部３１２は、クラスＡ６０１のバイトコードにオブジェクト集計処理のバイトコードを挿入する。バイトコードを挿入した後、クラスのロードを終了すると、オブジェクト生成部３０２はｏｂｊｅｃｔＡ００１を生成し、オブジェクト集計処理を実行する。オブジェクト集計処理が終了した後、まだアプリケーションＡ２０５の処理は終わっていないため、Ｓ８１０はＮｏになり、アプリケーションＡ２０５は２つ目の処理を実行する。２つ目の処理で、アプリケーションＡ２０５がｏｂｊｅｃｔＡ００２を生成するので、Ｓ８０２はＹｅｓになる。１つ目の処理ですでにクラスＡ６０１をロードしているので、Ｓ８０３はＹｅｓになり、オブジェクト生成部３０２がｏｂｊｅｃｔＡ００２を生成する。１つ目の処理で、クラスＡ６０１にはオブジェクト集計処理のバイトコードが挿入されているので、オブジェクト生成部３０２はオブジェクト集計処理を実行する。オブジェクト集計処理が終了した後、まだアプリケーションＡ２０５の処理は終わっていないので、Ｓ８１０はＮｏになり、アプリケーションＡ２０５は３つ目の処理を実行する。３つ目の処理で、アプリケーションＡ２０５はＪａｖａオブジェクトを生成しないので、Ｓ８０２はＮｏになる。そして、アプリケーションＡ２０５の処理が全て終了するので、Ｓ８１０はＹｅｓになる。Ｓ８１０はＹｅｓになると、アプリケーションＡ２０５は処理の実行を終了する。
【００６４】
（オブジェクト集計処理）
図９は、Ｓ８０９でオブジェクト生成部３０２がオブジェクト集計処理を実行する際の処理を示すフローチャートである。本フローチャートは、ＣＰＵ１０２が外部記憶装置１０５等に格納されたプログラムを読み出して実行することにより、各処理主体の部位として機能させることで実現する。
【００６５】
Ｓ９０１にて、オブジェクト生成部３０２は、オブジェクト集計処理を実行開始する。
【００６６】
Ｓ９０２にて、アプリケーションＡ２０５は、Ｓ８０７で生成されたＪａｖａオブジェクトがどのアプリケーションの処理から生成されたかを識別する。
【００６７】
Ｓ９０３にて、アプリケーションメモリ管理部３０６は、Ｓ９０２で識別されたアプリケーション用のオブジェクト管理テーブル３０７に、Ｓ８０７で生成されたＪａｖａオブジェクトを追加する。
【００６８】
Ｓ９０４にて、アプリケーションメモリ管理部３０６は、オブジェクト管理テーブル３０７に格納されているメモリ使用量を集計する。
【００６９】
Ｓ９０５にて、オブジェクト生成部３０２は、オブジェクト集計処理の実行を終了する。
【００７０】
以上、本実施形態では、アプリケーションＡ２０５の実行中に、バイトコード挿入部３１２が、アプリケーション単体のメモリ使用量を計測するためのバイトコードを挿入する。そして、アプリケーションがＪａｖａオブジェクトを生成すると、オブジェクト生成部３０２は挿入したバイトコードの処理も実行し、アプリケーションメモリ管理部３０６がアプリケーション毎のメモリ使用量を計測する。
【００７１】
アプリケーション毎のメモリ使用量を計測することが可能となることにより、例えば次のようなことが可能となる。開発者が既存のアプリケーション（例えば、ＪａｖａＶＭ）に修正を加えずに、アプリケーション毎のメモリ使用量を、アプリケーション実行中に情報処理装置上で計測することができる。そして、情報処理装置上でメモリ計測が行えるため、アプリケーションが最大メモリ使用量などを宣言している場合、宣言しているメモリ使用量と計測値したメモリ使用量を比較して、メモリリークを起こしているアプリケーションを特定することができる。そのため、システム全体が停止する前にメモリリークを起こしているアプリケーションを特定し、停止できるようになり、システムの堅牢性を向上することができる。
【００７２】
＜第二の実施形態＞
本発明の第二の実施形態について説明する。第一の実施形態では、アプリケーションＡ２０５の処理の実行中に、Ｊａｖａオブジェクトを生成した場合に、オブジェクト集計処理を実行していた。しかし、オブジェクト集計処理の実行中（Ｓ８０９、Ｓ９０１〜Ｓ９０５）にアプリケーションＡ２０５あるいはアプリケーションメモリ管理部３０６がＪａｖａオブジェクトを生成すると、再度、オブジェクト集計処理を実行してしまう。この場合、２度目のオブジェクト集計処理の実行中にまたＪａｖａオブジェクトを生成すると、またオブジェクト集計処理を実行（Ｓ８０９、Ｓ９０１〜Ｓ９０５）してしまう。つまり、Ｊａｖａオブジェクトの生成とオブジェクト集計処理の繰り返しになってしまい、アプリケーションＡ２０５の処理が進まなくなるという問題がある。
【００７３】
そこで本実施形態では、オブジェクト集計処理の実行中か否かを、アプリケーションメモリ管理部３０６が判定する処理を行う。そして、オブジェクト集計処理が実行中の場合、生成するＪａｖａオブジェクトをオブジェクト管理テーブル３０７に追加しない構成とする。以降、第一の実施形態と異なる点のみを図１０〜図１３を用いて説明する。なお、以降では、オブジェクト生成処理の実行中に生成するＪａｖａオブジェクトのクラスを「特別クラス」と呼ぶ。
【００７４】
［ソフトウェア構成］
図１０は、第二の実施形態のアプリケーションメモリ管理部３０６が特別クラスフラグ１００１を管理するソフトウェア構成例を示す。特別クラスフラグ１００１は、オブジェクト集計処理の実行中であるか否かを判定するためのフラグである。特別クラスフラグ１００１は、基本的には「ＦＡＬＳＥ」であるが、オブジェクト集計処理を実行している間は「ＴＲＵＥ」になる。
【００７５】
［処理フロー］
図１１は、本実施形態に係る処理フローであり、図８にて示した処理フローに対し、Ｓ８０５とＳ８０６の間に、Ｓ１１０１とＳ１１０２を加えている。
【００７６】
Ｓ１１０１にて、クラスロード監視部３１３は、Ｓ８０５のオブジェクト集計処理のバイトコードを挿入した後、ロードするクラスが特別クラスか否かを判定する。特別クラスである場合は（Ｓ１１０１にてＹＥＳ）、Ｓ１１０２に進み、特別クラスでない場合は（Ｓ１１０１にてＮＯ）、Ｓ８０６に進む。
【００７７】
Ｓ１１０２にて、バイトコード挿入部３１２は、特別クラスのクラスファイルに含まれるＪａｖａオブジェクトを生成する処理のバイトコードの後に、特別クラス対策処理のバイトコードを挿入する。特別クラス対策処理は簡単に説明すると、オブジェクト生成部３０２が特別クラスフラグ１００１を判定し、判定結果に応じてオブジェクト集計処理を繰り返さないように制御する処理である。特別クラス対策処理のバイトコードが挿入されると、Ｓ８０６に進む。
【００７８】
クラスファイルの処理の後（Ｓ８０８）、Ｓ１１０３にて、オブジェクト生成部３０２は、Ｓ１１０２の特別クラス対策処理のバイトコードが挿入されると、第一の実施形態のＳ８０９の代わりにオブジェクト集計処理と特別クラス対策処理を実行する。Ｓ１１０３が終了すると、Ｓ８１０に進む。
【００７９】
図１２は、Ｓ１１０３における、オブジェクト生成部３０２がオブジェクト集計処理と特別クラス対策処理を実行する際のフローチャートである。
【００８０】
Ｓ１２０１にて、オブジェクト生成部３０２は、オブジェクト集計処理と特別クラス対策処理の実行を開始する。
【００８１】
Ｓ１２０２〜Ｓ１２０４にて、第一の実施形態のＳ９０２〜９０４に加えて、オブジェクト生成部３０２は、特別クラス対策処理を実行する。詳細を図１３で説明する。なお、Ｓ１２０２〜Ｓ１２０４の特別クラス対策処理は同じであるため、図１３ではＳ１２０２〜Ｓ１２０４をまとめて、共通部分の説明をする。
【００８２】
Ｓ１２０５にて、オブジェクト生成部３０２は、オブジェクト集計処理と特別クラス対策処理の実行を終了する。
【００８３】
図１３は、図１２のＳ１２０２〜Ｓ１２０４を実行した際の処理を示すフローチャートである。ここで、クラスロード監視部３１３、バイトコード挿入部３１２、バイトコード実行部３０１、およびオブジェクト生成部３０２の処理は、基本的には図８の処理と同じである。差異としては、クラスロード監視部３１３がＳ１１０１を実行する点と、バイトコード挿入部３１２がＳ１１０２を実行する点と、オブジェクト生成部３０２がＳ１１０３、Ｓ１３０２〜Ｓ１３０４を実行する点である。なお、Ｓ１１０１〜Ｓ１１０３は上述した処理と同じであるため、ここでの説明は省略する。
【００８４】
Ｓ１３０１にて、アプリケーションＡ２０５は、Ｓ１２０２の処理を開始する。あるいは、アプリケーションメモリ管理部３０６は、Ｓ１２０３もしくはＳ１２０４の処理を開始する。ここで、アプリケーションＡ２０５が実行を開始するか、アプリケーションメモリ管理部３０６が実行を開始するかは、Ｓ１２０２〜Ｓ１２０４のどの処理の実行開始なのかによって決まる。処理が開始されるとＳ８０２に進む。
【００８５】
Ｓ１３０２にて、オブジェクト生成部３０２は、Ｊａｖａオブジェクト生成時の処理を実行した後に、アプリケーションメモリ管理部３０６にある特別クラスフラグ１００１の判定を行う。特別クラスフラグ１００１が「ＴＲＵＥ」の場合は（Ｓ１３０２にてＹＥＳ）Ｓ１３０５に進み、「ＦＡＬＳＥ」の場合は（Ｓ１３０２にてＮＯ）Ｓ１３０３に進む。
【００８６】
Ｓ１３０３にて、オブジェクト生成部３０２は、特別クラスフラグ１００１を「ＴＲＵＥ」にする。その後、Ｓ１１０３に進む。
【００８７】
Ｓ１１０３の処理を終了すると、Ｓ１３０４にて、オブジェクト生成部３０２は、特別クラスフラグ１００１を「ＦＡＬＳＥ」にする。特別クラスフラグ１００１を「ＦＡＬＳＥ」にすると、特別クラス対策処理が終了し、Ｓ１３０５に進む。
【００８８】
Ｓ１３０５にて、アプリケーションＡ２０５は、Ｓ１２０２の処理を終了するか否かを判定する。あるいはアプリケーションメモリ管理部３０６は、Ｓ１２０３もしくはＳ１２０４の処理を終了するか否かを判定する。ここで、処理がまだ終わっていない場合は（Ｓ１３０５にてＮＯ）Ｓ８０２に進み、処理が全て終わった場合は（Ｓ１３０５にてＹＥＳ）Ｓ１３０６に進む。
【００８９】
Ｓ１３０６にて、アプリケーションＡ２０５は、Ｓ１２０２の処理の実行を終了する。あるいは、アプリケーションメモリ管理部３０６は、Ｓ１２０３もしくはＳ１２０４の処理の実行を終了する。
【００９０】
第二の実施形態では、バイトコード挿入部３１２が、オブジェクト集計処理の実行中に生成するＪａｖａオブジェクトのクラスに、特別クラスフラグを判定するためのバイトコードを挿入する。そして、オブジェクト集計処理の実行中に、アプリケーションＡ２０５、あるいはアプリケーションメモリ管理部３０６がＪａｖａオブジェクトを生成すると、オブジェクト生成部３０２は挿入したバイトコードの処理も実行する。よって、Ｊａｖａオブジェクトの生成とオブジェクト集計処理の実行を繰り返さないようにできる。
【００９１】
＜第三の実施形態＞
本発明の第三の実施形態について説明する。第一の実施形態では、情報処理装置１００に複数のアプリがインストールされている場合、全てのアプリケーションに対して、同じようにメモリ使用量を計測している。しかし、全てのアプリケーションに対してではなく、指定したアプリケーションのみに対して、メモリ使用量の計測を行っても良い。指定するアプリケーションとして、例えば、情報処理装置１００に最初からインストールされているようなアプリケーションではなく、ユーザが後からインストールするアプリケーションのみを指定する場合がある。なお、以降では、情報処理装置１００に最初からインストールされているようなアプリケーションを「システムアプリ」と呼ぶ。そして、本実施形態では、システムアプリである場合には、メモリ使用量の計測・集計を行わないこととする。
【００９２】
上記の実施形態では、全てのＪａｖａオブジェクトを生成する処理のバイトコードの後に、オブジェクト集計処理のバイトコードを挿入し、Ｊａｖａオブジェクトの生成時にオブジェクト集計処理を実行する。そして、オブジェクト集計処理の中で、オブジェクト管理テーブル３０７に、生成したＪａｖａオブジェクトに関する情報を追加する。しかし、全てのＪａｖａオブジェクト生成処理のバイトコードの後に、オブジェクト集計処理のバイトコードを挿入すると、開始する全てのアプリケーションに対して、メモリ使用量を計測してしまう。
【００９３】
本実施形態では、オブジェクト集計処理の中で、生成したＪａｖａオブジェクトに関する情報をオブジェクト管理テーブルに追加する前に、そのＪａｖａオブジェクトを生成しようとするアプリケーションが、計測する対象であるか否かを判定する処理を加える。そして、Ｊａｖａオブジェクトを生成するアプリケーションが計測対象である場合に、生成するＪａｖａオブジェクトの情報をオブジェクト管理テーブルに追加し、アプリケーションが計測対象でなかった場合は、オブジェクト集計処理を終了する。以降、第一の実施形態と異なる点のみを図１４〜図１６を用いて説明する。
【００９４】
［ソフトウェア構成］
図１４は、第三の実施形態のアプリケーションメモリ管理部３０６が計測フラグ１４０１を管理するソフトウェア構成例を示す。計測フラグ１４０１は、Ｊａｖａオブジェクトを生成しようとするアプリケーションが計測対象であるか否かを判定するためのフラグである。計測フラグ１４０１はアプリケーション毎に定義され、基本的には「ＴＲＵＥ」であるが、情報処理装置１００にインストールしたアプリケーションがシステムアプリである場合は「ＦＡＬＳＥ」になる。
【００９５】
［処理フロー］
図１５は、本実施形態に係る処理フローであり、図７で示した処理フローに対し、Ｓ７０３とＳ７０４の間にＳ１５０１を、Ｓ７０８とＳ７０９の間にＳ１５０２〜Ｓ１５０５を加えている。
【００９６】
Ｓ１５０１にて、バイトコード挿入部３１２は、オブジェクト管理テーブル生成処理のバイトコードの後に、計測フラグ定義処理のバイトコードを挿入する。このバイトコードの挿入は、Ｓ７０３のオブジェクト管理テーブル生成処理のバイトコードの挿入の後に行う。計測フラグ定義処理は、アプリケーションメモリ管理部３０６に計測フラグ１４０１を定義する処理である。バイトコードを挿入すると、Ｓ７０４に進む。
【００９７】
オブジェクト管理テーブル３０７を生成した後（Ｓ７０８）、Ｓ１５０２にて、オブジェクト生成部３０２は、計測フラグ定義処理を実行する。
【００９８】
Ｓ１５０３にて、アプリケーション管理部３０５は、インストールするアプリケーションがシステムアプリか否かを判定する。システムアプリである場合は（Ｓ１５０３にてＹＥＳ）Ｓ１５０４に進み、システムアプリでない場合は（Ｓ１５０３にてＮＯ）Ｓ１５０５に進む。
【００９９】
Ｓ１５０４にて、アプリケーションメモリ管理部３０６は、初期値を「ＦＡＬＳＥ」として計測フラグ１４０１を定義する。その後、Ｓ７０９に進む。
【０１００】
Ｓ１５０５にて、アプリケーションメモリ管理部３０６は、初期値を「ＴＲＵＥ」として計測フラグ１４０１を定義する。その後、Ｓ７０９に進む。
【０１０１】
図１６は、本実施形態に係るオブジェクト集計処理のフローチャートであり、図９にて示した処理フローに対し、Ｓ９０２とＳ９０３の間にＳ１６０１を加えている。
【０１０２】
アプリケーションの識別を行った後（Ｓ９０２）、Ｓ１６０１にて、アプリケーションメモリ管理部３０６は、計測フラグ１４０１が「ＴＲＵＥ」か否かを判定する。計測フラグ１４０１が「ＴＲＵＥ」の場合は（Ｓ１６０１にてＹＥＳ）Ｓ９０３に進み、「ＦＡＬＳＥ」の場合は（Ｓ１６０１にてＮＯ）Ｓ９０５に進む。
【０１０３】
第三の実施形態では、Ｊａｖａオブジェクト生成処理のバイトコードの後に、計測フラグ定義処理のバイトコードを挿入する。また、オブジェクト集計処理の中に計測フラグ判定処理のバイトコードを挿入する。そして、そのＪａｖａオブジェクトを生成しようとするアプリケーションが計測する対象であるか否かを判定してから、生成したＪａｖａオブジェクトの情報をオブジェクト管理テーブルに追加する。この構成により、全てのアプリケーションに対してではなく、指定したアプリケーションのみに対して、メモリ使用量の計測を行うことができる。なお、本実施形態では、システムアプリを計測・集計の対象から外したが、これ以外にもユーザが新たにインストールしたアプリケーションのうち、計測・集計の対象から外すようにしてもよい。この場合、ＵＩ画面等を提供し、対象となるアプリケーションをユーザが指定できるようにしてもよい。
【０１０４】
＜第四の実施形態＞
本発明の第四の実施形態について説明する。第一の実施形態では、アプリケーションのメモリ使用量を計測している。その他にも、情報処理装置の他のリソースであるソケットやスレッド、あるいはファイルディスクリプタなどの計測を行っても良い。以降では、情報処理装置のメモリ以外のリソースであるスレッドやソケット、あるいはファイルディスクリプタなどを「計測対象リソース」と呼ぶ。
【０１０５】
上記の実施形態では、Ｊａｖａオブジェクトを生成する際に、オブジェクト集計処理を実行する。そして、オブジェクト集計処理の中で、生成したＪａｖａオブジェクトの情報をオブジェクト管理テーブルに追加し、そのメモリ使用量の集計を行う。しかし、メモリ使用量の集計しか行っていないため、他の計測対象リソースの使用量を計測することができない。
【０１０６】
そこで本実施形態では、オブジェクト管理テーブルに追加されているＪａｖａオブジェクトの情報を集計する際に、そのＪａｖａオブジェクトが計測対象リソースであるか否かを判定する処理を加える。そして、計測対象リソースである場合、計測対象リソースであるＪａｖａオブジェクトの数をカウントする。以降、第一の実施形態と異なる点のみを表３及び、図１７、図１８を用いて説明する。
【０１０７】
表３は、第一の実施形態のオブジェクト管理テーブル３０７（表１）に、計測対象リソースフラグを加えたオブジェクト管理テーブル３０７を示す表である。計測対象リソースフラグは、オブジェクト管理テーブル３０７に追加されているＪａｖａオブジェクトが計測対象リソースであるか否かを判定するためのフラグである。本実施形態では、アプリケーションメモリ管理部３０６は、計測対象リソースフラグを含むオブジェクト管理テーブル３０７を生成する。
【０１０８】
【表３】
0006548379.tif 000004
【０１０９】
計測対象リソースフラグは、スレッド、ソケット、ファイルディスクリプタのように計測対象リソース毎に定義される。計測対象リソースは、基本的に「ＦＡＬＳＥ」であるが、生成するＪａｖａオブジェクトが計測対象のリソースである場合には「ＴＲＵＥ」になる。例えば、表３に示すように、ｏｂｊｅｃｔＡ００２がソケットのクラスをインスタンス化したＪａｖａオブジェクトである場合、ｏｂｊｅｃｔＡ００２のソケットの計測対象リソースフラグが「ＴＲＵＥ」になる。同様に、ｏｂｊｅｃｔＡ００３がスレッドのクラスをインスタンス化したＪａｖａオブジェクトである場合、ｏｂｊｅｃｔＡ００３のスレッドの計測対象リソースフラグが「ＴＲＵＥ」になる。生成するＪａｖａオブジェクトが計測対処リソースでない場合は、ｏｂｊｅｃｔＡ００１のように計測対象リソースフラグが全て「ＦＡＬＳＥ」になる。なお、本実施形態では、スレッド、ソケット、ファイルディスクリプタを計測対象リソースの例として示しているが、これに限定するものではなく、情報処理装置が処理を実行する上で利用する他の種類のリソースを対象としても構わない。また、ＵＩ画面等を提供し、対象となるリソースをユーザが指定できるようにしてもよい。
【０１１０】
［処理フロー］
図１７は、本実施形態に係る処理フローであり、図８に示した処理フローに対し、Ｓ８０４とＳ８０６の間にＳ１７０１、Ｓ１７０２を、Ｓ８０８とＳ８１０の間にＳ１７０３〜Ｓ１７０６を加えている。
【０１１１】
クラスロード監視部３１３がクラスファイルの読み込みを検知すると、Ｓ１７０１にて、バイトコード挿入部３１２は、Ｊａｖａオブジェクトを生成する処理のバイトコードの後に、計測対象リソースフラグを定義する処理のバイトコードを挿入する。計測対象リソースフラグを定義する処理は、生成するＪａｖａオブジェクトが計測対象リソースであるか否かに従って、Ｊａｖａオブジェクトに計測対象リソースフラグの定義を行う処理である。バイトコードの挿入の後、Ｓ８０５に進む。
【０１１２】
Ｓ１７０２にて、バイトコード挿入部３１２は、Ｓ８０５のオブジェクト集計処理のバイトコードを挿入した後に、計測対象リソース集計処理のバイトコードを挿入する。計測対象リソース集計処理は、アプリケーションメモリ管理部３０６が、オブジェクト管理テーブル３０７にある値が「ＴＲＵＥ」の計測対象リソースフラグの数をカウントする処理である。バイトコードの挿入の後、Ｓ８０６に進む。
【０１１３】
Ｓ１７０３にて、オブジェクト生成部３０２は、Ｊａｖａオブジェクト生成処理を実行した後（Ｓ８０８）、生成するＪａｖａオブジェクトが計測対象リソースであるか否かを判定する。生成するＪａｖａオブジェクトが計測対象リソースである場合（Ｓ１７０３にてＹＥＳ）Ｓ１７０４に進み、計測対象リソースでない場合（Ｓ１７０３にてＮＯ）Ｓ１７０５に進む。
【０１１４】
Ｓ１７０４にて、オブジェクト生成部３０２は、初期値を「ＦＡＬＳＥ」として計測対象リソースフラグを定義する。その後、Ｓ１７０６に進む。
【０１１５】
Ｓ１７０５にて、オブジェクト生成部３０２は、初期値を「ＴＲＵＥ」として計測対象リソースフラグを定義する。その後、Ｓ１７０６に進む。
【０１１６】
Ｓ１７０２のリソース集計処理のバイトコードを挿入することで、Ｓ１７０６にて、オブジェクト生成部３０２は、第一の実施形態のＳ８０９の代わりに、オブジェクト集計処理とリソース集計処理を実行する。Ｓ１７０６が終了すると、Ｓ８１０に進む。
【０１１７】
（オブジェクト集計処理及びリソース集計処理）
図１８は、図１７のＳ１７０６において、オブジェクト生成部３０２がオブジェクト集計処理とリソース集計処理を実行する際の処理を示すフローチャートである。
【０１１８】
Ｓ１８０１にて、オブジェクト生成部３０２は、オブジェクト集計処理とリソース集計処理の実行を開始する。実行を開始すると、Ｓ９０２に進む。
【０１１９】
Ｓ９０４のメモリ使用量の集計をした後、Ｓ１８０２にて、アプリケーションメモリ管理部３０６は、オブジェクト管理テーブル３０７のうち、「ＴＲＵＥ」になっている計測対象フラグの数をカウントする。このカウントは計測対象リソースであるスレッド、ソケット、ファイルディスクリプタのそれぞれに対して行う。このカウントをした結果が、計測対象リソースの使用量の計測結果になる。計測対象リソースの集計を終了すると、Ｓ１８０３に進む。
【０１２０】
集計処理を終了すると、Ｓ１８０３にて、オブジェクト生成部３０２は、オブジェクト集計処理とリソース集計処理の実行を終了する。
【０１２１】
第四の実施形態では、Ｊａｖａオブジェクト生成時の処理のバイトコードの後に、計測対象リソースフラグ定義処理と計測対象リソース集計処理を挿入する。そして、そのＪａｖａオブジェクトが計測対象リソースであった場合、アプリケーションメモリ管理部がカウントして使用量を集計する。この構成により、メモリ使用量ではなく、他の計測対象リソースの使用量も計測することができる。
【０１２２】
＜その他の実施例＞
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【０１２３】
１０２…ＣＰＵ、１０３…ＲＯＭ、１０４…ＲＡＭ、１０５…外部記憶装置
【図１】
0006548379.tif 000005
【図２】
0006548379.tif 000006
【図３】
0006548379.tif 000007
【図４】
0006548379.tif 000008
【図５】
0006548379.tif 000009
【図６】
0006548379.tif 000010
【図７】
0006548379.tif 000011
【図８】
0006548379.tif 000012
【図９】
0006548379.tif 000013
【図１０】
0006548379.tif 000014
【図１１】
0006548379.tif 000015
【図１２】
0006548379.tif 000016
【図１３】
0006548379.tif 000017
【図１４】
0006548379.tif 000018
【図１５】
0006548379.tif 000019
【図１６】
0006548379.tif 000020
【図１７】
0006548379.tif 000021
【図１８】
0006548379.tif 000022