演習 1.3: リーク候補の分析

始める前に、『演習 1.2: ヒープ・ダンプの取得』を完了する必要があります。

この演習では、リークすると思われるオブジェクト (配列、ベクトル、およびセッションなど) のリストを最初に生成します。これらが「リーク候補」です。次にリストを分析してリークを識別します。

リーク候補のリストの生成

リストを生成するには以下を行います。

  1. 「リーク候補」ビューの指示に従い、「リークの分析」ツールバー・ボタン をクリックします。「リーク分析オプションの選択」ダイアログ・ボックスが開きます。
  2. ダイアログ・ボックスで、ご使用の 2 つのヒープ・ダンプのチェック・ボックスにチェックが入っていることを確認します。
    : デフォルトのしきい値は 20 です。これは、リーク候補のうち、可能性の値が 20 以上のものだけが表示されることを意味します。(可能性の値については、この演習の後半で詳しく説明します。)
  3. 「OK」をクリックしてリストを生成します。Software Development Platform 左下隅のインディケーターに、リーク候補を検出中であることがレポートされます。

「リーク候補」ビューの概要

プロセスが終了すると、「リーク候補」ビューにリーク候補のリストが表示されます。

それぞれの候補は 100 から 1 までの間の可能性の値を持ち、最も可能性の高い候補が 100 の値を持ちます。他の候補はそれぞれの可能性に応じてランクされ、可能性が降順になるようにリストされます。 (ヒープ比較アルゴリズムは、リークのサイズと、2 つのヒープ・ダンプの時間間隔での増加を基にして、可能性の値を計算します。

このプロファイルの実行では、しきい値が 20 に設定されていたため、可能性の値が 19 以下の候補は表示されません。

ビューはそれぞれのリーク候補について、以下のデータを提供します。

リークの分析および識別

リークを識別するには以下を行います。

  1. 「リーク候補」ビューで、可能性が 100 のリーク候補に関するデータを見ます。
  2. リーク候補をダブルクリックします。「オブジェクト・リファレンス・グラフ」ビューが開いて、リーク候補に関するデータをグラフィック表示します。(ヒープ・ダンプの表示の準備に、しばらく時間がかかることがあります。)
  3. オブジェクト・リファレンス・グラフを調査します。次の点に注意してください。
  4. Object 配列と String を接続するパスの上にカーソルを停止させ、表示されるツールの説明を読みます。「カウント」が「リーク候補」ビューに表示されているリーク数に等しいことが表示されますが、これがリークとして識別された文字列のコレクションです。
  5. 2 次キューおよび 3 次キューの両方が Object 配列への参照を保持していますが、3 次キューは「リーク候補」ビューではリークとして識別されません。これについては、いくつかの説明が考えられます。
  6. オブジェクト・リファレンス・グラフで String オブジェクトをダブルクリックします。「オブジェクト詳細」ビューが開きます。String オブジェクトについて、それを参照するすべてのオブジェクトと、逆にそれが参照するすべてのオブジェクト含む、詳細のすべてが表示されます。「オブジェクト詳細」ビューでは、参照元の 1 つをクリックして参照元を上へナビゲートしたり、参照先 (そのオブジェクトが参照するオブジェクト) の 1 つをクリックして参照先を下へナビゲートしたりできます。

何を検出しましたか。2 次キューがリークしているオブジェクトで、Vector オブジェクトが多くの String オブジェクトへの参照を保存していることがリークの原因だということが分かりました。

演習 1.4: メモリー・リークの修正』に進んでください。

ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.
(C) Copyright IBM Japan 2005