我们需要运行多少次Java程序来预热JVM?

7
假设我有一个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程序性能方面是否“标准/常见”?


3
在JIT开始工作之前,默认值为10,000。您可能会有兴趣阅读这篇文章。 - assylias
@assylias 你是在说10000是用来优化一个方法的重复次数,对吗?在这里,我想知道程序的预热迭代次数以获得稳定的执行时间。 - JackWM
是的 - JIT 将在方法被调用 10,000 次后开始编译。您可以通过传递给 JVM 的参数更改该值,但我现在找不到它。 - assylias
此链接提供更多信息 - 10000 是服务器模式下的值 - 客户端模式下似乎是1500。 - assylias
@JackWM 如果我回答了你的问题,请接受我的答案。 - Aravind Yarram
1个回答

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接