垃圾回收器

垃圾回收器就是垃圾回收的实践者,随着JDK的发展,垃圾回收器也在不断的更迭,在不同的场合下使用不同的垃圾回收器,这也是JVM调优的一部分。

1.垃圾回收器的分类

  • 按线程可分为单线程(串行)垃圾回收器和多线程(并行)垃圾回收器。

  • 按工作模式可分为独占式和并发式垃圾回收器。

  • 按工作的区间可分为年轻代垃圾回收器和老年代垃圾回收器。

2.GC的性能指标

GC的性能主要看:

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

  2. 垃圾收集开销,垃圾收集所占总运行时间的比例。

  3. 暂停时间,在垃圾回收时,工作线程暂停总花费的时间。

  4. 对象的存活时间,一个对象从创建到被回收所经历的时间。

3.HotSpot的垃圾回收器

3.1CMS

CMS称Concurrent Mark Sweep,并发标记清除,它在垃圾清除时可以使工作线程和GC线程并发执行,所以在垃圾收集的过程中用户的体验感会好很多。

CMS垃圾回收的过程:

  1. 初始标记:工作线程暂停,GC标记线程单独工作。

  2. 并发标记:工作线程和GC线程一起执行。

  3. 重新标记:工作线程暂停,GC标记线程单独工作。

  4. 并发清理:工作线程和GC线程一起执行。

如下图所示:

 CMS的优点:

  • 可以做到并发收集,提升用户的体验感。

CMS的缺点:

  • CMS是基于标记——清除算法的,会存在内存碎片。

  • CMS在并发阶段,CPU资源有限,在并发执行下还是占用了一定的资源的,总吞吐量会变低。

  • CMS无法处理浮动垃圾。

4.三色标记算法

从CMS垃圾收集器开始,引入了三色标记算法,就是将对象的颜色分为了黑、灰、白三种颜色。

黑色:表示该对象确定为存活对象。

灰色:对象已经被扫描,但是还未扫描此对象下的引用。

白色:表示此对象不可达,为垃圾对象。

三色标记的过程:

  1. 初始确定GC Roots根为黑色对象。

  2. 将GC Roots根下关联的对象标记为灰色。

  3. 下一次扫描灰色对象,先将灰色变为黑色,之后将其下的引用标记为灰色。

  4. 一直重复,直到没有灰色对象。

  5. 黑色则为存活对象,白色为垃圾对象。

三色标记可能出现的问题:

漏标

 

        因为CMS中的工作线程和GC线程并发执行的,此时A确定为黑色,B,C为灰色,正常情况下下次应该扫描B了,但是假如此时A与B失去了关联引用,我们发现此时B为灰色,并不能立即直接列为垃圾对象(B就为浮动垃圾),而是需要等到下次GC扫描时,才会发现B是垃圾对象。

错标

        这种情况是B和D开始已经失去了关联,然后将D标记为白色,表示垃圾对象,此时如果突然A和D建立了引用,但是D已经标记为白色了,之后不在会扫描了,之后D就会被当为垃圾对象回收。

解决错标问题的策略:

        我们发现错标远比漏标更为严重,错标在同时满足下面两种情况时才会发生:

打破这两种情况的任意一种即可解决错标问题,即利用原始快照或者增量更新。

原始快照:在断开之时,快照将此引用保存下,之后这次扫描完,在以B根重新扫描一次。

增量更新:等建立联系之后,以A根再扫描一次。

5.G1(Garbage First)垃圾优先回收器

G1可以在延迟可控的情况下,尽可能多的增大吞吐量,是一款面向服务端的垃圾收集器,其将堆划分为多个小区域,对各区域内的垃圾数量进行实时检测,优先收集垃圾数量最多的,运用在内存较大的应用上。

6.JDK8默认使用的垃圾回收器

年轻代使用 Parallel Scavenge GC

老年代使用 Parallel Old GC

 

 

 

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

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

相关文章

Java之ApI之Math类详解

1 Math类 1.1 概述 tips:了解内容 查看API文档,我们可以看到API文档中关于Math类的定义如下: Math类所在包为java.lang包,因此在使用的时候不需要进行导包。并且Math类被final修饰了,因此该类是不能被继承的。 Math类…

Unity 之 GameObject.Find()在场景中查找指定名称的游戏对象

文章目录 GameObject.Find 是 Unity 中的一个函数,用于在场景中查找指定名称的游戏对象。这个函数的主要作用是根据游戏对象的名称来查找并返回一个引用,使您能够在代码中操作该对象。以下是有关 GameObject.Find 的详细介绍: 函数签名&…

某网站DES加密逆向分析实战

文章目录 一、抓包分析二、加密分析一、重写加密 一、抓包分析 分析站点: aHR0cDovL2VpcC5jaGFuZmluZS5jb20v 首先我们提交一下登陆信息: 搜索j_password查看加密函数: 把上图搜索到的encryptPassword函数拿出来分析一下: function encryptP…

智慧能源管理系统助力某制造企业提高能源利用效率

随着全球能源需求不断增加和能源价格的上涨,企业和机构日益意识到能源管理的重要性。传统的能源管理方式不仅效率低下,还容易造成资源浪费和环境污染。因此,许多企业开始探索采用智慧能源管理系统来提高能源利用效率,降低能源成本…

【面向大一新生IT技术社群招新啦,不来瞅瞅?】

个人名片: 🐼作者简介:一名大三在校生 🐻‍❄️个人主页:落798. 🐼个人WeChat:落798. 🕊️系列专栏:【零基础学java】 ----- 【重识c语言】 ---- 【计算机网络】—【Spri…

python爬虫-网页数据提取

import requests #headers 网页右键->Network->最下面的User-Agent复制。 headers {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"} #你想要的网址 url &q…

Java设计模式-职责链模式

1 概述 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同…

【ArcGIS微课1000例】0073:ArcGIS探索性回归分析案例

一、探索性回归工具简介 “探索性回归”工具会对输入的候选解释变量的所有可能组合进行评估,以便根据用户所指定的指标来查找能够最好地对因变量做出解释的 OLS 模型。 给定一组候选解释变量,找出正确指定的 OLS 模型: 用法: 工具还会生成一个可选表,该表包括所有满足…

06-Numpy基础-线性代数

线性代数(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分。 NumPy提供了一个用于矩阵乘法的dot函数(既是一个数组方法也是numpy命名空间中的一个函数) x.dot(y)等价于np.dot(x, y) 符(…

2023年高教社杯 国赛数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

MongoDB Long 类型 shell 查询

场景 1、某数据ID为Long类型,JAVA 定义实体类 Id Long id 2、查询数据库,此数据存在 3、使用 shell 查询,查不到数据 4、JAVA代码查询Query.query 不受任何影响 分析 尝试解决(一) long 在 mongo中为 int64 类型…

【android12-linux-5.1】【ST芯片】HAL移植后没调起来

ST传感器芯片HAL按官方文档移植后&#xff0c;测试一直掉不起来&#xff0c;加的日志没出来。经过分析&#xff0c;是系统自带了一个HAL&#xff0c;影响的。 按照官方文档&#xff0c;移植HAL后&#xff0c;在/device/<vendor\>/<board\>/device.mk*路径增加PROD…

运维高级学习--Kubernetes(K8s 1.28.x)部署

一、基础环境配置&#xff08;所有主机操作&#xff09; 主机名规划 序号 主机ip 主机名规划1 192.168.1.30 kubernetes-master.openlab.cn kubernetes-master2 192.168.1.31 kubernetes-node1.openlab.cn kubernetes-node13 192.168.1.32 kubernetes-node2…

从零开始的Hadoop学习(二)| Hadoop介绍、优势、组成、HDFS架构

1. Hadoop 是什么 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。主要解决&#xff0c;海量数据的存储和海量数据的分析计算问题。广义上来说&#xff0c;Hadoop通常是指一个更广泛的概念—Hadoop生态圈。 2. Hadoop 的优势 高可靠性&#xff1a;Hadoop底层维护多…

动态表情包怎么制作?分享一个一键生成gif动图的方法

跟朋友聊天时&#xff0c;经常会用很多有趣的表情包给朋友回复&#xff0c;那么除了利用系统提供的gif动画包&#xff0c;怎么才能完成gif图片制作&#xff08;https://www.gif.cn&#xff09;呢&#xff1f;下面就为大家分享一个一键生成gif动图的方法&#xff0c;通过简单的操…

React 18 用 State 响应输入

参考文章 用 State 响应输入 React 控制 UI 的方式是声明式的。不必直接控制 UI 的各个部分&#xff0c;只需要声明组件可以处于的不同状态&#xff0c;并根据用户的输入在它们之间切换。这与设计师对 UI 的思考方式很相似。 声明式 UI 与命令式 UI 的比较 当设计 UI 交互时…

Python爬虫猿人学逆向系列——第六题

题目&#xff1a;采集全部5页的彩票数据&#xff0c;计算全部中奖的总金额&#xff08;包含一、二、三等奖&#xff09; 地址&#xff1a;https://match.yuanrenxue.cn/match/6 本题比较简单&#xff0c;只是容易踩坑。话不多说请看分析。 两个参数&#xff0c;一个m一个f&…

【宝藏系列】一文带你梳理 Linux 的五种 IO 模型

【宝藏系列】一文带你梳理 Linux 的五种 IO 模型 文章目录 【宝藏系列】一文带你梳理 Linux 的五种 IO 模型&#x1f468;‍&#x1f3eb;前言1️⃣用户态和核心态1️⃣1️⃣用户态和核心态的切换 2️⃣进程切换3️⃣进程阻塞4️⃣文件描述符(fd, File Descriptor)5️⃣缓存I/O…

【笔记】MySQL行转列函数

GROUP_CONCAT()函数 创建表person_info&#xff0c;并插入数据 CREATE TABLE person_info (id bigint(20) NOT NULL AUTO_INCREMENT,name varchar(100) DEFAULT NULL,family varchar(100) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT8 DEFAULT CHARSETutf8;…

RecyclerView面试问答

RecycleView 和 ListView对比: 使用方法上 ListView:继承重写 BaseAdapter,自定义 ViewHolder 与 converView优化。 RecyclerView: 继承重写 RecyclerView.Adapter 与 RecyclerView.ViewHolder。设置 LayoutManager 来展示不同的布局样式 ViewHolder的编写规范化,ListVie…