Подтвердить что ты не робот

Прочитать максимальное пространство кучи во время выполнения

Как мы все знаем, параметр java -Xmx используется для установки максимального пространства кучи, доступного для программы Java. Но есть ли способ, чтобы программа Java считывала значение, которое было установлено? Что-то вроде System.getMaximumHeapSpace() (которого не существует).

4b9b3361

Ответ 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()

Эти несоответствия слишком велики, чтобы их можно было игнорировать.