2010-12-02 2 views
7

Gibt es eine Möglichkeit, die Größe des gesamten Speichers auf dem Betriebssystem von Java zu bekommen? MitOS-Speichergröße von Java erhalten

Runtime.getRuntime().maxMemory() 

gibt den zulässigen Speicher für die JVM, nicht des Betriebssystems. Hat jemand eine Möglichkeit, dies zu erhalten (aus Java-Code)?

+0

Was müssen Sie _know_? –

+0

@ Thorbjørn: Wenn ich auf einer Maschine mit 2 GB RAM, aber die JVM ist auf 1 GB beschränkt, möchte ich die Größe 2 GB und nicht die Größe 1 GB aus dem Beispielcode erhalten. Oder fragst du, warum ich es brauche? –

+0

Ich frage, was Sie brauchen _for_? –

Antwort

13
com.sun.management.OperatingSystemMXBean bean = 
    (com.sun.management.OperatingSystemMXBean) 
    java.lang.management.ManagementFactory.getOperatingSystemMXBean(); 
long max = bean.getTotalPhysicalMemorySize(); 

Renditen RAM-Größe für JVM (begrenzt durch 32-Bit), nicht die Heap-Größe.

+0

Großartig, schön zu wissen! (+1) –

+1

"Zugriffsbeschränkung: Der Typ 'OperatingSystemMXBean' ist keine API" in Java 8 und bezieht sich speziell auf die in 'com.sun.management'. –

2

Es gibt keine Java-einzige Möglichkeit, diese Informationen zu erhalten. Sie können Runtime.exec() verwenden, um betriebssystemspezifische Befehle zu starten, z. /usr/bin/free unter Linux. Auf Linux-Systemen können Sie Java-Dateizugriffsklassen (FileInputStream) verwenden, um /proc/meminfo zu analysieren.

2

Dies ist mit reinem Java nicht möglich. Ihr Programm läuft auf einer Java Virtual Machine und ist daher vom Betriebssystem isoliert. Ich schlage vor, zwei Lösungen:

1) Sie können eine JNI verwenden und eine C++ Funktion aufrufen zu tun, dass
2) Eine weitere Option ist Runtime.exec() zu verwenden. Dann müssen Sie die Info bekommen von "cat /proc/meminfo"

+0

Die zweite Option funktioniert einwandfrei. Vielen Dank. –