【发布时间】:2012-08-16 17:36:18
【问题描述】:
假设我有一个 Java 程序 Test.class。我想测量它的执行时间。我写了一个包装器来做到这一点,如下所示:
class RunTest {
public static void main(String[] args) {
long sum = 0;
int iterations = 20;
int warmupNum = 10;
for(int i=0; i<iterations; i++){
long start = System.nanoTime();
Test.main(args);
long end = System.nanoTime();
if( i > warmupNum )
sum += end - start;
}
System.out.println("ave: "+sum/(iterations-warmupNum));
}
}
这里warmupNum怎么选,越大越好?多大才足够?这是衡量 Java 程序性能的“标准/通用”方法吗?
【问题讨论】:
-
10,000 是 JIT 开始工作之前的默认值。您可能有兴趣阅读this post。
-
@assylias 您是说 10000 是优化方法的重复次数,对吗?在这里,我想知道程序的预热迭代以获得稳定的执行时间。
-
yes - JIT 将在方法被调用 10,000 次后开始编译它。您可以使用传递给 JVM 的参数更改该值,但我现在找不到。
-
this gives more info - 10000 在服务器模式下 - 在客户端模式下似乎是 1500。
-
@JackWM 如果我回答了你的问题,请接受我的回答。
标签: java jvm startup measurement warm-up