JVM收集器概述
2015-11-16 23:58
211 查看
Serial 收集器
Serial 是一个新生代收集器 ;单线程垃圾回收器,采用复制算法
-XX:+UseSerialGC
ParNew 收集器
ParNew 是一个新生代收集器;ParNew收集器其实是Serial收集器的多线程版本,其余行为包括Serial收集器可用的所有控制参数、收集算法、stop the world、对象分配规则,回收策略等都与Serial收集器完全一样;
控制参数有如下:
-XX:+UseParNewGC
-XX:SurvivorRatio //新生代中Edge区域Survivor区的容量比值,默认为8,代表 Edge:Survivor = 8:1
-XX:PretenureSizeThreshold //直接晋升到老年代对象的大小,设置这个参数数大于这个参数的对象直接在老年代分配
-XX:HandlePromotionFailure //是否允许新生代收集担保,进行一次minor GC后,另一块Survivor空间不足时,将直接会在老年代中保留
-XX:ParallelGCThreads //设置并行GC进行回收时,并行线程数
Parallel Scavenge 收集器
Parallel Scavenge 是一个新生代收集器,也是使用复制算法的收集器,从名字上看 Parallel Scavenge收集器,与ParNew收集器一样,都是并行收集,并且都采用复制算法,但是Parallel Scavenge收集器与CMS等其它收集器不同,CMS等收集器关注的点是尽量缩短垃圾回收时用户线程停顿的时间,而Parallel Scavenge收集器目标则是达到一个可控的吞吐量(Throughput)。所谓吞吐量就是CPU用户运行用户代码的时间与CPU总耗时间的比值。
停顿时间短就适合人机交互程序,而高吞吐量可以高效的利用CPU时间,尽可能快的完成用户任务,适合后台预算而不需要太多交互的的任务。
Parallel Scanvenge 手机器两个参数可以精准的控制吞吐量:
-XX:MaxGCPauseMillis //最大垃圾回收停顿时间 大于0的毫秒数,收集器尽可能的保证内存回收花费的值不超过该设定
-XX:GCTimeRatio //设置大于0小于100的整数,垃圾回收时间占总时间的比率,如果把该值设为19 允许GC时间占总时间的5% 1/(1+19),默认值为 99 ,就是允许最大1%
-XX:+UseAdaptiveSizePolicy //打开开关不用指定新生代老年代大小等参数,收集器会动态指定空间大小
Serial Old 收集器
Serial Old 是Serial收集器的老年代版本,他同样是一个单线程收集器,使用“标记-整理”算法;
Parallel Old 收集器
Parallel Old收集器 是Parallel Scavenge 收集器的老年代版本,使用多线程和“标记-整理”算法,Parallel Old收集算法是在jdk 1.6之后的版本才提供的,在此之前Parallel Scavenge 收集器地位比较尴尬,因为如果新生代选择了 Parallel Scanvenge收集器,老年代除了Serial Old(PS MarkSweep)收集器别无选择;由于老年代在Serial Old收集器在服务器性能上拖累,使用Parallel Scanvenge收集器整体上也未必能达到吞吐量最优;知道Parallel Old收集器出现后,“吞吐量优先”收集器终于有了比较名副其实的应用组合,在注重CPU吞吐量的应用场合,都可以优先考虑Parallel Scanvenge 加Parallel Old 收集器;
CMS 收集器
CMS(Concurrent Mark Sweep) 收集器是一种以获得最短回收停顿时间为目标的收集器。目前很大一部分的java应用集中在互联网站或者B/S系统的服务端,这类应用尤其重视相应速度;
从名字Mark Sweeps上可以看出CMS收集器是基于“标记-清理”算法实现的,他的运作过程先对与其他几种收集器来说相对复杂,整个过程分为四步:
1)初始标记(CMS inital mark) stop the world 标记GC Roots直接关联到的对象
2)并发标记(CMS concurrent mark) GC Roots tracing
3)重新标记(CMS remark) stop the world 修正2)步骤与用户线程冲突的部分
4)并发清除(CMS cuncurent sweep)清除不可达对象
CMS 收集器启动时的回收线程默认是(cpu数量+1)/4 并发垃圾手机线程不少于 25%的CPU资源
G1 收集器
G1(Garbage-First)收集器是当今收集器技术发展的最前沿成果之一;G1的使命的替换掉CMS收集器
G1特点:
1)并行与并发
2)分代收集
3)空间整合
4)可预测的停顿
G1收集器工作的顺序与CMS收集器顺序非常相似,两者主要差别在于内存划分模型,以及回收算法
Serial 是一个新生代收集器 ;单线程垃圾回收器,采用复制算法
-XX:+UseSerialGC
ParNew 收集器
ParNew 是一个新生代收集器;ParNew收集器其实是Serial收集器的多线程版本,其余行为包括Serial收集器可用的所有控制参数、收集算法、stop the world、对象分配规则,回收策略等都与Serial收集器完全一样;
控制参数有如下:
-XX:+UseParNewGC
-XX:SurvivorRatio //新生代中Edge区域Survivor区的容量比值,默认为8,代表 Edge:Survivor = 8:1
-XX:PretenureSizeThreshold //直接晋升到老年代对象的大小,设置这个参数数大于这个参数的对象直接在老年代分配
-XX:HandlePromotionFailure //是否允许新生代收集担保,进行一次minor GC后,另一块Survivor空间不足时,将直接会在老年代中保留
-XX:ParallelGCThreads //设置并行GC进行回收时,并行线程数
Parallel Scavenge 收集器
Parallel Scavenge 是一个新生代收集器,也是使用复制算法的收集器,从名字上看 Parallel Scavenge收集器,与ParNew收集器一样,都是并行收集,并且都采用复制算法,但是Parallel Scavenge收集器与CMS等其它收集器不同,CMS等收集器关注的点是尽量缩短垃圾回收时用户线程停顿的时间,而Parallel Scavenge收集器目标则是达到一个可控的吞吐量(Throughput)。所谓吞吐量就是CPU用户运行用户代码的时间与CPU总耗时间的比值。
停顿时间短就适合人机交互程序,而高吞吐量可以高效的利用CPU时间,尽可能快的完成用户任务,适合后台预算而不需要太多交互的的任务。
Parallel Scanvenge 手机器两个参数可以精准的控制吞吐量:
-XX:MaxGCPauseMillis //最大垃圾回收停顿时间 大于0的毫秒数,收集器尽可能的保证内存回收花费的值不超过该设定
-XX:GCTimeRatio //设置大于0小于100的整数,垃圾回收时间占总时间的比率,如果把该值设为19 允许GC时间占总时间的5% 1/(1+19),默认值为 99 ,就是允许最大1%
-XX:+UseAdaptiveSizePolicy //打开开关不用指定新生代老年代大小等参数,收集器会动态指定空间大小
Serial Old 收集器
Serial Old 是Serial收集器的老年代版本,他同样是一个单线程收集器,使用“标记-整理”算法;
Parallel Old 收集器
Parallel Old收集器 是Parallel Scavenge 收集器的老年代版本,使用多线程和“标记-整理”算法,Parallel Old收集算法是在jdk 1.6之后的版本才提供的,在此之前Parallel Scavenge 收集器地位比较尴尬,因为如果新生代选择了 Parallel Scanvenge收集器,老年代除了Serial Old(PS MarkSweep)收集器别无选择;由于老年代在Serial Old收集器在服务器性能上拖累,使用Parallel Scanvenge收集器整体上也未必能达到吞吐量最优;知道Parallel Old收集器出现后,“吞吐量优先”收集器终于有了比较名副其实的应用组合,在注重CPU吞吐量的应用场合,都可以优先考虑Parallel Scanvenge 加Parallel Old 收集器;
CMS 收集器
CMS(Concurrent Mark Sweep) 收集器是一种以获得最短回收停顿时间为目标的收集器。目前很大一部分的java应用集中在互联网站或者B/S系统的服务端,这类应用尤其重视相应速度;
从名字Mark Sweeps上可以看出CMS收集器是基于“标记-清理”算法实现的,他的运作过程先对与其他几种收集器来说相对复杂,整个过程分为四步:
1)初始标记(CMS inital mark) stop the world 标记GC Roots直接关联到的对象
2)并发标记(CMS concurrent mark) GC Roots tracing
3)重新标记(CMS remark) stop the world 修正2)步骤与用户线程冲突的部分
4)并发清除(CMS cuncurent sweep)清除不可达对象
CMS 收集器启动时的回收线程默认是(cpu数量+1)/4 并发垃圾手机线程不少于 25%的CPU资源
G1 收集器
G1(Garbage-First)收集器是当今收集器技术发展的最前沿成果之一;G1的使命的替换掉CMS收集器
G1特点:
1)并行与并发
2)分代收集
3)空间整合
4)可预测的停顿
G1收集器工作的顺序与CMS收集器顺序非常相似,两者主要差别在于内存划分模型,以及回收算法
相关文章推荐
- HTML(超文本标记语言)
- 使用Alert和Panel
- C++迭代器之'插入迭代器'
- FIO测试工具介绍
- webKit之扩展JSC的三种方法
- Android中进程与线程基础知识
- Codeforces Round #280 (Div. 2) D. Vanya and Computer Game 二分
- cannot convert from 'wchar_t *' to 'char *' 问题
- LTP--Linux 测试工具
- (Alpha)Let's-个人贡献分
- 南大软院大神养成计划-网页设计初学HTML
- JMS的常用方法
- JAVA 基础课总结七
- iOS内存话题: performSelector 导致不立即 dealloc
- ”南大软院大神养成计划“_第一天的学习
- struct2源码解读(9)之处理Action请求
- LastPass 的开源替代品
- WebKit之WebGL初识
- Redis学习笔记(2)
- LeetCode Rotate List (链表操作)