垃圾回收的一点知识整理

垃圾回收算法:
标记-清理(Mark-Sweep):先标记,在清理,存在效率和空间问题
复制(copying):将空间分为Eden、from-survivor,to-survivor,每次只使用Eden和from-survivor区域,将存活下来的放入to-survivor,需要进行空间担保来应多存活数量较多的情况,适用于新生代(-XX:SurvivorRatio)
标记-整理(Mark-Compact):先标记,再将剩下的对象往一端进行移动,适用于老年代


垃圾回收器

serial:线性收集器,标记和收集线程都只有一个,并且都需要stop the world,有(new和old两个版本)
ParNew:并行收集器,新生代版本,可以与CMS一起使用,主要特点是可以使用多个GC线程
Parallel Scavenge:另外一种并行收集器,主要关注CPU的吞吐量
CMS(Concurrent Mark Sweep):一种并发收集器,用于老年代,整个GC过程总共有三个标记和一个清理(初始标记,并发标记,重新标记,并发清理),初始标记只标记与GC root直接关联的对象,并发标记就是进行完全的 GC ROOTS Tracing,重新标记就是修正在并发标记期间因用户程序而发生变动的那部分对象,最后进行并发清除
CMS的停顿时间非常短,但也有三个缺点:对cpu资源敏感、浮动垃圾会引起concurrent mode failure,主要基于标记清除算法,会造成空间碎片,需要制定整理策略
G1:将空间分为多个大小相等的独立空间(region),每次只对其中一部分进行回收,G1可以根据新生代或者老年代采用不同的算法。
-XX:PrintGCDetails


gc类型

minor gc, major gc, full gc
minor gc:新生代gc,当eden区域不足时发生
major gc/full gc,通常这两个概念是等价的,major gc通常是伴随着minor gc,当进行minor gc时,发现老年代可供晋级空间不足,则会触发一次full gc,针对整个java堆


from-survivor/to-survivor

新生对象会分配在eden区域中,当eden区域满了之后会发生minor gc,然后将eden区域和from-survivor区域中存活的对象拷入to-survivor,而to-survivor中的部分对象会晋级到老年代中,最后form-survivor和to-survivor会互换身份
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值