Java监控单元测试的内存使用
我试图将每个单元测试使用的内存存储到数据库中。因此,我使用以下公式计算测试前后的可用内存:Java监控单元测试的内存使用,java,unit-testing,memory,garbage-collection,Java,Unit Testing,Memory,Garbage Collection,我试图将每个单元测试使用的内存存储到数据库中。因此,我使用以下公式计算测试前后的可用内存: Runtime.getRuntime().freeMemory() 如果在测试期间存在垃圾收集,我会通过以下方式进行计数: //returns garbage collection count private long calculateGarbageCollectionCount(){ List<GarbageCollectorMXBean> garbageCollectorMXB
Runtime.getRuntime().freeMemory()
如果在测试期间存在垃圾收集,我会通过以下方式进行计数:
//returns garbage collection count
private long calculateGarbageCollectionCount(){
List<GarbageCollectorMXBean> garbageCollectorMXBean = ManagementFactory.getGarbageCollectorMXBeans();
return garbageCollectorMXBean.get(garbageCollectorMXBean.size()-1).getCollectionCount();
}
是否至少粗略估计了在垃圾收集过程中释放了多少内存?我尝试将MemoryPoolMXBean与getPeak方法一起使用,但得到的值让我感到困惑。它比JVM拥有的总内存还大。不要尝试创建自己的“评测应用程序”。你应该在以下两者之间做出选择:
换句话说:不要在这里发明你自己的东西。依赖现有的、有效的、健壮的技术。不要试图创建自己的“评测应用程序”。你应该在以下两者之间做出选择:
换句话说:不要在这里发明你自己的东西。改用现有的、有效的、健壮的技术。发现了一个有用的类,它有助于: 有了这个类,就可以捕获垃圾收集事件,并收集其中发生的信息
粗略估计单元测试使用了多少内存,我会在开始之前触发一次垃圾收集。计算测试前后的可用内存,并总结垃圾收集期间释放的内存量。找到了一个有用的类,它有助于: 有了这个类,就可以捕获垃圾收集事件,并收集其中发生的信息
粗略估计单元测试使用了多少内存,我会在开始之前触发一次垃圾收集。计算测试前后的可用内存,并总结垃圾回收期间释放的内存量。“在单元测试中垃圾回收器出现错误时遇到了一些问题”-是否愿意分享哪种错误?有一些工具可用于此,例如探查器。不要试图发明自产的解决方案。@alfa在这两个问题中:“java.lang.OutOfMemoryError:超出GC开销限制”和“java.lang.OutOfMemoryError:java堆空间”我不得不编辑我的问题,它太宽泛了。也许您可以再看一次。
freemory()
报告直接可用(已分配)内存,或者换句话说,totalMemory()
的空闲部分,但是totalMemory()
不是一个常数。因此freemory()
可能会报告更多内存,因为GC分配的内存比释放的内存多。甚至可能是另一种情况,freemory()
报告的内存更少,因为GC释放了太多的内存,JVM给了操作系统一些内存。因此,它不是适合这项工作的工具。“在单元测试中遇到了一些垃圾收集器错误问题”-是否愿意分享哪种错误?有一些工具可用于此,例如探查器。不要试图发明自产的解决方案。@alfa在这两个问题中:“java.lang.OutOfMemoryError:超出GC开销限制”和“java.lang.OutOfMemoryError:java堆空间”我不得不编辑我的问题,它太宽泛了。也许您可以再看一次。freemory()
报告直接可用(已分配)内存,或者换句话说,totalMemory()
的空闲部分,但是totalMemory()
不是一个常数。因此freemory()
可能会报告更多内存,因为GC分配的内存比释放的内存多。甚至可能是另一种情况,freemory()
报告的内存更少,因为GC释放了太多的内存,JVM给了操作系统一些内存。所以这不是适合这份工作的工具。自我回答是个好的开始。虽然你总是想把一些真实内容的链接,你给-链接可以打破。欢迎来到“向上投票”级别;-)自我回答的良好开端。虽然你总是想把一些真实内容的链接,你给-链接可以打破。欢迎来到“向上投票”级别;-)
gcCount*memoryReleased+freeMemoryAtStart-freeMemoryAtEnd