Я делаю некоторые причудливые вещи, где мне действительно нужно выделить около 1 ГБ.
Мой компьютер имеет 8-битную 64-битную систему, так что это не проблема.
Я использую -Xmx 4g
для увеличения своего кучного пространства, но, к сожалению, это совсем не работает.
Я использую:
Runtime rt = Runtime.getRuntime();
long totalMem = rt.totalMemory();
long maxMem = rt.maxMemory();
long freeMem = rt.freeMemory();
double megs = 1048576.0;
System.out.println ("Total Memory: " + totalMem + " (" + (totalMem/megs) + " MiB)");
System.out.println ("Max Memory: " + maxMem + " (" + (maxMem/megs) + " MiB)");
System.out.println ("Free Memory: " + freeMem + " (" + (freeMem/megs) + " MiB)");
Что показывает мне:
Total Memory: 259522560 (247.5 MiB
Max Memory: 259522560 (247.5 MiB)
Free Memory: 0 (0 MiB)
Я действительно не знаю, что я делаю неправильно. У кого-нибудь из вас есть идея?
Большое спасибо!
Расскажите нам всю свою командную строку, я подозреваю, что вы используете:
java -jar file.jar -Xmx 4G
или
java -cp file.jar package.Main -Xmx 4G
Оба ошибочны, вы можете использовать один из следующих вариантов:
java -Xmx4G -jar file.jar
java -Xmx4G -cp file.jar package.Main
Это -Xmx4g
, без промежутка между ними.
Параметр -xmx
устанавливает максимальный размер кучи. Но JVM обычно начинается с меньшей кучи и расширяет его по мере необходимости.
Чтобы сообщить JVM об исходном размере кучи, используйте параметр -xsx
; например
java -xmx4g -xsx4g ...
говорит Java нам 4g кучу и устанавливает этот размер с самого начала. Обратите внимание, что это не обязательно приведет к тому, что вся физическая/виртуальная память будет немедленно передана процессу. Однако размеры пространства кучи должны быть установлены пропорционально номинальному начальному размеру.
(Как отмечали другие, это атомарные варианты, т.е. Не помещать пробел до 4g
.)
Если вы знаете, что вам понадобится большая часть запрошенной кучи "довольно скоро", тогда установка -msx
позволяет избежать (повторного) изменения размера кучи во время запуска. Но если ваше значение -msx
значительно больше, чем вам может понадобиться, вы можете в конечном итоге использовать системные ресурсы без необходимости.
-Xmx4g (без пробела, как уже указывалось) будет задано максимальное значение для размера кучи, которое автоматически не назначает полную сумму при запуске.
-Xms4g вполне может это сделать, поскольку это устанавливает начальный размер кучи.
Обычно люди устанавливают их как пару при запуске приложения. Например, при запуске серверов с использованием классов, которые генерируют много классов, созданных во время выполнения...
-Xms256m -Xmx2048m -XX: MaxPermSize = 256 м
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html