我试图将每个单元测试使用的内存存储到数据库中。所以我计算测试前后的可用内存:
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 拥有的总内存还要大。
最佳答案
不要尝试创建您自己的“分析应用程序”。您应该选择:
- 学习如何“调试”垃圾收集器 - 通过了解 GC 可以为您创建的日志。请参阅here例如。
- 如果这“不起作用” - 查看现有工具来帮助解决这个问题。喜欢visualvm (Oracle JDK 的一部分) - 甚至是商业工具,例如 your kit .
换句话说:不要在这里发明自己的东西。而是依靠现有的、有效的、强大的技术。
关于Java监控单元测试的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46069326/