Как мы все знаем, параметр 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()
Эти несоответствия слишком велики, чтобы их можно было игнорировать.