java - 如何在没有分析器的情况下获取 JVM 中迄今为止分配的总内存?

标签 java memory profiling

我想使用 java.lang.management API 获取 Java 程序中某个时刻之前分配的总内存。到目前为止,这就是我所拥有的:

ManagementFactory.getMemoryPoolMXBeans()
        .stream()
        .map(MemoryPoolMXBean::getPeakUsage)
        .filter(usage -> usage != null)
        .mapToLong(MemoryUsage::getUsed)
        .sum();

我想知道这段代码是否能达到我想要的效果,或者结果是否会产生误导和/或不正确。

最佳答案

您将通过此代码获得有关当前内存使用情况的准确结果。

以下是示例代码供您引用:

 

    long heapSize = Runtime.getRuntime().totalMemory();
    long max = Runtime.getRuntime().maxMemory();

    StringBuilder message = new StringBuilder();

    message.append("Heap Size = ").append(formatSize(heapSize)).append("\n");
    message.append("Max Heap Size = ").append(formatSize(max)).append("\n");

    for (MemoryPoolMXBean pool : ManagementFactory.getMemoryPoolMXBeans()) {
      String name = pool.getName();
      MemoryType type = pool.getType();
      MemoryUsage usage = pool.getUsage();
      MemoryUsage peak = pool.getPeakUsage();
      message.append("Heap named '").append(name);
      message.append("' (").append(type.toString()).append(") ");
      message.append("uses ").append(usage.getUsed());
      message.append(" of ").append(usage.getMax());
      message.append(". The max memory used so far is ");
      message.append(peak.getUsed()).append(".\n");
    }
    System.out.println(message.toString());

希望这对您有帮助。

关于java - 如何在没有分析器的情况下获取 JVM 中迄今为止分配的总内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48061643/

相关文章:

java - Java 内存消耗的类级分析

java - 如何更新JFrame组件?

java - 在 while 循环中使用 try-finally block

java - AWS - 如何使用 aws-java-sdk-iam 在 JAVA 中获取用户 MFA 启用/禁用值?

c++ - 空终止 int 数组

.net - 如何找到泛型参数的 TypeSpec

java - Gson解析问题,空指针异常

java - Java 程序中的字符串大小是否有限制?

尽管增加,PHP 内存限制已耗尽

r - 从 Rprof() 获取更多信息