Как заставить 64-битную JVM использовать более 4 ГБ для кучи?

Это довольно загадочно, 64-битная ОС, 64-битный JDK, 16 ГБ ОЗУ, и я не могу использовать более 4 ГБ для кучи. Вот как я запускаю программу (моя программа на Scala, но основана на JVM):

/usr/lib64/jvm/java/bin/java -d64 -Xms512m -Xmx10g ...jars go on

И когда я читаю общую память в моей программе (_2 _) ... чтение составляет «4242 МБ».

ВОПРОС - как заставить JVM использовать уже предоставленный мной объем памяти (10 ГБ)?

java -version говорит:

java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02, mixed mode)

Обновление 1

maxMemory возвращает "9102 МБ", поэтому теперь возникает вопрос, в чем разница (как 1 ГБ, так и 5 ГБ), и как использовать всю максимальную память (моя программа вылетает, потому что для этого требуется 2 фрагмента по ~ 3 ГБ, а всего 4 ГБ нет) достаточно).

Обновление 2

Теперь я поместил все показания до и после моего распределения, и удивление, удивление, первое чтение общей памяти было 4 ГБ, второе тоже, но третье достигло пика до 8 ГБ. Я рад, общая память может внезапно увеличиться, потому что это решает мою проблему, но я этого не понимаю.


person greenoldman    schedule 14.09.2012    source источник
comment
Что возвращает maxMemory ()?   -  person Burkhard    schedule 15.09.2012
comment
@Burkhard, обновлено, спасибо.   -  person greenoldman    schedule 15.09.2012


Ответы (1)


ВМ будет пытаться использовать все 10g только тогда, когда это действительно необходимо. Поскольку вы указали -Xmx10g, это максимальный объем памяти, который он попытается использовать. Неужели программа не может выделить больше 4g, когда ей это нужно?

И проверьте вывод

Runtime.getRuntime().maxMemory()
person IceMan    schedule 14.09.2012
comment
Проблема в том, что я также проверяю freeMemory (max см. Обновление), и когда я пытаюсь выделить второй кусок, который уместился бы в 10 ГБ, но не в 4 ГБ, моя программа вылетает с исключением. - person greenoldman; 15.09.2012