JVM中GC算法

GC算法

引用计数法
标记清除法
复制算法
标记压缩法
分代算法
分区算法

引用计数法

比较古老而经典的GC算法
核心就是在对象,被其他所引用,计数器加1
当引用失效时,计数器减1

存在问题
无法处理循环引用的情况
每次加减操作,比较浪费系统性能

标记清除法

分为标记和清除,两个阶段进行处理内存中的对象

存在问题
控件碎片问题,垃圾回收之后的空间是不连续的
不连续的内存空间的工作效率,低于连续的内存空间

复制算法

核心思想,将内存空间分为两块
每次,只使用其中一块,在垃圾回收时
将正在使用的内存中的存留对象,复制到末端的未被使用的内存块中
然后,清除之前正在使用的内存块中的所有对象
反复交换两个内存的角色,完成垃圾收集

碎片问题
复制到另一个区域,清空整个区域,不存在碎片问题
新生代的from区、to区使用的该算法

标记压缩法

在标记清除法,基础上做了优化
把存活的对象,压缩到内存一端,然后,进行垃圾收集

碎片问题
压缩到内存一端,清空整个区域,不存在碎片问题
老年代,使用的该算法

分代算法

根据对象的特点,将内存分为N块
根据每个内存的特点,使用不同的算法

分区算法

将整个内存分为N个,小的独立空间
每个小空间,都可以独立使用

这样,细粒度的控制一次回收,多少个小空间和哪些小空间
而不是对整个空间进行GC
从而,提升性能,并减少GC的停顿时间

猜你喜欢

转载自blog.csdn.net/nangeali/article/details/81784228