Как определить объем памяти JVM с несколькими процессами в Linux - PullRequest
4 голосов
/ 25 августа 2009

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

Все мои тесты под Linux.

При работе в многопоточном режиме относительно просто определить общую площадь и дополнительные издержки на поток. При запуске однопоточного процесса JVM занимает большую площадь (виртуальное пространство 200–300 МБ) в соответствии с pmap. Если я запускаю несколько копий одного и того же приложения, я вижу объем памяти x N, и ни один из java-кода не распределяется между процессами.

Мне сообщили, что, поскольку Java-код является байт-кодом, а не исполняемым, он не разделяет код между процессами, как, например, в двоичных файлах C. Однако впоследствии мне сообщили, что он может использовать технологию Copy-On-Write для достижения того же результата. Если я использую pmap, он просто указывает на размер процесса и не указывает, сколько можно передать другому процессу.

Итак, вопрос в том, как определить, какой объем данных используется при копировании при записи между процессами?

1 Ответ

0 голосов
/ 27 августа 2009

В правильно настроенной не встроенной системе Linux, почему вы заботитесь об объеме памяти?

Какая разница, если бы у тебя был ответ?

Данные будут передаваться между процессами только в том случае, если один является предком другого.
И это будет дополнительно определяться расположением памяти Java-программы и данными на страницах. Все это может меняться от выпуска к выпуску.

...