借助JIT,程序运行时间越长越快?

With the help of JIT, the longer program runs, the faster it is?

我试过 运行 java 在纯解释模式下编程,但那个程序的速度是无法忍受的。

随着时间的推移,JIT 应该能够将更多的字节码编译为本机代码,因此程序应该 运行 更快。我对吗?如果我的应用程序(例如 Tomcat)运行s 持续了数周、数月,是否有可能 JIT 已将大部分字节码编译为本机代码?

感谢您的回答,谢谢!

With the help of JIT, the longer program runs, the faster it is?

在某种程度上是的。一旦所有重要的东西都经过 JIT 编译,速度就会停止。

If my application(such as Tomcat) runs for several weeks, months, is it possible that JIT has compiled most of the byte-code into native code?

有可能所有代码都经过了 JIT 编译。也有可能某些代码未经过 JIT 编译。

JIT编译的粒度是一种方法。但是 JIT 编译器只有在解释器注意到它已经花费了超过一定时间 运行 之后才决定对方法进行 JIT 编译。如果你有一个从未被调用的方法,它就不会被 JIT 编译。

没关系。如果一种方法从未或几乎从未使用过,那么它(仍然)被解释的事实可能对性能的影响很小。


正如 Joop Eggen 指出的那样,还有其他问题会导致较长的 运行 程序变慢……或加速。例如:

  • 速度变慢可能是由各种资源泄漏引起的。

  • 加速可能是由于堆存储管理 ("warmup") 和缓存填充的稳定性。