JP2013205911A - データ参照元特定システム及びその特定方法、並びにそのコンピュータ・プログラム - Google Patents

データ参照元特定システム及びその特定方法、並びにそのコンピュータ・プログラム Download PDF

Info

Publication number
JP2013205911A
JP2013205911A JP2012071465A JP2012071465A JP2013205911A JP 2013205911 A JP2013205911 A JP 2013205911A JP 2012071465 A JP2012071465 A JP 2012071465A JP 2012071465 A JP2012071465 A JP 2012071465A JP 2013205911 A JP2013205911 A JP 2013205911A
Authority
JP
Japan
Prior art keywords
group
grouping
discarded
reference source
class loader
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.)
Granted
Application number
JP2012071465A
Other languages
English (en)
Other versions
JP6010961B2 (ja
Inventor
Shinji Takahashi
真志 高橋
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2012071465A priority Critical patent/JP6010961B2/ja
Publication of JP2013205911A publication Critical patent/JP2013205911A/ja
Application granted granted Critical
Publication of JP6010961B2 publication Critical patent/JP6010961B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】参照先のオブジェクトのサイズが小さいか、もしくはオブジェクトの個数が少ない場合でもメモリリークの直接の原因となる参照元のオブジェクトを特定するシステム等を提供する。
【解決手段】アプリケーションの実行に伴って更新される、記憶領域におけるプログラムおよび元プログラムであるオブジェクト群の参照関係を表す参照情報群3に含まれるデータに基づいて、前記オブジェクト群を前記元プログラム読み込み機能を基準にしてグループ化するグループ化部1と、前記アプリケーションの終了に伴って破棄済みとマーキングされた破棄済みの元プログラム読み込み機能を基準にして、前記グループ化された情報に基づいてグループ化したグループに対して、該グループの外部から参照する参照元を特定する参照元特定部2とを有する。
【選択図】 図1

Description

本発明は、例えばメモリリークの原因となる情報の参照元を調べる情報処理の技術分野に関する。
今日、企業の業務や、社会生活で必要なサービスは、例えば通信ネットワークを介したアプリケーション(Application;以下、アプリケーションもしくは、「AP」と称する)サーバによって提供されるようになっている。そして、ユーザは、利用可能な情報端末から、通信ネットワークを介してAPサーバにアクセスすることによって企業の業務ソフトウェアやインターネットサービスを利用することができる。
そしてこれらのサービスを提供するAPサーバにおいて動作するソフトウェアは、取り扱うさまざまな種類のデータとそのデータに関連するコードを一体的に扱うオブジェクト指向のプログラム言語を用いて開発したAPが用いられている。
例えばJava(登録商標。以下、同様) Enterprise Edition(Javaの企業用機能セット。以下、単に「Java」もしくは、「Java_EE」と略称する。)に準拠したAPサーバは、自身に有するJava Virtual Machine(Java 仮想マシン。以下、「Java_VM」と略称する)において、複数のアプリケーションを独立に動作させることができる。
そのため、APサーバは、何れかのAPを必要に応じて配備する。これにより、そのAPは、APサーバの管理下に置かれると共に、不要となったAPは、APサーバから、その配備を取り外すことにより、そのAPはAPサーバの管理下から除外される。
つまり、APサーバは、あるAPを配備すると、そのAP専用のクラスローダと呼ばれるプログラムの元となる元プログラムを読み込むための元プログラム読み込み機能を個別に生成すると共にそのAPに関連付ける。そしてAPサーバは、そのAPに関連付けされた元プログラム読み込み機能であるクラスローダを利用して、APを構成する元プログラムであるクラスや、プログラムであるオブジェクトを、APサーバが有するJava_VMのメモリ領域に動的に配備(つまりロード)する。
ここでクラスとは、Java_VMにおいて複数のデータ型の組み合わせを定義すると共に、その定義したデータ型に基づいて確保したメモリ領域において動作するオブジェクトを生成する元となる設計図である。また、オブジェクトとは、設計図であるクラスを基に、Java_VMが有するメモリ領域において動作するデータとそのデータに関連するコードを一体的に構成したプログラムの実体である。
そして、APサーバは、メモリに展開されたクラスやオブジェクトとからなるAPを実行状態にすると共に、リクエストの受け付けを開始する。なお、リクエストとは、APサーバからAPを実行するためのAPサーバへの要求である。
すなわち、図2に示す、背景技術としてのAPサーバのソフトウェア構成を示す図にあるように、APサーバ20は、動作させたいAP1をクラスローダ21に配備することによってAP1と関連付けると共に、AP1を構成するクラス22とオブジェクト21とを図示していないメモリ上に展開することによってAP1を動作させる。
ここで、クラスローダの生成について、図3を用いて具体的に説明する。Java_EEに準拠したAPサーバには、配備されたAPが共通に利用する共通クラスローダ群2−1が存在する。共通クラスローダ群2−1は少なくとも一つ以上のクラスローダで構成されており、基本的には親子関係をもつ階層構造を有している。
なお、APサーバは、Open Services Gateway initiative(以下、「OSGi」と略称する)のフレームワークに代表されるようなネットワーク状に結合した構造を有している場合もある。
APサーバに対してAPを配備すると、APサーバは、配備したAPをロードするための専用のクラスローダを、共通クラスローダ群2−1の子のクラスローダとして生成し、APに関連付ける。
図3では、APサーバに3つのAPが配備されている状況を示しており、各APごとに専用のクラスローダ2−2、2−3、2−4を有している。
また、APサーバはAPを停止状態にするか、あるいは配備を取り外すか、もしくはリクエストの受け付けを行わないようにすることによって、そのAPの動作を取りやめることもできる。
そして、APサーバはAPの動作を取りやめる際に、APに関連付けているクラスローダがもはや不要となるので、APサーバによってメモリ領域などの対応するリソースを解放するために、そのクラスローダに対して破棄処理を実施すると共に、破棄済みの旨をマーキングする。
そして、APサーバは、APを構成するクラスやオブジェクトに対する参照を切断すると共に、それらをガベージコレクション(Garbage Collection;以下、「GC」と称する)の対象とする。
ここで、GCの対象にするとは、メモリに存在するクラスやオブジェクトの参照関係を示す参照先を矢印で示す有向グラフにおいて、GCルートと呼ばれている参照元を矢印の起点とする有向グラフの開始地点からの到達を到達不能にすることである。
GCの対象について、図4を用いて具体的に説明する。図4に示す3−1と3−2は、GCルートを示している。3−3がGCルートから有向グラフを辿って到達可能な範囲を示している。
ここで、クラスやオブジェクトがGCの対象になるということは、クラスやオブジェクトのプログラムに用いる変数の値にNull(すなわち変数の値が無いことを意味する)を代入したり、実行中のスレッドを停止したりすることで、3−1、3−2、3−3から到達不能にすることである。
そして、3−4のように3−1、3−2、3−3と全く関わりを持たなくなった孤立した参照関係を有する部分グラフはGCの対象となる。また3−5は3−3と結合しているが、辺の矢印の向きが3−5から3−3に向かうもののみであり、3−1、3−2、3−3からは到達不能なので、GCの対象である。
しかしながら、APは、APサーバがAPを停止するか、配備の取り外しか、もしくはリクエストの受付を行わないようにしようとしても、APの不具合等によりそのAPを構成するクラスやオブジェクトがGCルートから到達不能にならない(すなわち、到達することができてしまう)場合がある。
そのような場合は、APを構成するクラスやオブジェクトが意図せずにメモリに残存し続けることになり、このような現象をメモリリークと呼ぶ。このメモリリークを放置しておくとメモリ領域が枯渇する恐れがあり、APサーバおよびAPの動作異常に繋がる。
そのために、Javaのアプリケーションにおいて、メモリリークの原因を特定するためには、起動時にJava_VMから共通的なメモリ領域であるヒープ領域が割り当てられたのちに、Java_VMの実行中にはヒープダンプと呼ばれるAPを実行する際に必要となる参照関連のデータをファイルとして取得すると共に、そのファイル内容を解析することにより参照元を辿ることができる。
つまり、ヒープとは、APサーバが動的に確保したオブジェクトを格納するメモリ領域である。
またヒープダンプとは、そのメモリ領域のデータの内容を表示した一覧であり、例えばGCルートと、クラスをロードしたクラスローダと、クラスと、クラスが生成したオブジェクトとを表すIDやアドレス情報およびこれらのオブジェクトの参照関係の情報が保持されている。
そして、クラスやオブジェクトの参照関係を調べるためにはこれらの情報を入力として解析する必要がある。
ここで、データとして取り扱うクラスローダ、クラス、オブジェクトおよびオブジェクトの一種であるGCルート(すなわちGCの開始点)を表すIDやアドレス情報を総称する際には、単に「オブジェクト」もしくは「オブジェクト群」と呼ぶ場合がある。
また、プログラムとしてのオブジェクトは「プログラム」もしくは「プログラムオブジェクト」と呼ぶこととする。
上述したような問題を解決するため、特許文献1に記載の技術は、Java_VMで発生するメモリリークの原因を、オブジェクトの参照関係を辿ることにより、メモリリークが発生する危険性を検出することで原因箇所を特定しやすくする技術を開示する。
また、特許文献2に記載の技術は、データ領域に設定する状態規則に反するデータを見つけ、そのデータに設定する参照規則に反する参照関係からメモリリークを検出する技術を開示する。
特開2005−301660号公報 特開2007−004413号公報
特許文献1に記載の技術は、メモリ領域にある複数のデータ相互間の参照関係について、先の時刻と後の時刻におけるその差分データに重み付けをすることによりメモリリークの原因を特定しようとしている。
しかしながら、特許文献1に記載の技術は、各データのサイズに応じて重みの値を変えると共に、参照先のデータの重み値を参照元のデータの重み値に加算する。これによりメモリリークが発生する可能性があるデータを検出するので、係る技術によればメモリリークを検出することはできるが、メモリリークの直接の原因となる参照元の特定はできないという課題がある。
また、特許文献2に記載の技術は、データタイプと格納先領域(つまり短期間かもしくは長期間かの世代別ヒープ領域)と同一クラスのデータの数の条件とからなる状態規則および、参照条件(クラスのクラスローダへの他のオブジェクトからの参照数)に応じて異常な参照関係であるか否かを判断しようとしている。
しかしながら、特許文献2に記載の技術は、リーク対象メモリの記憶領域に、状態規則に反する場合に記憶する参照状態の情報データを追加、保存するので、さらなるメモリリーク量の増大を招くこととなり、APサーバ、またはAPで使用できるメモリ総量を減少させる。つまり、係る技術では結果的にさらなるメモリリークの状態となる可能性がある。
また、ヒープダンプからメモリリークを特定するための一般的な手段は、以下の二つである。一つ目は、あるオブジェクトから到達可能なオブジェクトのサイズの総合計が巨大なものを特定する。二つ目は、あるクラスのオブジェクトの個数が大量であるものを特定する。つまり、一般的な手段においてメモリリークを検出するためには、リークしているオブジェクトのサイズや個数が異常と判断できる程度の大きさが必要である。
上述した一般的な技術では、長時間かけてサイズの小さい参照先オブジェクトへ少しずつメモリの参照がリークするような場合には、テスト環境のような比較的稼働時間が短い環境では検出が困難であり、正確な分析が不十分なままシステムの運用に移行する可能性がある。
また、実際の運用環境では24時間、365日稼働することも珍しくはなく、このような潜在的な不具合がある場合には、最終的にメモリ枯渇に陥ることにより、動作が困難になる可能性がある。
本発明の主たる目的は、上述した課題を解決するために、参照先のオブジェクトのサイズが小さいか、もしくはオブジェクトの個数が少ない場合でもメモリリークの直接の原因となる参照元のオブジェクトを特定するシステム等を提供することにある。
本発明は、上述した課題の解決を目的としてなされた。即ち、本発明に係るデータ参照元特定システム等は、アプリケーションの配備に伴って元プログラム読み込み機能を生成すると共に該元プログラム読み込み機能を用いて前記アプリケーションを構成するオブジェクト群であるプログラムおよびその元プログラムとが記憶領域に生成して実行される情報処理装置において、アプリケーションの実行に伴って更新される、記憶領域における前記オブジェクト群の参照関係を表す参照情報群に含まれるデータに基づいて、前記オブジェクト群を前記元プログラム読み込み機能を基準にしてグループ化するグループ化部と、
前記アプリケーションの終了に伴って破棄済みとマーキングされた破棄済みの元プログラム読み込み機能を基準にして、前記グループ化された情報に基づいてグループ化したグループに対して、該グループの外部から参照する参照元を特定する参照元特定部とを有する。
なお、同目的は、上記構成を有するデータ参照元特定方法をコンピュータによって実現するコンピュータ・プログラム、およびそのコンピュータ・プログラムが格納されている、コンピュータ読み取り可能な記憶媒体によっても達成される。
本発明によれば、参照先のオブジェクトのサイズが小さいか、もしくは個数が少ない場合でもメモリリークの直接の原因となる参照元のオブジェクトを特定することができる。
本発明の第1の実施形態に係るデータ参照元特定システムの概要を示すブロック図である。 背景技術としてのAPサーバのソフトウェア構成を示す図である。 背景技術としてのJava_EEに準拠したAPサーバのクラスローダの関係を示す図である。 背景技術としてのJava_EEに準拠したGCの到達範囲を示す図である。 本発明の第2の実施形態に係る破棄済みクラスローダと、GCルートから到達不能になる条件を説明する図である。 本発明の第2の実施形態に係る破棄済みクラスローダへのグループ外から参照する例を説明する図である。 本発明の第2の実施形態に係るデータ参照元特定システムの機能を概念的に示すブロック図である。 本発明の第2の実施形態に係るヒープダンプテーブルの図である。 本発明の第2の実施形態に係るグループ化テーブルの図である。 本発明の第2の実施形態に係るグループ外からの参照を表すテーブル図である。 本発明の第2の実施形態に係るグループ化モジュールの動作を示すフローチャートである。 本発明の第2の実施形態に係る参照探索モジュールの動作を示すフローチャートである。 本発明の第2の実施形態に係るグループ化モジュール動作前のグループ化テーブル図である。 本発明の第2の実施形態に係るグループ化モジュール動作の際に、種別がクラスローダの場合のグループ化テーブル図である。 本発明の第2の実施形態に係るグループ化モジュール動作の際に、種別がクラスの場合のグループ化テーブル図である。 本発明の第2の実施形態に係るグループ化モジュール動作の際に、種別がその他のクラスの場合のグループ化テーブル図である。 本発明の第2の実施形態に係るグループ化モジュール動作の際に、種別がオブジェクトの場合のグループ化テーブル図である。 本発明の第2の実施形態に係るグループ化モジュール動作の際に、種別がその他のオブジェクトの場合のグループ化テーブル図である。 本発明の第4の実施形態に係るデータの参照元を特定するコンピュータ・プログラムを説明する図である。
以下、本発明を実施する形態について図面を参照して詳細に説明する。
<第1の実施形態>
本発明の第1の実施形態の構成について説明する。図1は、本発明の第1の実施形態に係るデータ参照元特定システムの概要を示すブロック図である。
本実施形態のデータ参照元特定システム10は、グループ化部1と、参照元特定部2と、参照情報群3とからなる。
また、図2は背景技術としてのアプリケーション(以下、「AP」と称する)サーバのソフトウェア構成を示す図である。本背景技術のAPサーバ20は、プログラム23の設計図である元プログラム22を読み込む、元プログラム読込み機能21と、元プログラム22と、プログラム23とを有する。
図1に示す、グループ化部1は、データ参照元特定システム10が動作する際の図示していないメモリにある情報の一部を記憶する参照情報群3の情報に基づいて、元プログラム読込み機能21を基準として、元プログラム22と、プログラム23とをグループ化する。
ここで、参照情報群3とは、APサーバ20において、図示していないメモリにある元プログラム読込み機能21と、元プログラム22およびプログラム23を識別するためのIDやアドレス情報を、外部装置もしくは運用管理者による自動もしくは手動による指示によって取り込まれる情報群のことである。
参照元特定部2は、参照情報群3に基づいて、何れかのアプリケーションの終了に伴って破棄されることにより“破棄済み”とマーキングされた元プログラム読み込み機能21を基準として、上述したグループ化部1によってグループ化された元プログラム22とプログラム23とを含む破棄済み元プログラム読み込み機能のグループをそのグループの外部から参照する参照元のプログラムの識別子(すなわち、ID)やアドレス情報を特定する。
また、破棄済みの元プログラム読み込み機能21を基準としてグループ化されたグループの元プログラム22やプログラム23が占有するAPサーバのメモリ資源を解放する図示していないメモリ開放機能が参照するその参照元のプログラムのIDやアドレス情報をも特定する。
なお、参照情報群3におけるグループ化対象である元プログラム読み込み機能21と、元プログラム22と、プログラム23および図示していないメモリ開放機能の参照開始点からの参照に関するIDやアドレス情報は、説明の便宜上「グループ化対象データ」と称することとする。
また、参照情報群3は、本データ参照元特定システム10に有することを限定しているわけではなく、本データ参照元特定システム10を含むAPサーバが有していてもかまわない。
次に、本実施形態のデータ参照元特定システム10の動作について説明する。本データ参照元特定システム10は、図示していない外部装置もしくは、運用管理者によって自動もしくは手動によって起動されると共に、その動作に応じて図示していないメモリにある、プログラムである元プログラム読み込み機能21と、元プログラム22と、プログラム23および、図示していないメモリ開放機能の参照を開始するオブジェクト群を識別するためのIDやアドレス情報である参照情報群3を生成または更新する。
そして、本データ参照元特定システム10のグループ化部1は、生成または更新された参照情報群3のデータに基づいて、上述した元プログラム読み込み機能21と、元プログラム22と、プログラム23および図示していないメモリ開放機能の参照開始点を表すIDやアドレス情報からなるグループ化対象データを、当該プログラム23が属する当該元プログラム22を読み込んだ元プログラム読み込み機能21を基準にしてグループ化する。
そして、本データ参照元特定システム10の参照元特定部2は、何れかのアプリケーションの終了に伴って、図示していない破棄済みとマーキングされた破棄済みの元プログラム読み込み機能を基準にして前記グループ化された際の情報に基づいてグループ化したグループに対して、そのグループの外部から参照する参照元を特定する。
上述したグループ分けによって、参照先の元プログラムやプログラムのサイズや個数に依らずに、APサーバ20に配備されたアプリケーションを停止あるいは取り外した際に、破棄済みとマーキングされた元プログラム読み込み機能21である破棄済み元プログラム読み込み機能のグループをそのグループの外部から直接的に参照する元プログラム22およびプログラム23を特定することができる。
また、グループの外部から直接的に参照することができる参照元は、破棄済み元プログラム読み込み機能が有する元プログラム22およびプログラム23が占有するAPサーバのメモリ資源を解放するメモリ資源解放機能の参照開始点からの参照をもその参照元として特定することができる。
すなわち本実施形態によれば、参照元のプログラムを直接的に特定することができるので、参照先のプログラムのサイズが小さいか、もしくは個数が少ない場合でもメモリリークの直接の原因となる参照元のプログラムを特定することができるという効果を奏することができる。
また、本実施形態によれば、参照先のプログラムのサイズが小さいか、もしくは個数が少ない場合でもメモリリークの直接の原因となる参照元のプログラムを効率的に特定することができるので、例えば開発や評価途上での長時間動作試験などを実施しなくてもメモリリークを容易に検出することができるという効果を奏することができる。
さらに、本実施形態によれば、APにおける複数の時点での参照情報群を比較して元プログラムやプログラムの増減を観察する必要がなく、ある時点での単一の参照情報を用いるだけでメモリリークの参照元のプログラムを特定することができるという効果を奏することができる。
つまり、本実施形態によれば、参照先のプログラムのサイズが小さいか、もしくはプログラムの個数が少ない場合でもメモリリークの直接の原因となる参照元のプログラムを特定することができるという効果を奏することができる。
以上、本発明の第1の実施形態として、上述した構成および動作を例に説明したが、本発明は、必ずしも係る構成や動作には限定されない。
<第2の実施形態>
次に、第1の実施形態を基本とする本発明の第2の実施形態について図7を参照してその構成を説明する。図7は第2の実施形態に係るデータ参照元特定システムの機能を概念的に示すブロック図である。本ブロック図は、第2の実施形態のデータ参照元特定システムにおける課題を解決するために以下の3つの主要なモジュールからなる。
すなわち、破棄済みクラスローダ探索モジュール6−3は、参照情報群3であるヒープダンプ6−2を入力として破棄済みクラスローダを探索するモジュールである。
また、グループ化モジュール6−4は、破棄済みクラスローダの一覧およびヒープテーブル6−2を入力として破棄済みクラスローダのグループとそれ以外のグループとをグループ分けすると共にグループ化テーブル6−7を生成するモジュールである。
そして、参照探索モジュール6−5は、ヒープダンプ6−2と、グループ化テーブル6−7を入力として、そのうちの破棄済みクラスローダのグループへの参照を示すグループ外からの参照テーブル6−8を生成すると共にその参照元を見つけるモジュールである。
ここで、モジュールとは、例えば本データ参照元特定システム10のアプリケーションソフトウェアを構成する個々の処理機能である。また、これらのモジュールは、例えば後述する図19に示すようなコンピュータのハードウェア資源において実行される。
なお、第1の実施形態で説明した図2における元プログラム読み込み機能21と、元プログラム22と、プログラム23は、第2の実施形態においては、それぞれクラスローダ、クラス、オブジェクトと呼ぶこととする。
ここで、図5および図6を参照して上述した主要モジュールのうち、まず、破棄済みクラスローダの探索についてその概要から説明する。本実施形態に係るデータ参照元特定システム10であるAPサーバは、何れかのAPの停止などに伴って、不要となったクラスローダのリソース解放処理を行う。そして係るAPサーバは、当該不要となったクラスローダを“破棄済み”とマーキングする。
本実施形態では、クラスローダが破棄済みとマーキングされることと、クラスローダがGCルートから到達不能になる以下の2つ条件を利用する。すなわち、
条件1は、そのクラスローダを直接的に参照するクラスやオブジェクトが存在しないこと、そして、
条件2は、そのクラスローダがロードしたクラス、およびそのクラスのオブジェクトがGCルートから到達不能であること。
である。
上記条件について、図5を用いて詳細に説明する。図5は、本実施形態における破棄済みクラスローダと、GCルートから到達不能になる条件を説明する図である。上述した条件1は、GCの対象となって参照を切断するためには、GCルートから到達不能である必要がある。
しかし、クラスローダXは、GCルートαから4−1、4−2という経路で到達可能であるため、4−1あるいは4−2またはその両方の参照を切断する必要がある。また、上述した条件2は、ソースコード上には現れないが、Java_VMが実行時にヒープダンプテーブルに追加する暗黙的な参照が存在するために必要になる条件である。
ここで、暗黙の参照は具体的には二つあり、一つはクラスに対して、そのクラスをロードしたクラスローダへの暗黙の参照を追加することである。もう一つはオブジェクトに対して、そのオブジェクトのクラスへの暗黙の参照を追加することである。
暗黙の参照は、図5に示すように破線で示している。クラスAは、GCルートαから4−1、4−3という経路で到達可能であり、なおかつクラスAからクラスローダXへの暗黙の参照4−4が存在するため、クラスローダXが連鎖的に到達可能となる。
また、クラスCのオブジェクト4−8は、GCルートαから4−1、4−5という経路で到達可能であり、なおかつオブジェクト4−8からクラスCへの暗黙の参照4−6と、クラスCからクラスローダXへの暗黙の参照4−7が存在するため、クラスローダXが連鎖的に到達可能となる。従ってこれらの参照を切断する必要がある。
本実施形態では、クラスローダが破棄済みとマーキングされているにもかかわらず、上述した条件1および条件2を暗黙の参照も含めて満たしていない場合にメモリリークが発生していると判断する。そして、本実施形態では、上記条件を満たしていない事を判別するために、クラスローダを基準にして、そのクラスローダによってロードされたクラスと、そのクラスのオブジェクトをグループ化する。
また、破棄済みのクラスローダのグループについてグループ外からグループ内への参照がある場合、これはGCの対象になっていないオブジェクトから、GCの対象になるべきオブジェクト、すなわち破棄済みのクラスローダの配下に存在するオブジェクトを参照していることを意味する。
上述したグループ化および、グループ外からの参照について図6を用いてさらに詳細に説明する。図6は、本実施形態に係る破棄済みクラスローダへのグループ外から参照する例を説明する図である。
図6に図示していないAPサーバは、クラスローダCLYにおいて、グループ化したクラスやオブジェクトのグループ5−1のクラスローダCLYが、破棄済みである旨のマーキングをしておらず、またGCの対象ではないものとする。
これに対し、APサーバは、クラスローダCLXにおいて、そのクラスローダCLXを基準にしてグループ化されたクラスやオブジェクトのグループ5−2のクラスローダCLXが破棄済みである旨のマーキングをしているために、GCの対象にするべきものである。
しかしながら、図6に示すような以下の6つのケースにおいて、それらの参照をたどることにより、GCルート(つまり、図6に示すGCR0とGCR1)からクラスローダCLXに到達可能であり、クラスローダCLXは、破棄済みにも関わらずGCの対象にできないという矛盾が生じる。すなわち、
1.グループ外からの参照であるGCルートGCR0から、クラスローダCLXへの参照5−3が存在することにより、GCルートGCR0から直接到達可能である。
2.グループ外からの参照であるGCルートGCR0からクラスCX0への参照5−4が存在することにより、参照5−4、暗黙的な参照5−5という経路でGCルートGCR0から到達可能である。
3.グループ外からの参照であるGCルートGCR0からオブジェクトOX0への参照5−6が存在することにより、参照5−6、暗黙的な参照5−7、暗黙的な参照5−5という経路でGCルートGCR0から到達可能である。
4.グループ外からの参照であるオブジェクトOY4からクラスローダCLXへの参照5−10が存在することにより、参照5−8、参照5−9、参照5−10という経路でGCルートGCR1から到達可能である。
5.グループ外からの参照であるオブジェクトOY5からクラスCX3への参照5−12が存在することにより、参照5−8、参照5−11、参照5−12、暗黙的な参照5−13という経路でGCルートGCR1から到達可能である。
6.グループ外からの参照であるオブジェクトOY6からオブジェクトOX6への参照5−14が存在することにより、参照5−8、参照5−14、暗黙的な参照5−15、暗黙的な参照5−13という経路でGCルートGCR1から到達可能である。
なお、図4の3−4に示すように、参照がグループ内に閉じていれば、本本発明の実施形態が特定しようとするメモリリークに該当することはない。
つまり、第1の実施形態本のデータ参照元特定システム10のグループ化部1および、後述する本実施形態のグループ化モジュール6−4において、上述した特性を利用してグループ分けを行う。
なお、図7に示す、本実施形態のグループ化モジュール6−4と、参照探索モジュール6−5およびヒープダンプ6−2は、それぞれ第1の実施形態のグループ化部1と、参照元特定部2と、参照情報群3とに対応する。
引き続き、本発明の第2の実施形態について図7乃至図18を参照してさらに詳細に説明する。図7は、本発明の第2の実施形態に係るデータ参照元特定システムの機能を概念的に示すブロック図である。
本実施形態のデータ参照元特定システム10は、図示していないAPサーバにより破棄済みとマーキングされたクラスローダを探し出し、このクラスローダによってロードされたクラスおよびそのオブジェクトをグループ化すると共に、このグループ外からの参照を見つけることによってメモリリークの直接の原因となる参照を特定するシステムである。
本発明の第2の実施形態の構成は、図7において以下の構成からなる。
入力装置6−1は、本実施形態のデータ参照元特定システム10を始動する指令を発生するユーザインタフェースである、例えばキーボード(Key Board;以下、「KB」と略称する)やマウスあるいは、本データ参照元特定システム10に接続する外部装置等である。
次に、ヒープダンプ6−2(つまり、図8に示すヒープダンプテーブル図に対応する。以下、同様)は、図示していないJava_VMがメモリ領域に生成したヒープダンプである。具体的には、図8に示す本実施形態に係るヒープダンプテーブル図にあるように、このテーブルにはJava_VMにおけるGCルートと、クラスローダと、クラスと、オブジェクトおよびとの参照先を表す情報とが関連付けされた状態で格納されている。
つまり、上述したオブジェクトの一種であるGCルートと、クラスローダと、クラスおよび、オブジェクトにID(つまりメモリアドレスなどのアドレス情報)を割り振り、オブジェクトID間の関係性を記録したテーブルがJava_VMが備えるヒープダンプテーブルである。
以下、図8に示すヒープダンプテーブルの6つの列について個々に説明する。すなわち、
1)オブジェクトID(IDは、すなわち識別子を意味する)は、レコードが示すオブジェクトを識別するIDである。
ここで、レコードとは、データを格納する図8に示すヒープダンプテーブルの様な表における各行ごとの個々の登録データを指す。
2)種別は、そのレコードが保持するデータの種類であり、GCルート、クラスローダ、クラス、オブジェクトがある。
3)クラスのオブジェクトIDは、そのオブジェクトが属するクラスを示すオブジェクトIDである。種別がオブジェクトの場合だけ値が存在する。
なお、種別がオブジェクト以外であれば、n/a(not applicable、すなわち、“該当せず”。以下、同様)と記載する。
4)クラスローダのオブジェクトIDは、そのクラスをロードしたクラスローダを示すオブジェクトIDである。種別がクラスの場合だけ値が存在する。
5)参照先のオブジェクトIDは、そのオブジェクトのクラスに直接宣言された変数であるフィールド等が参照しているオブジェクトのオブジェクトIDである。ここでフィールドとは、クラスの変数の中身のことである。また、図8に示すヒープダンプテーブルの参照先のオブジェクトID欄にあるように、参照先のオブジェクトIDの個数は0個以上の参照を保持できるものとする。
6)破棄済みか?欄は、そのクラスローダが破棄済みであるか否かを示す。レコードの種別がクラスローダの場合だけ値が存在する。
次に、図7に示すデータ参照元特定システムの機能を概念的に示すブロック図において、破棄済みクラスローダ探索モジュール6−3は、ヒープダンプ6−2を入力とし、APサーバにより破棄済みとマーキングされたクラスローダを探索し、その一覧を出力するモジュールである。
また、グループ化モジュール6−4は、上述したヒープダンプ6−2と、破棄済みクラスローダ探索モジュールの出力である破棄済みクラスローダの一覧を入力とし、破棄済みクラスローダによってロードされたクラスおよびそのオブジェクトをその破棄済みクラスローダを基にグループ化すると共に、図9に示すようなグループ化テーブル6−7を出力するモジュールである。
また、参照探索モジュール6−5は、ヒープダンプ6−2と、グループ化テーブル6−7を入力とすることによって、グループ外のオブジェクトからグループ内に入ってくる参照元を特定すると共に、図10に示すようなグループ外からの参照を表すテーブル6−8を出力するモジュールである。
また、出力装置6−6は、本実施形態に係るデータ参照元特定システム10における処理結果を出力する装置である。本出力装置6−6は、例えば液晶ディスプレイやファイルシステムにおけるファイルや、本データ参照元特定システム10の外部に接続する外部装置等である。
また、グループ化テーブル6−7は、グループ化モジュール6−4の出力結果であり、破棄済みクラスローダによってロードされたクラスおよびそのオブジェクトをグループ化したテーブルである。その具体的な内容について図9に示す。図9は、本実施形態に係るグループ化テーブル図である。
そして図10に示す、グループ外からの参照テーブル6−8は、グループ化モジュール6−4によって破棄済みクラスローダを基にグループ化したグループ化対象オブジェクトに対して、他の破棄済みではないクラスローダを基にグループ化したグループ化対象オブジェクトからの参照履歴を記録したテーブルである。
続いて、図7、図11、図12を用いて本データ参照元特定システム10の動作についての説明を行う。
まず、図7に示す、本実施形態に係るデータ参照元特定システムの機能を概念的に表すブロック図に示す、入力装置6−1において、本データ参照元特定システムを始動させるための指令を発生する。指令は例えば外部装置による自動や、KBやマウスなどを用いて手動により入力装置6−1から入力する。
本データ参照元特定システム10は、自装置であるAPサーバによって破棄済みとマーキングされたクラスローダを探索するために、ヒープダンプ6−2を入力とし、破棄済みクラスローダ探索モジュール6−3の処理を実行する。そして、その破棄済みクラスローダ探索モジュール6−3は、破棄済みクラスローダの一覧(不図示)を出力する。
また、グループ化モジュール6−4は、ヒープダンプ6−2と上述した破棄済みクラスローダの一覧を入力として呼び出される。
そして、グループ化モジュール6−4は、破棄済みクラスローダを含むクラスローダによって、ロードされたクラスおよびそのオブジェクトをグループ化すると共に、グループ化テーブル6−7を出力する。
そして、参照探索モジュール6−5は、ヒープダンプ6−2(つまり、図8)に示すレコードの「参照先のオブジェクトID」が、グループ化テーブル6−7(つまり、図9)に示す「配下のオブジェクトID」に一致するオブジェクトを特定すると共に、グループ外からの参照テーブル6−8(つまり、図10)に登録する。
すなわち、破棄したはずのクラスローダの配下のオブジェクトを、グループ外から参照先にしていることが直接的に判るわけである。
出力装置6−6は液晶ディスプレイや、ファイルシステムにおけるファイル、もしくは外部のプログラムモジュールなどであり、入力であるグループ外からの参照テーブル6−8を出力装置6−6の種類に応じて出力する。
引き続き、図7に示すデータ参照元特定システムのブロック図におけるグループ化モジュール6−4のグループ分けの動作について、図11を用いて詳しく説明する。図11は本実施形態に係るグループ化モジュールの動作を示すフローチャートである。
グループ化モジュール6−4は、ヒープダンプ6−2と、破棄済みクラスローダ探索モジュール6−3からの破棄済みクラスローダの一覧の入力に応じて、開始(ステップS10−1)より始まる。グループ化モジュール6−4は、入力であるヒープダンプ6−2の未処理のレコードがなくなるまで繰り返す(ステップS10−2、S10−8)。
グループ化モジュール6−4は、レコードに対する繰り返し処理が開始されると、まず、ヒープダンプ6−2より未処理のレコードを取得する(つまり、図8に示す“行”を1行ごとに取得する。ステップS10−3)。ここで、取得したレコードを説明の便宜上、“RECORD”と表現する。次にレコードの「種別」を、図8に示す「種別」から判別する(ステップS10−4)。
グループ化モジュール6−4は、レコードの種別がオブジェクトの場合は、そのオブジェクトに関連するクラスローダを特定するために、RECORDの中の「クラスのオブジェクトID」からクラスを特定(ステップS10−5)すると共に、さらに特定されたクラスのレコードに存在する「クラスローダのオブジェクトID」を基に、グループ化テーブル6−7にRECORDを追加登録する(ステップS10−6)。
グループ化モジュール6−4は、グループ化テーブル6−7に登録する情報として、「クラスローダのオブジェクトID」列と、「配下のオブジェクトID」列の2つの列に対して、それぞれ以下の値をとる。「クラスローダのオブジェクトID」の値は、前述の手順で取得した「クラスローダのオブジェクトID」の値である。また、「配下のオブジェクトID」の値は、そのRECORDが持つ「オブジェクトID」の値である。
次に、グループ化モジュール6−4は、レコードの種別がクラスの場合には、そのRECORDの情報をグループ化テーブル6−7に追加登録する(ステップS10−6)。
そして、グループ化モジュール6−4は、グループ化テーブル6−7に登録する情報として、「クラスローダのオブジェクトID」列と、「配下のオブジェクトID」列の2つの列に対してそれぞれ以下の値をとる。「クラスローダのオブジェクトID」の値は、RECORD中の「クラスローダのオブジェクトID」の値である。また、「配下のオブジェクトID」の値は、そのRECORDが持つ「オブジェクトID」の値である。
次に、グループ化モジュール6−4は、レコードの種別がクラスローダの場合には、そのRECORDの情報をグループ化テーブル6−7に登録する(ステップS10−7)。
そして、グループ化モジュール6−4は、グループ化テーブル6−7に登録する情報として「クラスローダのオブジェクトID」列と、配下のオブジェクトID」列の2つの列に対してそれぞれ以下の値をとる。「クラスローダのオブジェクトID」の値は、RECORD中の「オブジェクトID」の値である。また、「配下のオブジェクトID」の値もそのRECORDが持つ「オブジェクトID」の値である。
そして、グループ化モジュール6−4は、レコードの種別がオブジェクトでもクラスでもない、例えばGCルートなどのその他の場合には、何も処理を実施せずに図11に示すステップS10−8からステップS10−2の間においてヒープダンプテーブル6−8の未処理レコードがなくなるまで繰り返し実施する。
グループ化モジュール6−4は、未処理のレコードがなくなると処理が完了し(10−9)、グループ化テーブル6−7すなわち、図9のグループ化テーブルを出力する。
続いてグループ化モジュール6−4は、ヒープダンプ6−2とグループ化テーブル6−7とを入力として参照探索モジュール6−5を呼び出す。
ここで、上述したグループ化モジュール6−4の実際の挙動について、図8に示すヒープダンプテーブル図のデータに基づいて、図11に示すグループ化モジュールの動作を示すフローチャートを用いてさらに具体的に説明する。
まず、グループ化モジュール6−4が動作する前は、出力結果であるグループ化テーブル6−7は、図13に示す本実施形態に係るグループ化モジュールが動作する前のグループ化テーブル図に示すように空の状態である。
グループ化モジュール6−4は、動作を開始すると(ステップS10−1)、入力であるヒープダンプ6−2のレコードに対する繰り返し処理(ステップS10−2、ステップS10−8)を実施する。
次に、グループ化モジュール6−4は、ヒープダンプ6−2より、最初の行であるレコードを取得する(ステップS10−3)。レコードはオブジェクトIDがGCR0であるレコードである。グループ化モジュール6−4は、このレコードの種別を判別すると(ステップS10−4)、種別はGCルートであるため、「その他」の分岐を辿り、再度ループを繰り返す(ステップS10−8)。次のオブジェクトIDがGCR1であるレコードも同様である。
グループ化モジュール6−4は、ヒープダンプ6−2より、次の行であるレコードを取得する(ステップS10−3)。取得レコードは「オブジェクトID」がCLXであるレコードである。
グループ化モジュール6−4は、このレコードの種別を判別すると(ステップS10−4)、種別はクラスローダであるため、グループ化テーブル6−7に登録する情報として、「クラスローダのオブジェクトID」には、このレコードの「オブジェクトID」であるCLXを追加登録すると共に、「配下のオブジェクトID」にもこのレコードの「オブジェクトID」であるCLXを追加登録する(ステップS10−7)。
この時点でのグループ化テーブル6−7を図14に示す。図14は、本実施形態に係るグループ化モジュール動作の際に、種別がクラスローダの場合のグループ化テーブル図である。
グループ化モジュール6−4は、繰り返し処理(ステップS10−2)を実施することにより、ヒープダンプ6−2より次のレコードを取得する(ステップS10−3)。取得レコードは「オブジェクトID」がCX0であるレコードである。
グループ化モジュール6−4は、このレコードの種別を判別すると(ステップS10−4)、種別はクラスであるため、グループ化テーブル6−7に登録する情報として、「クラスローダのオブジェクトID」には、このレコードの「クラスローダのID」であるCLXを追加登録すると共に、「配下のオブジェクトID」には、レコードのオブジェクトIDであるCX0を追加登録する(ステップS10−6)。
この時点でのグループ化テーブル6−7を図15に示す。図15は、本実施形態に係るグループ化モジュール動作の際に、種別がクラスの場合のグループ化テーブル図である。
グループ化モジュール6−4は、続く3つのレコードも種別がクラスのレコードであるため、同様の処理を実施する。この時点でのグループ化テーブル6−7を図16に示す。
図16は、本実施形態に係るグループ化モジュール動作の際、種別がその他のクラスの場合のグループ化テーブル図である。
グループ化モジュール6−4は、引き続き、繰り返し処理(ステップS10−2)を実施することにより、ヒープダンプ6−2より、次のレコードを取得する(ステップS10−3)。取得レコードは「オブジェクトID」がOX0であるレコードである。
グループ化モジュール6−4は、このレコードの種別を判別すると(ステップS10−4)、種別はオブジェクトであるため、クラスローダを特定するためにこのレコードの「クラスのオブジェクトID」の値であるCX0が指し示すレコードを参照する(ステップS10−5)。そのCX0が指し示すレコードの「クラスローダのオブジェクトID」はCLXである。
そのため、グループ化テーブル6−7に登録する情報として、「クラスローダのオブジェクトID」には、上記手順で取得したCLXを追加登録すると共に、「配下のオブジェクトID」には、レコードのオブジェクトIDであるOX0を追加登録する(ステップS10−6)。
この時点でのグループ化テーブル6−7を図17に示す。図17は、本実施形態に係るグループ化モジュール動作の際に、種別がオブジェクトの場合のグループ化テーブル図である。
続く3つのレコードも種別がオブジェクトのレコードであるため、同様の処理を実施する。この時点でのグループ化テーブル6−7を図18に示す。図18は本実施形態に係るグループ化モジュール動作の際に、種別がその他のオブジェクトの場合のグループ化テーブル図である。
以降のレコードにも同様の繰り返し処理を実施すると、最終的に図9に示すグループ化テーブルとなり、処理を終了する(ステップS10−9)。
次に、図7に示す、本実施形態に係るデータ参照元特定システムの機能を概念的に示すブロック図における参照探索モジュール6−5の動作について、図12を用いて詳細に説明する。図12は、本実施形態に係る参照探索モジュールの動作を示すフローチャートである。これを用いて破棄済みクラスローダを基準にしてグループ化したクラスやオブジェクトを含むオブジェクト群をそのグループの外部から参照するその参照元を探索する。
参照探索モジュール6−5の動作は、開始より始まる(ステップS11−1)。参照探索
モジュール6−5は、入力であるヒープダンプ6−2の未処理の行がなくなるまで処理を繰り返す(ステップS11−2、ステップS11−12)。
参照探索モジュール6−5は、ヒープダンプ6−2のレコードに対する繰り返し処理を開始すると、まずヒープダンプ6−2より未処理のヒープダンプのレコードを取得する(ステップS11−3)。
ここで、取得したヒープダンプのレコードを説明の便宜上、RECORDと表現する。
続いて、参照探索モジュール6−5は、入力であるグループ化テーブル6−7の未処理のレコードがなくなるまで処理を繰り返す(ステップS11−4、ステップS11−11)。
参照探索モジュール6−5は、グループ化テーブル6−7のレコードに対する繰り返し処理を開始すると、まずグループ化テーブル6−7より未処理のレコードを取得する(ステップS11−5)。ここで、取得したグループ化テーブル6−7のレコードを説明の便宜上、GROUPED_RECORDと表現する。
そして、参照探索モジュール6−5は、次の条件式Aに示す、3つの条件を全て満たすか否かを確認する(ステップS11_6)。すなわち、
条件1は、GROUPED_RECORDの「クラスローダのオブジェクトID」で示されるクラスローダが破棄済みである。
条件2は、RECORDの「オブジェクトID」がGROUPED_RECORDの「配下のオブジェクトID」のどれとも一致しない。そして、
条件3は、RECORDの「参照先のオブジェクトID」とGROUPED_RECORDの「配下のオブジェクトID」とが一致する。
である。
ここで「参照先のオブジェクトID」は、図8に示すヒープダンプテーブルのRECORDであり、「クラスローダのオブジェクトID」と「配下のオブジェクトID」は、図9に示すグループ化テーブルのGROUPED_RECORDである。
そして参照探索モジュール6−5は、条件式Aに示す上記条件が全て満たされた場合(YES:ステップS11_6)、グループ外からの参照テーブル6−8に、以下の通りの行を追加登録する(ステップS11_7)。すなわち、
(1)「クラスローダのオブジェクトID」の列の値は、GROUPED_RECORDの「クラスローダのオブジェクトID 」の値とする。
(2)「参照元のオブジェクトID」の列の値は、RECORDの「オブジェクトID」の値とする。
ただし、RECORDの「参照先のオブジェクトID」に複数の参照先が含まれている場合には、上記の(2)については、上述した条件3を満たす参照のみを書きこむ。
(3)「参照先のオブジェクトID」の列の値は、RECORDの「参照先のオブジェクトID」の値とする。
参照探索モジュール6−5は、条件式Aに示す上記条件の何れかが満たされない場合(NO:ステップS11_6)、繰り返し処理(ステップ11−11)を実施する。
そして、図7に示す、データ参照元特定システムの機能を概念的に示すブロック図における参照探索モジュール6−5は、ステップS11−2とステップS11−4の繰り返しを終了すると処理を終了し、グループ外からの参照テーブル6−8を出力する(ステップS11_12、ステップS11−13)。
なお、グループ外からの参照テーブルの一例は図10であり、図6に示す、破棄済みクラスローダへのグループ外から参照する例を説明する図における5−3、5−4、5−6、5−10、5−12、5−14の参照を示している。
そして、図7に示すブロック図における参照探索モジュール6−5は、グループ外からの参照テーブル6−8を入力として、出力装置を呼び出す。
上述したように、本実施形態に係るデータ参照元特定システムでは、破棄済みクラスローダ探索モジュール6−3と、グループ化モジュール6−4と、参照探索モジュール6−5とを用いることにより、グループ外からの参照テーブル6−8を得ることが出来る。
それによって、参照先のオブジェクトのサイズや、そのオブジェクトの個数に依らずに、クラスローダを基準としてグループ化したオブジェクトのうちの破棄済みクラスローダのグループをそのグループ外から参照するその参照元のオブジェクトを特定することができる。
すなわち本実施形態によれば、参照元のオブジェクトを直接的に特定することができるので、参照先のオブジェクトのサイズが小さいか、もしくは個数が少ない場合でもメモリリークの直接の原因となる参照元のオブジェクトを特定することができるという効果を奏することができる。
また、本実施形態によれば、参照先のオブジェクトのサイズが小さいか、もしくは個数が少ない場合でもメモリリークの直接の原因となる参照元のオブジェクトを効率的に特定することができるので、例えば開発や評価途上での長時間動作試験などを実施しなくてもメモリリークを容易に検出することができるという効果を奏することができる。
さらに、本実施形態によれば、APにおける複数の時点でのヒープダンプを比較してクラスやオブジェクトの増減を観察する必要がなく、ある時点での単一のヒープダンプを用いるだけでメモリリークの参照元のオブジェクトを特定することができるという効果を奏することができる。
つまり、本実施形態によれば、参照先のオブジェクトのサイズが小さいかもしくはオブジェクトの個数が少ない場合でもメモリリークの直接の原因となる参照元のオブジェクトを特定することができるという効果を奏することができる。
以上、本発明の第2の実施形態として、上述した構成および動作を例に説明したが、本発明は、必ずしも係る構成や動作には限定されない。
<第3の実施形態>
次に、第1および第2の実施形態を基本とする、応用例である第3の実施形態について図6および図7を参照して説明する。
第3の実施形態は、図7に示す第2の実施形態に係るデータ参照元特定システムの機能を概念的に示すブロック図における破棄済みクラスローダ探索モジュール6−3に対して、破棄済みとマーキングしたクラスローダにのみ依存(すなわち、参照)するクラスローダに対して、そのクラスローダが明示的に破棄済みとマーキングされていなくても破棄済みと見なすように処理を変更した点が、第2の実施形態と異なる。そのため説明の便宜上、このクラスローダを見なし破棄済みクラスローダと呼ぶこととする。
そして、以下の説明において、第2の実施形態で説明した図6乃至図18と同じ動作をする箇所は説明を省略すると共に、本実施形態における上述した相違点を中心に、構成と動作および効果を説明する。
第2の実施形態に係るデータ参照元特定システムでは、参照探索モジュール6−5は、見なし破棄済みクラスローダのグループへの参照がリーク(すなわち、明示的に破棄済みとはマーキングしてはいないが引き続き参照される)している場合、そのリークの原因となる外部からの参照は、見なし破棄済みクラスローダのグループから破棄済みクラスローダのグループへの参照として現れることとなる。
例えば、図6に示す、破棄済みクラスローダCLXへのグループ外からの参照を示す図において、CLV(不図示)という、見なし破棄済みクラスローダのグループのオブジェクトOV(不図示)から、OX4への参照があった場合を考える。
参照探索モジュール6−5は、CLVは見なし破棄済みクラスローダであるので、そのCLVのクラスローダを基準にしてグループ化したオブジェクト群のうちのオブジェクトOVを参照する別のグループのクラスローダであるCLW(不図示)のオブジェクト群があったとした場合、そのオブジェクト群は、実質的にOX4を参照しているので、リークの元であることが判る。
上述したように、本実施形態に係るデータ参照元特定システムにおいては、リークの原因となる外部からの参照は、見なし破棄済みクラスローダのグループへの参照として現れるため、メモリリークの原因となる参照元の特定をより正確に行うことが可能となる。
すなわち本実施形態によれば、参照元のオブジェクトを直接的に特定することができるので、参照先のオブジェクトのサイズが小さいか、もしくは個数が少ない場合でもメモリリークの原因となる参照元のオブジェクトを特定することができるという効果を奏することができる。
また、本実施形態によれば、参照先のオブジェクトのサイズが小さいか、もしくは個数が少ない場合でもメモリリークの原因となる参照元のオブジェクトを効率的に特定することができるので、例えば開発や評価途上での長時間動作試験などを実施しなくてもメモリリークを容易に検出することができるという効果を奏することができる。
さらに、本実施形態によれば、APにおける複数の時点でのヒープダンプを比較してクラスやオブジェクトの増減を観察する必要がなく、ある時点での単一のヒープダンプを用いるだけでメモリリークの参照元のオブジェクトを特定することができるという効果を奏することができる。
加えて、破棄済みクラスローダにのみ依存するクラスローダが破棄済みと明示していなくても破棄済みと見なすことにより、メモリリークの原因となるグループ外から参照する参照元を正確に特定することが可能になるという追加の効果を奏することができる。
つまり、本実施形態によれば、参照先のオブジェクトのサイズが小さいかもしくはオブジェクトの個数が少ない場合でもメモリリークの原因となる参照元のオブジェクトを特定することができるという効果を奏することができる。
以上、本発明の第3の実施形態として、上述した構成および動作を例に説明したが、本発明は、必ずしも係る構成や動作には限定されない。
<第4の実施形態>
次に、第2および第3の実施形態を基本とする、第4の実施形態について図19を用いて説明する。図19は、第4の実施形態に係るデータの参照元を特定するコンピュータ・プログラムを説明する図である。
本実施形態は、情報処理装置100において、図7に示す第2の実施形態に係るデータ参照元特定システムの機能を概念的に示すブロック図における各機能を、情報処理装置100が有するCentral Processing Unit(以下、「CPU」と略称する)101と、そのCPU101において動作するソフトウェアであるOperating System(以下、「OS」と略称する)ならびにコンピュータ・プログラムであるアプリケーションソフト(以下、「アプリ」と略称する)とが協働することにより制御する。
そのため、以下の説明において、第2および第3の実施形態で説明した、図6乃至図18に示す各ブロック図と、各フローチャート図および、各テーブルにおいて同じ構成や、同じ動作をする箇所は、説明を省略すると共に、本実施形態における上述した相違点を中心に、構成と動作および効果を説明する。
図19に示す情報処理装置100は、CPU101と、CPU101において動作するOSならびにアプリと、メモリ102と、読書き可能な不揮発性記憶媒体であるストレージ108と、コンピュータ・プログラムや各種のテーブルなどのデータやファイルを記録する記録媒体109と、KBならびにマウスなどの入力デバイス111、モニタに表示をする出力デバイス110とからなる。
また、本情報処理装置100の図示していない外部装置と通信するための通信インタフェース112および、外部装置との間でデータ転送を行うための高速データバス113とを有している。ここで、通信インタフェース112は、例えば有線や無線などの企業のイントラネットや、一般公共のインターネットなどの今では一般的な通信インタフェースを用いることができる。また、高速データバス113は、外部装置との間でデータ通信が可能なバスであればよい。
なお、図19に記載している例えば、チップセットや入出力コントローラは、CPU101やメモリ102と共に情報処理装置100を構成するデバイスであり、CPU101と協働するOSやアプリによってストレージ108と、記憶媒体109と、入力デバイス111と、出力デバイス110と、通信インタフェース112および高速データバス113などの周辺機能デバイスを制御するための集積回路である。
また、メモリ102には、アプリの一部である本来の処理を行うプログラム105と、例えばJava_VMが動作する際に生成する情報を格納するヒープ領域103(すなわち、図1に示す、参照情報群3や、図2に示す参照情報群24に対応)と、参照元特定プログラム104(すなわち、図7に示す、第2の実施形態に係るデータ参照元特定システムの機能を概念的に示すブロック図の各処理に対応)と、グループ化テーブル106(すなわち、図7に示すグループ化テーブル6−7)と、グループ外からの参照テーブル107(すなわち、図7に示すグループ外からの参照テーブル6−8に対応)とを有している。
ここで、プログラム105は、本情報処理装置100が、本来処理するプログラムであり、参照元特定プログラム104は、本実施形態で説明する本来処理するプログラム105におけるメモリリークの直接の原因となる参照元を特定するコンピュータ・プログラムである。
そして本情報処理装置100を、通信インタフェース112もしくは、高速データバス113を用いて図示していない外部装置から自動もしくは、入力デバイス111を用いて手動によって起動すると、ストレージ108からメモリ102にアプリの一部であるプログラム105および、参照元特定プログラム104とが読み込まれる。
なお、初期には、アプリおよびアプリの一部であるプログラム105や参照元特定プログラム104は、自動もしくは手動によって記憶媒体109か、通信インタフェース112もしくは高速データバス113を経て本情報処理装置100のストレージ108に格納することが可能である。
そして、メモリ102における、参照元特定プログラム104は、破棄済みクラスローダ特定部116と、グループ化部117と、参照元特定部118と、入出力処理部119とを有する。また、入出力処理部119は例えば、外部装置やデータやファイルを操作する高速データバス113や記録媒体109のほか、入力デバイス111や出力デバイス110なども制御する。
つまり、本情報処理装置100によるデータ参照元特定システムを実現するために、上述した図7乃至図18に示す各機能ブロックの動作説明図と、各テーブルと、各モジュール機能のフローチャートの動作とを、実現可能なアプリつまりコンピュータ・プログラムとして供給する。
そして、そのコンピュータ・プログラムを本情報処理装置100によるデータ参照元の特定方法として用意した上記CPU101および協働するOSならびにアプリの一部であるプログラム105と参照元特定プログラム104とをメモリ102に読み出して実行することによって達成する。
なお、本実施形態における破棄済みクラスローダ特定部116と、グループ化部117と、参照元特定部118とは、第2および第3の実施形態における破棄済みクラスローダ探索モジュール6−3と、グループ化モジュール6−4と、参照探索モジュール6−5にそれぞれ対応する。
そのため、具体的な動作については、第2の実施形態および、第3の実施形態において図6乃至図18を用いて説明しているので本実施形態での説明は省略する。
上述したように、例えばサーバや、ワークステーション(Work Station;以下「WS」と略称する)などの汎用の情報処理装置100を用いて、メモリ102に参照元特定プログラム104を読込むと共に、本来実行するプログラムと共にその処理を実行するにより、本来実行するプログラムにおけるメモリリークの直接の原因となるデータの参照元を特定することができる。
また、本情報処理装置100は、情報処理装置と記載したが、通信インタフェース112や、高速データバス113を介して、例えば企業のイントラネットやインターネットに接続する外部装置である他の情報処理装置と接続することにより、それらの情報処理装置に対してアプリケーションサービスを提供することが可能な情報処理システムとも見なすことができる。
なお、本実施形態における情報処理装置100は、説明の都合上、図2に示すようなJava_VM環境におけるJavaプログラムによるAPサーバの動作を基に説明したが、図2に示すように、OSの種類には限定されない。
また、本実施形態における情報処理装置100は、Java_VM環境に限定せずに、何れかのOSと協働する何れかのJava_VM環境のようなミドルウェアを用いて実現してもかまわない。
また、本実施形態で説明したメモリリークの直接の原因となる参照元を特定するコンピュータ・プログラムである参照元特定プログラム104は、上述したようなJava_VM環境や同様のミドルウェアが有するプログラムもしくは、本来動作するプログラム105に含まれるように構成してもよい。
すなわち本実施形態によれば、参照元のオブジェクトを直接的に特定することができるので、参照先のオブジェクトのサイズが小さいか、もしくは個数が少ない場合でもメモリリークの直接の原因となる参照元のオブジェクトを特定することができるという効果を奏することができる。
また、本実施形態によれば、参照先のオブジェクトのサイズが小さいか、もしくは個数が少ない場合でもメモリリークの直接の原因となる参照元のオブジェクトを効率的に特定することができるので、例えば開発や評価途上での長時間動作試験などを実施しなくてもメモリリークを容易に検出することができるという効果を奏することができる。
さらに、本実施形態によれば、APにおける複数の時点でのヒープダンプを比較してクラスやオブジェクトの増減を観察する必要がなく、ある時点での単一のヒープダンプを用いるだけでメモリリークの参照元のオブジェクトを特定することができるという効果を奏することができる。
加えて、例えばサーバやWSなどの汎用の情報処理装置を用いて、そこに上述した参照元を特定するコンピュータ・プログラムを読込むと共にその処理を実行するにより、メモリリークの直接の原因となる参照元を容易に特定することができるので、信頼性の高いAPサービスを提供することができるという効果を奏することができる。
つまり、本実施形態によれば、参照先のオブジェクトのサイズが小さいかもしくはオブジェクトの個数が少ない場合でもメモリリークの直接の原因となる参照元のオブジェクトを特定することができるという効果を奏することができる。
以上、本発明の第4の実施形態として、上述した構成および動作を例に説明したが、本発明は、必ずしも係る構成や動作には限定されない。
なお、上述した実施形態及びその変形例の一部又は全部は、以下の付記のようにも記載されうる。しかしながら、上述した実施形態及びその変形例により例示的に説明した本発明は、以下には限らない。即ち、
(付記1)
アプリケーションの配備に伴って元プログラム読み込み機能を生成すると共に該元プログラム読み込み機能を用いて前記アプリケーションを構成するオブジェクト群であるプログラムおよびその元プログラムとが記憶領域に生成して実行される情報処理装置において、アプリケーションの実行に伴って更新される、記憶領域における前記オブジェクト群の参照関係を表す参照情報群に含まれるデータに基づいて、前記オブジェクト群を前記元プログラム読み込み機能を基準にしてグループ化するグループ化部と、
前記アプリケーションの終了に伴って破棄済みとマーキングされた破棄済みの元プログラム読み込み機能を基準にして、前記グループ化された情報に基づいてグループ化したグループに対して、該グループの外部から参照する参照元を特定する参照元特定部とを有すること特徴とするデータ参照元特定システム。
(付記2)
前記グループ化部は、前記参照情報群の更新データに基づいて、前記プログラムおよび前記元プログラムとを、前記元プログラムを読み込んだ前記元プログラム読み込み機能を基準にしてグループ分けすると共に、グループ分けの状態を表すグループ化情報を保持することを特徴とする付記1に記載のデータ参照元特定システム。
(付記3)
前記参照元特定部は、前記参照情報群の更新データおよび前記グループ化部における前記元プログラム読み込み機能を基準にしてグループ分けした際のグループ化情報に基づいて、前記グループ化された破棄済みの元プログラム読み込み機能のグループに対して該グループの外部から参照する参照元を特定することを特徴とする付記1もしくは付記2に記載のデータ参照元特定システム。
(付記4)
前記グループ化部は、前記破棄済みの元プログラム読み込み機能である破棄済みのクラスローダを、前記参照情報群を参照することにより特定する破棄済みクラスローダ探索モジュールと、
前記参照情報群であるヒープダンプテーブルと、前記特定された破棄済みのクラスローダの一覧とを基にグループ分けすると共に、グループ化情報であるグループ化テーブルを生成するグループ化モジュールとを含むことを特徴とする付記1もしくは付記2に記載のデータ参照元特定システム。
(付記5)
前記グループ化モジュールは、前記ヒープダンプテーブルおよび前記破棄済みクラスローダの一覧に基づいて、ヒープダンプテーブルに含まれるレコードの種別が前記オブジェクトの場合には、該オブジェクトが属する前記クラスのオブジェクトIDを基にクラスのレコードを特定すると共に、特定したクラスローダのオブジェクトIDを基にグループ化テーブルにレコードを追加登録し、前記種別が前記クラスの場合には、その特定したクラスローダのオブジェクトIDを基にグループ化テーブルにレコードを追加登録し、前記種別が前記クラスローダの場合には、前記オブジェクトIDを基にグループ化テーブルにレコードの情報を追加登録し、前記種別がメモリ資源を解放するメモリ資源解放機能であるガベージコレクションを含むその他の場合には、何も処理をしないグループ分けを行うと共にグループ化テーブルを生成することを特徴とする付記4に記載のデータ参照元特定システム。
(付記6)
前記参照探索モジュールは、前記ヒープダンプテーブルおよび前記グループ化テーブルに基づいて、該グループ化テーブルのレコードに対して、グループドレコードの「クラスローダのオブジェクトID」で示される前記クラスローダが破棄済みでかつ、レコードの「オブジェクトID」が前記グループドレコードの「配下のオブジェクトID」の何れにも一致しないでかつ、前記レコードの「参照先のオブジェクトID」と前記グループドレコードの「配下のオブジェクトID」が一致する条件を満たした場合に、グループ外からの参照テーブルに対して、「クラスローダのオブジェクトID」の列には、前記グループドレコードの「クラスローダのオブジェクトID」の値を、「参照元のオブジェクトID」の列には、前記レコードの「オブジェクトID」の値を、そして「参照先のオブジェクトID」の列には、前記レコードの「参照先のオブジェクトID」の値をそれぞれ追加登録することにより、グループ外からの参照テーブルを生成すると共に、グループ外から参照する参照元を探索することを特徴とする付記4に記載のデータ参照元特定システム。
(付記7)
前記データ参照元特定システムは、前記破棄済みとマーキングされたクラスローダのオブジェクト群が占有するメモリ資源を解放するガベージコレクションの参照開始点からの参照をも参照元としてグループ分けすることにより、その参照元を特定することを特徴とする付記5に記載のデータ参照元特定システム。
(付記8)
前記グループ化モジュールは、明示的に破棄済みとマーキングされていなくとも前記破棄済みのクラスローダにのみ依存するクラスローダを前記破棄済みのクラスローダと見なしてグループ分けするとともに、前記グループ化テーブルを生成することを特徴とする付記1、付記2、付記4、もしくは付記5の何れかに記載のデータ参照元特定システム。
(付記9)
前記ヒープダンプテーブルに含まれる情報には、ガベージコレクションの参照開始点からの参照および暗黙の参照とを含むことを特徴とする付記4乃至付記8に記載のデータ参照元特定システム。
(付記10)
アプリケーションの配備に伴って元プログラム読み込み機能を生成すると共に該元プログラム読み込み機能を用いて前記アプリケーションを構成するオブジェクト群であるプログラムおよびその元プログラムとが記憶領域に生成して実行される情報処理装置において、
アプリケーションの実行に伴って更新される、記憶領域におけるオブジェクト群の参照関係を表す参照情報群に含まれるデータに基づいて、前記オブジェクト群を前記元プログラム読み込み機能を基準にしてグループ化し、
前記アプリケーションの終了に伴って破棄済みとマーキングされた破棄済みの元プログラム読み込み機能を基準にして、前記グループ化された情報に基づいてグループ化したグループに対して、該グループの外部から参照する参照元を特定する
ことを特徴とするデータ参照元特定方法。
(付記11)
アプリケーションの配備に伴って元プログラム読み込み機能を生成すると共に該元プログラム読み込み機能を用いて前記アプリケーションを構成するオブジェクト群であるプログラムおよびその元プログラムとが記憶領域に生成して実行される情報処理装置を制御するコンピュータ・プログラムであって、そのコンピュータ・プログラムにより、
アプリケーションの実行に伴って更新される、記憶領域における前記オブジェクト群の参照関係を表す参照情報群に含まれるデータに基づいて、前記オブジェクト群を前記元プログラム読み込み機能を基準にしてグループ化するグループ化機能と、
前記アプリケーションの終了に伴って破棄済みとマーキングされた破棄済みの元プログラム読み込み機能を基準にして前記グループ化された情報に基づいてグループ化したグループに対して、該グループの外部から参照する参照元を特定する機能とを、
コンピュータに実現させることを特徴とするコンピュータ・プログラム。
本発明は、上述した各実施形態には限定されず、メモリの消費が増加するメモリリークの直接の原因となる参照元のデータを特定する情報処理システム等におけるアプリケーションの開発や評価および運用管理などに適用可能である。
1 グループ化部
2 参照元特定部
3 参照情報群
10 データ参照元特定システム
100 情報処理装置
101 CPU
102 メモリ
103 ヒープ領域
104 参照元特定プログラム
105 プログラム
106 グループ化テーブル
107 グループ外からの参照テーブル
108 ストレージ
109 記録媒体
110 出力デバイス
111 入力デバイス
112 通信インタフェース
113 高速データバス
116 破棄済みクラスローダ特定部
117 グループ化部
118 参照元特定部
119 入出力処理部

Claims (10)

  1. アプリケーションの配備に伴って元プログラム読み込み機能を生成すると共に該元プログラム読み込み機能を用いて前記アプリケーションを構成するオブジェクト群であるプログラムおよびその元プログラムとが記憶領域に生成して実行される情報処理装置において、アプリケーションの実行に伴って更新される、記憶領域における前記オブジェクト群の参照関係を表す参照情報群に含まれるデータに基づいて、前記オブジェクト群を前記元プログラム読み込み機能を基準にしてグループ化するグループ化部と、
    前記アプリケーションの終了に伴って破棄済みとマーキングされた破棄済みの元プログラム読み込み機能を基準にして、前記グループ化された情報に基づいてグループ化したグループに対して、該グループの外部から参照する参照元を特定する参照元特定部とを有すること特徴とするデータ参照元特定システム。
  2. 前記グループ化部は、前記参照情報群の更新データに基づいて、前記プログラムおよび前記元プログラムとを、前記元プログラムを読み込んだ前記元プログラム読み込み機能を基準にしてグループ分けすると共に、グループ分けの状態を表すグループ化情報を保持することを特徴とする請求項1に記載のデータ参照元特定システム。
  3. 前記参照元特定部は、前記参照情報群の更新データおよび前記グループ化部における前記元プログラム読み込み機能を基準にしてグループ分けした際のグループ化情報に基づいて、前記グループ化された破棄済みの元プログラム読み込み機能のグループに対して該グループの外部から参照する参照元を特定することを特徴とする請求項1もしくは請求項2に記載のデータ参照元特定システム。
  4. 前記グループ化部は、前記破棄済みの元プログラム読み込み機能である破棄済みのクラスローダを、前記参照情報群を参照することにより特定する破棄済みクラスローダ探索モジュールと、
    前記参照情報群であるヒープダンプテーブルと、前記特定された破棄済みのクラスローダの一覧とを基にグループ分けすると共に、グループ化情報であるグループ化テーブルを生成するグループ化モジュールとを含むことを特徴とする請求項1もしくは請求項2に記載のデータ参照元特定システム。
  5. 前記グループ化モジュールは、前記ヒープダンプテーブルおよび前記破棄済みクラスローダの一覧に基づいて、ヒープダンプテーブルに含まれるレコードの種別が前記オブジェクトの場合には、該オブジェクトが属する前記クラスのオブジェクトIDを基にクラスのレコードを特定すると共に、特定したクラスローダのオブジェクトIDを基にグループ化テーブルにレコードを追加登録し、前記種別が前記クラスの場合には、その特定したクラスローダのオブジェクトIDを基にグループ化テーブルにレコードを追加登録し、前記種別が前記クラスローダの場合には、前記オブジェクトIDを基にグループ化テーブルにレコードの情報を追加登録し、前記種別がメモリ資源を解放するメモリ資源解放機能であるガベージコレクションを含むその他の場合には、何も処理をしないグループ分けを行うと共にグループ化テーブルを生成することを特徴とする請求項4に記載のデータ参照元特定システム。
  6. 前記参照探索モジュールは、前記ヒープダンプテーブルおよび前記グループ化テーブルに基づいて、該グループ化テーブルのレコードに対して、グループドレコードの「クラスローダのオブジェクトID」で示される前記クラスローダが破棄済みでかつ、レコードの「オブジェクトID」が前記グループドレコードの「配下のオブジェクトID」の何れにも一致しないでかつ、前記レコードの「参照先のオブジェクトID」と前記グループドレコードの「配下のオブジェクトID」が一致する条件を満たした場合に、グループ外からの参照テーブルに対して、「クラスローダのオブジェクトID」の列には、前記グループドレコードの「クラスローダのオブジェクトID」の値を、「参照元のオブジェクトID」の列には、前記レコードの「オブジェクトID」の値を、そして「参照先のオブジェクトID」の列には、前記レコードの「参照先のオブジェクトID」の値をそれぞれ追加登録することにより、グループ外からの参照テーブルを生成すると共に、グループ外から参照する参照元を探索することを特徴とする請求項4に記載のデータ参照元特定システム。
  7. 前記データ参照元特定システムは、前記破棄済みとマーキングされたクラスローダのオブジェクト群が占有するメモリ資源を解放するガベージコレクションの参照開始点からの参照をも参照元としてグループ分けすることにより、その参照元を特定することを特徴とする請求項5に記載のデータ参照元特定システム。
  8. 前記グループ化モジュールは、明示的に破棄済みとマーキングされていなくとも前記破棄済みのクラスローダにのみ依存するクラスローダを前記破棄済みのクラスローダと見なしてグループ分けするとともに、前記グループ化テーブルを生成することを特徴とする請求項1、請求項2、請求項4、もしくは請求項5の何れかに記載のデータ参照元特定システム。
  9. アプリケーションの配備に伴って元プログラム読み込み機能を生成すると共に該元プログラム読み込み機能を用いて前記アプリケーションを構成するオブジェクト群であるプログラムおよびその元プログラムとが記憶領域に生成して実行される情報処理装置において、
    アプリケーションの実行に伴って更新される、記憶領域におけるオブジェクト群の参照関係を表す参照情報群に含まれるデータに基づいて、前記オブジェクト群を前記元プログラム読み込み機能を基準にしてグループ化し、
    前記アプリケーションの終了に伴って破棄済みとマーキングされた破棄済みの元プログラム読み込み機能を基準にして、前記グループ化された情報に基づいてグループ化したグループに対して、該グループの外部から参照する参照元を特定する
    ことを特徴とするデータ参照元特定方法。
  10. アプリケーションの配備に伴って元プログラム読み込み機能を生成すると共に該元プログラム読み込み機能を用いて前記アプリケーションを構成するオブジェクト群であるプログラムおよびその元プログラムとが記憶領域に生成して実行される情報処理装置を制御するコンピュータ・プログラムであって、そのコンピュータ・プログラムにより、
    アプリケーションの実行に伴って更新される、記憶領域における前記オブジェクト群の参照関係を表す参照情報群に含まれるデータに基づいて、前記オブジェクト群を前記元プログラム読み込み機能を基準にしてグループ化するグループ化機能と、
    前記アプリケーションの終了に伴って破棄済みとマーキングされた破棄済みの元プログラム読み込み機能を基準にして前記グループ化された情報に基づいてグループ化したグループに対して、該グループの外部から参照する参照元を特定する機能とを、
    コンピュータに実現させることを特徴とするコンピュータ・プログラム。
JP2012071465A 2012-03-27 2012-03-27 データ参照元特定システム及びその特定方法、並びにそのコンピュータ・プログラム Expired - Fee Related JP6010961B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012071465A JP6010961B2 (ja) 2012-03-27 2012-03-27 データ参照元特定システム及びその特定方法、並びにそのコンピュータ・プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012071465A JP6010961B2 (ja) 2012-03-27 2012-03-27 データ参照元特定システム及びその特定方法、並びにそのコンピュータ・プログラム

Publications (2)

Publication Number Publication Date
JP2013205911A true JP2013205911A (ja) 2013-10-07
JP6010961B2 JP6010961B2 (ja) 2016-10-19

Family

ID=49524976

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012071465A Expired - Fee Related JP6010961B2 (ja) 2012-03-27 2012-03-27 データ参照元特定システム及びその特定方法、並びにそのコンピュータ・プログラム

Country Status (1)

Country Link
JP (1) JP6010961B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200012536A (ko) * 2018-07-27 2020-02-05 삼성전자주식회사 전자 장치 및 그의 동작 방법

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002534737A (ja) * 1999-01-06 2002-10-15 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 低減されたメモリ条件でプログラムコードを実行するための装置
US20050204341A1 (en) * 2004-03-11 2005-09-15 International Business Machines Corp. Method, system and article for detecting critical memory leaks causing out-of-memory errors in Java software
JP2006350876A (ja) * 2005-06-20 2006-12-28 Hitachi Ltd ヒープダンプ取得方法
WO2011104889A1 (ja) * 2010-02-25 2011-09-01 株式会社日立製作所 計算機システム、メモリ管理方法及びメモリ管理プログラム
US20110283163A1 (en) * 2010-05-12 2011-11-17 Salesforce.Com, Inc. Method and System for Identifying Errors in Code

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002534737A (ja) * 1999-01-06 2002-10-15 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 低減されたメモリ条件でプログラムコードを実行するための装置
US20050204341A1 (en) * 2004-03-11 2005-09-15 International Business Machines Corp. Method, system and article for detecting critical memory leaks causing out-of-memory errors in Java software
JP2006350876A (ja) * 2005-06-20 2006-12-28 Hitachi Ltd ヒープダンプ取得方法
WO2011104889A1 (ja) * 2010-02-25 2011-09-01 株式会社日立製作所 計算機システム、メモリ管理方法及びメモリ管理プログラム
US20110283163A1 (en) * 2010-05-12 2011-11-17 Salesforce.Com, Inc. Method and System for Identifying Errors in Code

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200012536A (ko) * 2018-07-27 2020-02-05 삼성전자주식회사 전자 장치 및 그의 동작 방법
KR102648539B1 (ko) 2018-07-27 2024-03-18 삼성전자주식회사 전자 장치 및 그의 동작 방법
US11934853B2 (en) 2018-07-27 2024-03-19 Samsung Electronics Co., Ltd. Electronic device and operating method thereof

Also Published As

Publication number Publication date
JP6010961B2 (ja) 2016-10-19

Similar Documents

Publication Publication Date Title
US20060265438A1 (en) Leveraging garbage collection to dynamically infer heap invariants
US20130185708A1 (en) Determining compatibility of an application with different versions of an operating system
CN106294134A (zh) 代码的崩溃定位方法及装置
US20100017427A1 (en) Multilevel Hierarchical Associations Between Entities in a Knowledge System
US20120197944A1 (en) System and method for determining an object's lifetime in an object oriented environment
US20110153689A1 (en) Confirming the sensitivity of a data object in a managed object heap
CN106648755B (zh) 一种在安卓art环境中动态加载dex的方法及装置
CN103678098B (zh) 一种hadoop程序测试的方法和系统
CN105117346A (zh) 虚拟化平台的分布式系统自动化测试方法及系统
KR20080099247A (ko) 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터판독가능 매체 및 시스템
US11226808B2 (en) Application execution device, application execution method, and recording medium
CN106095501A (zh) 一种应用部署方法及装置
US11893367B2 (en) Source code conversion from application program interface to policy document
US8290984B2 (en) Configuration deployment management
US10216553B2 (en) Message oriented middleware with integrated rules engine
CN112506492A (zh) 一种支持动态场景配置的可视化埋点方法
JP2010140408A (ja) ソースコード変換装置
JP6048957B2 (ja) 情報処理装置、プログラム、及び情報処理方法
CN111045941A (zh) 用户界面控件的定位方法、装置及存储介质
JP6010961B2 (ja) データ参照元特定システム及びその特定方法、並びにそのコンピュータ・プログラム
WO2018226460A1 (en) Asynchronous operation query
CN103942131A (zh) 监控底层接口是否变化的方法及装置
CN110334031B (zh) 内存分配代码检测方法、装置、计算机设备及存储介质
JP7318704B2 (ja) テスト装置、テスト方法及びプログラム
US11593474B2 (en) Container behavior representation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150216

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151127

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151208

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160203

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160223

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160412

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160823

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160905

R150 Certificate of patent or registration of utility model

Ref document number: 6010961

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees