【问题标题】:How many runs of Java program do we need to warm-up the JVM?我们需要运行多少次 Java 程序来预热 JVM?
【发布时间】: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


【解决方案1】:

使用Caliper 比创建自己的微基准实用程序更好。

How do I write a correct micro-benchmark in Java?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多