Как определить объем памяти JVM с несколькими процессами в Linux

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

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

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

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

Итак, вопрос в том, как бы я определил, какой объем данных распределяется между процессами при помощи Copy-On-Write?

1 ответ

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

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

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

Другие вопросы по тегам