【问题标题】:What happened to JEP 145 (faster jvm startup due to compiled code reusage)?JEP 145 发生了什么(由于编译代码重用,jvm 启动更快)?
【发布时间】: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


【解决方案1】:

JEP 的文本仍然可以在JEP source repository 中找到:

http://hg.openjdk.java.net/jep/jeps/raw-file/c915dfb4117d/jep-145.md

似乎没有文件证明它被取消的原因。但是我们现在知道AOT is in the works 它解决了许多相同的问题,可能以一种更容易实现和维护的方式。事实上,AOT JEP 说:

可以改为保存一个非常晚的低级 IR 副本,但这似乎同样复杂。

这似乎可以解释为什么 145 不可行。

【讨论】:

    猜你喜欢
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2016-06-09
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    相关资源
    最近更新 更多