1

我们的软件仍然支持使用 JVM 8 部署的客户端,因此我们仍在使用 Java 8 进行编译。我正在尝试了解 Java 9 中引入的分段代码缓存JEP197是否适用于较旧的编译 - 或者还需要源代码在 Java 9+ 上编译。

很多在线资源都描述了它有多棒,但我找不到一个明确的错误,Java 8 代码是否可以利用这种能力。

分段代码缓存是否适用于 Java 8 编译代码?

4

1 回答 1

0

免责声明:我的答案既没有真实的生活经验,也没有测试过。这只是我在进一步阅读分段代码缓存问题后的假设。

我的结论:如果您在 jre9 和 jre10 中运行 jdk8 编译的应用程序,则应该使用分段代码缓存。但我不知道它是否提供了承诺的性能改进,因为我不知道 jdk9 是否在字节码中为 jit 编译器添加了提示。

使我得出结论的原因是代码缓存本身用作已编译本机代码的存储。因此,它是 jre 的一个组成部分,如下所述:

分段代码缓存 代码缓存是 Java 虚拟机存储生成的本机代码的内存区域。它被组织为位于连续内存块之上的单个堆数据结构。

代码缓存不是一个单一的代码堆,而是分成多个段,每个段包含特定类型的编译代码。这种分段可以更好地控制 JVM 内存占用,缩短编译方法的扫描时间,显着减少代码缓存的碎片,提高性能。

来源:https ://docs.oracle.com/en/java/javase/11/vm/java-hotspot-virtual-machine-performance-enhancements.html

由于答案的性质相当模糊,我强烈建议任何人不要将其视为真理。相反,我看到两个选项:

  1. 使用 jdk9 和目标 1.8 构建应用程序以使其与 java 8 兼容。
  2. 执行与第一个选项相同的操作,但使用它来比较性能并监控 jre9 上 jdk8 和 jdk9 编译应用程序的代码缓存。否则你无法确定它是否真的使用 JEP 197。
于 2020-07-19T14:31:42.323 回答