2009-12-16 67 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。

相關問題