Java 8:为什么元空间大小增加但加载的数量类保持不变?
Java 8: Why does Metaspace size increase but number of loaded classes stay the same?
在 Jdk 8 上的应用程序 运行 中,我们使用 VisualVM 来跟踪已加载 类 的使用情况和元空间的使用情况。
在我们的应用 运行 的某个时间点,我们看到加载的数量 类 不再增加,但元空间的大小仍在增加,而我们的程序是 运行。那么除了 类 之外还有什么存储在元空间中,这可能导致这种情况?
我不确定,但他 (http://java.dzone.com/articles/java-8-permgen-metaspace) 我资助了这个
Garbage collection of the dead classes and classloaders is triggered once the class metadata usage reaches the “MaxMetaspaceSize”.
这可能是增加元空间大小的原因。
虽然您的程序是 运行,但您的部分代码可能会被 HotSpot 的 JIT 编译器确定为 "hot"。这将导致这些部分成为本机代码的 transformed/compiled,并且其他一些代码也可能被内联到其中。这种本机代码表示必须去某个地方,并且它与其他 class 元数据 - 元空间进入同一个地方。
它解释了您所看到的持续增长:热点部分是随着时间的推移使用一个简单的指标来确定的,该指标衡量该段代码执行了多少次。随着时间的推移,越来越多的代码片段将被 JIT 处理,因为它们将达到 -XX:CompileThreshold
(defaults to 10000)
设置的阈值
在 Jdk 8 上的应用程序 运行 中,我们使用 VisualVM 来跟踪已加载 类 的使用情况和元空间的使用情况。
在我们的应用 运行 的某个时间点,我们看到加载的数量 类 不再增加,但元空间的大小仍在增加,而我们的程序是 运行。那么除了 类 之外还有什么存储在元空间中,这可能导致这种情况?
我不确定,但他 (http://java.dzone.com/articles/java-8-permgen-metaspace) 我资助了这个
Garbage collection of the dead classes and classloaders is triggered once the class metadata usage reaches the “MaxMetaspaceSize”.
这可能是增加元空间大小的原因。
虽然您的程序是 运行,但您的部分代码可能会被 HotSpot 的 JIT 编译器确定为 "hot"。这将导致这些部分成为本机代码的 transformed/compiled,并且其他一些代码也可能被内联到其中。这种本机代码表示必须去某个地方,并且它与其他 class 元数据 - 元空间进入同一个地方。
它解释了您所看到的持续增长:热点部分是随着时间的推移使用一个简单的指标来确定的,该指标衡量该段代码执行了多少次。随着时间的推移,越来越多的代码片段将被 JIT 处理,因为它们将达到 -XX:CompileThreshold
(defaults to 10000)