Всего ОЗУ в Java - PullRequest
       1

Всего ОЗУ в Java

4 голосов
/ 14 июля 2011

У меня есть фрагмент кода, который рассчитывает общий объем оперативной памяти в моей системе [не размер кучи Java VM].

Это выглядит следующим образом:

        OperatingSystemMXBean operatingSystemMXBean = 
            ManagementFactory.getOperatingSystemMXBean();

        Method m = operatingSystemMXBean.getClass().
                    getDeclaredMethod("getTotalPhysicalMemorySize");

        m.setAccessible(true);

        Object value = m.invoke(operatingSystemMXBean);

        if (value != null)
        {
            System.out.println(value);
        }

Проблема с приведенным выше фрагментом кода заключается в том, что он иногда дает неверные значения. Например, в системе с 8 ГБ ОЗУ, использующей 32-разрядную JVM, отображается 4 ГБ. Я предполагаю, что это потому, что JVM является 32-битной, и использование 32-битных 4 ГБ - это максимум, на который она может адресовать.

Может кто-нибудь предложить пути / обходные пути для этого. В основном, как мы можем получить общий объем оперативной памяти в системе, использующей 32-битную JVM.

Полная информация о моей системе:

ОС: Windows 7
Процессор: Intel i7
JDK: Sun Java 1.6, обновление 21, 32 бита
Оперативная память: 8 ГБ

1 Ответ

2 голосов
/ 14 июля 2011

Не могу придумать чистый Java-способ, но вы можете использовать Runtime.exec () для запуска следующей команды

wmic MEMPHYSICAL Get MaxCapacity

EDIT: Исправление - приведенное выше дает максимальную емкость для установки оперативной памяти. Попробуйте псевдоним ОС, как показано ниже:

wmic OS Get TotalVisibleMemorySize
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...