Java 9+;分段代码缓存需要Java 9+;汇编

Java 9+;分段代码缓存需要Java 9+;汇编,java,java-8,jvm-codecache,Java,Java 8,Jvm Codecache,我们的软件仍然支持JVM8部署的客户端,因此我们仍然使用Java8进行编译。我试图找出Java 9中引入的分段代码缓存是否适用于较旧的编译,或者是否要求源代码也在Java 9+上编译 很多在线资源都描述了它有多棒,但我找不到一个明确的证据证明Java8代码是否可以利用这个功能 分段代码缓存对Java 8编译代码有效吗?免责声明:我的答案既没有实际生活经验,也没有测试过。这只是我在深入阅读分段代码缓存之后的假设 我的结论是:如果在jre9和jre10中运行jdk8编译的应用程序,应该使用分段代码缓

我们的软件仍然支持JVM8部署的客户端,因此我们仍然使用Java8进行编译。我试图找出Java 9中引入的分段代码缓存是否适用于较旧的编译,或者是否要求源代码也在Java 9+上编译

很多在线资源都描述了它有多棒,但我找不到一个明确的证据证明Java8代码是否可以利用这个功能


分段代码缓存对Java 8编译代码有效吗?

免责声明:我的答案既没有实际生活经验,也没有测试过。这只是我在深入阅读分段代码缓存之后的假设

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

让我得出结论的是,代码缓存本身被用作已编译本机代码的存储。因此,它是jre不可分割的一部分,如下所述:

分段代码缓存代码缓存是内存中 Java虚拟机存储生成的本机代码。它的组织形式是 在连续内存块上的单个堆数据结构

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

资料来源:

由于答案的性质相当模糊,我强烈建议任何人不要把它当作真理。相反,我看到两种选择:

  • 使用jdk9和Target1.8构建应用程序,使其与Java8兼容
  • 执行与第一个选项相同的操作,但使用它来比较jre9上jdk8和jdk9编译应用程序的性能和监控代码缓存。否则,您无法确定它是否真的使用了JEP197

  • 免责声明:我的答案既没有现实生活经验,也没有测试过。这只是我在深入阅读分段代码缓存之后的假设

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

    让我得出结论的是,代码缓存本身被用作已编译本机代码的存储。因此,它是jre不可分割的一部分,如下所述:

    分段代码缓存代码缓存是内存中 Java虚拟机存储生成的本机代码。它的组织形式是 在连续内存块上的单个堆数据结构

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

    资料来源:

    由于答案的性质相当模糊,我强烈建议任何人不要把它当作真理。相反,我看到两种选择:

  • 使用jdk9和Target1.8构建应用程序,使其与Java8兼容
  • 执行与第一个选项相同的操作,但使用它来比较jre9上jdk8和jdk9编译应用程序的性能和监控代码缓存。否则,您无法确定它是否真的使用了JEP197

  • 请不要改变我原来的问题。我没有问如何更新Java8代码以在Java11上编译。我有一个业务限制,即需要支持在Java8JVM和Java11JVM上运行。我在问一些特定的Java 9+功能是否适用于Java 8编译代码。只是为了澄清一下:您想知道在jre9+上执行的jdk8编译应用程序是否能够使用Java 9引入的功能(即使只是一个特定的功能)?正确。可以理解的是,许多特性(特别是在代码中)需要Java 9编译。但是一些外部特性(例如GC日志记录)可能与编译不耦合。因此,虽然能为每个新功能找到答案是很好的,但目前我特别询问的是新的分段代码缓存。请不要改变我原来的问题。我没有问如何更新Java8代码以在Java11上编译。我有一个业务限制,即需要支持在Java8JVM和Java11JVM上运行。我在问一些特定的Java 9+功能是否适用于Java 8编译代码。只是为了澄清一下:您想知道在jre9+上执行的jdk8编译应用程序是否能够使用Java 9引入的功能(即使只是一个特定的功能)?正确。可以理解的是,许多特性(特别是在代码中)需要Java 9编译。但是一些外部特性(例如GC日志记录)可能与编译不耦合。因此,虽然能为每个新特性找到答案会很好,但目前我特别询问的是新的分段代码缓存。