【问题标题】:Why isn't invokedynamic the default in Groovy?为什么 Invokedynamic 不是 Groovy 中的默认设置?
【发布时间】:2018-05-11 15:15:34
【问题描述】:

Groovy 在 2012 年的 2.0 版中添加了 --indy 选项。当时这不是默认设置,因为 invoke dynamic 需要 Java 7,而当时很多人使用 Java 6。

现在即使是即将推出的 Groovy 3.0 仍然需要 --indy 选项才能强制它使用 invoke dynamic。尽管 Groovy 3.0 需要 Java 8 或更高版本。

仍然让默认为非 indy 编译和默认运行时库为非 indy 是否有任何技术优势?我会认为现在甚至不需要非独立选项。

【问题讨论】:

  • 可能是因为历史原因(我想团队希望继续支持用户在 Java 6 及更早版本上编译或运行)。此外,文档提到“从 7u21 到 7u55 的所有 JDK 7 版本在调用动态方面都有缺陷”。

标签: groovy invokedynamic


【解决方案1】:

默认情况下,--indy 在 Groovy 3.0 的路线图上(目前处于 alpha 阶段)。团队希望获得有关新解析器的反馈,因此没有等到所有功能都可用后才发布 alpha 版本。

Groovy 3.0 编译器可能会为一两个版本保留某种非独立选项,以帮助希望重新编译旧库并生成同类字节码的人们。

目前,在生成非 indy 字节码时,有一些原始处理优化正在发挥作用。非常早期的基准测试(现在在相当旧的 JVM 上)显示了一些性能下降,因为 indy 字节码没有那些相同的优化。 3.0 的路线图还包括重新审视这些特定情况下的性能,以便在需要时考虑可能的优化。

一个或两个版本是否需要某些非 indy jar 的确切细节取决于其他一些并行更改,以删除一些 indy 案例并不真正需要但所有现有库都需要的遗留类用 Groovy 编写运行。最终确定后,将在文档和发行说明中对此进行详细说明。

[1] 中有更多详细信息。

[1]http://groovy.markmail.org/thread/yxeflplf5sr2wfqp

【讨论】:

    猜你喜欢
    • 2014-03-10
    • 2015-08-19
    • 1970-01-01
    • 2022-07-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    相关资源
    最近更新 更多