求大佬解答一下这两个回复哪个是正确的,非常感谢
分类要看分类的维度是什么,例如不同的垃圾回收器类型有下面几种,然后每种内部又有不同的阶段。
参考:
我压字多的
从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC
Major GC 是清理永久代。
Full GC 是清理整个堆空间—包括年轻代和永久代。
根据对象的存活时长,把java堆划分为新生代(Young Generation)和老年代(Old Generation)区域,新生代中每次gc都有大量对象死去,少量存活的对象会移动到老年代区域中去。对不同的领域进行回收,主要分为:部分收集和整堆收集。
部分收集(Partial GC):对java堆中的部分进行GC。
新生代收集(Minor GC/Young GC):只收集新生代的垃圾。
老年代收集(Major GC/Old GC):只收集老年代的垃圾。目前只有CMS会单独收集老年代。
混合收集(Mixed GC):收集整个新生代和部分老年代的垃圾。目前只有G1收集器具有该行为。
整堆收集(Full GC):对整个java堆和方法区进行GC。
他们两的回答都不准确Full GC和Partial GC是一个级别的,Major G、Minor GC和Mixed GC是一个级别的,都属于Partial G。相信我,我刚看的《深入理解java虚拟机》。
minor GC:指发生在新生代的垃圾回收行为
major GC:指发生在老年代中的行为
full GC:指对整个堆与方法区进行垃圾收集的行为。
但是来了,也有非主流划分,major GC 与 full GC都指回收整堆的,为什么会这么划分呢?
因为服务端最常用的老年代(major GC)收集器CMS,在jdk9之后已经没有了与之配对的新生代垃圾收集器(默认指定ParNew为CMS的新生代解决方案),这时候作为major GC的CMS,其实就是指的整个堆回收。
总结:可以把major GC认为成整堆回收,也可以认为是只针对老年代的垃圾收集,但认为是Full GC 肯定是不对的,因为Full GC要包含方法区的回收,所以两个人都不是太对,也错的不多。
如果觉得我说的不好,建议去看下《深入理解java虚拟机第3版》的第三章。