垃圾回收算法和垃圾回收器

常用垃圾回收算法

  1. 标记-清除算法

过程:扫描一遍堆内存,对要清除的对象进行标记,扫描完成之后会一起清除

速度非常快,缺点是会产生大量的空间碎片

  1. 标记-复制算法

过程:先将内存区域分成左右两块,右边一块空着,左边来存放对象。在回收的时候,会扫描左边的那一块空间,将要保留的对象复制到右边存储下来,这个存储是有顺序并且排列整齐的,然后清除掉左边区域。

速度慢并且浪费了一半的空间,但是不会产生空间碎片

  1. 标记-整理算法

过程:遍历GC Roots,将要保留的对象标记,移动所有需要保留的对象,按照内存地址有序排列。然后将其他区域全部回收。

不会产生空间碎片,也不会浪费内存空间,但是非常耗时

垃圾回收器

新生代回收器:Serial、parNew、Parallel Scanvage

老年代回收器:CMS、Serial Old、Parallel Old

整堆回收器:G1

  1. Serial回收器

最古老的回收器,是单线程的,在单CPU环境下性能很好。使用的算法是复制算法。

  1. Serial Old回收器

Serial回收器的老年代版本,采用的是整理算法,同样是单线程的

  1. parNew回收器

Serial的多线程版本。新生代采用复制算法,老年代采用整理算法

  1. Parallel Scanvage回收器

Parallel Scanvage和parNew 都是多线程的。Parallel注重吞吐量,GC停顿时间的缩短要以吞吐量作为代价,因此该回收器的最大缺点就是停顿时间大

采用的是复制算法

  1. Parallel Old回收器

老年代版本,采用整理算法

  1. CMS

注重停顿时间,使用Serial Old来整理内存

过程:初始标记(直接对象,stop the world) ——> 并发标记(可达性)——> 重新标记(并发期间用户产生的垃圾,stop the world)——> 并发清除

缺点:无法清除浮动垃圾、产生大量空间碎片、对CPU资源很敏感(要分出运算能力执行回收器)

  1. G1回收器

兼顾吞吐量和停顿时间的回收器。存在年代的概念,内存结构类似于棋盘,采用的是复制算法,整体上看作是标记-整理算法,可以避免产生大量空间碎片

过程:初始标记(直接关联对象,stop the world) ——> 并发标记(可达性)——> 重新标记(并发期间用户产生的垃圾、stop the world)——> 筛选回收(对各个区域的回收价值和成本进行排序,根据用户所期望的GC停顿时间来选择性回收)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值