【问题标题】:In Java Memory Pool what is the replacement of Code Cache replacement in JAVA 11?在 Java 内存池中,Java 11 中代码缓存替换的替换是什么?
【发布时间】:2025-11-20 16:15:04
【问题描述】:

我看到以下相关问题 - how-is-the-java-memory-pool-dividedgarbage-collection-not-running-for-code-cache-memory-pool 但我没有相关答案。

正如您通过 Jconsole 看到的,内存池中没有更多可用的代码缓存,需要一些关于它的替换内容的详细信息,我们在哪里可以找到有关更改的更多详细信息?

【问题讨论】:

    标签: java jvm mbeans


    【解决方案1】:

    我相信重组伴随着Java 9

    代码缓存不是只有一个代码堆,而是被分割成不同的代码堆,每个堆都包含特定类型的编译代码。这样的设计能够分离具有不同属性的代码。

    主要想法是提高性能并支持未来的扩展。

    编译代码有三种不同的*类型:

    • JVM 内部(非方法)代码
    • 配置代码
    • 非分析代码

    对应的代码堆是:

    • 包含非方法代码的非方法代码堆,例如编译器缓冲区和字节码解释器。此代码类型将永远保留在代码缓存中。

    • 一个分析代码堆,其中包含经过轻微优化的分析方法,但生命周期很短。

    • 非分析代码堆包含完全优化的非分析方法,其生命周期可能很长。

    您可以在JEP-197 中找到一些有用的详细信息(例如此次重组的动机、如何配置新堆等):)

    【讨论】: