2015-06-29 2 views
7

Я использую JVM Explorer - link to JVM Explorer, чтобы профилировать мое приложение Spring. У меня есть следующие вопросы.Почему использование памяти кучи и количество загруженных классов продолжают увеличиваться?

  • Почему «Используются Heap память» продолжает расти даже после того, как приложение начала и не получило какие-либо просьб еще? (Изображение 1)

  • Почему даже после сбора мусора и до получения каких-либо запросов «Используемая память кучи» продолжает расти? (Image2)

  • Почему после сбора мусора, отправив некоторые запросы в приложение, число загружаемых классов увеличивается? Разве приложение не должно использовать предыдущие классы? почему он просто увеличивает почти все (куча, количество загруженных классов)? (Image3)

    После запуске приложения - enlarge image enter image description here

    После нажатия на кнопку 'Выполнить Garbage Collector'. - enlarge image

enter image description here

После отправки некоторых запросов к приложению после завершения процедуры сбора мусора - enlarge image

enter image description here

ответ

4

Почему 'Используется Heap памяти' держит увеличивается даже после применения запущен и еще не получил запросов? (Изображение 1)

Что-то в вашей JVM создает объекты. Вам понадобится профайлер памяти, чтобы узнать, что это делает. Он может быть частью приложения Swing или yoru или другой библиотеки.

BTW Большинство профилирующих инструментов используют JMX, который обрабатывает много мусора. например когда я запускаю FlightRecorder или VisualVM в некоторых моих приложениях, он показывает, что мониторинг JMX создает большую часть мусора.

Почему даже после сбора мусора и до получения каких-либо запросов «Используемая память кучи» продолжает расти? (Image2)

Что бы ни создавали объекты, все еще создаются объекты.

Почему после сбора мусора, отправив некоторые запросы в заявку, количество загруженных классов увеличивается?

Занятия проходят лениво. Некоторые классы не нужны, пока вы ничего не сделаете.

Разве приложение не должно использовать предыдущие классы?

Да, но это не значит, что для этого не потребуется больше занятий.

Почему это просто увеличивает почти все (куча, количество загруженных классов)? (Image3)

Ваше приложение делает больше работы.

Если вы не знаете, что делает приложение, я предлагаю использовать профилировщик памяти, такой как VisualVM или Flight Recorder. Я использую YourKit для таких вопросов.

Примечание: для настройки программы Java требуется сложная работа, чтобы она не создавала мусор, и я бы сказал, что большинство библиотек пытаются уменьшить мусор, если это вызывает известную проблему с производительностью.

+0

Спасибо за ваш ответ, я попытался использовать VisualVM, но не смог его запустить. Какой профилировщик лучше всего интегрировать с Eclipse? Мой вопрос, связанный с VisualVM, находится здесь http://stackoverflow.com/questions/31064849/visualvm-is-unable-to-profile-a-web-application-on-eclipse –

+0

@ DanielNewton Я бы сказал, что затмение и визуальное vm являются третьей любимой IDE и профайлерами, с которыми я сталкиваюсь. Когда я использовал intellij с yourkit, у меня не было проблемы. –

+0

Я вижу, как насчет Flight Recorder? –

1

Мне нравится @ хороший ответ PeterLawrey, однако это там отсутствует:

память в первую очередь предназначен для использоваться, чтобы не быть избавлены. Это может легко быть в порядке, чтобы ваше приложение было хорошо написано: оно может работать с небольшой памятью и может воссоздать все, что ему нужно, но оно также может эффективно использовать тот факт, что ваша система имеет много памяти и приложение использует всю возможную память для более эффективной работы.

Я могу легко представить, что вещь, которая продолжает занимать память, представляет собой кеш . Если в кеше много данных, приложение работает быстрее.

Если у вас нет таких проблем, как OutOfMemoryError, вам не обязательно беспокоиться. Вы все равно должны проявлять бдительность и осмотреть его дальше, но ваша описанная ситуация не автоматически означает, что что-то не так.

Это похоже на постоянное плач пользователей Windows: «Я купил больше памяти, но моя Windows использует все это» - это хорошо, когда используется память! Это то, что мы покупаем!

Смежные вопросы