在Java内存池中,JAVA 11中的代码缓存替换是什么?

问题描述 投票:0回答:1

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

正如您通过Jconsole所看到的那样,内存池中没有可用的代码缓存,需要一些替代品的详细信息,以及在哪里可以找到有关更改的更多详细信息?

enter image description here

java jvm mbeans
1个回答
1
投票

我相信Java 9带来了重组。

而不是只有一个代码堆,而是将代码缓存分割为不同的代码堆,每个代码堆都包含特定类型的已编译代码。这种设计可以分离具有不同属性的代码。

主要思想是提高性能并启用将来的扩展。

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

  • JVM内部(非方法)代码
  • 配置文件代码
  • 非配置代码

相应的代码堆是:

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

  • 概要分析代码堆,包含寿命短的经过优化的概要分析方法。

  • 一个非配置文件的代码堆,包含完全优化的,非配置文件的方法,这些方法的寿命可能很长。

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

© www.soinside.com 2019 - 2024. All rights reserved.