从java获取操作系统内存大小
Posted
技术标签:
【中文标题】从java获取操作系统内存大小【英文标题】:Getting OS memory size from java 【发布时间】:2011-05-19 03:12:03 【问题描述】:有没有什么方法可以从java获取操作系统上总内存的大小?使用
Runtime.getRuntime().maxMemory()
返回 JVM 允许的内存,而不是操作系统。有没有人有办法获得这个(从java代码)?
【问题讨论】:
你需要知道什么? @Thorbjørn:如果我在具有 2GB RAM 但 JVM 限制为 1GB 的机器上运行,我想获得 2GB 大小而不是示例代码返回的 1GB 大小。还是你问我为什么需要它? 我问你需要它做什么? 作为库的一部分,用于收集一些使用情况统计信息(当然,在用户同意的情况下) 【参考方案1】:您可以通过此获取 RAM 使用情况。这与 windows 中的 taskmanager 显示的值相同
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 + "%");
【讨论】:
【参考方案2】:这对于纯 Java 是不可能的,您的程序在 Java 虚拟机上运行,因此它与操作系统隔离。我为此建议了 2 个解决方案:
1) 您可以使用 JNI 并调用 C++ 函数来执行此操作
2) 另一种选择是使用Runtime.exec()
。然后你必须从"cat /proc/meminfo"
获取信息
【讨论】:
【参考方案3】:com.sun.management.OperatingSystemMXBean bean =
(com.sun.management.OperatingSystemMXBean)
java.lang.management.ManagementFactory.getOperatingSystemMXBean();
long max = bean.getTotalPhysicalMemorySize();
返回 JVM 的可用 RAM 大小(受 32 位限制),而不是堆大小。
【讨论】:
Java 8中的“访问限制:'OperatingSystemMXBean'类型不是API”,特指com.sun.management
中的那个。【参考方案4】:
没有获取该信息的纯 Java 方法。您可以使用Runtime.exec()
启动特定于操作系统的命令,例如/usr/bin/free
在 Linux 上。仍然在 Linux 系统上,您可以使用 Java 文件访问类 (FileInputStream
) 来解析 /proc/meminfo
。
【讨论】:
以上是关于从java获取操作系统内存大小的主要内容,如果未能解决你的问题,请参考以下文章