Java 中带有 for 循环的可比较运行时测量

Comparable runtime measurements with for-loops in Java

我在 for 循环中迭代一组对象,并且对于每个对象在一个点生成相同的图。我偶然发现第一个对象的图形生成总是比其他对象的运行时间更长。

我想这是因为在第一次迭代后识别出的某种优化。问题是我想比较对象的运行时间,当然应该基于每个对象的相同条件。

这是什么优化,可以禁用吗?

编辑:这是 for 循环内代码的一个简短示例:

double startTime = System.currentTimeMillis();
Graph g = new Graph();
for (int entry : entries) {
    graph.addVertex("v" + entry);
}
System.out.println("runtime: " + (System.currentTimeMillis() - startTime) / 1000.0);

编辑:这是前几个循环的测量值:

runtime: 0.045  
runtime: 0.001  
runtime: 0.001  
runtime: 0.002  
runtime: 0.002

这可能是由于 C1/C2 优化。 运行解释器代码中的 ning 将禁用优化。 运行 使用 -Xint。请注意,该模式下的 运行 会对整个应用程序的性能产生影响。

我用 -verbose:class 来显示 ClassLoader activity。在第一次迭代中,有很多加载的 类 之后没有再次加载。正如@Juan 所建议的, 我现在只是放弃第一次迭代作为解决方法。之后所有 类 都被加载并且每次迭代都是 运行 在相同的条件下。