2011-07-14 33 views
3

我有一段代碼可以計算我係統中的RAM總數[不是Java VM堆大小]。Java中的RAM總數

它是如下:

 OperatingSystemMXBean operatingSystemMXBean = 
      ManagementFactory.getOperatingSystemMXBean(); 

     Method m = operatingSystemMXBean.getClass(). 
        getDeclaredMethod("getTotalPhysicalMemorySize"); 

     m.setAccessible(true); 

     Object value = m.invoke(operatingSystemMXBean); 

     if (value != null) 
     { 
      System.out.println(value); 
     } 

與上面的代碼段的問題是,它給我不正確的值有時。例如,在具有8 GB RAM的系統中,使用32位JVM,它顯示4 GB。我想這是因爲JVM是32位,使用32位4 GB是它可以解決的最大值。

任何人都可以爲此提出建議方法/解決方法。基本上,我們如何在使用32位JVM的系統中獲得總RAM。是

我的系統的全部細節如下:

操作系統:Windows 7
CPU:英特爾酷睿i7
JDK:的Sun Java 1.6更新21,32位
RAM:8 GB

+0

不知道這是否會有所幫助,但它有一些信息:http://stackoverflow.com/questions/25552/using-java-to-get-os-level-system - 資料 – bezmax

+0

這裏有一些答案完全相同的問題:http://stackoverflow.com/questions/4335356/getting-os-memory-size-from-java – Stas

回答

2

想不到一種純粹的Java方式,但可以使用Runtime.exec()來運行以下命令:

wmic MEMPHYSICAL Get MaxCapacity 

編輯: 更正 - 上面給出了安裝RAM的最大容量。嘗試OS別名象下面這樣:

wmic OS Get TotalVisibleMemorySize