2009-12-16 35 views

回答

4

JMX可以访问FreePhysicalMemorySize和TotalPhysicalMemorySize属性更多的内存java.lang:type = OperatingSystem。这些属性在JavaDocs中没有真正记录,所以它们可能无法在所有JVM和平台上得到保证,但它们对我来说是可用的(使用Sun的JVM)。

在Java代码中你可以通过访问该MBean:ManagementFactory.getOperatingSystemMXBean()

这些属性是documented in the JavaDoc for Sun's implementation所以我觉得你可以依靠他们,如果你的应用程序在他们的JVM上运行。

+0

这可能偶尔会起作用。考虑到不同的JVM和操作系统,我不会指望它。 – 2009-12-16 14:29:58

+0

经过测试。它适用于Unix和MacOS。 它不是100%可移植的,因为您必须将MXbean对象转换为特定于系统的MX Bean,但仍然是一个不错的解决方案。 – 2009-12-16 14:51:12

2

简短的回答:没有,没有可移植的方式来获得总RAM。

当然,有一个非常简单的方法可以获得总的JVM内存(java.lang.Runtime.maxMemory()),但这不是你所追求的。

要获得总系统RAM大小,你需要求助于原生系统调用(这是完全不可移植)。

+0

我很害怕。谢谢不过:-) 我想我将不得不写一个顶部| grep for linux,并为Windows提出了一些奇特的解决方案。 – 2009-12-16 14:05:54

1

你可以使用JNI调用来查询本地操作系统

,但你将不得不重新启动JVMwith新的内存参数,如果你想为JMV

-1

“可用RAM的最大数量” - 所以不是我假设安装的物理RAM?但是(1)可被OS访问的部分,(2)不用于存储OS代码,以及(3)不用于存储OS数据?

问题是,当操作系统将脏页面刷新到磁盘时,此答案每毫秒更改一次,从而减少上面的第(3)部分。如果真的需要RAM,操作系统通常会将部分内存交换出去,因此为(2)分配的RAM数量也是模糊的。

我们可能需要跳过虚拟系统本身在虚拟机中运行的情况,因此您需要在虚拟机的操作系统中安装JVM。

相关问题