JVM垃圾回收机制GC

一句话介绍GC: 自动释放不再使用的内存 

一、判断对象是否能回收

思路一:引用计数

给这个对象里安排一个计数器, 每次有引用指向它, 就把计数器+1, 每次引用被销毁,计数器-1,当计数器为0的时候, 意味着该对象就是垃圾了

但引用计数存在两个缺陷:

1. 空间利用率比较低,浪费更多的内存空间

        给引用技术分配了两个字节, 对象本体才4个字节, 引用计数就浪费了50%的空间

        如果代码中都是这种小对象, 并且数量众多, 此时, 浪费就非常明显了

2. 可能存在循环引用的问题, 导致对象不能被正确识别为垃圾

思路二:可达性分析

JVM首先会从现有代码中的能直接访问到的引用出发, 尝试遍历所有能访问的对象,只要对象能访问到,就会标记成”可达“,完成整个遍历之后,可达之外的对象,也就是“不可达”,也就相当于垃圾了

总结: 可达性分析浪费时间, 引用计数浪费空间



二、如何清理垃圾?

1、标记清除

但会导致释放的空间是离散的, 引起“内存碎片

申请内存的时候, 都是申请连续的内存空间。 直接释放内存会破坏原有的连续性,导致还有剩余但是申请不了

2、复制算法

复制算法: 通过冗余的内存空间, 把有效对象复制到另一部分空间,来避免内存碎片

但是浪费一半空间

把一个内存,分成两份,用FROM清理FROM,搬到TO, 往复进行

把左侧区域中,有效的对象, 复制到右侧

接下来就可以使用右侧区域了, 用了一段时间后,也会有很多对象,也是同理,把有效对象复制会左边,对右侧进行统一释放

3、标记整理

把有效对象搬到一起, 统一删除元素, 当然这样搬运元素成本也比较高导致速度太慢

4.分代回收

其实上边三个方法都不行,于是大佬们设计了一个综合方案

java代码中,对象主要分成两类:

        1.生命周期特别特别短

        2.生命周期特别特别长

GC是周期性的扫描,一个对象每经过一轮GC,就长一岁

分代回收就是按照对象的年龄,来制定不同的回收策略

首先,整个堆分成两部分: 新生代 老年代

新生代又分伊甸区 幸存区

①新创建的对象全部会放在新生代中的伊甸区, 再经历一轮GC后,剩余的还没挂的对象会通过复制算法,复制到幸存区 (幸存一轮后年龄+1)

②幸存区由两块区域组成, 每次只使用一块;对已使用区域使用复制算法转移至未使用区域(注意箭头指向

③如果一个对象在幸存区中经过15轮都没挂 那就是生命周期特别长了,直接转移到老年代,在老年代中使用标记整理

老年代扫描频率比新生代低得多,并且即使扫描了大多数也不会被销毁,因此标记整理开销不大

新生代扫描频率虽然高,但是每轮留下的对象很少,复制算法的开销也不大

垃圾回收总结:

三、垃圾回收器

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java消息中间件简介

一、为什么要使用消息中间件 消息中间件就是可以省去繁琐的步骤,直达目的,怎么讲呢,就是比如你想很多人,知道你的动态,而知道的人可能手机没电,可能手机信号不好,可能手机不在服务区&#xff0c…

指针常量和常量指针的区别

文章目录 指针常量常量指针即是指针常量又是常量指针 指针常量 指针常量的本质是常量,表示的是 这个指针所指向的地址不能发生改变。即指针变量的值(即地址值)不能发生修改。但是指针所指向的那块内存里的值是可以修改的。 注意:…

【并发编程】CountDownLatch详解与原理

📫作者简介:小明Java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于…

LeetCode - 100. 相同的树 (C语言,二叉树,配图,简单)

利用分治思想,将大问题化解成为小问题,我们只需要比较: 1. 根节点的同时为空/不为空,不为空时值相等。 2. 左子树是否一样。 3. 右子树是否一样。 可以看出,这道题非常简单,但是为什么我们还要将它呢&#…

[ Linux Audio 篇 ] 音频开发入门基础知识

在短视频兴起的背景下,音视频开发越来越受到重视。接下来将为大家介绍音频开发者入门知识,帮助读者快速了解这个领域。 轻柔的音乐、程序员有节奏感的键盘声、嗡嗡的发动机、刺耳的手提钻……这些声音是如何产生的呢?又是如何传到我们耳中的…

洛谷 P5715 三位数排序 C++代码

目录 前言 思路点拨 AC代码1 AC代码2 AC代码3 结尾 前言 今天我们来做洛谷上的一道题目。 网址:【深基3.例8】三位数排序 - 洛谷 思路点拨 ​ 这题思路很简单,就是普通的排序题目。 但是我们要学习小题大做这个道理,于是我将介绍三…

FPC和PCB有哪些区别?

现在电子技术越来越先进,CPU可以做到5nm工艺,电路板可以做到几十层,可折叠屏应用多款手机中。 什么是FPC? FPC:Flexible Printed Circuit,柔性电路板,又被称为“软板” FPC 以聚酰亚胺或聚酯薄…

智能优化算法应用:基于静电放电算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于静电放电算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于静电放电算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.静电放电算法4.实验参数设定5.算法结果6.参考…

VBA技术资料MF91:计算机自动执行VBA脚本代码

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

基于Java SSM框架+Vue实现教学视频点播网站项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现教学视频点播网站演示 摘要 随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多学院的之中,随之就产生了“视频点播系统”,这样就让视频点播系统更加方便简单。 对于…

RedHat8 安装部署DzzOffice协同办公平台+onlyoffice(docker)以及问题解决(亲测可用,花费2天)

一、基础配置(MysqlDzzoffice) 1:安装软件需要的环境,我们用LAMP的环境。基本上CentOS8自带的软件版本都达到安装DzzOffice的要求。 2:关闭防火墙(不关的话需要开放80端口自行决定)。 systemctl disable --now fire…

【springboot】启动失败 Failed to start bean ‘webServerStartStop‘

lsof -i:xxx 发现端口被占用 kill掉该进程

TCP三次握手与四次挥手

TCP三次握手与四次挥手 TCP三次握手与四次挥手解析 客户端连接服务器(三次握手)客户端关闭与服务器连接(四次挥手) 总结 TCP三次握手与四次挥手、流量控制(滑动窗口)、拥塞控制、半连接状态、2MSL TCP三次握手与四次挥手 TCP标…

智能优化算法应用:基于秃鹰算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于秃鹰算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于秃鹰算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.秃鹰算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

六、ZooKeeper Java API操作

目录 1、引入maven坐标 2、节点的操作 这里操作Zookeeper的JavaAPI使用的是一套zookeeper客户端框架 Curator ,解决了很多Zookeeper客户端非常底层的细节开发工作 。 Curator包含了几个包:

AMBA 5 CHI 协议节点实例和读数据的来源

1. CHI协议节点实例 如上图所示,RN-F、RN-I、HN-F、SN-F、HN-I、SN-I通过内部互联总线连接起来。这里的ICN可以是CMN-700。其中SN-F和SN-I是连接主存,RN-F和HN-F内部都有cache。 2. CHI读数据的可能来源 如上图所示,CHI协议中可能的读数据来…

企业的内容站点SEO应该怎么做更有效果?

在当今数字化时代,搜索引擎优化(SEO)已成为企业内容站点不可或缺的一部分。通过优化网站的结构、内容和链接等方面,企业可以提高其在搜索引擎中的排名,吸引更多的潜在客户,并增加品牌曝光度。那么&#xff…

【开源】基于Vue+SpringBoot的音乐平台

项目编号: S 055 ,文末获取源码。 \color{red}{项目编号:S055,文末获取源码。} 项目编号:S055,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示 四、核心代码4.1 查询单首…

Centos图形化界面封装OpenStack Centos镜像

目录 背景 环境 宿主机环境安装 创建与安装Centos7.8虚机 虚机设置 安全相关 安装ACPI服务 安装cloud-init 安装cloud-utils-growpart 停⽌虚拟机 删除个性化信息 模板化与压缩 登录与验证 背景 今天早上在Centos官网下载的CentOS-7-aarch64-GenericCloud-2003.…

西瓜书-主要符号表

主要符号表 LaTeX符号说明How to read letter?\mathit{x}标量\boldsymbol{x}向量\mathrm{x}变量集\mathbf{A}矩阵\mathbf{I}单位阵\mathcal{X}样本空间或状态空间calligraphic X\mathcal{D}概率分布Ɗ calligraphic D\mathit{H}数据样本(数据集)\mathcal{H}假设空…