35、垃圾回收器 — 概述
01
垃圾回收器性能指标
吞吐量:运行用户代码的时间占总运行时间的比例
总运行时间 = 程序运行时间 + 内存回收时间
垃圾收集开销:吞吐量的补数,垃圾收集所用时间占总运行时间的比例
暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间。即STW的时间。
收集频率:相对于应用程序的执行,收集操作发生的频率
内存占用:Java堆区所占的内存大小
快速:一个对象从诞生到被回收所经历的时间
注意:吞吐量、暂停时间、内存占用三项指标不可能都达到最优。现在一般主要抓住吞吐量和暂停时间两个指标
02
吞吐量(throughput)和暂停时间
吞吐量:
吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间)。
在考虑吞吐量的情况下,应用程序能容忍较高的暂停时间,因此,高吞吐量的应用程序有更长的时间基准,快速响应是不必考虑的。
吞吐量优先,意味着在单位时间内,STW时间最短:0.2+0.2 = 0.4
暂停时间
暂停时间是指一个时间段内应用程序线程暂停,让GC线程执行的状态
暂停时间优先,意味着尽可能让单次STW时间最短:0.1+0.1+0.1+0.1+0.1=0.5
吞吐量 VS 暂停时间
直觉上,吞吐量越高程序运行越快
低暂停时间用于不能打断用户体验,特别是对于交互式应用程序
吞吐量高(越大越好)、暂停时间(越小越好)就高
现在一般都是设计在最大吞吐量的情况下,降低暂停时间
03
不同的垃圾回收器(七种经典垃圾回收器)
串行回收器:Serial、Serial Old
并行回收器:ParNew、Parallel Scavenge、Parallel Old
并发回收器:CMS、G1
04
七种垃圾回收器组合关系
新生代、老年代&整堆回收器
新生代回收器:Serial、Parallel Scavenge、ParNew
老年代回收器:Serial Old、 Parallel Old、CMS
整推回收器:G1
垃圾回收器组合关系:下图中红色虚线在JDK8中不建议使用了,在JDK9中直接不能使用
05
查看默认的垃圾回收器
-XX:+PrintCommandLineFlags:查看命令行相关参数(包含使用的垃圾收集器)
使用命令行指令:jinfo -flag 相关垃圾回收器参数,进程ID
JDK8 中没有使用G1回收器,JDK9中开始使用
扫码关注我
你们点点“分享”,给我充点儿电吧~