代码之家  ›  专栏  ›  技术社区  ›  Frankenstein

Java监控单元测试的内存使用

  •  0
  • Frankenstein  · 技术社区  · 9 年前

    我试图将每个单元测试使用的内存存储在数据库中。因此,我用以下公式计算测试前后的可用内存:

    Runtime.getRuntime().freeMemory()
    

    //returns garbage collection count
    private long calculateGarbageCollectionCount(){
        List<GarbageCollectorMXBean> garbageCollectorMXBean = ManagementFactory.getGarbageCollectorMXBeans();
        return garbageCollectorMXBean.get(garbageCollectorMXBean.size()-1).getCollectionCount();
    }
    

    现在,我需要知道垃圾收集平均释放多少内存来执行以下操作:

    gcCount*memoryReleased+freeMemoryAtStart-freeMemoryAtEnd
    

    是否至少粗略估计了垃圾收集过程中释放了多少内存?我尝试将MemoryPoolMXBean与getPeak方法结合使用,但得到的值让我困惑。它比JVM拥有的总内存大。

    2 回复  |  直到 9 年前
        1
  •  2
  •   GhostCat    9 年前

    不要试图创建自己的“分析应用程序”。您应该在以下两者之间进行选择:

    1. 日志 here 例如
    2. 现有的 帮助实现这一点的工具。喜欢 visualvm (Oracle JDK的一部分)-甚至是商业工具,例如 your kit

        2
  •  1
  •   Frankenstein    9 年前

    找到一个有用的类,帮助: https://github.com/Netflix/spectator/blob/master/spectator-ext-gc/src/main/java/com/netflix/spectator/gc/GcLogger.java

    粗略估计单元测试使用了多少内存,我会在启动之前触发垃圾收集。计算测试前后的可用内存,并总结垃圾收集期间释放的内存量。