我正在编写一个Java应用程序,需要检查系统中可用的最大RAM(而不是VM可用的RAM)。有可行的方法吗?
非常感谢: - )
答案 0 :(得分:4)
JMX您可以访问java.lang的FreePhysicalMemorySize和TotalPhysicalMemorySize属性:type = OperatingSystem。 JavaDocs中没有真正记录这些属性,因此在所有JVM和平台上可能无法保证这些属性,但我们可以使用它们(使用Sun的JVM)。
在Java代码中,您可以通过以下方式访问MBean:ManagementFactory.getOperatingSystemMXBean()
这些属性是documented in the JavaDoc for Sun's implementation所以我认为如果你的应用程序在他们的JVM上运行,你可能会依赖它们。
答案 1 :(得分:2)
简短回答:没有,无法通过便携方式获得总RAM。
当然,有一种非常简单的方法可以获得总JVM内存(java.lang.Runtime.maxMemory()
),但这不是你想要的。
要获得系统总RAM大小,您需要使用本机系统调用(完全不可移植)。
答案 2 :(得分:1)
您可以使用JNI调用来查询本机操作系统
但如果你想为JMV增加更多内存,你将不得不用新的内存参数重启JVM
答案 3 :(得分:-1)
“可用的最大RAM量” - 所以不是我假设安装的物理RAM?但操作系统可以访问的部分(1),(2)不用于存储操作系统代码,(3)不用于存储操作系统数据?
问题是,当操作系统将脏页刷新到磁盘时,此答案每毫秒都会更改,从而减少了上面的第(3)部分。如果确实需要RAM,操作系统通常会将部分内容交换掉,因此为(2)分配的RAM量也很模糊。
我们可能需要跳过虚拟化系统的情况,其中操作系统本身在VM中运行,因此您在VM中的操作系统中有一个JVM。