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



当 jvm 上未设置 MaxMetaspaceSize 属性时,什么条件会触发元空间的垃圾回收。

假设我关闭了几个未使用的类加载器,则有一个范围可以释放元空间内存中的内存。我的问题是完整的gc是否触发了元空间内存的清理,或者它是否以其他方式触发。

因为默认情况下 Java 8 中的元空间是不受限制的,jvm 什么时候知道它需要从其元空间中清理未引用的类。

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

但想知道何时触发 GC 来清理未部署应用程序的元空间内存。

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

是的,清理元空间的是完整的 GC,具体来说,您应该在 gc 上启用详细模式后Full GC (Metadata GC Threshold)看到这样的条目。

这里有清楚记载,我可能在这里引用。

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

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

从@Holger中检查答案可能会有所帮助。

请使用System.gc((或Runtime.gc((

最新更新