繁体   English   中英

Java监视单元测试的内存使用情况

[英]Java monitor memory usage of unit test

我试图将每个单元测试使用的内存存储到数据库中。 所以我用以下方法计算测试前后的可用内存:

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拥有的总内存。

不要尝试创建自己的“概要分析应用程序”。 您应该选择:

  1. 学习如何“调试”垃圾收集器-通过了解GC可以为您创建的日志 例如参见这里
  2. 如果那是“不做”-请研究现有的工具以帮助解决这一问题。 例如visualvm (Oracle JDK的一部分),甚至是商业工具(例如您的工具箱)

换句话说:不要在这里发明自己的东西。 而是依靠现有的,有效的,强大的技术。

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

通过此类,可以捕获垃圾收集事件,从而收集更多事件信息。

作为一个粗略的估计,一个单元测试使用了多少内存,我在开始之前会触发垃圾回收。 计算测试前后的可用内存,并总结垃圾回收期间释放了多少内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM