Я пытаюсь количественно оценить разницу в занимаемой памяти небольшого Java-приложения, выполняющего тот же процесс многопоточный по сравнению с многопроцессорным.
Все мои тесты под Linux.
При работе в многопоточном режиме относительно просто определить общую площадь и дополнительные издержки на поток. При запуске однопоточного процесса JVM занимает большую площадь (виртуальное пространство 200–300 МБ) в соответствии с pmap. Если я запускаю несколько копий одного и того же приложения, я вижу объем памяти x N, и ни один из java-кода не распределяется между процессами.
Мне сообщили, что, поскольку Java-код является байт-кодом, а не исполняемым, он не разделяет код между процессами, как, например, в двоичных файлах C. Однако впоследствии мне сообщили, что он может использовать технологию Copy-On-Write для достижения того же результата. Если я использую pmap, он просто указывает на размер процесса и не указывает, сколько можно передать другому процессу.
Итак, вопрос в том, как определить, какой объем данных используется при копировании при записи между процессами?