Minor GC意思是从新生代空间(包括 Eden 和 Survivor 区域)回收内存,一般回收速度也比较快
Full GC意思指发生在老年代的 GC,出现了 Major GC,经常会伴随至少一次的 Minor GC(但非绝对的,在 ParallelScavenge 收集器的收集策略里就有直接进行 Major GC 的策略选择过程) 。MajorGC 的速度一般会比 Minor GC 慢 10倍以上
这里详细说明下,新生代和老年代中采取的各自的算法:
Minor GC一般采用的是"停止-复制"清除法,下面用图来展示一下效果:

图上的意思是,内存按容量划分为大小相同的两块,每次只使用其中的一块,当一块使用完了,就把还存货的对象复制到另一块中,然后再把已经使用过的内存清理掉,这样也可以避免出现内存碎片的问题,但是这种"复制"法也可能只是适合新生代中去使用,如果是老年代中就会出现问题
Full GC一般采取的是"标记-整理f"法,比如下面的图:

这种算法是先把内存中不用的直接清除掉,然后再把存活的对象按照顺序排列起来,这样也避免出现内存碎片的问题,如果有大的对象也可以存入到内存中
最后再说明一下,
Minor GC触发的机制:当新生代内存满了的时候,就会触发Minor GC
Full GC触发的机制:
(1)调用System.gc时,系统建议执行Full GC,但是不必然执行
(2)老年代空间不足
(3)方法去空间不足
(4)通过Minor GC后进入老年代的平均大小大于老年代的可用内存
(5)由Eden区、From Space区向To Space区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小
文章转载自于果1023,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




