如何在Java中找到物理内存大小?

Mar*_*lty 17 java memory installer memory-management

我正在编写一个安装程序,它将调整产品的配置,以便运行它的特定硬件.特别是,我想确定系统中安装了多少物理RAM,以便估计在运行时分配给产品的内存量.

理想情况下,我想以独立于平台的纯Java方式执行此操作,因为安装程序需要在几个不同的平台上运行,但如果不可能,则首选Windows解决方案,因为这是最常见的部署平台.

在这种情况下,可以安全地假设产品将是盒子上运行的唯一/主要应用程序,因此我不必担心挤压其他任何人.我不想过度分配,因为根据我们的经验,这可能会损害性能.

Hor*_*ux7 19

您可以使用以下Java代码查询物理内存:

com.sun.management.OperatingSystemMXBean os = (com.sun.management.OperatingSystemMXBean)
     java.lang.management.ManagementFactory.getOperatingSystemMXBean();
long physicalMemorySize = os.getTotalPhysicalMemorySize();
Run Code Online (Sandbox Code Playgroud)

但是这个包com.sun.management是可选的,不需要在每个平台上都可用.

  • 请注意,使用32位JVM时,这将永远不会返回超过4GB. (2认同)

mom*_*bip 5

本地 JMX 和 MBean 怎么样?尝试这个:

MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
Object attribute = mBeanServer.getAttribute(new ObjectName("java.lang","type","OperatingSystem"), "TotalPhysicalMemorySize");
System.out.println("Total memory: "+ attribute.toString() +" B");
Run Code Online (Sandbox Code Playgroud)

您可以通过这种方式访问​​许多有用的信息。


Nat*_*ate 2

对于 Windows,您需要访问 WMI - 这将帮助您:从 Java 访问 Windows Management Instrumentation (WMI)

您将需要使用 WMI 的这一部分:Win32_LogicalMemoryConfiguration。

可能有一种纯java方法可以做到这一点,但我不知道。