メモリー・リークの識別

前提条件:

メモリー・リークとは、廃棄されたメモリーの再利用に障害が発生する原因となる、 プログラムの動的ストア割り振りロジックにおけるエラーです。 つまり、必要でなくなったオブジェクトは再利用されません。 このようなインスタンスが予期せず大量に発生する場合は、メモリー・リークの可能性があります。 メモリー・リークが深刻な場合、メモリー不足が原因でアプリケーションが壊れる可能性があります。

メモリー・リークは、オブジェクトが別のオブジェクトへの参照を保留し続けることが原因で起こります。 そのため、ガーベッジ・コレクションは保留されているオブジェクトを再利用できません。 このような参照を識別する場合に、「オブジェクト参照」テーブルが役立ちます。

アプリケーション内のメモリー・リークの検出

アプリケーション内のメモリー・リークを識別する手順は、以下のとおりです。

  1. 「プロファイルおよびロギング」パースペクティブの「プロファイル・モニター」ビューで、 モニターまたはエージェントのいずれかを選択します。 
  2. 右クリックして、「オブジェクト参照の収集」を選択します。 これで、オブジェクト参照が収集されます。
  3. もう一度右クリックして、「アプリケーションから開く」>「オブジェクト参照」を選択します。 「オブジェクト参照」テーブルが開きます。
  4. ローカル・メニュー・アイコン 三角形のボタンのアイコン を選択して、 「参照の表示対象」を選択します。
  5. オブジェクトと、そのオブジェクトへの参照回数のリストを調べます。 参照のあるオブジェクトには、メモリー・リークの問題が生じている可能性があります。  

トランザクション指向の操作におけるメモリー・リークの検出

この手順は、プログラム内で、新規オブジェクトを作成し、それらを解放しないため、 ガーベッジ・コレクションによる除去が行われないフェーズを識別する場合に役立ちます。 例えば、プログラムによってダイアログ・ウィンドウが作成されて、 そのウィンドウが閉じた後にもそのダイアログに関連するオブジェクトが保留されたままの状態である場合などがあります。 トランザクション指向の操作におけるメモリー・リークを識別する手順は、以下のとおりです。

  1. 「プロファイルおよびロギング」パースペクティブの「プロファイル・モニター」ビューで、 モニターまたはエージェントのいずれかを選択します。 
  2. 疑わしい操作が行われる前に、オブジェクト参照を収集します。右クリックして、「オブジェクト参照の収集」を選択します。 これで、オブジェクト参照が収集されます。
  3. モニターを右クリックして、「アプリケーションから開く」>「オブジェクト参照」を選択します。 「オブジェクト参照」テーブルを調べて、作成されたオブジェクト参照を書き留めます。
  4. 調べたい操作を実行します。
  5. その操作が完了した後で、オブジェクト参照を収集します。 右クリックして、「オブジェクト参照の収集」をもう一度選択します。
  6. モニターを右クリックして、「アプリケーションから開く」>「オブジェクト参照」を選択します。 「オブジェクト参照」テーブルを調べて、作成されたオブジェクト参照を書き留めます。
  7. 特定のオブジェクトの参照を調べる手順は、以下のとおりです。
    1. 「オブジェクト参照」テーブルのドロップダウン・メニューから、 「参照の表示元」を選択します。
    2. オブジェクト・クラスを選択し、その項目を展開します。
    3. 新規オブジェクトが再利用されない原因となっている参照を識別します。

 

関連概念
プロファイル・ツールの概説
プロファイル・リソース
「オブジェクト参照」テーブル

関連タスク
アプリケーションのプロファイル作成
Java プロセスの起動または接続