Java 循环内的执行时间峰值

Java Execution Time Peaks within a Loop

我有一个包含 701 次类似复杂计算迭代的循环。我测量了三个运行的每次迭代的执行时间。正如您在图表中看到的,我遇到了奇怪的峰值。是否有任何常见的方法能够在不分析循环内代码的情况下解释这些峰值。 Execution Time

是否有可能是 gc 从这些点开始并减慢了其他部分的速度?

视情况而定。

如果你不想分析循环内的代码,你至少要分析执行期间的内存使用情况。例如,如果算法不会产生很多垃圾,并且您已经配置了足够的堆并且选择了正确的 gc 算法,那么 gc 不需要任何 "stop the world"。

首先,您必须激活 gc 日志记录(请参阅此处:http://www.oracle.com/technetwork/articles/javase/gcportal-136937.html)并根据您的时间峰值检查 gc 峰值。

如果你想分析gc日志可以使用这个工具http://www.tagtraum.com/gcviewer.html

然后按照 Turing85 发布的关于微基准测试的 link 进行操作。比较完整。