今天继续和大家分享关于MinorGC、MajorGC、FullGC的知识。如果我错了请纠正我!1.MinorGC(新生代垃圾回收)JDK1.8堆内部结构从新生代空间(包括Eden和Survivor区)回收内存称为MinorGC,也叫YoungGC。因为大多数Java对象都有生死存亡的特点,所以MinorGC非常频繁,回收速度一般也比较快。通常,使用复制算法。注意:MinorGC可能会导致STW,挂起其他用户的线程,等待JVM垃圾回收结束,用户线程才恢复运行。MinorGC的触发条件EdenEdenParkisfull新的新对象需要分配到新一代的EdenEdenPark。当Eden区空间不够时,需要MinorGC策略回收。2.MajorGC(GarbageCollectionintheOldGeneration)MajorGC是指发生在老年代的GC。MajorGC触发条件当老年代空间不足时,会先尝试触发MinorGC。如果MinorGC之后没有足够的空间,就会触发MajorGC。说明:发生在老年代的GC,基本上一个MajorGC会伴随一个MinorGC。MajorGC的速度一般比MinorGC慢10倍,STW时间更长。3、FullGC(新生代+老年代垃圾回收)FullGC可以理解为MajorGC+MinorGC组合后的一个整体过程,就是清理JVM的整个堆空间(年轻代和老年代)空间)。当FullGC触发条件调用System.gc()方法时,可以通过-XX:+DisableExplicitGC参数禁止调用System.gc()。当方法区空间不足时。MinorGC后存活的对象大小超过了老年代的剩余空间。当MinorGC时Survivor幸存区空间不足时,判断是否允许保证失败,如果不允许则触发FullGC。允许,并且每次提升到老年代的对象的平均大小>old。时代的最大可用连续内存空间也会触发FullGC。CMSGC异常。CMS运行时预留的内存不能满足程序的需要,就会出现“ConcurrentModeFailure”故障,进而触发FullGC。STW(StopTheWorld):在垃圾回收期间,应用程序会暂停。当出现暂停时,整个应用线程都会被挂起,有点像应用卡住了。
