【问题标题】:How fast does Java's JIT compiler work?Java 的 JIT 编译器的工作速度有多快?
【发布时间】:2013-06-26 22:21:12
【问题描述】:

在谈到“长时间运行”的应用程序时,我听说过很多关于 JIT 编译如何使代码比预编译代码运行得更快。但是,完全优化您的应用程序需要多长时间?

出于兴趣,我将向您展示示例。我有一些方法,我们称之为mySlowMethod()。它每秒执行几百次诸如旋转、乘法等一些矩阵计算。我测量了每次通话的时间并得到了这些结果:

long time = System.nanoTime();
mySlowMethod();
System.out.println(System.nanoTime()-time);

//first call
1577187 (1.6 ms)
//next 2 seconds
~60000 (0.06 ms)
//later 
less than 10000 (0.01 ms)

【问题讨论】:

    标签: java jit


    【解决方案1】:

    JIT 实际上以多个较小的步骤运行,以最大限度地减少对应用程序启动的性能影响。这些步骤包括:

    1. 多种模式。

      • baseline JIT 编译器用于执行 [相对] 简单的字节码直接转换为机器码,以便立即执行各个方法。
      • 优化编译器用于对多次执行和/或消耗大量计算资源的代码执行许多高级优化。
    2. 增量编译。

      • 虽然 JVM 会预先加载整个模块的字节码,但实际的编译过程通常会延迟到第一次实际执行方法之后。对于大型应用程序(例如 IDE),很明显并非 IDE 的所有功能在应用程序启动时都在使用中,因此这种增量编译能力将 JIT 进程分散到更长的应用程序运行时间,以至于它通常甚至不引人注意。

    总体而言,应用程序可能永远不会“完全优化”,但您永远不会知道这一点,因为您真正关心的部分很早就被优化了。

    【讨论】:

      猜你喜欢
      • 2021-03-06
      • 2012-05-22
      • 1970-01-01
      • 2010-10-16
      • 2011-02-23
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      相关资源
      最近更新 更多