JVM
MinorGC、Mixed GC、FullGC的区别是什么
❒ 各种GC介绍 ✔ 新生代收集(MinorGC/YoungGC):只针对新生代的GC,当Eden区满了时触发,Survivor满了并不会触发。 ✔ 年老代收集(Major GC/Old GC):针对年老代空间的GC,不过目前只有CMS存在单独回收年老代的行为。 ✔ 混合收集(MixedGC):指收集范围覆盖整个新生代空间及部分年老代空间的GC,目前只有G1存在该行为。 ✔ 全面收集(FullGC):覆盖新生代、年老代以及元数据空间的GC,会对于所有可发生GC的内存进行收集。是所有GC类型中,耗时最长、停顿最久的GC。 ❒ 触发FullGC的原因有如下几种: ✔ 调用System.gc()时,JVM在内存占用较多时会尝试发生FullGC,但并非100%触发。 ✔ 除CMS之外收集器,当年老代不足时也会触发FullGC。 ✔ 元数据空间内存不足时,也会触发FullGC。 ✔ 对象晋升时年老代空间无法承载晋升对象时也会触发FullGC。 ✔ 新生代空间分配担保机制触发时,也会先触发FullGC。 注释: STW (Stop-The-World): 暂停所有应用程序线程,等待垃圾回收的完成
✔ 新生代收集(MinorGC/YoungGC):发生在新生代的垃圾回收,暂停时间短(STW) ✔ 年老代收集(Major GC/Old GC):针对年老代空间的GC,目前只有CMS存在单独回收年老代的行为 ✔ 混合收集(MixedGC):新生代 + 老年代部分区域的垃圾回收,G1收集器特有 ✔ 全面收集(FullGC):新生代 + 老年代 + 元空间完整垃圾回收,暂停时间长(STW),应尽力避免