Читать максимальный объем кучи во время выполнения

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

 asgs20 дек. 2015 г., 18:47
Непрограммным способом является запускjmap Утилита доступна из вашего JDK. Синтаксис будетjmap -heap <pid>, ПолеMaxHeapSize указывает наXmx значение, установленное для этого процесса Java.
 Pool14 июн. 2009 г., 17:19

Ответы на вопрос(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 байт), это не совсем так.

 José Roberto Araújo Júnior27 мар. 2014 г., 13:42
Возможно, недостающие байты были зарезервированы для пространства PermGen
 D-Bug14 июн. 2009 г., 17:18
Я проверил это, и это, кажется, значение, установленное -Xmx. Благодарю.
 coobird14 июн. 2009 г., 17:22
Вроде бы близко, но не совсем значение.

Ваш ответ на вопрос