我有一个循环,包含701次类似复杂计算的迭代。我测量了三次运行的每次迭代的执行时间。正如你在图表中看到的那样,我得到了奇怪的高峰。是否有任何常见的方法能够在不分析循环内部的代码的情况下解释这些峰值。 Execution Time
gc是否可能从这些点开始并减慢其他部分的速度?
答案 0 :(得分:0)
这取决于。
如果您不想分析循环内的代码,则必须至少分析执行期间的内存使用情况。例如,如果算法没有创建很多垃圾并且您已经配置了足够的堆并且您选择了正确的gc算法,则gc不需要任何"停止世界"。
首先,您必须激活gc日志记录(请参阅此处:http://www.oracle.com/technetwork/articles/javase/gcportal-136937.html)并检查与时间峰值相对应的gc峰值。
如果您想分析gc日志,可以使用此工具http://www.tagtraum.com/gcviewer.html。
然后按照图灵85发布的关于微基准测试的链接进行操作。它更完整。