JVM-1. 七个垃圾收集器的终极对比

一、截止JDK8,七个Garbage Collector的比较

鉴于表格无法完整显示,贴一张图片以备参考:
图片如下:
这里写图片描述

原表格如下:

分代No名称优点缺点开启参数算法使用场景since version备注
新生代1Serial简单高效stop the world-XX:+UseSerialGC单线程、复制算法内存较小的client模式下首选的新生代垃圾收集器jdk1
新生代2ParNew多cpu环境下,比Serial效果好stop the world、cpu核数少时线程切换的开销使得没有serial性能好‘-XX:+UseParNewGC或’-XX:+UseConcMarkSweepGC多线程并行、复制算法server首选、jdk6之前,老年代用CMS,新生代只能用Serial或ParNew
新生代3Parallel Scavenge或称throughput收集器高吞吐量、带有GC Ergonomics(gc自适应调节策略,使用-XX:+UseAdaptiveSizePolicy开启),无需手工指定新生代大小,survivor比例,晋升老年代对象的年龄等参数。stop the world;不适合响应时间要求高的应用‘-XX:+UseParallelGC或-XX:+UseParallelOldGC多线程、复制算法关注高吞吐量并且响应性要求不高的应用UseParallelGC时老年代为SerialOldGC,UseParallelOldGC时老年代为ParallelOldGC
老年代4Serial Old简单高效stop the world‘-XX:+UseSerialGC或’-XX:+UseParNewGC单线程、标记整理client首选,搭配ParNew使用,或者在jdk6之前搭配Parallel Scavenge使用,也可在server模式下作为CMS的备胎(CMS可能会因为浮动垃圾而发生concurrent mode failure的错误,此时需要serial old上位)
老年代5Parallel Old高吞吐量stop the world,不适合响应时间要求高的应用-XX:+UseParallelOldGC多线程并行,标记整理server模式默认选项。搭配Parallel Scavenge,关注吞吐量及cpu资源敏感的场合jdk6该选项自动设置 -XX:+UseParallelGC选项
老年代6CMS停顿时间短,响应性高对cpu资源非常敏感;无法处理浮动垃圾,可能会出现Concurrent mode failure;标记清除算法容易产生垃圾碎片-XX:+UseConcMarkSweepGC多线程并发,标记清除要求高响应性的互联网站或BS服务端jdk5打开此开关参数后,使用ParNew+CMS+Serial Old收集器组
老年代7G1当内存很大时,停顿时间高,并且吞吐量高内存较小时性能没有CMS好-XX:++UseG1GC使用空间整合算法,堆被划分成多个连续的大小相等的region,新生代老年代物理上不再隔离,新生代老年代各自在内部也不再要求连续。内存大于6G的高并发低停顿应用jdk7可能会在java9时作为默认GC

二、七个垃圾收集器的组合使用图

七大GC

三、调节新生代大小的三组参数

  1. 最高优先级: -XX:NewSize=1024m和-XX:MaxNewSize=1024m
  2. 次高优先级: -Xmn1024m
    (需要1.4以上,效果等同于:-XX:NewSize=-XX:MaxNewSize=1024m)
  3. 最低优先级: -XX:NewRatio=2
    注:NewRation指的是老年代:新生代之比。

四、备注

1. jvm选项中,-X选项是非标准的,不保证被所有VM实现支持,也可能在将来被改变;-XX选项是不稳定的,可能在将来被改变。

2. 使用-XX:+PrintFlagsFinal可以查看所有开启的VM选项

参考

《深入理解Java虚拟机 第2版》——周志明
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值