Как мы все знаем, параметр java -Xmx используется для установки максимального пространства кучи, доступного для программы Java. Но есть ли способ, чтобы программа Java считывала значение, которое было установлено? Что-то вроде System.getMaximumHeapSpace() (которого не существует).
Прочитать максимальное пространство кучи во время выполнения
Ответ 1
Существует Runtime.maxMemory, который, по словам документации, вернет максимальный объем памяти, которую виртуальная машина Java попытается использовать, но не является конкретным, является ли это максимальной памятью кучи, установленной при запуске JVM.
Как тест, я написал следующую программу:
class MaxMemory {
public static void main(String[] args) {
System.out.println(Runtime.getRuntime().maxMemory());
}
}
Результаты выполнения были следующими:
C:\coobird\>java -Xmx64m MaxMemory
66650112
C:\coobird\>java -Xmx128m MaxMemory
133234688
Это использование Java SE 6 версии 1.6.0_12 в Windows.
Хотя значения близки к 64 МБ (67,108,864 байт) и 128 МБ (134 217 728 байт), они не совсем так.
Ответ 2
И я получаю значения, которые находятся дальше от значения Xmx:
java -Xmx64m MaxMemory
59703296
64 * 1024 * 1024 = 67108864
java -Xmx128m MaxMemory
119341056
128 * 1024 * 1024 = 134217728
Это 11% разница! (У вас всего 0,7%, я побеждаю.)
java -version
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) Server VM (build 17.1-b03, mixed mode)
running on Linux 2.6
Ответ 3
Я вижу похожие результаты.
-Xmx512m, и я получаю 455M
-Xmx1024m, и я получаю 910M
Получаю те же результаты, используя ManagementFactory.getMemoryMXBean(). getHeapMemoryUsage()
Эти несоответствия слишком велики, чтобы их можно было игнорировать.