Java的JIT编译器有多快?

4
我听说在涉及“长时间运行”的应用程序中,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个回答

5
JIT实际上是通过多个步骤操作,以减少对应用程序启动性能的影响。这些步骤包括:
1. 多种模式。 基线JIT编译器用于将字节码直接转换成机器码以立即执行单个方法。优化编译器用于对执行多次和/或消耗大量计算资源的代码执行许多高级优化。
2. 增量编译。 尽管JVM在前面加载整个模块的字节码,但实际上编译过程通常会推迟到首次执行方法时。对于像IDE这样的大型应用程序,在启动应用程序时,并不会使用IDE的所有功能,因此这种增量编译能力可以将JIT过程扩展到应用程序运行时间更长的时间点,以至于它经常是看不出来的。
总体而言,应用程序可能永远不会“完全优化”,但你永远不会知道这一点,因为你真正关心的部分已经在早期进行了优化。

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