在我们在 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/