まあ、これは恥ずかしいです ...
Windows ボックスでの Java メモリ リークを探すために、Eclipse メモリ アナライザーをいじり始めています。ステップ 1 は、ヒープ ダンプ ファイルを取得することです。これを行うには、Eclipse 内から Java (javaw.exe) プロセスを開始し、jconsole で接続します。次に、jconsole MBeans タブで、dumpHeap ボタンをクリックします。初めてこれを行ったとき、ヒープ ダンプ ファイルが作成されたというポップアップが表示されましたが、その名前や場所は示されていませんでした。別の javaw.exe プロセスに接続しているときに再度 dumpHeap を実行すると、jconsole は次のように言います。
Problem invoking dumpHeap : java.io.IOException: File exists
もちろん、その名前やパスは指定しません。それはどこでしょうか?
「hprof」、「java_pid」、または「heapdump」を含むファイルを C: ドライブ (cygwin コマンド ライン ツールを使用) で検索しましたが、妥当なものは見つかりませんでした。Windows 検索を使用して、前日に変更された Eclipse ワークスペース内のすべてのファイルを探しました。
Sun Java 1.6 JVM を使用していますが、-XX:HeapDumpPath が設定されていません。
更新 (2010 年 4 月 28 日):元のヒープ ファイルの場所は、ヒープ ダンプをトリガーしたツールである jconsole によって決定されたに違いありません。JVM のヒープ ダンプの場所は、JVM がトリガーするヒープ ダンプ (たとえば、OutOfMemoryException) にのみ適用する必要があります。
jvisualvm を使用するという Matt B の提案は、古い jconsole のはるかに便利な代替手段を教えてくれ、私の問題をうまく解決してくれます。どのタイプのオブジェクトが最も多く、最も多くのメモリを保持しているかを示す優れたメモリ プロファイラがあります。また、時間の経過に伴う実際のメモリ使用量を示すモニターがあります。ヒープダンプを要求すると、ファイル名も教えてくれます! Eclipse Memory Analyzer は、完全な詳細を提供します。