Согласно API
totalMemory()
Возвращает общий объем памяти в виртуальной машине Java. Значение, возвращаемое этим методом, может изменяться со временем в зависимости от среды хоста. Обратите внимание, что объем памяти, необходимый для хранения объекта любого данного типа, может зависеть от реализации.
maxMemory()
Возвращает максимальный объем памяти, который будет пытаться использовать виртуальная машина Java. Если нет внутреннего ограничения, то будет возвращено значение Long.MAX_VALUE.
freeMemory()
Возвращает количество свободной памяти в виртуальной машине Java. Вызов метода gc может привести к увеличению значения, возвращаемого freeMemory.
В ответ на ваш вопрос maxMemory()возвращает -Xmxзначение.
Вы можете задаться вопросом, почему существует totalMemory () И maxMemory () . Ответ в том, что JVM распределяет память лениво. Допустим, вы запускаете свой процесс Java как таковой:
java -Xms64m -Xmx1024m Foo
Ваш процесс начинается с 64 МБ памяти, и если и когда ему потребуется больше (до 1024 м), он выделит память. totalMemory()соответствует количеству памяти в настоящее время доступного для виртуальной машины Java для Foo. Если JVM потребуется больше памяти, она будет лениво распределять ее до максимального объема памяти. Если вы работаете с -Xms1024m -Xmx1024m, значение, которое вы получите, totalMemory()и maxMemory()будет равно.
Кроме того, если вы хотите точно рассчитать объем используемой памяти, выполните следующие вычисления:
final long usedMem = totalMemory() - freeMemory();
-XmxЗначение , кажется, напрямую влияет на первоначальноеmaxMemory()значение , однако я видел ЗафиксированmaxMemory()рост на небольшую величину, возможно , ~ 1%, в то время как программа работает.