JVM----GC(下)

圾收集算法有:标记-清除算法、复制算法、标记-整理算法、分代收集算法
标记-清除算法
首先标记要回收的对象,标记完成后回收所有被标记的对象,会产生大量不连续的内存碎片
复制算法
将内存划分为两个相等块,每次只用其中一块。把存活的对象复制到另一块内存中,然后把这块内存清理掉,内存的可用空间减半。
标记-整理算法
这是标记-清除算法的升级版。在完成标记阶段后,让存活对象向着一端移动,进行整理。
分代收集算法
首先根据对象存活周期将分为新生代、老年代。
在新生代中选择复制算法,每次垃圾收集有大量对象死去,少量存活。
老年代中采用标记整理算法,对象存活率比较高,(或者标记-清除算法)。

垃圾收集器
1.Serial收集器(串行GC)
采用单个线程进行垃圾收集时,必须暂停其他所有的工作线程。

2.ParNew收集器
serial的多线程版本,除了使用多条线程进行垃圾收集之外,其余行为与Serial一样。

3.Parallel Scavenge收集器
吞吐量优先,吞吐量 = 用户代码运行时间 /(CPU总消耗时间)

4.CMS收集器(并发GC)
以获取最短回收停顿时间为目标
分为以下4步:
初始标记
暂停其他所有线程,记录与root直接相连的对象,速度很快 ;
并发标记: 记录可达对象,和用户线程一起工作,不需要暂停工作线程。
(不能保证包含所有的可达对象,但它会记录引⽤更新的地⽅。因为⽤户线程可能会不断更新引⽤域)
重新标记:为了修正 ⽤户程序导致标记产⽣变动的记录,需要暂停其他所有的工作线程
并发清除:清除 GC Roots 不可达对象,不需要暂停工作线程

5.G1收集器:
区域划分和优先级的区域回收机制
与 CMS 收集器相比,G1收集器最大的改进:

  1. 基于标记-整理法,不产生内存碎片。
  2. 可以非常精确地控制停顿时间,在不牺牲吞吐量前提下,实现低停顿的垃圾回收。

G1 收集器避免全区域垃圾收集,它把堆内存分为几个区域,并且跟踪这些区域的垃圾收集进度,在后台维护一个优先级列表,每次根据允许的收集时间,优先回收垃圾最多的区域。
G1 收集器分为 4 个阶段:初始标记、并发标记、最终标记、筛选回收

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值