Как профилировать создание объекта в Java? - PullRequest
4 голосов
/ 16 марта 2010

Система, с которой я работаю, постоянно создает множество объектов и мусор, собирая их, что приводит к очень крутому графику потребления кучи. Я хотел бы знать, какие объекты создаются для настройки кода, но я не могу найти способ выгрузить кучу в момент запуска сборки мусора. Когда я в случайное время пытался вручную запустить dumpHeap через JConsole, я всегда получал результаты после завершения работы GC и не получал никаких полезных данных.

Любые замечания о том, как отследить чрезмерное создание временных объектов, приветствуются.

Ответы [ 4 ]

1 голос
/ 16 марта 2010

То, что вы ищете, - это самые интенсивные сайты размещения в вашей программе. Вы можете использовать такой инструмент, как: Allocation Instrumentor для Java . Ответ на ваш комментарий:

Когда я пытался запустить dumpHeap через JConsole вручную в случайные моменты времени, я всегда получал результаты после завершения GC его запустить, и не получил ничего полезного данные.

- это то, что дамп кучи вызывает GC в виртуальной машине, потому что дамп кучи является отчетом о том, что находится в куче (по большей части) - виртуальная машина хочет наиболее точную картину того, что в данный момент находится в рабочем состоянии. был запущен дамп кучи, и поэтому событие GC всегда будет происходить сразу после инициирования запроса на дамп.

Настройка кучи Java - это искусство, и в Интернете есть много материалов о том, как это сделать.

1 голос
/ 16 марта 2010

Посмотрите, что может сделать BTrace (http://kenai.com/projects/btrace/pages/Home), или попробуйте использовать jvisualvm в JDK 6u18, который выполняет выборку из оперативной памяти.

0 голосов
/ 17 марта 2010

Вы можете использовать JVMPI-интерфейс (и такие инструменты, как Dr.MEM) и создать собственное решение, если ни одно из решений, описанных выше, не решит вашу задачу. Однако это может быть излишним в зависимости от вашей проблемы.

0 голосов
/ 16 марта 2010

Apache JMeter

Цитата со страницы проектов:

Apache JMeter может использоваться для тестирования производительность как на статическом, так и на динамическом ресурсы (файлы, сервлеты, Perl сценарии, объекты Java, базы данных и Запросы, FTP-серверы и многое другое). Оно может использоваться для имитации тяжелой нагрузки на сервер, сеть или объект для проверки его сила или анализировать в целом производительность под разной нагрузкой типы.

Я помню, что М. Фаулер упоминал, что почти невозможно догадаться, что вызывает проблемы с производительностью, пока вы не протестируете всю систему с помощью профилировщика.

...