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.mzph.cn/news/195836.shtml

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

相关文章

文献速递 | CAR-T细胞助力增强前列腺癌肿瘤细胞抗肿瘤能力

前列腺癌是男性泌尿生殖系统最常见的恶性肿瘤,在全球,前列腺癌的发病率在男性所有恶性肿瘤中高居第2位,仅次于肺癌。免疫检查点分子转化生长因子受体II(TGFβRII)、T细胞免疫球蛋白和粘蛋白结构域3(TIM3&am…

【带讲解】同校不同命,差个代号差好多!

今天分享的是23年哈尔滨工程大学815的信号与系统试题及解析。同样是哈尔滨工程大学,信号部分810着实比815难了很多!但是815还有一门电路,压力也不小,两个代号各有利弊! 小马哥Tips: 本套试卷难度分析&…

通过流量分析,明确医院重要主机中毒详情

故障现象 医院系统内部发现有一台重要主机持续产生了大量的连接失败数,主机IP为192.xxx.xxx.37,持续时间从2023年11月23日20:00持续到2023年11月24日10:00,十点后管理人员发现并封禁了该IP地址。 分析目的 针对医院…

项目部署到线上服务器后,报 Redis error: ERR unknown command del 错误

查了很多资料,终于解决了,问题出在redis.conf里,该文件里被添加了新的命令如下: 在这几句命令前加 # 号注释掉,重启即可解决 另附上相关redis的命令: 停止Redis:systemctl stop redis启动Redis…

【算法刷题】Day11

文章目录 面试题 08.01. 三步问题题干:算法原理:1、状态表示2、状态转移方程3、初始化4、填表顺序5、返回值 代码: 209. 长度最小的子数组题干:算法原理:1、暴力枚举出所有的子数组的和2、利用单调性,使用“…

大数据项目——基于Django协同过滤算法的房源可视化分析推荐系统的设计与实现

大数据项目——基于Django协同过滤算法的房源可视化分析推荐系统的设计与实现 技术栈:大数据爬虫/机器学习学习算法/数据分析与挖掘/大数据可视化/Django框架/Mysql数据库 本项目基于 Django框架开发的房屋可视化分析推荐系统。这个系统结合了大数据爬虫、机器学习…

100G数据中心升级改造策略

视频流媒体的兴起和物联网设备的大幅增长带来数据量爆炸性增长,人们对算力的需求越来越大,网络的升级改造也成为每个数据中心关注的重点。为了应对网络压力,数据中心需要升级到100G及以上速率,为企业和用户提供高性能计算、存储和…

Python读写XML文件:深入解析与技术实现

目录 一、引言 二、XML文件基础 1、XML文件结构 2、XML文件语法规则 三、Python读取XML文件 1、使用内置库xml.etree.ElementTree 2、使用第三方库lxml 四、Python写入XML文件 1、使用内置库xml.etree.ElementTree 五、注意事项 六、总结 一、引言 XML(…

JS前端逆向

前言 js逆向一直没有相关了解,虽然目前渗透遇见的不是很多,大多数遇见的要么不加密,要么无法实现其加密流程,不过最近看到了一个较为简单的站点正好能够逆向出来,就做了简单记录。本文旨在介绍js逆向的一些基础思路&am…

spring cache 学习 —— @Cacheable 使用详解

1. 功能说明 Cacheable 注解在方法上,表示该方法的返回结果是可以缓存的。也就是说,该方法的返回结果会放在缓存中,以便于以后使用相同的参数调用该方法时,会返回缓存中的值,而不会实际执行该方法。 注意,这…

蓝桥杯真题:四平方和

import java.io.*;/*先找后两个数for(int i 0; 2 * i * i < n;i)for(int j i; i * i j * j < n;j ) 再找前两个数 for(int i 0;4 * i * i < n; i )for(int j i;2 * (j * j i * i) < n;j )//这样就可以让后两个数尽量大,前两个数尽量小 这样就可以确定后…

HTML5+CSS3+Vue小实例:浪漫的心形文字动画特效

实例:浪漫的心形文字动画特效 技术栈:HTML+CSS+Vue 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" conte…

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-A

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-A 目录 2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-A 需要环境或者解析可以私信 &#xff08;二&#xff09;A 模块基础设施设置/安全加固&#xff08;200 分&…

行业分析:2023年藜麦市场竞争格局及发展现状分析

藜麦是藜科藜属植物。穗部可呈红、紫、黄&#xff0c;植株形状类似灰灰菜&#xff0c;成熟后穗部类似高粱穗。植株大小受环境及遗传因素影响较大&#xff0c;从0.3-3米不等&#xff0c;茎部质地较硬&#xff0c;可分枝可不分。单叶互生&#xff0c;叶片呈鸭掌状&#xff0c;叶缘…

Pytorch CIFAR10图像分类 Swin Transformer篇

Pytorch CIFAR10图像分类 Swin Transformer篇 文章目录 Pytorch CIFAR10图像分类 Swin Transformer篇4. 定义网络&#xff08;Swin Transformer&#xff09;Swin Transformer整体架构Patch MergingW-MSASW-MSARelative position biasSwin Transformer 网络结构Patch EmbeddingP…

数据结构学习笔记——二叉树的遍历和链式存储代码实现二叉树

目录 一、二叉树的遍历&#xff08;一&#xff09;二叉树的先序遍历&#xff08;DLR&#xff09;&#xff08;二&#xff09;二叉树的中序遍历&#xff08;LDR&#xff09;&#xff08;三&#xff09;二叉树的后序遍历&#xff08;LRD&#xff09;&#xff08;四&#xff09;先…

如何使用群晖管家结合内网穿透实现公网远程访问本地黑群晖

白嫖怪狂喜&#xff01;黑群晖也能使用群晖管家啦&#xff01; 文章目录 白嫖怪狂喜&#xff01;黑群晖也能使用群晖管家啦&#xff01;1.使用环境要求&#xff1a;2.下载安装群晖管家app3.随机地址登陆群晖管家app4.固定地址登陆群晖管家app 自己组装nas的白嫖怪们虽然也可以通…

微信小程序引入node_modules依赖

微信小程序不支持直接读取node_modules 首先在目录文件夹下cmd输入npm init命令 D:\小程序\project\calendar\calendar_1>npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible…

linux resin的安装

1. 下载安装包 1.1 下载地址&#xff1a;https://caucho.com/products/resin/download 这里我下载的是普通版本的resin&#xff0c;没有选resin pro 版本。 科普一下&#xff0c;从性能上来说 resin和resin pro 版本的性能没区别。 resin pro 版本的 和resin 普通版本的文件是…

无惧泄密:揭秘上海迅软DSE防拷贝大杀器!

对于企事业单位而言&#xff0c;文档的安全保护不仅要从源头上进行&#xff0c;杜绝文档在使用、传播过程中产生的泄密风险&#xff0c;同时也要对文档内容本身进行保护。为防止有心人通过拷贝、截屏、拍照等方式盗窃走重要文档内容信息的情况&#xff0c;天锐绿盾文件防泄密软…