java垃圾收集器和回收策略

一 垃圾收集器

1 serial收集器
特点:单线程串行收集,gc收集的时候会暂停用户线程 stop the world, 简单高效
缺点:gc收集暂停的时间长
适用:新生代默认的垃圾收集器
算法:复制算法

2 parnew收集器
特点:除了多线程外,其余和serial收集器一样; 只有他可以和cms收集器配合工作
适用:新生代
算法:复制算法

3 parallel scavenge收集器
特点:多线程并行收集,gc收集的时候会暂停用户线程; 关注吞吐量
适用:新生代
算法:复制算法

4 serial old收集器
特点:单线程串行收集,gc收集的时候会暂停用户线程;类似serial收集器
适用:老年代
算法:标记-整理算法

5 parallel old收集器
特点:多线程并行收集;类似parallel scavenge收集器
适用:老年代
算法:标记-整理算法

6 cms收集器
特点:以获取最短暂停时间为目标,来提高用户响应时间; 内存回收过程和用户线程是一起并发执行的。
适用:老年代
算法:标记-清除算法

7 G1收集器 (jdk7后使用)
特点:既满足减少垃圾收集暂停时间,有具备高吞吐量(cpu利用率)
算法:标记-整理算法
适用:分代管理,能够管理新生代和老年代,而不用搭配其他收集器

总结:
1 一般都是一个新生代收集器搭配一个老年代收集器一起使用,只有parnew可以和cms搭配使用,G1可以单独使用;
2 并行和并发的区别是: 并行的时候会暂停用户线程,并发的时候不暂停用户线程
3 串行收集器单线程高效但牺牲了用户响应时间,并行收集器关注吞吐量,cms关注垃圾收集停顿时间
4 吞吐量和暂停时间的区别:
吞吐量: 程序线程用时占程序总用时的比例 =用户代执行码时间/(用户代码执行时间 + 垃圾收集时间)
暂停时间:垃圾串行、并行收集时,程序线程会被暂停处于等待状态

二 回收策略

1 新创建对象存放在eden区
过程:
1)新创建对象都存放到新生代eden区
2)当经过第一个GC时,会根据复制算法把存活的对象复制到其中一个s区,另一个s区和eden区清空

Minor GC: 新生代回收动作, 回收速度比较频繁
Major GC/Full GC: 老年代垃圾回收动作, 速度比Minor GC慢10倍以上

2 长期存活的对象将进入老年代
简介:虚拟机为每个对象定义一个age计数器,每经过一次minor gc存活下来,计数器加1,当年龄达到设置参数时,会进入到老年代中。
参数:-XX:MaxTenuringThreshold 对象进入老年代的年龄阀值

4 动态对象年龄判定
当s区中相同年龄所有对象大小总和大于s区空间的一半,年龄等于后者大于该年龄的对象会直接进入到老年代中。
此时不需要等到年龄达到MaxTenuringThreshold阀值就可以触发转化。

5 大对象直接分配到老年代
-XX:PretenureSizeThreshold参数:
1)当创建的对象超过这个参数直接在老年代中分配
2)参数只对serial和parNew收集器有效

6 空间分配担保
新生代minor gc后s区不足以存储剩余存活的对象,会把一部分对象分配到老年代中,类似自身条件不足复用其他空间使其为自己担保。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值