JDK1.8及其之后,什么情况下会触发full gc?并请你讲讲各种情况的特点
时间: 2024-06-06 21:10:31 浏览: 104
Java full gc触发情况实例解析
好的,我了解你的要求。关于您的问题,Full GC 会在 JVM 垃圾回收机制中的“新生代”和“老年代”的空间使用达到一定的比例阈值之后,才会被触发。根据不同的情况,会有以下几种情况会触发 Full GC:
1. 内存分配担保失败触发 Full GC:当程序在新生代进行内存分配时,如果新生代内存不足以容纳新对象,就会通过担保机制把新生代内存里的部分对象转移到老年代中,如果担保机制转移后还是不足,就会触发 Full GC。
2. 显式调用 System.gc() 方法触发 Full GC:由于 System.gc() 只是向 JVM 建议进行垃圾回收,并不能保证立即执行,所以不建议显式调用此方法。
3. 永久代空间满触发 Full GC:对于使用 JDK1.7 或更早版本的程序,可能会出现由于持续不断的类加载和卸载导致永久代空间不足的情况,此时会触发 Full GC,但是 JDK1.8 已经废弃了永久代,采用元数据空间来实现类存储。
4. 动态改变堆空间大小时触发 Full GC:如果程序在运行中动态改变堆空间大小,可能会触发 Full GC,因为这个操作会导致新生代和老年代分配的比例达到阈值。
总的来说,Full GC 会造成较长时间的停顿,所以应该尽量避免触发 Full GC,最好通过调整 JVM 参数来优化内存使用效率。
阅读全文