Well this is embarrassing ...
I m starting to play with the Eclipse Memory Analyzer to look for Java memory leaks on a Windows box. Step 1 is to obtain a heap dump file. To do this I start my Java (javaw.exe) process from within Eclipse and connect to it with jconsole. Then on the jconsole MBeans tab I click the dumpHeap button. The first time I did this, I saw a pop-up saying it had created the heap dump file, but not giving its name or location. Now whenever I do a dumpHeap again while connected to a different javaw.exe process, jconsole says:
Problem invoking dumpHeap : java.io.IOException: File exists
and of course doesn t give its name or path. Where could it be?
I ve searched my C: drive (using cygwin command line tools) for files containing "hprof" or "java_pid" or "heapdump" and didn t find anything plausible. I ve even used the Windows search to look for all files in my Eclipse workspace that have changed in the last day.
I m using the Sun Java 1.6 JVM, and don t have -XX:HeapDumpPath set.
Update (28 April 2010): My original heap file location must have been determined by jconsole, the tool I triggered the heap dump from. The JVM s heap dump location must apply only to heap dumps it triggers (eg, on an OutOfMemoryException).
Matt B s suggestion to use jvisualvm nicely solves my problem by pointing me to a far more useful replacement for the old jconsole. It has a nice memory profiler that shows which types of objects are most numerous and hold the most memory. And it has a monitor that shows actual memory use over time. When you ask it for a heap dump, it tells you the file name even! The Eclipse Memory Analyzer gives you full details.