Интерпретация результатов сеанса профилирования VisualVM - PullRequest
0 голосов
/ 11 мая 2010

У меня есть приложение, которое записывает некоторые данные (около 15 МБ в 80k кортежей) в базу данных SQLite, используя этот jdbc-драйвер в Mac OS X. Это выполняется с помощью транзакций, самая большая из которых содержит 45к вставок в одну таблицу. При профилировании приложения некоторые вещи кажутся странными:

  1. Если я приостановлю приложение в самом начале, используя System.in.read(), память, выделенная процессом, будет медленно расти. Почему это так?
  2. При запуске приложения используемое пространство кучи всегда составляет около 80 МБ на мониторе VisualVM. Тем не менее, при профилировании использования памяти, я получаю в общей сложности около 10 МБ. Кто-нибудь может объяснить эту разницу?

Спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 10 января 2012

Шаблон мозаики при использовании памяти связан с результатами профилирования, передаваемыми через RMI. Это действительно очень сбивает с толку и раздражает отфильтровывать реальные выделения памяти вашей программой. См. Профилирование VisualVM загрязняет результаты , чтобы узнать, как их фильтровать: -)

0 голосов
/ 11 мая 2010

Что касается вашей первой проблемы, то через какой промежуток времени вы наблюдали медленный рост. Когда использование памяти в Java-процессе неактивно, вы обычно видите развитие пилообразного паттерна. Вы видели, что какие-либо GC происходят в одном и том же отрезке времени? Если нет, то это еще одно доказательство, подтверждающее эту идею.

Для второй проблемы действительно трудно сказать наверняка без дополнительной информации. Как правило, можно ожидать, что поведение приложения будет отличаться при включении профилирования, поскольку меняются окна синхронизации, приложение должно тратить время на отчеты о данных и , выполняя свою обычную работу, и т. Д. Возможно, при включении профилирования больше выделений памяти происходит, потому что ваш код теперь оснащен инструментами, и это вызывает GC, который снижает использование кучи. Попробуйте выполнить System.gc () в своем приложении, когда профилирование отключено, и сообщите нам, что сообщает ваша куча.

...