32-битная / 64-битная часть не связана с Java
Оказывается, что на места в памяти в 32-разрядной системе ссылаются 32-разрядные целые числа без знака. Это позволяет до 2 ^ 32 возможных областей памяти. Поскольку каждое местоположение хранит 1 байт, вы получаете 2 ^ 32 байта или 4 ГБ, если хотите.
В 64-битной системе имеется 2 ^ 64 местоположения или 16 экзабайт.
Теперь в Windows смежная часть становится большой проблемой, но именно так Windows и работает. Идея состоит в том, что вам нужно иметь полный «непрерывный» диапазон для вашей кучи. К сожалению, Windows выделяет некоторую память где-то посередине. В результате у вас остается примерно половина левой части или половина правой части, примерно 1,5-2 ГБ, для выделения вашей кучи.
Проверьте этот вопрос для получения более подробной информации о 32 против 64 бит.
Редактировать: Спасибо mrjoltcola за префикс exa!