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

标签 java unit-testing memory garbage-collection

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

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 可以为您创建的日志。请参阅here例如。
  2. 如果这“不起作用” - 查看现有工具来帮助解决这个问题。喜欢visualvm (Oracle JDK 的一部分) - 甚至是商业工具,例如 your kit .

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

关于Java监控单元测试的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46069326/

相关文章:

c++ - 如何定位一段时间内的某一系列汇编指令?

java - Spring boot JPA @Entity创建临时变量

angularjs - 使用 templateUrl 时,isolateScope() 返回未定义

unit-testing - 具有Spock模拟功能的Grails单元测试服务

c++ - 程序的类似休眠状态的保存状态

c - 为什么我的内存检查代码不能正常工作

java - 程序如何定位数组的索引?

javascript - Selenium 测试 - 确定/取消弹出窗口立即消失

java - 如何将jar发布到Nexus(快照存储库)?

javascript - 如何使用 Javascript 以编程方式生成 window.event?