回答
通常 Full GC 是 JVM 为了回收整个堆内存而进行的一次全局性的垃圾回收操作,它会暂停所有的应用线程(STW),所以对应用程序的性能会有比较大的影响。
以下是几个能够触发 Full GC 的常见场景。
一、老年代不足
这是最直观的表现了。当堆内存中的老年代被占满时,JVM 会触发 Full GC 来尝试回收老年代的对象。
二、元空间不足
如果元空间不足,也会触发 Full GC。导致元空间不足的原因主要有:
- 加载了大量的类,导致元空间不足
- 大量的动态代理类或反射生成的类没有及时卸载
详细情况参考:遇到过元空间溢出吗?什么情况会造成元空间溢出?