当jvm上没有设置MaxMetaspaceSize属性时,什么条件会触发Metaspace的垃圾收集。
假如我关闭了几个未使用的类加载器,那么有一个空间来释放元空间内存中的内存。我的问题是,完整的gc会触发元空间内存的清理,还是以其他方式触发。
答案 0 :(得分:1)
因为默认情况下,Java 8中的Metaspace不受限制,jvm何时理解它需要从其元空间中清除未引用的类。
Metaspace本身不是垃圾收集的。但是java堆是。收集java.lang.Class
个对象时,底层元数据也会被释放。因此,在大多数情况下,如果有任何类符合卸载条件,常规GC周期也将释放元空间。
但是想知道gc什么时候被触发来清理取消部署的应用程序的元空间内存。
最迟当元空间的当前容量已满时,可能在常规垃圾收集卸载类时更早。
答案 1 :(得分:0)
是的,它是完整的GC来清理元空间,特别是你应该在gc上启用详细模式后看到像这个Full GC (Metadata GC Threshold)
这样的条目。
答案 2 :(得分:0)
here有明确记录,我可以在这里引用。
-XX:MetaspaceSize =大小 设置分配的类元数据空间的大小,该大小将在第一次超过垃圾收集时触发。垃圾收集的阈值取决于使用的元数据量而增加或减少。默认大小取决于平台。
直接引号,但重点是我的;)
检查来自@Holger的答案可能会有所帮助。
答案 3 :(得分:-2)
请使用System.gc()或Runtime.gc()