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

Java 8 java 8中元空间内存上的gc触发,java-8,garbage-collection,jvm,Java 8,Garbage Collection,Jvm,当jvm上未设置MaxMetaspaceSize属性时,什么条件触发Metaspace的垃圾收集 比如说,如果我关闭几个未使用的类加载器,就可以释放元空间内存中的内存。我的问题是完全gc是否会触发元空间内存的清理,还是以其他方式触发。请使用System.gc()或Runtime.gc()是的,是完全gc清理了元空间,特别是在gc上启用详细模式后,您应该会看到这样的条目完全gc(元数据gc阈值) 由于默认情况下Java8中的元空间是不受限制的,所以jvm何时知道需要从其元空间中清除未引用的类 元空

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


比如说,如果我关闭几个未使用的类加载器,就可以释放元空间内存中的内存。我的问题是完全gc是否会触发元空间内存的清理,还是以其他方式触发。

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

是的,是完全gc清理了元空间,特别是在gc上启用详细模式后,您应该会看到这样的条目
完全gc(元数据gc阈值)


由于默认情况下Java8中的元空间是不受限制的,所以jvm何时知道需要从其元空间中清除未引用的类

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

但我想了解gc何时被触发来清理未部署应用程序的元空间内存

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

这是有明确记录的,我可以在这里引用它

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

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


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

我不想手动或编程触发gc,我很想了解,当属性未设置时,jvm何时真正自动触发gc?您是否在询问在什么情况下可以释放元空间内存,或者在什么情况下填充元空间会触发gc?这是两件不同的事情。由于默认情况下Java 8中的元空间是不受限制的,jvm什么时候知道需要从其元空间清理未引用的类。类对象不是存储在元空间中,而是存储在堆空间中。那么,堆空间上的gc如何帮助清理元空间呢。类的内部表示在元空间中。哦,是的@8472我可能在元空间中存储的类对象方面弄错了。我现在的问题是,当未设置MaxMetaspaceSize属性时,jvm垃圾收集元空间的条件是什么。如果设置了该属性,jvm似乎会使用MinMetaspaceFreeRatio、MaxMetaspaceFreeRatio来触发gci。我不想设置该属性,而是希望在符合卸载条件时对metaspace进行积极清理。只是想知道如何做那种事情你想解决的实际问题是什么?