Пространство кучи Java не увеличивается при использовании -Xmx 1g

1

Я делаю некоторые причудливые вещи, где мне действительно нужно выделить около 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)

Я действительно не знаю, что я делаю неправильно. У кого-нибудь из вас есть идея?

Большое спасибо!

Теги:
heap
heap-memory

4 ответа

2

Расскажите нам всю свою командную строку, я подозреваю, что вы используете:

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
2

Это -Xmx4g, без промежутка между ними.

  • 0
    -Xmx4g это не имеет значения, это все еще не работает
  • 0
    @ Даниил, если это не поможет, то, может быть, вы неправильно передаете аргументы? Можете ли вы дать нам всю командную строку, которую вы используете? Вы должны установить аргумент перед именем класса. Если вы поставите его позже, это объяснит, почему он не потерпел неудачу с вашим излишним бланком.
0

Параметр -xmx устанавливает максимальный размер кучи. Но JVM обычно начинается с меньшей кучи и расширяет его по мере необходимости.

Чтобы сообщить JVM об исходном размере кучи, используйте параметр -xsx; например

   java -xmx4g -xsx4g ...

говорит Java нам 4g кучу и устанавливает этот размер с самого начала. Обратите внимание, что это не обязательно приведет к тому, что вся физическая/виртуальная память будет немедленно передана процессу. Однако размеры пространства кучи должны быть установлены пропорционально номинальному начальному размеру.

(Как отмечали другие, это атомарные варианты, т.е. Не помещать пробел до 4g.)


Если вы знаете, что вам понадобится большая часть запрошенной кучи "довольно скоро", тогда установка -msx позволяет избежать (повторного) изменения размера кучи во время запуска. Но если ваше значение -msx значительно больше, чем вам может понадобиться, вы можете в конечном итоге использовать системные ресурсы без необходимости.

0

-Xmx4g (без пробела, как уже указывалось) будет задано максимальное значение для размера кучи, которое автоматически не назначает полную сумму при запуске.

-Xms4g вполне может это сделать, поскольку это устанавливает начальный размер кучи.

Обычно люди устанавливают их как пару при запуске приложения. Например, при запуске серверов с использованием классов, которые генерируют много классов, созданных во время выполнения...

-Xms256m -Xmx2048m -XX: MaxPermSize = 256 м

http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

  • 0
    maxMemory () должен отображать параметр -Xmx, даже если память не была зафиксирована или использована. Итак, я думаю, что Xms не был проблемой здесь, но это хорошо, чтобы отметить.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню