Ну, это смущает ...
Я начинаю играть с Eclipse Memory Analyzer, чтобы искать утечки памяти Java на коробке Windows. Шаг 1 - получить файл дампа кучи. Для этого я запускаю процесс Java (javaw.exe) из Eclipse и подключаюсь к нему с помощью jconsole. Затем на вкладке jconsole MBeans я нажимаю кнопку dumpHeap. В первый раз, когда я сделал это, я увидел всплывающее окно с сообщением, что он создал файл дампа кучи, но не указал его имя или местоположение. Теперь всякий раз, когда я снова выполняю dumpHeap при подключении к другому процессу javaw.exe, jconsole говорит:
Problem invoking dumpHeap : java.io.IOException: File exists
и, конечно, не дает его имя или путь. Где это может быть?
Я искал на своем диске C: (с помощью инструментов командной строки cygwin) файлы, содержащие «hprof», «java_pid» или «heapdump», и не нашел ничего правдоподобного. Я даже использовал поиск Windows, чтобы найти все файлы в моей рабочей области Eclipse, которые изменились за последний день.
Я использую Sun Java 1.6 JVM, и у меня нет -XX: HeapDumpPath.
Обновление (28 апреля 2010 г.): Исходное местоположение файла кучи должно быть определено jconsole, инструментом, с которого я запустил дамп кучи. Расположение дампов кучи JVM должно применяться только к дампам кучи, которые он вызывает (например, для исключения OutOfMemoryException).
Предложение Мэтта Б использовать jvisualvm прекрасно решает мою проблему, указывая на гораздо более полезную замену старой jconsole. Он имеет хороший профилировщик памяти, который показывает, какие типы объектов наиболее многочисленны и занимают больше всего памяти. И у него есть монитор, который показывает фактическое использование памяти с течением времени. Когда вы запрашиваете дамп кучи, он сообщает вам даже имя файла! Анализатор памяти Eclipse дает вам полную информацию.