概述
目录
GC性能指标整体说明
评估GC性能指标
不可能三角
吞吐量与暂停时间的对比说明
吞吐量VS暂停时间
垃圾收集器发展史
垃圾收集器分类
按碎片处理方式
按工作的内存区间分
不同垃圾收集器详解
Serial
Serial Old
ParNew
ParNew收集器的工作过程如下图:
cms的简单介绍
ParNew收集器的多线程设置
Parallel
Parallel 特点
Parallel Old
CMS
工作过程
优点
G1
G1收集器的地位
Mixed GC模式
工作原理
存在的问题
G1收集器的运作过程
G1 VS CMS
ZGC
简介
内存布局
并发整理算法的实现
ZGC运作过程
优缺点
最后
前面几篇文章我们讲了垃圾收集相关的算法,现在我们开始讲垃圾收集器。
有了虚拟机就一定需要手机垃圾的机制,这就是Garbage Collection,对应的产品我们称为Garbage Collector。
在了解垃圾收集器之前,我们要先了解评价垃圾收集器好坏的性能指标。
GC性能指标整体说明
评估GC性能指标
- 吞吐量:运行用户代码的时间占总运行时间的比例
- (总运行时间:程序的运行时间+内存回收的时间)
- 垃圾收集开销:吞吐量的补数,垃圾收集所用时间与总运行时间的比例
- 暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间
- 收集频率:相对于应用程序的执行,收集操作发生的频率
- 内存占用:Java堆区所占用的内存大小
- 反应速度:从一个对象变成垃圾到这个对象被回收的时间
不可能三角
吞吐量、暂停时间和内存占用这三者共同构成一个“不可能三角”,三者总体表现会随着技术进步而越来越好。一款优秀的收集器通常最多同时满足其中两项。
这三项里,暂停时间的重要性日益凸显。因为随着硬件发展,内存占多多点也无关紧要,硬件性能的提升也有助于降低收集器运行时间对应用程序的影响,即提高了吞吐量。而内存的扩大,对延迟反而带来负面效果。
简单来说主要抓住两点:
- 吞吐量
- 暂停时间
吞吐量与暂停时间的对比说明
吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)。
- 比如:虚拟机总共运行了100分钟,其中垃圾收集花掉1分钟,那吞吐量就是99%。
这种情况下,应用程序能容忍较高的暂停时间,因此,高吞吐量的应用程序有更长的时间基准,快速响应是不必考虑的。
吞吐量优先意味着在单位时间内,STW的时间最短:0.2+0.2=0.4
吞吐量VS暂停时间
高吞吐量较好,因为这会让应用程序的最终用户感觉只有应用程序线程在做“生产性”工作,直觉上,吞吐量越高程序运行越流畅。
低暂停时间(低延迟)较好,因为从最终用户的角度来看,不管是GC还是其他原因导致一个应用被挂起始终是不好的。这取决于应用程序的类型,有时候甚至短暂的200毫秒暂停都可能打断终端用户体验。因此,具有低暂停时间是非常重要的,特别是对于一个交互式应用程序。
不幸的是,“高吞吐量”和“低暂停时间”是一对相互竞争的目标(矛盾)。
- 因为如果选择以吞吐量优先,那么必然需要降低内存回收的执行频率,但是这样会导致GC需要更长的暂停时间来执行内存回收。
- 相反的,如果选择以低延迟优先为原则,那么为了降低每次执行内存回收时的暂停时间,也只能频繁地执行内存回收,但这又引起了年轻代内存的所见和导致程序吞吐量的下降。
在设计(或使用)GC算法时,我们必须确定我们的目标:一个GC算法只可能针对两个目标之一(即只专注于较大吞吐量或较小暂停时间),或尝试找到一个两者的折中。
现在的标准:在最大吞吐量优先的情况下,降低停顿时间。
垃圾收集器发展史
这是几款比较经典的垃圾收集器,我总结了一下它们的发展史。
出现的年份 | 出现在哪一版本 | 名称 | 备注 |
1999年 | JDK 1.3.1 | Serial GC |
ParNew GC 是 Serial GC 的多线程版本 |
2002年 | JDK1.4.2 | Parallel GC 和 CMS |
Parallel GC 在 JDK |
最后
以上就是个性耳机为你收集整理的欧尼酱讲JVM(23)——垃圾收集器GC性能指标整体说明垃圾收集器发展史垃圾收集器分类不同垃圾收集器详解最后的全部内容,希望文章能够帮你解决欧尼酱讲JVM(23)——垃圾收集器GC性能指标整体说明垃圾收集器发展史垃圾收集器分类不同垃圾收集器详解最后所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复