Объем памяти приложения Java - PullRequest
3 голосов
/ 27 декабря 2011

Во время работы IntelliJ или Eclipse я могу видеть, сколько кучи они используют изнутри приложения из строки прогресса внизу. Это всегда указывает значение менее 512 МБ, которое максимальный размер выделяется при запуске. Теперь во многих случаях, если я смотрю из ОС (Linux), там написано, что приложение использует около 1300 МБ, я понимаю, что библиотеки, стек, файлы, отображенные в память, ... не в куче ... Но почему такая большая разница? Обычно разница составляет около 1 ГБ ... Почему?

Спасибо.

Ответы [ 2 ]

6 голосов
/ 27 декабря 2011

Использование памяти JVM можно объяснить следующим образом:

JVM Memory Usage

Как видите, это не просто -Xmx.Общая память процесса также будет включать -XX:PermSize, размер стека всех потоков, память JVM, используемую JIT, и другие внутренние компоненты.Не забывайте о файлах, отображенных в памяти, которые также включены в память процесса.IntelliJ IDEA использует отображенные в памяти файлы для кэширования, поэтому он может добавить несколько сотен мегабайт.

Если вам нужны подробности, используйте какой-нибудь профилировщик, например JConsole или YourKit.

0 голосов
/ 27 декабря 2011

Стоит помнить, что Java выделяет максимальный размер кучи при запуске, и это показывает размер виртуальной памяти. (Это по умолчанию пропорционально объему имеющейся у вас памяти) Это может быть намного больше, чем фактическая используемая основная память.

Я подозреваю, что вы смотрите на эту виртуальную память, а не на резидентную память.

Если вы используете pmap в linux, вы можете увидеть все области отображения памяти и их размеры.

Если перезапустить IntelliJ с открытым проектом в Windows, это говорит о том, что он использует 35 МБ или около 100 МБ, используя максимум 494 МБ. В диспетчере задач он говорит, что его размер составляет 173 МБ, а общий - 196 МБ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...