JP2012221147A - 計算機及びリソース管理方法 - Google Patents

計算機及びリソース管理方法 Download PDF

Info

Publication number
JP2012221147A
JP2012221147A JP2011085245A JP2011085245A JP2012221147A JP 2012221147 A JP2012221147 A JP 2012221147A JP 2011085245 A JP2011085245 A JP 2011085245A JP 2011085245 A JP2011085245 A JP 2011085245A JP 2012221147 A JP2012221147 A JP 2012221147A
Authority
JP
Japan
Prior art keywords
program
tracking
identification information
computer
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2011085245A
Other languages
English (en)
Inventor
Kiyoshi Ikehara
潔 池原
Masaki Nakano
正樹 中野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2011085245A priority Critical patent/JP2012221147A/ja
Publication of JP2012221147A publication Critical patent/JP2012221147A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】単一の計算機で複数のプログラムがオブジェクトを共有しながら動作する場合に、各プログラム固有のオブジェクトを追跡することによって、各プログラムのリソース量を算出する方法を提供する。
【解決手段】複数のプログラムを実行するプロセッサ、及びプロセッサに接続され、複数のプログラムを格納する記憶部を備える計算機であって、計算機は、複数のプログラムを実行することによって複数のオブジェクトを生成するプログラム実行部を備え、オブジェクトは、他のオブジェクトの識別情報を含む参照を有し、複数のオブジェクトは、複数のオブジェクトによって参照される共有オブジェクトを含み、プログラム実行部は、共有オブジェクトを参照する第1のオブジェクトと、共有オブジェクトに含まれる参照によって第1のオブジェクトから参照される第2のオブジェクトとの対応を特定し、プログラムが利用するオブジェクトを特定する。
【選択図】図5

Description

本発明は、複数のアプリケーションが単一のメモリ領域を共有して実行される計算機において、各アプリケーションのリソース使用を管理する方法及び計算機に関する。
携帯端末装置等の組込みシステムでは、ユーザによるプログラムの追加及び削除が容易に行えるという利点からアプリケーション実行の手段としてJava(登録商標、以下同じ)又は共通言語基盤(ISO/IEC23271)等の仮想マシン技術が採用される。
通常、仮想マシンは、計算機の処理を抽象化した仮想的な計算機の命令列を実行するインタプリタとして実装される。これによって、組み込みシステム等のハードウェア及びOS等に依存することなく同一のアプリケーションを実行することができる。
インタプリタは、メモリから命令列を読み出し、読み出された順次に当該命令列を解釈し、解釈された命令列を実行する。
このとき、メモリ上に構成される先入れ後出し型のデータ構造であるスタックに一時的な計算結果が格納され、また、ヒープメモリ上に互いに参照関係を持つことが可能なデータ構造であるオブジェクトが作成される。
仮想マシンにおいて、オブジェクトの生成操作はプログラム動作中に何度も実行されるため、プログラムによって無制限にヒープメモリの領域確保が要求されることとなる。そこで、ヒープメモリ上のオブジェクトの量を管理する種々の方法が考えられている。
例えば、ヒープメモリにおけるサイズの最大値を設定し、仮想マシンが使用するメモリ量を制限することによって、オブジェクトの量を管理することができる。
プログラムが設定されたヒープメモリにおけるサイズの最大値を超えてオブジェクト生成を要求すると、ガーベジコレクタが動作した後に空き容量がないと判定され、メモリ不足エラーを示す例外が発生し、当該オブジェクトの生成要求は失敗する。
しかし、前述の方法ではヒープメモリ全体の使用量のみを制限するため、より細かな制御を行いたい場合には適用できない。
例えば、OSGi(登録商標、以下同じ)等のモジュールフレームワークでは、動的リンク時にアプリケーション毎に独立した名前空間でモジュール間のシンボル解決を行うことによって、複数のアプリケーションを同一の仮想マシン上で動作できる。
また、OSGi等のモジュールフレームワークでは、一部のモジュールを共有するようにリンクさせることもできる。この場合、全てのアプリケーションによって使用されるヒープメモリの合計使用量を制限することはできるが、アプリケーション毎のメモリ使用量を制限できない。
前述した問題点に対して、仮想マシンが使用するリソースをより細かな単位で管理する方法が知られている(例えば、特許文献1〜3参照)。
特許文献1には、アプリケーションを構成するオブジェクトを複数のグループに分割し、それぞれのグループにおけるメモリ消費量に対して上限を設定するメモリ量的制御方法が記載されている。
特許文献2には、リソース管理対象となる個別機能モジュール毎に保持されるリソース管理情報に基づいて、個別機能モジュールによって使用されるメモリ量、及び個別機能モジュールの実行時に共通機能モジュールによって使用されるメモリ量を制限するリソース管理方法が記載されている。
また、特許文献3記載には、ヒープメモリの使用量をオブジェクト生成元のクラスローダ単位で管理するヒープサイズ管理表を備え、所定の閾値を超えたクラスローダがある場合に、メモリ使用量が閾値を超えた旨を当該クラスローダに通知するメモリ管理方法が記載されている。
特開2003−76562号公報 特開2006−209735号公報 特開2009−211654号公報
アプリケーション毎に仮想マシンが分離されている場合、あるアプリケーションのメモリ使用量は、当該アプリケーションが実行される仮想マシンのヒープメモリの使用量に対応する。したがって、例えば、仮想マシン内の全オブジェクトのメモリ使用量を算出することによってアプリケーションの使用メモリ量を求めることができる。
しかし、メモリ使用量を低減するために単一の仮想マシン上で複数のアプリケーションを動作させる場合、アプリケーション間で一部のオブジェクトが共有されるため、アプリケーション毎の消費メモリ量を求めることは難しい。
各アプリケーションのメモリ使用量を求めるために、例えば、オブジェクトのグラフをたどり、各アプリケーションが参照するオブジェクトを探索することが考えられる。しかし、前述した方法では、参照関係から複数のアプリケーションによって共有されていることしか把握できない。
また、特許文献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を指定するオブジェクトID310「0x0002000(16進数)」が「参照」として格納される。行308のフィールド値306には、オブジェクト316を指定するオブジェクトID310「0x0003000(16進数)」が「参照」として格納される。
オブジェクト315及びオブジェクト316は、同様にオブジェクトID302及びクラス303を含むメタ情報から構成される。メタ情報は、オブジェクト301と同一のものであるため説明を省略する。なお、オブジェクト315及びオブジェクト316にはフィールドが含まれてもよい。
前述したように「参照」を用いてオブジェクト間の関係を表すことによって、リンクリストやハッシュテーブル等の複雑なデータ構造を表現することができる。
追跡フラグ311は、既定値が「0」であり、少なくとも1ビットの幅を持つデータである。追跡フラグ311は、計数処理実行部507が計数処理を実行する場合に、ルート集合となるオブジェクト集合とは別に、所定のオブジェクトを起点としてオブジェクトグラフをたどる必要があることを示す変数である。
ただし、追跡フラグ311は独立したデータ項目である必要はなく、オブジェクトID302の未使用ビットに割り当ててもよい。
例えば、4バイト境界でオブジェクトが配置される場合、アドレス値であるオブジェクトID302の下位2ビットは未使用の「00(2進数)」であるため、当該下位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つ目の引数を示す「2(%2)」が引数番号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に追加する。
例えば、識別子が付与された各モジュールに対応するオブジェクト集合は、オブジェクト集合Si(iは自然数)と表される。ここで、オブジェクト集合Siは、複数のオブジェクトOn(nは自然数)を含む。このとき、グループリストは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)。
第二の実施形態によれば、アプリケーション毎のメモリ使用量が、予め設定されたモジュール毎のメモリ使用量の上限値を超える場合には、当該モジュールを終了させることによって、特定のアプリケーションの過剰なメモリ確保を防止し、他のアプリケーションの動作に与える悪影響を回避することが可能となる。
100 計算機
101 プロセッサ
102 アドレス変換装置
103 メモリ
104 二次記憶装置
105 アドレス/データバス
201 作業用記憶部
202 ヒープメモリ
203 スタック
204 プログラム格納部
205 プログラム実行部
206 参照追跡テーブル格納部
207 計数処理実行部
208 参照追跡ルール格納部
209 オブジェクト探索ルール格納部
210 資源監視部
211 資源制限テーブル格納部
401 参照追跡テーブル
501 参照追跡ルールテーブル
601 オブジェクト探索ルールテーブル
1100 資源制限テーブル
1101 資源制限テーブル

Claims (16)

  1. 複数のプログラムを実行するプロセッサ、及び前記プロセッサに接続され、前記複数のプログラムを格納する記憶部を備える計算機であって、
    前記計算機は、前記複数のプログラムを実行することによって複数のオブジェクトを生成するプログラム実行部を備え、
    前記オブジェクトは、他のオブジェクトの識別情報を含む参照を有し、
    前記複数のオブジェクトは、複数の前記オブジェクトによって参照される共有オブジェクトを含み、
    前記プログラム実行部は、
    前記共有オブジェクトを参照する第1のオブジェクトと、前記共有オブジェクトに含まれる前記参照によって前記第1のオブジェクトから参照される第2のオブジェクトとの対応を特定し、
    前記プログラム毎に、当該プログラムが利用する前記オブジェクトを特定することを特徴とする計算機。
  2. 前記計算機は、前記第1のオブジェクトの識別情報及び前記第2のオブジェクトの識別情報を含む追跡情報を格納し、
    前記プログラム実行部は、
    前記第2のオブジェクトの識別情報を含む前記参照を引数とする前記第1のオブジェクトからのメソッドの呼び出しを検出した場合に、当該メソッドに基づいて、前記第1のオブジェクトの識別情報及び前記第2のオブジェクトの識別情報を取得し、
    取得された前記第1のオブジェクトの識別情報及び前記第2のオブジェクトの識別情報を前記追跡情報に格納し、
    前記追跡情報に基づいて、前記プログラム毎に、当該プログラムが利用する前記オブジェクトを特定することを特徴とする請求項1に記載の計算機。
  3. 前記計算機は、前記共有オブジェクトに対する、前記第2のオブジェクトを示す前記参照を引数とする前記第1のオブジェクトからのメソッドの呼び出しを検出するための追跡ルール情報を備え、
    前記プログラム実行部は、
    前記追跡ルール情報に基づいて、前記第2のオブジェクトの識別情報を含む前記参照を引数とする前記第1のオブジェクトからのメソッドの呼び出しを検出し、
    前記検出されたメソッドの操作対象である前記参照に、前記追跡情報に基づいて追跡すべき旨を表す追跡フラグを付与することを特徴とする請求項2に記載の計算機。
  4. 前記計算機は、前記各プログラムによって使用されるリソース量を算出する算出部を備え、
    前記算出部は、
    前記プログラムによって生成された、所定の前記複数のオブジェクトから構成されるオブジェクト集合を含む、当該プログラムの使用リソース量の算出要求が入力された場合に、前記追跡情報に基づいて、前記オブジェクト集合に含まれる前記所定のオブジェクトにおける前記参照を追跡することによって前記プログラムが利用するオブジェクトを探索するオブジェクト探索処理を実行して、前記プログラムが利用する全てのオブジェクトを特定し、
    前記特定された各オブジェクトの使用リソース量を取得して、前記プログラムに使用されるリソース量を算出することを特徴とする請求項3に記載の計算機。
  5. 前記算出部は、
    前記追跡情報の前記第1のオブジェクトの識別情報を参照して、前記オブジェクト集合の中から前記第1のオブジェクトを検索し、
    前記第1のオブジェクトが参照する前記共有オブジェクトを検索し、
    前記共有オブジェクトにおける前記参照の中から、前記追跡フラグが付与される前記参照を検索し、
    前記追跡フラグが付与された参照に基づいて前記追跡情報を参照して、当該参照によって参照される前記第2のオブジェクトに対応するエントリが存在するか否かを判定し、
    前記追跡フラグが付与された参照によって参照される前記第2のオブジェクトに対応するエントリが存在すると判定された場合には、前記第2のオブジェクトを新たな入力として前記オブジェクト探索処理を実行することを特徴とする請求項4に記載の計算機。
  6. 前記計算機は、前記オブジェクトに含まれる参照のうち、追跡すべき前記参照を特定するための探索ルール情報を備え、
    前記算出部は、
    探索ルール情報に基づいて、前記処理対象であるオブジェクトにおける前記参照の中から前記追跡すべき参照を特定し、
    前記特定された追跡すべき参照が示す前記オブジェクトを入力として前記オブジェクト探索処理を実行することを特徴とする請求項4に記載の計算機。
  7. 前記オブジェクトの識別情報は、所定の長さのビット列から構成され、
    前記参照に含まれるオブジェクトの識別情報である前記ビット列のうち、未使用のビットに前記追跡フラグを割り当てることを特徴とする請求項4に記載の計算機。
  8. 前記計算機は、前記プログラム毎の使用リソース量の上限を表す閾値を格納し、
    前記算出部は、
    前記算出されたプログラムの使用リソース量が、当該プログラムに対応する前記閾値より大きいか否かを判定し、
    前記算出されたプログラムの使用リソース量が、当該プログラムに対応する前記閾値より大きいと判定された場合には、当該プログラムを終了させることを特徴とする請求項4に記載の計算機。
  9. 複数のプログラムを実行するプロセッサ、及び前記プロセッサに接続され、前記複数のプログラムを格納する記憶部を備える計算機におけるリソース管理方法であって、
    前記計算機は、前記複数のプログラムを実行することによって複数のオブジェクトを生成するプログラム実行部を備え、
    前記オブジェクトは、他のオブジェクトの識別情報を含む参照を有し、
    前記複数のオブジェクトは、複数の前記オブジェクトによって参照される共有オブジェクトを含み、
    前記リソース管理方法は、
    前記プロセッサが、前記共有オブジェクトを参照する第1のオブジェクトと、前記共有オブジェクトに含まれる前記参照によって前記第1のオブジェクトから参照される第2のオブジェクトとの対応を特定するステップと、
    前記プロセッサが、前記プログラム毎に、当該プログラムが利用する前記オブジェクトを特定するステップと、を含むことを特徴とするリソース管理方法。
  10. 前記計算機は、さらに、前記第1のオブジェクトの識別情報及び前記第2のオブジェクトの識別情報を含む追跡情報を格納し、
    前記リソース管理方法は、
    前記プロセッサが、前記第2のオブジェクトの識別情報を含む前記参照を引数とする前記第1のオブジェクトからのメソッドの呼び出しを検出した場合に、当該メソッドに基づいて、前記第1のオブジェクトの識別情報及び前記第2のオブジェクトの識別情報を取得するステップと、
    前記プロセッサが、取得された前記第1のオブジェクトの識別情報及び前記第2のオブジェクトの識別情報を前記追跡情報に格納するステップと、
    前記プロセッサが、前記追跡情報に基づいて、前記プログラム毎に、当該プログラムが利用する前記オブジェクトを特定するステップと、を含むことを特徴とする請求項9に記載のリソース管理方法。
  11. 前記計算機は、さらに、前記共有オブジェクトに対する、前記第2のオブジェクトを示す前記参照を引数とする前記第1のオブジェクトからのメソッドの呼び出しを検出するための追跡ルール情報を備え、
    前記リソース管理方法は、
    前記プロセッサが、前記追跡ルール情報に基づいて、前記第2のオブジェクトの識別情報を含む前記参照を引数とする前記第1のオブジェクトからのメソッドの呼び出しを検出するステップと
    前記プロセッサが、前記検出されたメソッドの操作対象である前記参照に、前記追跡情報に基づいて追跡すべき旨を表す追跡フラグを付与するステップと、を含むことを特徴とする請求項10に記載のリソース管理方法。
  12. 前記計算機は、さらに、前記各プログラムによって使用されるリソース量を算出する算出部を備え、
    前記リソース管理方法は、
    前記プロセッサが、前記プログラムによって生成された、所定の前記複数のオブジェクトから構成されるオブジェクト集合を含む、当該プログラムの使用リソース量の算出要求が入力された場合に、前記追跡情報に基づいて、前記オブジェクト集合に含まれる前記所定のオブジェクトにおける前記参照を追跡することによって前記プログラムが利用するオブジェクトを探索するオブジェクト探索処理を実行して、前記プログラムが利用する全てのオブジェクトを特定するステップと、
    前記特定された各オブジェクトの使用リソース量を取得して、前記プログラムの使用リソース量を算出するステップと、を含むことを特徴とする請求項11に記載のリソース管理方法。
  13. 前記プログラムが利用する全てのオブジェクトを特定するステップでは、
    前記プロセッサが、前記追跡情報の前記第1のオブジェクトの識別情報を参照して、前記オブジェクト集合の中から前記第1のオブジェクトを検索するステップと、
    前記プロセッサが、前記第1のオブジェクトが参照する前記共有オブジェクトを検索するステップと、
    前記プロセッサが、前記共有オブジェクトにおける前記参照の中から、前記追跡フラグが付与される前記参照を検索するステップと、
    前記プロセッサが、前記追跡フラグが付与された参照に基づいて前記追跡情報を参照して、当該参照によって参照される前記第2のオブジェクトに対応するエントリが存在するか否かを判定するステップと、
    前記プロセッサが、前記追跡フラグが付与された参照によって参照される前記第2のオブジェクトに対応するエントリが存在すると判定された場合には、前記第2のオブジェクトを新たな入力として、新たに前記オブジェクト探索処理を実行するステップと、を含むことを特徴とする請求項12に記載のリソース管理方法。
  14. 前記計算機は、さらに、前記オブジェクトに含まれる参照のうち、追跡すべき前記参照を特定するための探索ルール情報を備え、
    前記プログラムが利用する全てのオブジェクトを特定するステップでは、
    前記プロセッサが、探索ルール情報に基づいて、前記処理対象であるオブジェクトにおける前記参照の中から前記追跡すべき参照を特定するステップと、
    前記プロセッサが、前記特定された追跡すべき参照が示す前記オブジェクトを入力として前記オブジェクト探索処理を実行するステップと、を含むことを特徴とする請求項12に記載のリソース管理方法。
  15. 前記オブジェクトの識別情報は、所定の長さのビット列から構成され、
    前記参照に含まれるオブジェクトの識別情報である前記ビット列のうち、未使用のビットに前記追跡フラグを割り当てることを特徴とする請求項12に記載のリソース管理方法。
  16. 前記計算機は、前記プログラム毎の使用リソース量の上限を表す閾値を格納し、
    前記リソース管理方法は、
    前記プロセッサが、前記算出されたプログラムの使用リソース量が、当該プログラムに対応する前記閾値より大きいか否かを判定するステップと、
    前記プロセッサが、前記算出されたプログラムの使用リソース量が、当該プログラムに対応する前記閾値より大きいと判定された場合には、当該プログラムを終了させるステップと、を含むことを特徴とする請求項12に記載のリソース管理方法。
JP2011085245A 2011-04-07 2011-04-07 計算機及びリソース管理方法 Pending JP2012221147A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011085245A JP2012221147A (ja) 2011-04-07 2011-04-07 計算機及びリソース管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011085245A JP2012221147A (ja) 2011-04-07 2011-04-07 計算機及びリソース管理方法

Publications (1)

Publication Number Publication Date
JP2012221147A true JP2012221147A (ja) 2012-11-12

Family

ID=47272603

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011085245A Pending JP2012221147A (ja) 2011-04-07 2011-04-07 計算機及びリソース管理方法

Country Status (1)

Country Link
JP (1) JP2012221147A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014239302A (ja) * 2013-06-06 2014-12-18 キヤノン株式会社 画像処理装置、その制御方法、及びプログラム
JP7421628B1 (ja) 2022-12-26 2024-01-24 ソフトバンク株式会社 情報処理装置、情報処理方法、および情報処理プログラム

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0635786A (ja) * 1992-07-20 1994-02-10 Nippon Telegr & Teleph Corp <Ntt> 共有オブジェクトの構成変更に対する管理装置
JP2001243089A (ja) * 2000-02-25 2001-09-07 Mitsubishi Electric Corp ソフトウェア検証装置及びソフトウェア検証方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0635786A (ja) * 1992-07-20 1994-02-10 Nippon Telegr & Teleph Corp <Ntt> 共有オブジェクトの構成変更に対する管理装置
JP2001243089A (ja) * 2000-02-25 2001-09-07 Mitsubishi Electric Corp ソフトウェア検証装置及びソフトウェア検証方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014239302A (ja) * 2013-06-06 2014-12-18 キヤノン株式会社 画像処理装置、その制御方法、及びプログラム
JP7421628B1 (ja) 2022-12-26 2024-01-24 ソフトバンク株式会社 情報処理装置、情報処理方法、および情報処理プログラム

Similar Documents

Publication Publication Date Title
EP3668009A1 (en) Life cycle management method and device for network service
CN110738389A (zh) 工作流处理方法、装置、计算机设备和存储介质
US9361224B2 (en) Non-intrusive storage of garbage collector-specific management data
CN109857723B (zh) 基于可扩容数据库集群的动态数据迁移方法及相关设备
CN109871290B (zh) 应用于Java的调用堆栈追踪方法、装置和存储介质
CN112835714A (zh) 云边环境中面向cpu异构集群的容器编排方法、***及介质
JP5218985B2 (ja) メモリ管理方法計算機システム及びプログラム
CN103425729A (zh) 管理计算机***中的内存
US20150370593A1 (en) System construction device and system construction method
CN115280283A (zh) 在kubernets中运行pbs作业
CN113434482A (zh) 数据迁移方法、装置、计算机设备及存储介质
CN103294799B (zh) 一种数据并行批量导入只读查询***的方法及***
US11212174B2 (en) Network management device and network management method
CN107656796A (zh) 一种虚拟机冷迁移方法、***及设备
US10491674B2 (en) Network topology templates for internal states of management and control planes
CN112202909B (zh) 一种计算机存储***在线升级方法及***
JP2012221147A (ja) 計算機及びリソース管理方法
CN114816170A (zh) 规则方案生成方法、装置、介质及电子设备
CN106484375B (zh) 一种指令块加载方法、软交换设备及***
US20100049747A1 (en) Apparatus and method for storing log in a thread oriented logging system
CN110471968A (zh) Etl任务的发布方法、装置、设备及存储介质
CN112162964B (zh) 一种自适应数据同步方法、装置、计算机设备及存储介质
JP7381290B2 (ja) 計算機システム及びデータの管理方法
WO2007072567A1 (ja) 並列処理支援装置
CN105740054A (zh) 一种虚拟机管理方法及装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130725

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140320

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140408

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20140805