代码之家  ›  专栏  ›  技术社区  ›  Neo

在JIT的帮助下,程序运行的时间越长,速度越快?[已关闭]

  •  0
  • Neo  · 技术社区  · 9 年前

    我试图以纯解释模式运行java程序,但程序的速度令人无法忍受。

    随着时间的流逝,JIT应该能够将更多的字节代码编译成本地代码,所以程序应该运行得更快。我说得对吗?如果我的应用程序(如Tomcat)运行了几个星期或几个月,JIT是否可能将大部分字节代码编译为本机代码?

    谢谢你的回答!

    1 回复  |  直到 9 年前
        1
  •  2
  •   Stephen C    9 年前

    在JIT的帮助下,程序运行的时间越长,速度越快?

    在某种程度上是的。一旦所有重要的东西都被JIT编译,它就会停止变快。

    如果我的应用程序(如Tomcat)运行了几个星期或几个月,JIT是否可能将大部分字节代码编译为本机代码?

    所有代码都可能是JIT编译的。有些代码也可能没有经过JIT编译。

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

    这并不重要。如果一个方法从未或几乎从未使用过,那么它(仍然)被解释的事实可能对性能的影响很小。


    正如Joop Eggen指出的,还有其他问题会导致长时间运行的程序变慢……或变快。例如:

    • 各种类型的资源泄漏可能会导致速度减慢。

    • 加速可能是由于堆存储管理(“预热”)和缓存填充的稳定。