soren.enemaerke
soren.enemaerke

Reputation: 4830

Getting OS memory size from java

Are there any way to get the size of the total memory on the operating system from java? Using

Runtime.getRuntime().maxMemory()

returns the allowed memory for the JVM, not of the operating system. Does anyone have a way to obtain this (from java code)?

Upvotes: 10

Views: 12108

Answers (4)

Coderman69
Coderman69

Reputation: 67

You can get the RAM usage with this. This is the same value that taskmanager in windows shows

    com.sun.management.OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean)java.lang.management.ManagementFactory.getOperatingSystemMXBean();
    double percentage = ((double)bean.getFreeMemorySize() / (double)bean.getTotalPhysicalMemorySize()) * 100;
    percentage = 100 - percentage;
    System.out.println("RAM Usage: " + percentage + "%");

Upvotes: 0

Caner
Caner

Reputation: 59288

that is not possible with pure Java, your program runs on java virtual machine, and therefore it is isolated from OS. I suggest 2 solutions for this:

1) You can use a JNI and call a C++ function to do that
2) Another option is to use Runtime.exec(). Then you have to get the info from "cat /proc/meminfo"

Upvotes: 3

khachik
khachik

Reputation: 28703

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

returns available RAM size for JVM (limited by 32bit), not the heap size.

Upvotes: 17

Thomas Pornin
Thomas Pornin

Reputation: 74502

There is no Java-only way to get that information. You may use Runtime.exec() to start OS-specific commands, e.g. /usr/bin/free on Linux. Still on Linux systems, you can use Java file access classes (FileInputStream) to parse /proc/meminfo.

Upvotes: 3

Related Questions