NetBeans6.1ではデバッガやプロファイラで、その時点で生成されているオブジェクトがどこから参照されているかを見る機能があります。
で、こんなコードを用意。クラスBとクラスCがクラスAのオブジェクトへの参照を持っています。クラスCはスーパークラス経由です。
public class ReferenceSample { static class A{} static A a = new A(); static class B{ A af = a; } static class C extends B{} public static void main(String[] args){ B b = new B(); C c = new C(); System.out.println("" + b + c); } }
こうすると、System.outの時点では、Aクラスのオブジェクトがひとつあって、スタティック変数a、BとCのオブジェクトのフィールドafから、全部で3ヶ所から参照されていることになります。
で、まず、System.outにヒープダンプを取得するプロファイルポイントを置いてメモリプロファイルしてみます。
こんな感じで、Aのオブジェクトが3ヶ所から参照されていることがわかります。
「読み込まれたクラス」でクラスAをダブルクリックすると、そのクラスAのインスタンスが表示されますが、ここにはクラスBからの参照1つしか表示されていません。
メモリリークを探す手助けになると思っていたのに、これでは困りますね。