GC发生在JVM那个部分,有几种GC,他们的算法是什么?
GC发生在JVM那个部分?
发生在堆(heep)里面。
GC是什么?
分代收集算法
次数上频繁收集Young区 minor GC
次数上较少收集Old区 full GC
基本不动 Perm区
GC算法总体概述
1.引用计数法(较难处理循环引用)
2.复制算法
年轻代使用的minor GC采用的是复制算法(Copying)
(1)优点:1.没有标记和清除的过程,效率高 2.没有内存碎片,可以利用bump-the-pointer快速实现内存分配
缺点:需要双倍空间
3.标记清除(Mark-Sweet)
老年代一般使用标记清除,或者是标记清除与标记整理混合实现
(1)标记:从根集合开始扫描,对存活对象进行标记
清除:扫描整个内存空间,回收未被标记的对象,使用freelist记录可以区域
(2)优点:不需要额外空间
缺点:两次扫描,耗时严重;会产生内存碎片
4.标记压缩(Mark-Compact)
老年代一般使用标记清除,或者是标记清除与标记整理混合实现
(1)标记:从根集合开始扫描,对存活对象进行标记
压缩:再次扫描,并往一端滑动存活对象
(2)优点:没有内存碎片,可以使用bump-the-pointer
缺点:需要移动对象的成本
5.标记清除压缩(Mark-Sweet-Compact)