【发布时间】:2017-01-16 14:46:25
【问题描述】:
2012 年创建了a JEP 145,以便
在 java 中缓存已编译的本机代码,以实现更快的 jvm 启动。
当时it had been officially announced.
但是,JEP 145 does not exist 已经没有了。
发生了什么?这个想法听起来很棒。
我找不到官方声明为什么以及何时取消该项目。
【问题讨论】:
-
你应该问 OpenJDK 社区。 Stack Overflow 有点离题了。
-
这个想法听起来不错,但实施它的尝试可能证明并非如此。毕竟,潜在收益只是应用程序启动时间中非 I/O 部分的一小部分。尝试衡量这一点,然后考虑您必须添加 I/O 时间来加载缓存代码。如果结果证明不值得付出努力,我不会感到惊讶。可能还有其他细节,即编译代码,为应用程序在启动后采用的代码路径创建,如果应用程序在期间没有采用它们,则无济于事启动。
-
@Holger 一些(可能是错误的)反驳:缓存的代码可以在没有任何搜索的情况下一次性加载。可以在字节码加载之前启动它来执行它。为不同代码路径创建的编译代码很可能仍然比解释代码快得多。应该可以创建为启动优化的代码。 +++ 但你可能是对的。不过,我想它可以工作,但有限的收益和典型的 Java 用法使它不值得。
-
@maaartinus:在一块中加载代码的可能性是文件格式的问题,jar 文件确实很糟糕,但这已经通过 JRE 代码的“共享类数据”存档解决了(这确实加速了启动)并且可能会使用 Java 9 模块来解决任意库的问题。如果不采用(编译的)代码路径,它不会比实际采用的(解释的)代码路径更快。创建优化的启动代码可以解决这个问题,但与仅仅转储 JIT 结果以供将来使用完全不同。
标签: java performance optimization jit openjdk