Java中的总RAM

Java中的总RAM,java,jvm,Java,Jvm,我有一段代码可以计算系统中的总RAM[而不是Java VM堆大小] 详情如下: OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean(); Method m = operatingSystemMXBean.getClass(). getDeclaredMethod("getT

我有一段代码可以计算系统中的总RAM[而不是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);
        }
上述代码的问题在于,它有时会给我错误的值。例如,在一个具有8GB RAM的系统中,使用32位JVM,它显示4GB。我猜这是因为JVM是32位的,使用32位4GB是它可以寻址的最大值

有人能提出解决方法吗。基本上,我们如何在使用32位JVM的系统中获得总RAM

我的系统的详细信息如下:

        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);
        }
操作系统:Windows 7
CPU:Intel i7
JDK:Sun Java 1.6更新21,32位

RAM:8GB

无法想到纯Java的方式,但您可以使用Runtime.exec()运行以下命令

wmic MEMPHYSICAL Get MaxCapacity
编辑: 修正-以上给出了安装闸板的最大容量。请尝试以下操作系统别名:

wmic OS Get TotalVisibleMemorySize

不确定这是否有帮助,但它有一些信息:下面是完全相同的问题和一些答案: