2011-07-14 11 views
3

私のシステムでは[Java VMのヒープサイズではない]の総RAMを暗号化するコードがあります。次のように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ビットを使用しているため4GBが最大の問題であると思います。

誰もがこのために方法/回避策を提案することはできません。基本的に、32ビットJVMを使用するシステムでは、どのようにRAM全体を取得しますか?次のように私のシステムの

完全な詳細は以下のとおりです。

OS:Windows 7の
CPU:インテルi7の
JDK:SunのJavaの1.6アップデート21、32ビット
RAM:8ギガバイト

+0

わからない、この場合に役立ちますが、それはいくつかの情報を持っています:以下のようなOSの別名を試してみてくださいhttp://stackoverflow.com/questions/25552/using-java-to-get-os-level-system -information – bezmax

+0

ここでいくつかの回答で全く同じ質問があります:http://stackoverflow.com/questions/4335356/getting-os-memory-size-from-java – Stas

答えて

2

純粋なJavaの方法を考えることはできませんが、Runtime.exec()を使用して次のコマンドを実行できます。

wmic MEMPHYSICAL Get MaxCapacity 

EDIT: 修正 - 上記はRAMをインストールするための最大容量を示します。

wmic OS Get TotalVisibleMemorySize 
関連する問題