我试图将每个单元测试使用的内存存储在数据库中。所以我用以下方法计算测试前后的空闲内存:
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的总内存大。
答案 0 :(得分:2)
不要尝试创建自己的“性能分析应用程序”。您应该选择:
答案 1 :(得分:1)
通过这个类,可以捕获垃圾收集事件等等,从而收集信息中发生的事情。
粗略估计单元测试使用多少内存,我会在开始之前触发垃圾收集。计算测试前后的可用内存,并总结垃圾收集期间释放的内存量。