Использование переключателя d64 переводит JVM в 64-битный режим. Технически, в Solaris / Linux и большинстве Unixes процесс JVM будет выполняться в модели LP64.
Модель LP64 отличается от 32-битной модели (ILP32) тем, что указатели имеют ширину 64 бита, а не 32-битные указатели. Для JVM это обеспечивает большую адресуемость памяти, но это также означает, что размер, занимаемый только ссылками на объекты, удвоился. Таким образом, в 32-разрядной JVM и в 64-разрядной версии для одного и того же числа объектов в определенный момент времени больше.
Другая вещь, о которой часто забывают, это размер самих инструкций. На 64-битной JVM размер инструкций будет занимать собственный размер регистра машины.
Если, однако, вы используете сжатые указатели объектов в 64-разрядной среде, JVM будет по возможности кодировать и декодировать указатели для размеров кучи, превышающих 4 ГБ. Вкратце, при использовании сжатых указателей JVM пытается максимально использовать 32-разрядные значения.
Подсказка: включите флаг UseCompressedOops, используя -XX: + UseCompressedOops , чтобы избавиться от некоторых проблем. YMMV, но люди сообщили о 50% -ном падении памяти, используя сжатые oops .
EDIT
Флаг UseCompressedOops поддерживается в версии 14.0 виртуальной машины Java HotSpot, доступной в Java 6 с последующим обновлением 14 .