jvm的垃圾回收器_java 垃圾回收器

jvm的垃圾回收器_java 垃圾回收器1.GC分类按线程数:并行垃圾回收器:ParallelCollector.同一时间段内只有一个cpu执行垃圾回收操作.用户线程等待. 串行垃圾回收期:SerialCollector.同一时间段内可以有多个cpu执行垃圾回收操作,用户线程等待.按压缩方式:压缩式,内存有序.非压缩式:内存无序.按工作方式:并发式,及并发GC,用户线程和垃圾回收器同时交替进行. 独占式,垃圾回收线程进行时,用户线程需要等待.按工作区分:年轻代,老年代.2.GC性能指标吞吐量:用户线

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1.GC分类

按线程数:并行垃圾回收器:Parallel Collector. 同一时间段内只有一个cpu执行垃圾回收操作.用户线程等待.
	    串行垃圾回收期:Serial Collector.同一时间段内可以有多个cpu执行垃圾回收操作,用户线程等待.
按压缩方式:压缩式,内存有序.  非压缩式:内存无序.
按工作方式:并发式,及并发GC,用户线程和垃圾回收器同时交替进行.
	     独占式,垃圾回收线程进行时,用户线程需要等待.
按工作区分:年轻代,老年代.

2.GC性能指标
吞吐量: 用户线程时间/ 垃圾回收执行时间 + 用户线程执行时间. 吞吐量优先意味着 单位时间内STW时间最短.
暂停时间:垃圾回收的时,用户线程等待的时间.暂停时间优先意味着stw的频率增加.
说明:吞吐量和暂停时间相当于竞争对手, 吞吐量优先意味着,线程的回收频率降低.STW时间即暂停时间加长. 暂停时间优先,意味着垃圾回收频率增强,吞吐量下降.
现在的标准:保证吞吐量的情况下,尽量降低暂停时间.

3.7款经典垃圾收集器和垃圾分代之间的关系

在这里插入图片描述
在这里插入图片描述
Serial GC最开始的GC,
ParNew的多线程版本.
ParallelGC在JDK1.6之后称为HotSpot默认GC.
2017年JDK9中G1变成默认的垃圾收集器,以替代CMS
2019年9月JDK13,增强ZGC

4.如何查看默认的垃圾收集器
jinfo -flag 相关垃圾回收器参数 进程ID
在这里插入图片描述

5.Serial回收器:串行回收器.
最早的垃圾回收期,单个cpu时运行效率高.由于运行Stw时间长,所以不适用于与用户交互性强的应用中.
在这里插入图片描述
6.ParNew 并行回收器:
在这里插入图片描述-XX:ParallelGCThreads限制线程数量,默认开启和CPU数据相同的线程数

7.parallel回收器:吞吐量优先
同样是并行垃圾回收器.和ParNew不同的是Parallel 回收器可以调整吞吐量,可以设置自适应策略.开启自适应策略后,parallel回收器会根据内存情况自动设置年轻代晋升老年代的年龄参数,自动设置吞吐量和暂停时间的比例.
parallel old 使用的是标记压缩回收算法,所以会产生stw,所以该回收器适合做后天工资支付,批量处理,订单处理的应用程序.
parallel的参数设置有:
-XX:+UseParallelGC 手动开启Parallel回收器.jkd8默认开启.
-XX:+UseParallelOldGC 手动开启Parallel Old回收器.jkd8默认开启.
上面这两个参数关联,开启一个,默认开启另一个
-XX:ParallelGCThreads:设置年轻代并行收集器的线程数,一般与CPU数量相同,如果CPU数量大于8个,则值=3+(5*N/8)
-XX:MaxGCPauseMillis:设置暂停时间
-XX:GCTimeRatio:设置吞吐量比例,默认99,取值范围0-100,也就是垃圾回收时间不超过1%
-XX:+UseAdaptiveSizePolicy:设置是否开启自适应测率

8.CMS并发回收器
Cms回收器主打低延迟.
在JDK1.5推出了Current Mark Sweep回收器主打低延迟.可以让用户线程和垃圾回收线程同时进行.
运行过程:
初始标记: 初始标记阶段,同样需要STW,只是初始阶段标记只标记与GOOT ROOTS 直接关联的对象.所以STW的时间很短.
并发标记:并发标记阶段用户线程和垃圾回收线程同时进行.
再次标记阶段:再标记阶段,标记在并发阶段产生的新垃圾对象,但是没有被标记为垃圾的对象.
清除阶段:采用了标记-清除算法,会产生内存碎片,无法采用标记-压缩算法是因为标记压缩的时候,用户正在使用的内存没法使用,就没法并发进行.
在这里插入图片描述
总结:如果想要最小化使用内存和cpu优先使用serial回收器,如果先要高吞吐量优先使用parallel,如果想要前台反应时间慢,优先使用cms,但是在jdk9将cms标为废弃.jdk14正式废弃.

9.G1整堆区域化分代回收器
Garbage First 是一个并行回收器.把堆内存分割为很多不想关的region区域,G1会根据region垃圾堆价值大小,维护一个优先列表,价值高的优先回收
优点:分代收集,小region之间使用复制算法.整体上算是标记-压缩算法.所以不会产生内存碎片,不会为了放置放对象,频繁出发垃圾回收.在内存较大的时候G1效率比cms好,内存小的时候CMS更好点.平衡点在6~8G.

10.垃圾回收器总结

在这里插入图片描述
11.GC日志分析
在这里插入图片描述

在这里插入图片描述

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194985.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号