垃圾收集器

垃圾收集算法:

复制算法:一般用于年轻代。留着50%的空间进行复制,然后排序。

标记整理:在自己空间内标记有用对象然后重新排序。

标记删除:在自己空间标记无效对象进行删除,同时会使空间碎片化,并且效率不太高

垃圾收集器:

Serial:串行处理器,单线程,STW较快,好处就是简单

Parallel Scavengel: 并行处理器,优点是吞吐量大

ParNew:和ParallelScavengel 差不多,但是能和CMS共同使用。主要处理年轻代。

CMS:STW时间短,吞吐量小,用户体验高,大内存8G推荐使用,并发标记清除,分为几步,初始标记,并发标记,重新标记,并发清理,并发重置。但是也会有缺点:对cpu敏感和服务抢资源,会产生浮动垃圾,会有空间碎片生成,执行过程中可能会出现并发失败。

        初始标记:STW,时间短,记录gc roots 直接引用的对象,

        并发标记:公gc roots的直接关联对象开始查询整个引用图的过程,时间长,但是可以并发执行,不影响客户使用,同时可能在标记的过成功gcroots直接引用的状态可能会发生改变。

        重新标记:STW,修复并发标记中状态改变的gcroots对象,主要使用三色标记更新算法。

        并发清理:对未标记的区域进行清扫,这个阶段如果有新增的对象会被标记城黑色,不作处理。

        并发重置:清理掉标记

G1:把堆内存平均分成许多个Region,最多2048个。优点:很少有内存碎片。

        初始标记:STW,同CMS初始标记

        并发标记:同CMS并发标记

        最终标记:同CMS重新标记

        筛选回收:回收算法主要是复制算法,有一个参数控制每次回收的STW时间,-XX:MaxGCPauseMillis,如果全部回收时间过多,那么只会回收部分Region。这里面有一个算法,按照更少时间回收更多的空间进行回收,就是回收效益比。

        分为youngGC,MixedGC(EDEN,部分Old,大对象区域),FullGC(单线程,费时)

        大内存,高并发 jdk8及其以后;

三色标记:

黑色: 所有成员变量都被扫描了

灰色:至少有一个成员变量没有被扫描

白色:成员变量没有被扫描

多标会变成浮动垃圾,下次执行gc时回收;

漏标:有两种方式,一个是增量更新,另一个是原始快照解决,增量存储是A->D  从A开始接着标记成灰色,重新读取,原始快照存储方式->D,D标记为黑色,变成浮动垃圾,下次gc时处理。使用写屏障实现。类似于AOP的概念。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值