为了避免在JVM上进行基准测试的大多数众所周知的陷阱,我使用jmh(java microbenchmarking harness)。此外,我确实理解垃圾收集会扭曲基准测试结果。
现在我想知道jmh与-prof gc
的结果是多么富有表现力。 jmh是否采取特殊措施使结果有意义?
我心中的其他问题是:
答案 0 :(得分:0)
另外,我确实理解垃圾收集会扭曲基准测试结果。
它并非真正扭曲结果。如果您的代码创建了垃圾,那么GC周期就是您的算法产生的性能成本的一部分。您只是以摊销方式而不是按次付款方式支付。当然,由基准编写者决定将迭代和预热计数设置为足够大以使您获得有意义的样本,因此如果您还希望测量GC的影响,则需要运行足够长的基准测试让它让GC的人体工程学达到稳定状态。
当然,微基准就是这样,它不是一个完整的应用程序基准。由于GC成本通常取决于分配率以上(例如实时设置大小是另一个因素),因此应谨慎解释这些结果。