Как распределяется память между JVM и собственным процессом?
Сборщик мусора в JVM от Sun использует метку-разметку с опциями включения одновременного и инкрементального сбора мусора.
Ну, точнее, он инсценирован, и вышесказанное относится только к объектам с длительным сроком службы. Для молодых объектов GC по-прежнему выполняется с помощью коллектора остановки и копирования, который намного лучше подходит для работы с недолговечными объектами (и все типичные программы Java создают много недолговечных объектов).
Копирующий сборщик обходит все элементы в куче, копируя их в новую кучу, если на них есть ссылки, а затем отбрасывает прежнюю кучу. Таким образом, 1М живых объектов требует до 2М реальной памяти: если каждый объект жив, во время сбора мусора будет две копии всего.
Таким образом, JVM требует гораздо больше системной памяти, чем доступно для кода, работающего на виртуальной машине, поскольку это приводит к существенным накладным расходам на управление и сборку мусора.
Имеет ли переключатель Windows / 3GB какое-либо влияние на собственные процессы и Sun JVM?
/3GB
позволяет адресному пространству виртуальной памяти пользователя быть 3 ГБ, но только для исполняемых файлов, заголовки которых отмечены IMAGE_FILE_LARGE_ADDRESS_AWARE
. Насколько я знаю, Sun's java.exe
нет. У меня нет системы Windows, поэтому я не могу подтвердить.