FGC,即全局垃圾回收(Full Garbage Collection),是Java虚拟机(JVM)在进行垃圾回收时的一种类型。与针对部分内存区域进行的垃圾回收(如新生代GC或老年代GC)不同,FGC会对整个堆内存进行垃圾回收,包括新生代和老年代。
FGC的触发条件通常包括:
1. 堆内存使用率达到一定阈值,例如80%。
2. 程序中显式调用System.gc()方法。
3. 垃圾回收器(如G1)在并发回收速度跟不上对象分配速度时,会启动后备方案进行FGC。
FGC的主要特点包括:
全堆扫描:
FGC会扫描整个堆内存,识别并回收不再使用的对象。
较长的停顿时间:
由于FGC需要对整个堆进行扫描和清理,因此通常会导致较长的停顿时间,这在实时系统中是不可接受的。
多线程执行:
为了提高FGC的效率,现代JVM会使用多线程技术来加速垃圾回收过程。
FGC是Java应用程序中常见的性能问题之一,频繁的FGC会导致程序运行缓慢,甚至出现服务超时等问题。因此,优化JVM配置、减少内存泄漏、合理使用内存等措施都可以有效减少FGC的发生。