メモリー消費の分析

Memory Analyzer は、メモリー使用の効率化が可能な領域を特定できるコンポーネント・レポートを提供します。ただし、Memory Analyzer の適切な定義済み照会およびその他の機能を使用して、このレポートを使用せずにメモリー消費を調べることもできます。

表 1. メモリー消費の分析に役立つ照会
照会グループ -> 照会 説明
保存セットの表示 オブジェクトのリスト、それらのオブジェクトのインスタンス数、およびそれらのインスタンスが占有するヒープ (メモリー) の量を表示します。
Java™ コレクション Java コレクション・グループには、Vector オブジェクトや HashMap オブジェクトなどの Java コレクションの使用量を分析する照会が含まれています。例えば、照会により、コレクションの充填率、コレクションのサイズ、または (ハッシュ・マップの) 衝突率を表示できます。「Java コレクション」の照会を参照してください。
「Java の基礎」 -> 「値別にグループ化」 「値別にグループ化」照会を使用すると、特定のフィールドの値ごとにオブジェクトのセットをグループ化できます。この照会は、冗長データの検索に役立ちます。
直接ドミネーター 大量のメモリーを消費しているオブジェクトが検出された場合は、この照会を使用して、メモリー内にこのオブジェクトを保持しているドミネーターを検出できます。この照会では、調べる必要のないドミネーターをスキップすることもできます。例:
-skip java.*|com¥.sun¥..*
表 2. その他の役に立つ機能
機能 説明
クラス・ヒストグラム クラス・ヒストグラムでフィルターを使用して、コードの特定部分を重点的に調べることができます。
OQL (オブジェクト照会言語)

非効率的なメモリー使用の最も一般的な原因は以下のとおりです。

  • データ構造を非効率的に使用している。例えば、多数の空のリストまたは HashMap オブジェクトを保持しているなど。OQL を使用すると、そのようなオブジェクトを簡単に検出できます。次の例は、空で、一度も変更されたことがない、ArrayList クラスのすべてのインスタンスを検出します。
    SELECT * FROM java.util.ArrayList WHERE size=0 AND modCount=0
  • 多くの冗長データを保持している。例えば、String オブジェクトや char[] オブジェクトなど。次の例は、100 文字より長い String オブジェクトを検出します。
    SELECT * FROM java.lang.String s WHERE s.count >= 100
    次の例は、末尾に「day」が付いている String オブジェクトを検出します。
    SELECT * FROM java.lang.String s WHERE toString(s) LIKE ".*day"


© Copyright IBM Corporation 2011, 2015.
© Copyright 2008, 2015 SAP AG and others. 本製品では Eclipse テクノロジーが採用されています。詳しくは、http://www.eclipse.org を参照してください。