关于JVM 的GC收集器
来源:互联网 发布:代理商查询系统源码 编辑:程序博客网 时间:2024/06/02 06:01
JVM虚拟机中如何进行内存回收,是由虚拟机所采用的GC收集器有关,目前为止,没有最好的垃圾收集器的说法,只有根据具体应用选用最合适的垃圾收集器。
主要分为7大类:
(1)Serial收集器
特点:单线程收集器,在进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束,适合于单个CPU环境。
参数设置:
JVM运行在Clinet模式下的默认收集器,设置如下参数:
-XX:+UseSerialGC
则使用:Serial + Serial Old 的收集器组合进行内存回收。
(2)ParNew收集器
特点:Serial收集器的多线程版本
参数设置:
设置如下参数:
-XX:+UseParNewGC
则使用:ParNew + Serial Old 的收集器组合进行内存回收。
(3)ParallelScavenge 收集器
特点:达到一个可控制的吞吐量(Throughput)。所谓吞吐量,指的是CPU用于运行代码的时间与CPU总消耗时间的比值。即:吞吐量 = 运行用户代码时间/(运行用户代码时间 + 垃圾收集时间),比如,虚拟机总共运行花了100分钟,其中垃圾收集花掉1分钟,那吞吐量就是99%。(吞吐量优先收集器)
参数设置:
JVM运行在Server模式的默认收集器,设置如下参数:
-XX:+UseParallelGC
则使用:Parallel Scavenge + Serial Old(PS MarkSweep)的收集器组合进行内存回收。
(4)SerialOld 收集器
特点:Serial收集器的老年代版本,是一个单线程收集器(无法充分利用服务器多核CPU的处理能力)。在Client模式下,作为Serial收集器的老年代使用。在Server模式下,可以与Parallel Scavenge收集器配合使用。
(5)ParallelOld 收集器
特点:Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。以前新生代如果选择了Parallel Scavenge,则老年代收集器只能使用Serial Old,而Serial Old在服务端性能不佳,导致Parallel Scavenge的吞吐量收到影响。
如果注重高吞吐量和对CPU资源利用率,优先考虑Parallel Scavenge + Parallel Old收集器。
参数设置:
设置如下参数:
-XX:+UseParallelOldGC
则使用:Parallel Scavege + Parallel Old的收集器组合进行内存回收。
(6)CMS收集器
特点:CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间的收集器。
应用场合:互联网网站或者B/S系统的服务端上(重视:服务器响应速度,希望停顿时间短,给用户较好的体验)。
参数设置:
-XX:+UseConcMarkSweepGC
则使用:ParNew + CMS + Serial Old 的收集器组合进行内存回收。
注意:这里有两个老年代收集器CMS和Serial Old,Serial Old 收集器作为CMS收集器出现Concurrent Mode Failure失败后的备用老年代收集器使用。
(7)G1收集器
特点:G1 是一种面向服务端应用的垃圾收集器,追求低停顿。G1 发布时间短,还没有经过实际的应用考验。追求低停顿,CMS 和 G1相比,CMS 仍然是首选的。
参数设置:
-XX:+UseG1GC
总结:
1、使用Parallel Scavenge + Parallel Old收集器,设置参数如下:
-XX:+UseParallelGC
-XX:+UseParallelOldGC
2、使用ParNew + CMS + Serial Old 收集器
-XX:+UseConcMarkSweepGC
上述,各个垃圾收集器的关系如下图,其中,连线表示可以组合使用。
- 关于JVM 的GC收集器
- JVM的GC机制、收集器与GC调优
- JVM之GC收集器
- JVM CMS GC收集器
- JVM GC收集器及其收集算法
- 深入JVM-垃圾收集器常用的GC参数
- 关于JVM的gc总结
- JVM-GC总结-垃圾收集器
- JVM 垃圾收集器及GC参数
- JVM-GC总结-垃圾收集器
- JVM内存管理垃圾收集器GC
- JVM:Java GC算法 垃圾收集器
- 【JVM】GC算法与垃圾收集器
- 关于GC垃圾收集器的一个C#例子
- 关于JVM的GC机制的总结
- JVM垃圾收集(GC)
- JVM学习之:GC的算法的具体实现(垃圾收集器)
- 关于JVM常用的GC算法
- 【MySQL】(2)MySQL基础语法
- 精彩的网文汇总分享
- 2017.07.22工作日记
- Python学习04_图像数据类型及颜色空间转换
- 图像处理9:扩散填充
- 关于JVM 的GC收集器
- java集合 HashSet
- redis入门
- ACM零起点2017-7-25(sort对结构体排序 PK 自创C语言对结构体快排)
- 头指针链表插入数据方式之任意位置插入
- [LeetCode]28. Implement strStr()
- Egret5.0使用FairyGUI教程(各种坑点)
- [平衡树模板]Treap
- HDFS完全分布式配置