【问题标题】:Getting OS memory size from java从java获取操作系统内存大小
【发布时间】:2011-05-19 03:12:03
【问题描述】:

有没有什么方法可以从java获取操作系统上总内存的大小?使用

Runtime.getRuntime().maxMemory()

返回 JVM 允许的内存,而不是操作系统。有没有人有办法获得这个(从java代码)?

【问题讨论】:

  • 你需要知道什么
  • @Thorbjørn:如果我在具有 2GB RAM 但 JVM 限制为 1GB 的机器上运行,我想获得 2GB 大小而不是示例代码返回的 1GB 大小。还是你问我为什么需要它?
  • 我问你需要它做什么
  • 作为库的一部分,用于收集一些使用情况统计信息(当然,在用户同意的情况下)

标签: java memory operating-system


【解决方案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

      【讨论】:

        猜你喜欢
        • 2011-03-18
        • 2013-12-05
        • 2012-05-16
        • 1970-01-01
        • 2015-07-17
        • 2013-02-19
        • 1970-01-01
        • 2012-02-06
        相关资源
        最近更新 更多