Java的JIT编译器有多快工作?

时间:2013-06-26 22:21:12

标签: java jit

在谈到“长时间运行”的应用程序时,我听到很多关于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)

1 个答案:

答案 0 :(得分:5)

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

  1. 多种模式。

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

    • 虽然JVM预先加载整个模块的字节码,但实际的编译过程通常会推迟到第一次实际执行方法之前。对于大型应用程序(例如IDE),很明显在启动应用程序时并非所有IDE功能都在使用,因此这种增量编译功能可以在更长的应用程序运行时间内扩展JIT进程,它通常甚至都不显着。
  3. 总的来说,应用程序可能永远不会“完全优化”,但您永远不会知道这一点,因为您实际关注的部分会尽早进行优化。