JVM为什么不缓存JIT编译的代码?

Sun JVM 规范执行适用于获得近本机执行速度后,代码都已运行几次字节码的一些相当复杂的优化。问题是为什么不在同一个函数/类的后续使用缓存到磁盘,使用此已编译的代码。当它站,每次执行程序时 JIT 编译器踢重新,而不是使用一种预编译的代码的版本。不会添加此功能显著提高将添加到初始时字节码基本上被解释的情况下运行该的程序的时间吗?

shenzian -
共有4个回答
  • 123456 - 1年前

    精益求精的 JET 版本 2.0,回在 2001 年发布以来已缓存的 JIT 编译器。此外,其 AOT 编译器可能重新编译到单个 DLL/共享对象使用的所有优化高速缓存。

  • vxjkzhygoohxya - 1年前

    我可以认为一对夫妇的原因为何,您不会想执行此操作:

    • 加载的类上的字节码 检测
    • 应用程序的概念是在 Java 中而粗-您可能有一个 main 入口点,但没有限制,可以扩展类加载的远-在许多应用程序中,可以加载和处理的永远不会再次看到代码 (例如,在一个 Servlet 容器)

    我会说,而不是一般的个案专门将受益于此类的功能。静止的、 好的问题。

  • matthewxiang - 1年前

    oracle 的 JVM 的确这样 — — 报价 Oracle,做记录

    编译器可以利用 Oracle JVM 类决议模型 (可选) 坚持已编译的 Java 的跨数据库调用、 会话或实例方法。众所周知在语义上的 Java 代码没有改变时,这样坚持跨会话或实例,避免不必要的重新编译的开销。

    我不知道为什么所有复杂虚拟机实现不提供相似的选项。

  • Vapatamg - 1年前

    而不是诉诸 cut'n' @ MYYN 张贴,我怀疑这是因为,JVM 执行的最佳化不是静态的而是而是动态的基于数据模式以及代码模式的链接的粘贴。很可能这些数据模式将更改应用程序的一生呈现不是最佳的缓存的最佳化。

    因此,您需要一种机制,建立是否比保存的最佳化仍优化,此时您可能也只是 re-optimise 动态。