JVM垃圾回收——垃圾收集器(一)

news2024/11/19 16:31:30

目录

一、垃圾收集器

二、Serial/Serial Old

三、ParNew 收集器

四、Parallel Scavenge收集器

五、Parallel Old收集器


一、垃圾收集器

 现阶段可以作为商用的垃圾收集器大概以上几种,ZGC还正在实验阶段,如果两个收集器之间有连线那么表示他们可搭配使用。在jdk8中已经废弃了Serial+CMS和ParNew+Serial Old这两个组合。在jdk9之后已经完全取消了这些组合的支持。

在jdk17下,配置了这两组垃圾收集器,在启动时候报错找不到参数,如下图

 本系列将分四个部分讲解,首先分析几种传统的垃圾收集器,然后分析CMS垃圾收集器(虽然CMS收集器已经被G1完全取代,在jdk14之后也抛弃了CMS),再分析一下G1垃圾收集器,最后说一下ZGC。

二、Serial/Serial Old

        serial 垃圾收集器在jdk1.3.1之前是HotSpot垃圾收集唯一收集器。他是一个单线程工作的收集器。基于复制算法实现,在进行垃圾收集时必须暂停用户线程进行STW(stop the world)。主要用在Hotspot虚拟机运行在客户端模式下默认的新生代垃圾收集器,由于是单线程的工作模式,不存在线程切换,没有线程交互的开销,在收集几十到一两百兆的新生代效率还是很不错的。

        Serial Old 是Serial收集器的老年代收集版本,也是一个单线程的收集器,使用标记整理算法实现。主要也是适用于客户端模式下老年代的垃圾收集。在服务端模式下主要有两点作用,在jdk5之前与Parallel Scavenge收集器搭配使用,第二个是在CMS收集器发生Concurrent Mode Failure时使用。

        JVM 参数配置  -XX:+UseSerialGC 没有-XX:+UseSerialOldGC参数

三、ParNew 收集器

        ParNew收集器实际上是Serial的多线程并行版本。除了使用多线程之外,其他行为包括收集算法,STW、对象分配规则、回收策略等都与Serial完全一致。但是在JDK9之后,JVM已经取消了-XX:+UseParNewGC ,参数ParNew合并入CMS收集器,在配置该参数时会报Unrecognized VM option 'UseParNewGC'错误。在jdk9之前是唯一推荐和CMS垃圾收集器配合的收集器,如果老年代使用CMS垃圾收集器,那么新生代收集器默认是ParNew。

        在使用CMS垃圾收集器时,-XX:MaxTenuringThreshold=6默认值是6,使用以下参数可以打印出垃圾收集器的明细

-XX:+UseConcMarkSweepGC
-XX:MaxTenuringThreshold=15
-XX:+PrintCommandLineFlags

显示结果为

 使用 -XX:ParallelGCThreads 参数可以限制垃圾收集的线程数。

四、Parallel Scavenge收集器

        Parallel Scavenge收集器是一款新生代的收集器,基于标记复制算法实现的,它在很多方面和ParNew非常相似,是一个多线程并行的垃圾搜集器。不像CMS一样关注停顿时间,该收集器更关注的是吞吐量(Throughput)。

        Parallel Scavenge 收集器有几个JVM需要关注一下

  • -XX:MaxGCPauseMillis=200 表示垃圾收集最大的停顿时间,jvm会尽量在不超过这个设定的时间范围内完成垃圾收集。这是一个大于0的毫秒数,但并不是这个数值设置的越小越好,它是以牺牲新生代内存大小为代价的,如果时间设置的越小,那么新生代对应的内存空间就会变小,垃圾收集停顿时间减少,但是垃圾收集次数变多。
  • -XX:GCTimeRatio 表示用户期望虚拟机消耗在GC上的时间不超过程序运行时间的1/1+n。默认值为99,也就是吞吐量。
  • -XX:+UseAdaptiveSizePolicy 当这个参数被激活后,不需要人为的指定新生代的大小(-Xmn)、Eden和Survivor 的比例(-XX:survivorRatio)、晋升到年代对象大小(-XX:PretenureSize Threshold)等参数了。JVM会动态调整这些参数。

        开启Parallel Scavenge垃圾收集器的参数配置如下,默认使用ParallelOldGC时候默认新生代使用的是ParallelScavenge收集器。

-XX:+UseParallelOldGC
-XX:+UseAdaptiveSizePolicy
-XX:MaxGCPauseMillis=200
-XX:+PrintCommandLineFlags

五、Parallel Old收集器

        Parallel Old 是ParallelScavenge收集器的老年代收集版本,也是一个多线程并行的垃圾收集器,基于标志整理算法实现。

Parallel Old收集器工作过程示意图

 

        由于Parallel Scavenge关注吞吐量,所以在注重吞吐量或者处理器资源(CPU)较为稀缺的场景,可以优先考虑Parallel Scavenge + Parallel Old的组合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/11055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux初阶】Linux环境下的 git 使用 | git的add/commit/push/log/pull/mv/rm/status

🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【Linux初阶】 ✒️✒️本篇内容:详细阐述git是什么,git的发展脉络,还有Linux环境下git工具的具体使用方法 &#x1f6a…

关于如何导入OTWB 7型项目

一、简介: 公司最新的 OTWB 7.0 产品,均使用最新版开发开发框架 ThornForest,简称 TF。相较于 Thorn 框架,新版的 TF 框架,在页面编译的方式有比较大的变化。其中最主要的变化是,TF 的编译需要根据不同部署…

深入理解JavaScript——执行上下文与调用栈

前言 在说一个概念前,我们需要确定它的前提,此文以 ECMAScript5 为基础撰写 一句话解释 执行上下文就是一段代码执行时所带的所有信息 执行上下文是什么 《重学前端》的作者 winter 曾经对什么是执行上下文做过这样的解释: JavaScript 标…

基于基于全局差错能量函数的双目图像立体匹配算法matlab仿真,并提取图像的深度信息

目录 1.算法概述 2.仿真效果预览 3.核心MATLAB代码预览 4.完整MATLAB程序 1.算法概述 全局的能量函数公式如下: E(f)Edata(f)Esmooth(f) 其中,Edata 表示能量函数的数据项,意为该像素只考虑自身的视差值的倾向,不考虑 邻域内其他像素的影响;N 表示匹配聚合时的支持窗口;p 表…

应用层-HTTP协议

HTTP概述 HTTP(HyperTextTransferProtocol)是Web应用的应用层协议,定义浏览器如何向Web服务器发送请求以及Web服务器如何向浏览器进行响应。目前主要使用的HTTP/1.0 和HTTP/1.1,尤其以HTTP/1.1 为主流。 HTTP连接 浏览器在向服务器发送请求之前&#…

全日制和非全日制之争,看完六年前的这个文件心里就有数了

在每年的报考咨询中,都能接触到不少关于非全日制硕士的质疑,最大的争议点无非在于社会含金量的问题。其实很多年以前是没有非全日制这一说法的,早些年很多学员也是在职周末读的双证MBA/MPA/MEM这些专业,但证书一律是全日制标识&am…

Oracle Primavera Unifier进度管理器(Schedule Manager)

目录 功能介绍 功能包括 功能介绍 在进度管理器中,Primavera Unifier 用户可以在项目/外壳和项目群级别创建和管理进度表。他们可以创建根据项目或外壳的需求自定义的项目/外壳计划表。当他们为项目/外壳创建第一个时间表表时,Primavera Unifier 会自…

【软考】系统集成项目管理工程师(九)项目成本管理

这里写目录标题 一、项目成本管理概述二、项目成本管理子过程1. 规划成本2. 成本估算3. 制定预算4. 控制成本一、项目成本管理概述 成本 即项目的全过程中所耗用的各种成本,它们的总和为项目成本。成本管理 是在预算范围内确保项目团队完成一个项目所需要开展的管理过程,项目…

前端网页项目-学成在线案例

典型的企业级网站目的是为了整体感知企业级网站布局流程,复习以前知识 准备素材和工具: 学成在线PSD源文件开发工具PS(切图)/cutterman插件vscode(代码)chrome(测试) 案例准备工作&…

[附源码]java毕业设计健身健康规划系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

发布 .NET 7 MAUI / MAUI Blazor 应用到 Windows 应用商店

.NET MAUI 目前仅允许发布 MSIX 包。 原文地址 https://www.cnblogs.com/densen2014/p/16885318.html 创建签名证书发布到本地传送门 https://www.cnblogs.com/densen2014/p/16567384.html 使用 Visual Studio 2022 发布到 Windows 应用商店 由于是发布到 Windows 应用商店,本…

代码中可能会使用

代码中可能会使用 日志 结合兼具举报系统日志 https://www.cnblogs.com/lingduqianli/p/7589173.html 拦截器 https://blog.csdn.net/neymar_jr/article/details/79115839 拦截器应用场景 拦截器本质上是面向切面编程(AOP),符合横切关注点…

MYSQL窗口函数(Rows Range)——滑动窗口函数用法

语法介绍 窗口函数语法&#xff1a; <窗口函数> over (partition by <用于分组的列名> order by <用于排序的列名> rows/range子句<用于定义窗口大小> ) <窗口函数>可以放以下两种函数&#xff1a; 1&#xff09; 专用窗口函数&#xff0c;包括…

图文详解Linux基础经典教程(07)——CentOS安装Tomcat

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 概述 之前&#xff0c;我们在CentOS中安装了JDK&#xff1b;接下来&#xff0c;我们在CentOS中安装Tomcat。 安装步骤 在此&#xff0c;详细介绍Tomcat的安装步骤。 第一…

上海亚商投顾:A股缩量调整 AIGC、Web3.0概念抢眼

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪三大指数今日震荡调整&#xff0c;深成指、创业板指午后均跌超1%&#xff0c;黄白二线有所分化&#xff0c;科创50指…

Django Celery异步任务队列

“ https://github.com/celery/celery” celery的GitHub源码文件 Celery是一个异步任务队列&#xff0c;需要python的环境&#xff0c;一般可用于python的web开发框架“食”用&#xff0c;例如Django。 场景 例如在自己开发网站时&#xff0c;写发送短信验证码的部分&#xff0…

Http不转换成Https会有什么后果?

自从互联网诞生以来&#xff0c;大家一开始接触的就是http站点&#xff0c;类似于http://域名&#xff0c;看习惯了也用习惯了。不过&#xff0c;随着人们网络安全意识的提高&#xff0c;越来越多的http站点已经被https站点所替代&#xff0c;逐年在增加。那么&#xff0c;http…

艾美捷C1q天然蛋白化学性质和相关研究方案

艾美捷C1q天然蛋白背景&#xff1a; C1q是补体系统C1的组成成份。它是一个巨分子量 (460kD) 糖蛋白。一个C1q分子由18条多肤链组成,含A、B、C 3条不同链。补体系统通过经典途径、旁路途经和甘露糖结合凝集素途径激活&#xff0c;而C1q是补体经典途径重要的启动分子&#xff0c…

【干货】STM32通过ADC模拟看门狗实现掉电保存

1.前言 很多时候我们需要将程序中的一些参数、数据等存储在EEPROM或者Flash中&#xff0c;达到掉电保存的目的。但有些情况下&#xff0c;程序需要频繁的修改这些参数&#xff0c;如果每次修改参数都进行一次保存&#xff0c;那将大大降低存储器的寿命。尤其是单片机内部Flash&…

uniapp中使用微信小程序custom-tab-bar

uniapp中使用微信小程序custom-tab-bar1、配置信息2、添加 tabBar 代码文件3、 编写 tabBar 代码4、踩坑5、解决今天把小程序项目中的 tabBar 改为使用自定义的tabbar 其实很简单&#xff0c;只要按照小程序开发文档中的步骤来做 1、配置信息 在 app.json 中的 tabBar 项指定…