当在jvm上没有设置MaxMetaspaceSize属性时,什么条件触发Metaspace的垃圾收集。
假如我关闭了几个未使用的类加载器,那么就有一个空间来释放元空间内存中的内存。我的问题是,完整的gc触发了元空间内存的清理,还是以其他方式触发。
因为默认情况下,Java 8中的Metaspace不受限制,jvm何时理解它需要从其元空间中清除未引用的类。
Metaspace本身不是垃圾收集的。但是java堆是。当java.lang.Class
对象被收集时,底层元数据也会被释放。因此,在大多数情况下,如果有任何类符合卸载条件,常规GC周期也将释放元空间。
但是想知道什么时候触发gc来清理取消部署的应用程序的元空间内存。
最迟当元空间的当前容量已满时,可能在常规垃圾收集卸载类时更早。
是的,它是完整的GC来清理元空间,特别是你应该在gc上启用详细模式后看到像这个Full GC (Metadata GC Threshold)
这样的条目。
请使用System.gc()和Runtime.gc()