从java获取操作系统内存大小
有没有办法从java获得操作系统上总内存的大小?使用从java获取操作系统内存大小,java,memory,operating-system,Java,Memory,Operating System,有没有办法从java获得操作系统上总内存的大小?使用 Runtime.getRuntime().maxMemory() 返回JVM(而不是操作系统)允许的内存。有人有办法(从java代码中)获得这些信息吗?没有唯一的java方法可以获得这些信息。您可以使用Runtime.exec()启动特定于操作系统的命令,例如Linux上的/usr/bin/free。仍然在Linux系统上,您可以使用Java文件访问类(FileInputStream)解析/proc/meminfo,这在纯Java中是不可能
Runtime.getRuntime().maxMemory()
返回JVM(而不是操作系统)允许的内存。有人有办法(从java代码中)获得这些信息吗?没有唯一的java方法可以获得这些信息。您可以使用
Runtime.exec()
启动特定于操作系统的命令,例如Linux上的/usr/bin/free
。仍然在Linux系统上,您可以使用Java文件访问类(FileInputStream
)解析/proc/meminfo
,这在纯Java中是不可能的,您的程序在Java虚拟机上运行,因此它与操作系统隔离。为此,我建议两种解决方案:
1)可以使用JNI调用C++函数来实现 2) 另一个选项是使用
Runtime.exec()
。然后您必须从“cat/proc/meminfo”
返回JVM的可用RAM大小(限制为32位),而不是堆大小。您需要知道什么?@Thorbjørn:如果我在一台具有2GB RAM但JVM限制为1GB的机器上运行,我希望获得2GB大小,而不是从示例代码返回的1GB大小。或者你是在问我为什么需要它?我是在问你需要它做什么?作为收集一些使用统计数据的库的一部分(当然,在用户同意的情况下)“访问限制:Java8中的类型‘OperatingSystemMXBean’不是API”,具体指的是
com.sun.management
中的类型。
com.sun.management.OperatingSystemMXBean bean =
(com.sun.management.OperatingSystemMXBean)
java.lang.management.ManagementFactory.getOperatingSystemMXBean();
long max = bean.getTotalPhysicalMemorySize();