博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于JVM 的GC收集器
阅读量:4220 次
发布时间:2019-05-26

本文共 1645 字,大约阅读时间需要 5 分钟。

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

上述,各个垃圾收集器的关系如下图,其中,连线表示可以组合使用。

你可能感兴趣的文章
Linux网络编程--服务端判断客户端断开的经验方法
查看>>
使用AndroidStudio编译NDK的方法及错误解决方案
查看>>
使用getopt_long()从命令行获取参数,struct option
查看>>
TCP连接的状态详解以及故障排查
查看>>
UDP全面分析
查看>>
网络须知UDP vs TCP
查看>>
MySQL mysqldump 导入/导出 结构&数据&存储过程&函数&事件&触发器
查看>>
MySQL mysqldump数据导出详解
查看>>
揭秘阿里服务互联网金融的关系数据库——OceanBase
查看>>
揭秘京东文件系统JFS的前世今生,支持双11每秒约10万个对象同时读写
查看>>
Linux日志文件系统(EXT4、XFS、JFS)及性能分析
查看>>
网络原理以及对VM中VMnet0,VMnet1,VMnet8的理解
查看>>
虚拟机安装SSH服务
查看>>
怎样选择TCP还是选择UDP
查看>>
TCP是如何保证可靠数据传输的?
查看>>
什么时候选择TCP,什么时候选择UDP?
查看>>
SSH协议详解
查看>>
SSH原理与运用(一):远程登录
查看>>
SSH原理与运用(二):远程操作与端口转发
查看>>
数字签名是什么?
查看>>