vlambda博客
学习文章列表

35、垃圾回收器 — 概述

01

垃圾回收器性能指标

  1. 吞吐量:运行用户代码的时间占总运行时间的比例

    • 总运行时间 = 程序运行时间 + 内存回收时间

  2. 垃圾收集开销:吞吐量的补数,垃圾收集所用时间占总运行时间的比例

  3. 暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间。即STW的时间。

  4. 收集频率:相对于应用程序的执行,收集操作发生的频率

  5. 内存占用:Java堆区所占的内存大小

  6. 快速:一个对象从诞生到被回收所经历的时间

  7. 注意:吞吐量、暂停时间、内存占用三项指标不可能都达到最优。现在一般主要抓住吞吐量和暂停时间两个指标


02

吞吐量(throughput)和暂停时间

  1. 吞吐量:

    • 吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间)。

    • 在考虑吞吐量的情况下,应用程序能容忍较高的暂停时间,因此,高吞吐量的应用程序有更长的时间基准,快速响应是不必考虑的。

    • 吞吐量优先,意味着在单位时间内,STW时间最短:0.2+0.2 = 0.4

  2. 暂停时间

    •  暂停时间是指一个时间段内应用程序线程暂停,让GC线程执行的状态

    • 暂停时间优先,意味着尽可能让单次STW时间最短:0.1+0.1+0.1+0.1+0.1=0.5

    • 35、垃圾回收器 — 概述

  3. 吞吐量 VS 暂停时间

    • 直觉上,吞吐量越高程序运行越快

    • 低暂停时间用于不能打断用户体验,特别是对于交互式应用程序

    • 吞吐量高(越大越好)、暂停时间(越小越好)就高

    • 现在一般都是设计在最大吞吐量的情况下,降低暂停时间


03

不同的垃圾回收器(七种经典垃圾回收

  1. 串行回收器:Serial、Serial Old

  2. 并行回收器:ParNew、Parallel Scavenge、Parallel Old

  3. 并发回收器:CMS、G1


04

七种垃圾回收器组合关系

  1. 新生代、老年代&整堆回收器

    • 新生代回收器:Serial、Parallel Scavenge、ParNew

    • 老年代回收器:Serial Old、 Parallel Old、CMS

    • 整推回收器:G1

  2. 垃圾回收器组合关系:下图中红色虚线在JDK8中不建议使用了,在JDK9中直接不能使用

  3. 35、垃圾回收器 — 概述


05

查看默认的垃圾回收器

  1. -XX:+PrintCommandLineFlags:查看命令行相关参数(包含使用的垃圾收集器

  2. 使用命令行指令:jinfo -flag 相关垃圾回收器参数,进程ID

  3. JDK8 中没有使用G1回收器,JDK9中开始使用



扫码关注我




你们点点“分享”,给我充点儿电吧~