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)


相关推荐

  • 我刚刚做了一个艰难的决定「建议收藏」

    我刚刚做了一个艰难的决定「建议收藏」腾讯做了个艰难的决定,如果您电脑里安装了360软件,建议您卸载了它在运行QQ~可口可乐做出了一个非常艰难的决定,如果检测到用户胃里有百事可乐,将自动释放敌敌畏和鹤顶红中国移动做出一个非常艰难的决定,如果方圆百米内检测到有联通用户将使这些用户不间断自动拨打110迅雷做出一个非常艰难的决定,如果检测到用户电脑内安装快车,将拒绝下载教育片宝马做出了一个非常艰难的决定,如果检测到用户使用过奔驰宝马刹车将自动失灵蒙牛做了个艰难的决定,如果监测到用户胃里有伊利牛奶,将自动释放三聚氰胺麦当劳做了个艰难的决定,如果监测

  • pycharm django环境搭建_创建web项目

    pycharm django环境搭建_创建web项目1、Python环境搭建博主版本选择:Python2.7.15、Django1.11.82、pycharm安装pycharm激活成功教程版下载地址: 3、pycharm创建Django项目在软件安装和环境配置完成后,打开Pycharm.Step1.点击 File–>NewProject 弹出如下窗口Step…

  • 隐马尔科夫模型(HMM)与词性标注问题

    隐马尔科夫模型(HMM)与词性标注问题

    2021年11月19日
  • docker启动mysql报错_mysql查看root密码

    docker启动mysql报错_mysql查看root密码dockerrun–name=mediawiki_mysql\-eMYSQL_DATABASE=wikidb\-eMYSQL_USER=wikiuser\-eMYSQL_PASSWORD=mysecret\-eMYSQL_ROOT_PASSWORD=zhang123\-v/var/mediawiki/mysql:/var/lib/mysql\-dmysql:5.7启动…

  • 【C/C++】C语言特性总结

    【C/C++】C语言特性总结已经有大约半年的时间没有碰C语言了,当时学习的时候记录了很多的笔记,但是都是特别混乱,后悔那个时候,不懂得写博客,这里凭借记忆和零零散散的笔记记录,尝试系统性地复习一下C语言。之前都是在Windows环境下学习,这次把重心放在Linux环境下,这次的复习源于基础,但是要高于基础。文章目录工具gcc编译器VS2019C语言编译过程C语言代码主体必要内容C语言数据类型关键字常量变量进制表示s…

  • “栈”的典型应用—表达式求值(C语言实现)

    “栈”的典型应用—表达式求值(C语言实现)表达式求值是程序设计语言编译中的一个基本问题。它的实现就是对“栈”的典型应用。本文针对表达式求值使用的是最简单直观的算法“算符优先法”。我们都知道算术四则运算的运算规则是:先乘除,后加减。从左到右计算先算括号内,再算括号外表达式组成任何一个表达式都有操作数、运算符和界定符组成。操作数即可以是常量,也可以是被说明为变量或常量的标识符。运算符可以分为算术运算,关系运算和

发表回复

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

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