JVM篇-垃圾回收器(最核心篇)

GC分类与性能指标

GC分类

  • 垃圾收集器没有在规范中进行过多的规定,可以有不同的厂商、不同的版本的JVM来实现
  • 由于JDK的版本处于高速迭代的过程,因此Java发展至今已经衍生了众多GC版本
  • 从不同角度分析垃圾收集器,可以将GC分为不同的类型
    • 按照线程分为:串行垃圾回收器(默认在JDK Client模式)并行垃圾回收器
    • 按照工作模式分:可以分为并发式垃圾回收器独占式垃圾回收器
    • 按照碎片处理方式分:分为压缩式垃圾回收器(再分配对象空间使用:指针碰撞)非垃圾回收器(再分配对象空间使用:空闲列表)
    • 工作内存空间分:年轻代垃圾回收器老年代垃圾回收器

性能指标

  • 吞吐量:运行用户代码的时间总运行实间的比例
  • 暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间
  • 内存占用Java堆区所占的内存大小
  • 垃圾收集开销:吞吐量的补数,垃圾收集所用时间与总运行时间的比例
  • 收集频率::相对于应用程序的执行,收集操作发生的频率
  • 快速:一个对象从诞生到被回收所经历的时间。
    不可能三角吞吐量暂停时间(STW)、内存占用只能满足两点

吞吐量(ThroughPut)

  • 吞吐量是CPU用于运行用户代码的时间与CPU总耗时的比值,
    • 吞吐量计算=运行用户代码时间/(运行用户代码时间+垃圾回收时间
  • 这种情况下,应用程序能容忍较高的暂停时间,因此高吞吐量的引用程序有更长的时间基准,快速响应式不必考虑
  • 吞吐量优先,意味着在单位时间内,STW的时间次数少

在这里插入图片描述

暂停时间(Pause Time)

  • 暂停时间是指一段时间内引用程序线程暂停,让GC线程执行的状态
    • GC期间100毫秒的暂停时间意味着在这100毫秒期间内没有引用程序线城市活动的
  • 暂停时间优先,意味着竟可能让赞提STW的时间最短
    在这里插入图片描述

现在标准

在最大吞吐量优先的情况下,降低停顿时间

不同的垃圾回收器概述

Java常见的垃圾收集器有哪些?

经典垃圾收集器

  • 串行回收器:Serial、Serial Old
  • 并行回收器:ParNew、Parallel Scavenge、Parallel Old
  • 并发回收器:CMS、G1

垃圾收集器分代之间的关系

在这里插入图片描述

  • 新生代收集器:Serial ParNew Parallel Scavege
  • 老年代收集器: Serial Old Parallel Old CMS
  • 整堆收集器:G1

垃圾收集器的组合关系(JDK14)

在这里插入图片描述

  • 为什么需要这么多垃圾收集器,一个不够嘛?因为Java应用场景多。
  • 我要选择的是针对具体应用最适合的收集器

如何查看默认的垃圾收集器

	-XX:+PrintCommandLineFlags:查看命令行线管参数 包括使用的垃圾收集器
	jinfo -flag 相关垃圾回收器参数 进程id

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Serial回收器:串行回收

  • Serial 收集器作为HotSpot中Client模式下的默认新生代垃圾收集器
  • Serial收集采用复制算法串行回收STW机制的方式执行内存回收。
  • 除了收集年轻代之外,Serial收集器还提供了用于收集老年代的Serial Old收集器,Serial Old收集器同样采用了了串行收集 和STW机制,只不过内存回收算法使用的是标记压缩算法
    • Client 模式下默认使用老年代的垃圾回收器
    • Serial Old在Server模式下主要有两个用途
      • 与新生代的Parallel Scavenge 配合使用
      • 作为老年代CMS收集器的后背垃圾收集方案(CMS2020.3已经删除)

执行过程

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值