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

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

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

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


答案 1

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

com.sun.management.OperatingSystemMXBean os = (com.sun.management.OperatingSystemMXBean)
     java.lang.management.ManagementFactory.getOperatingSystemMXBean();
long physicalMemorySize = os.getTotalPhysicalMemorySize();

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


答案 2

本地 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");

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