Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java获取操作系统内存大小_Java_Memory_Operating System - Fatal编程技术网

从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中是不可能

有没有办法从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();