Повинно бути набагато краще
Для 32-розрядного JVM, який працює на 64-бітному хості, я уявляю, що для купи залишиться нефрагментований віртуальний простір після JVM, це власні DLL, а також завантажені будь-які 32-бітові сумісність ОС. Як дивна здогадка, я думаю, що 3 Гб повинен бути можливим, але наскільки краще це залежить від того, наскільки добре ви працюєте в 32-бітному хості.
Крім того, навіть якщо ви могли б зробити гігантську купу об'ємом 3 Гб, ви, можливо, цього не захочете, оскільки це призведе до того, що паузи GC стануть потенційно проблемними. Деякі люди просто працюють більше JVM, щоб використовувати додаткову пам'ять, а не одну гігантську. Я гадаю, вони зараз налаштовують право JVM, щоб краще працювати з гігантськими купами.
Трохи важко точно знати, наскільки краще ви можете зробити. Я думаю, що вашу 32-бітну ситуацію можна легко визначити експериментом. Це, безумовно, важко передбачити абстрактно, оскільки багато речей враховує це, тим більше, що віртуальний простір, доступний для 32-бітових хостів, досить обмежений. Купу потрібно існувати в суміжній віртуальній пам'яті, тому фрагментація адресного простору для dll та внутрішнє використання адресного простору ядром ОС визначать діапазон можливих виділень.
ОС буде використовувати деякий адресний простір для відображення пристроїв HW та власних динамічних розподілів. Хоча ця пам'ять не відображається у адресному просторі Java-процесу, ядро ОС одночасно не може отримати доступ до неї та вашого адресного простору, тому обмежить розмір віртуального простору будь-якої програми.
Завантаження DLL залежить від реалізації та випуску JVM. Завантаження ядра ОС залежить від величезної кількості речей, випуску, HW, скількох речей, які вони склали до цього моменту з моменту останнього перезавантаження, хто знає ...
Підводячи підсумок
Б'юсь об заклад, ви отримуєте 1-2 ГБ в 32-бітній землі і приблизно 3 в 64-бітовій, так що загальне поліпшення приблизно в 2 рази .