我是靠谱客的博主 个性耳机,最近开发中收集的这篇文章主要介绍欧尼酱讲JVM(23)——垃圾收集器GC性能指标整体说明垃圾收集器发展史垃圾收集器分类不同垃圾收集器详解最后,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

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性能指标整体说明垃圾收集器发展史垃圾收集器分类不同垃圾收集器详解最后所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部