使用Java中的for循环进行可比较的运行时测量

问题描述 投票:0回答:2

我在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
java loops optimization jvm runtime
2个回答
0
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.