在java 8中触发元数据空间内存上的gc

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

当在jvm上没有设置MaxMetaspaceSize属性时,什么条件触发Metaspace的垃圾收集。

假如我关闭了几个未使用的类加载器,那么就有一个空间来释放元空间内存中的内存。我的问题是,完整的gc触发了元空间内存的清理,还是以其他方式触发。

java-8 garbage-collection jvm
4个回答
1
投票

因为默认情况下,Java 8中的Metaspace不受限制,jvm何时理解它需要从其元空间中清除未引用的类。

Metaspace本身不是垃圾收集的。但是java堆是。当java.lang.Class对象被收集时,底层元数据也会被释放。因此,在大多数情况下,如果有任何类符合卸载条件,常规GC周期也将释放元空间。

但是想知道什么时候触发gc来清理取消部署的应用程序的元空间内存。

最迟当元空间的当前容量已满时,可能在常规垃圾收集卸载类时更早。


0
投票

是的,它是完整的GC来清理元空间,特别是你应该在gc上启用详细模式后看到像这个Full GC (Metadata GC Threshold)这样的条目。


0
投票

它清楚地记录了here,我可以在这里引用它。

-XX:MetaspaceSize = size设置分配的类元数据空间的大小,该空间将在第一次超出时触发垃圾回收。根据使用的元数据量,增加或减少垃圾收集的阈值。默认大小取决于平台。

直接引用但重点是我的;)

可能有助于检查@Holger的答案。


-2
投票

请使用System.gc()和Runtime.gc()

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