Согласно 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()
соответствует объему памяти, в настоящее время доступной для JVM для Foo. Если JVM потребуется больше памяти, она будет лениво выделять ее up для максимальной памяти. Если вы используете -Xms1024m -Xmx1024m
, значение, полученное из totalMemory()
и maxMemory()
, будет равно.
Кроме того, если вы хотите точно рассчитать количество используемой памяти, вы делаете это с помощью следующего вычисления:
final long usedMem = totalMemory() - freeMemory();