【问题标题】:How can I retrieve the amount of free RAM from a Java program?如何从 Java 程序中检索可用 RAM 量?
【发布时间】:2011-03-02 14:20:49
【问题描述】:

可用 RAM:我的目标指标。
Java:我选择的工具。
???:很好使用后者获取前者的方法。

【问题讨论】:

  • 为什么标题要以“网络”开头?
  • “可用内存”如“程序可用的内存”或“系统中未分配的内存”?

标签: java memory operating-system


【解决方案1】:

question 提供了一些有用的信息。

【讨论】:

    【解决方案2】:

    大概是这样,使用 Java 原生接口 (JNI):

        Kernel32 lib = (Kernel32) Native.loadLibrary ("kernel32",Kernel32.class);           
        Kernel32.MEMORYSTATUS mem = new Kernel32.MEMORYSTATUS ();
        lib.GetMem(mem);
        System.out.println ("Available physical memory " + mem.dwAvailPhys);
    

    【讨论】:

    • 这是什么平台? Kernel32 肯定不是 J2SE 类。
    • @Stephen C,你是对的,我已经更新了帖子,它是针对 JNI 的
    【解决方案3】:

    如果不求助于不可移植或本地库,这很难做到。

    有点像

    Runtime.getRuntime().freeMemory()
    

    只会返回JVM可用的内存,可能与系统范围的可用内存不同。

    这个页面提供了一个很好的纲要。

    http://blog.codebeach.com/2008/02/determine-available-memory-in-java.html

    【讨论】:

      【解决方案4】:

      我知道有两个项目购买了JNIWrapper,并且对结果很满意。两种基于 Windows 的用法。当我将它嵌入到我们当前的项目中时,我们想知道当用户启动我们的应用程序(WebStart)时有多少可用内存,因为有很多性能投诉很难调查(我们怀疑内存问题)。 JNIWrapper 帮助我们在启动时收集有关可用内存、总数和 CPU 等的统计信息,因此如果用户组在抱怨,我们可以检查我们的统计信息,看看他们是否收到了不可靠的机器。救命。

      【讨论】:

      • 由于问题是关于检索可用内存的大小而不是“如何更轻松地使用 JNI”,您可能想发布一个如何完成前者的示例......跨度>
      • @shog9。问题是如何获得 Java 中可用的免费 RAM。我提出了我见过的最简单的方法来实现这一点。
      • 您能否提供一个 JNIWrapper 提供的示例,与 Adrian 所写的内容进行对比(这在上下文中似乎有点浅显)?我知道这个问题很模糊(“免费 RAM”可能意味着很多东西......)但如果你有具体的想法,你不妨分享它......
      【解决方案5】:

      通过执行命令free -m获取Free RAM,然后解释如下:

      Runtime runtime = Runtime.getRuntime();
      
      BufferedReader br = new BufferedReader(
          new InputStreamReader(runtime.exec("free -m").getInputStream()));
      
      String line;
      String memLine = "";
      int index = 0;
      while ((line = br.readLine()) != null) {
        if (index == 1) {
          memLine = line;
        }
        index++;
      }
      //                  total        used        free      shared  buff/cache   available
      //    Mem:          15933        3153        9683         310        3097       12148
      //    Swap:          3814           0        3814
      
      List<String> memInfoList = Arrays.asList(memLine.split("\\s+"));
      int totalSystemMemory = Integer.parseInt(memInfoList.get(1));
      int totalSystemUsedMemory = Integer.parseInt(memInfoList.get(2));
      int totalSystemFreeMemory = Integer.parseInt(memInfoList.get(3));
      
      System.out.println("Total system memory in mb: " + totalSystemMemory);
      System.out.println("Total system used memory in mb: " + totalSystemUsedMemory);
      System.out.println("Total system free memory in mb: "   + totalSystemFreeMemory);
      

      【讨论】:

        猜你喜欢
        • 2012-02-24
        • 2012-02-27
        • 1970-01-01
        • 2013-08-22
        • 1970-01-01
        • 2015-12-26
        • 2014-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多