Reputation: 4830
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
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
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
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
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