jvm - Java 8 : Why does Metaspace size increase but number of loaded classes stay the same?

标签 jvm java-8 metaspace

在我们在 Jdk 8 上运行的应用程序中,我们使用 VisualVM 来跟踪加载的类的使用情况和元空间的使用情况。

在我们的应用程序运行的某个时间点,我们看到加载的类的数量不再增加,但是当我们的程序运行时元空间的大小仍然增加。那么除了类之外还有什么存储在元空间中,这可能导致这种情况?

最佳答案

当您的程序正在运行时,您的代码的某些部分可能会被 HotSpot 的 JIT 编译器确定为“热”。这将导致这些部分被转换/编译为 native 代码,并且一些其他代码可能被内联到其中。这种原生代码表示必须去某个地方,并且它与其他类元数据进入同一个地方 - 元空间。

它解释了您所看到的持续增长:使用一段代码执行了多少次的简单指标随着时间的推移确定热门部分。随着时间的推移,越来越多的代码片段将被 JIT 处理,因为它们将达到 -XX:CompileThreshold (defaults to 10000) 设置的阈值。

关于jvm - Java 8 : Why does Metaspace size increase but number of loaded classes stay the same?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30938233/

相关文章:

java - Gradle 获得未知的 JVM 选项

java - Oracle JVM 8 : when Codecache flushing is enabled, 刷新了多少?

java - 为什么我可以在 Scala 中定义通用异常类型?

java - 如何让 JAX-RS 返回 Java 8 LocalDateTime 属性作为 JavaScript 样式的日期字符串?

java - 更正用于类卸载(元空间清理)/cxf 问题的 Java 8 设置

Java 8 Metaspace - 避免减少

java - 如何确定 Java 8 元空间的理想大小

java - 何时将对象类添加为父类(super class)?

java - 立即从 Java 8 流的集合中返回一个值

Java重载方法和空参数