【JVM基础09】——垃圾回收-对象什么时候可以被垃圾回收器回收?

news2024/11/24 14:28:37

目录

  • 1- 引言:垃圾回收
    • 1-1 什么是垃圾回收?(What)
    • 1-2 为什么要进行垃圾回收?(Why)
  • 2- ⭐核心:对象什么时候可以被垃圾回收器回收?(How)
    • 2-1 对象什么时候可以被回收?
    • 2-2 引用计数法
      • 引用计数法存在的问题:循环引用——>内存泄漏
    • 2-3 可达行分析算法
      • 哪些对象可以作为 GC Root?
  • 3- 小结
    • 3-1 什么是垃圾回收?为什么要进行垃圾回收?
    • 3-2 对象什么时候可以被垃圾回收?
    • 3-3 哪些对象可以作为 GC Root?


1- 引言:垃圾回收

1-1 什么是垃圾回收?(What)

  • Java的垃圾回收(Garbage Collection, GC)是Java虚拟机(JVM)自动管理内存的一种机制。它的主要目的是自动回收不再使用的对象所占用的内存,以防止内存泄漏和优化内存使用。

image.png


1-2 为什么要进行垃圾回收?(Why)

  • 垃圾回收是对于 Heap 堆 而言的,我们创建的对象或数组一般都是在 Heap 堆中。我们不能无限制的创建对象,同时不是所有对象都是需要一直存活,如果不进行垃圾回收,则内存迟早会被耗尽,因此及时的垃圾回收是有必要的。

2- ⭐核心:对象什么时候可以被垃圾回收器回收?(How)

2-1 对象什么时候可以被回收?

  • 如果一个或多个对象没有任何的引用指向它了,那么这个对象现在就是垃圾,如果定位了垃圾,则有可能会被垃圾回收器回收。
  • 如果要定位什么是垃圾,有两种方式来确定,第一个是 引用计数法,第二个是 可达性分析法

2-2 引用计数法

  • 一个对象被引用了一次,在当前对象投上递增一次引用次数,如果这个对象的引用次数为 0 ,嗲表这个对象可以回收。
  • 例如对于 new String("123") ,而言最初的 demo 对于 其的 引用 ref = 1 ,在执行了 demo = null 之后 其对应的 ref = 0,此时的结果 是可以被垃圾回收的。

image.png

引用计数法存在的问题:循环引用——>内存泄漏

  • 如果对象之间出现了循环引用的话,则引用计数法就会失效。
  • 比如 a 和 b 对象的成员变量,分别又引用对法。

image.png

  • 此时执行到了 a = null,b = null 的时候 a 和 b 实际上是没有人使用的,而此时二者的引用计数都为 1
  • 此时二者都不会被回收,会出现循环引用的问题,导致内存泄漏

image.png


2-3 可达行分析算法

  • 现在的虚拟机采用的都是可达行分析算法来确定哪些内容是垃圾。

X,Y 这两个结点是可回收的

  • Java 虚拟机中的垃圾回收器采用可达行分析来探索所有存活的对象。
  • 扫描堆中的对象,看是否可以沿着 GC Root 对象为起点的引用链找到该对象,找不到表示可以回收。

image.png

哪些对象可以作为 GC Root?

  • ①虚拟机栈(栈帧中的本地变量表)中引用的对象。——> 对于第一个 Demo demo = new Demo() 可以作为 GC Root。
  • ②方法区中类静态属性引用的对象。——> 对于第二个 b.a = new Demo(); 其中 a 可以作为 GC Root。
  • ③方法区中常量引用的对象。——> 对于第三个方法区中的常量可以作为 GC Root。
  • 本地方法栈中 JNI (即一般说的 Native方法)引用的对象。

image.png


3- 小结

3-1 什么是垃圾回收?为什么要进行垃圾回收?

在这里插入图片描述


3-2 对象什么时候可以被垃圾回收?

在这里插入图片描述


3-3 哪些对象可以作为 GC Root?

在这里插入图片描述

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

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

相关文章

误删文件大救星!4款必备数据恢复软件,轻松恢复各类文档照片

在数字化的时代信息就是王道,很多时候丢失了信息就以为着丢失了资源。这时候就需要失易得数据恢复这样的数据恢复工具来帮我们守护信息的安全。 1.福昕数据恢复 https://www.pdf365.cn/foxit-restore/链接直达:https://www.pdf365.cn/foxit-restore/ …

设计模式-创建型模式-单例设计模式

创建型模式提供创建对象的机制,能够提升已有代码的灵活性和复用性; 常用的有:单例模式、工厂模式、建造设模式;不常用的:原型模式; 1.概述 单例模式是最简单的模式之一,其保证了某个类在运行期…

Ubuntu22 下 Docker 安装,VS Code Docker配置

1. Docker 安装 1. 卸载旧版本的 Docker(如果有): sudo apt-get remove docker docker-engine docker.io containerd runc 2. 更新软件包: sudo apt-get update sudo apt-get upgrade 3. 安装 Docker 依赖: sudo apt-…

苹果手机通讯录恢复教程?3招速成指南

随着科技的不断进步,手机丢失、系统崩溃等意外情况也时有发生,一旦这些情况发生,我们宝贵的通讯录资料很可能会付诸东流。对此,本文为广大苹果手机用户提供一份简洁明了的通讯录恢复教程,让你轻松掌握苹果手机通讯录恢…

接了一个2000块的小活,大家进来看看值不值,附源码

如题,上周的一天,朋友圈的一个旧友找到了我,说让我帮他开发一个小工具,虽然活不大,但没个几年的全栈经验还不一定能接下来,因为麻雀虽小,涉及的内容可不少: 需求分析 原型设计 详细…

Halcon 边缘提取(像素)

传统提取边缘的方法即通过图像中的明暗进行过滤,其左右就是根据明暗区域找到像素边界。从数学角度,滤波器决定图像剃度,该图像剃度通常作为边缘幅度和边缘方法返回。通过选取所有边缘幅值高的像素点,可以提取区域间的轮廓。另一个…

G1简介、各种GC总结

概述 G1首次出现是在JDK 6u14版本里作为体验版,JDK 7u4版本被正式推出,JDK 9中被设置为默认垃圾收集器(参考JEP 248)。 G1全称是Garbage First,目标:延迟可控的情况下,尽可能高的吞吐量。一款…

怎么使用Element ui来做一个前端登录页面

找到Layout 布局 他通过基础的 24 分栏,迅速简便地创建布局。 找一个对齐方式 这个就不错,找到对应的代码 这个 复制进入idea 引入我们的图片和文字 我这里图片有点问题 然后我再添加一条分割线 加入表单校验 把里面的代码同上加入idea 结果 对表单内容进行调整 …

CAPL使用结构体的方式组装一条DoIP车辆声明消息

如果你参加过我的《CAPL编程系统性课程》,你就结构体类型天然就能表示报文结构,用结构体表示报文虽然麻烦,但灵活度更高。 我们今天试着用结构体类型表示DoIP车辆声明消息的DoIP报头,然后组装一条DoIP消息发送出去。 DoIP消息结构如下: DoIP车辆声明消息结构如下: /**…

等保测评练习卷22

等级保护初级测评师试题22 姓名: 成绩: 一、判断题(10110分) 1. 在应用系统测试中,如果审计是一个独立的功能,那么应用系统应对审计进程进行保…

python反序列化

🎼个人主页:金灰 😎作者简介:一名简单的大一学生;易编橙终身成长社群的嘉宾.✨ 专注网络空间安全服务,期待与您的交流分享~ 感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️ 🍊易编橙终身成长社群&#…

Blackcat V2.2付费会员制WordPress资源站主题

Blackcat-付费会员制WordPress资源站主题,该主题是基于简约实用的主题选项框架 Codestar Framework 进行开发的功能强大的付费会员制主题,该主题尤其适合用于搭建付费下载资源网站,比如素材站、软件站、视频教程站等付费资源下载网站。 集成…

unity2D游戏开发17战斗精灵

导入 将PlayerFight32x32.png拖Player文件夹进去 设置属性 创建动画剪辑 选中前四帧,右键Create|Animation,将动画命名为player-ire-east 其他几个动画也创建好后,将其拖到Animations|Animations文件夹 选中PlayerController,再点击Animator 创建新的Blend Tree Graph,并重…

JAVA基础 - 图形页面

目录 一. 简介 二. Swing 技术基础 三. 事件处理模型 四. 适配器 五. 布局管理 六. 可视化工具 一. 简介 Java 图形用户界面技术主要有: AWT 、 Applet 、 Swing和 JavaFX 。 AWT(Abstract Window Toolkit,抽象窗口工具包) …

全文最详细CPP/XCP标定协议讲解:命令传输对象CTO

全文最详细CPP/XCP标定协议讲解:命令传输对象CTO 1.概述 CTOs(命令传输对象)用于从主设备向从设备传输命令,以及从从设备向主设备传输响应。 命令结构: 从设备从主设备接收命令,并必须用肯定或否定的响应来做出反应,通信结构如下: 请求报文 每个命令都会被分配一个唯…

Temporal(时效)模式03

正如“问题”一节所说,如果有必要,我们不排除为Skill类提供一个类似的接口的可能性。由于使用 了《temporal》版型,“问题”一节中复杂的图变得简单多了(见图7)。 图7:使用版型后的Employee模型 效果 √ 我…

xAI 可能收购 Character.AI 以测试 Grok 聊天机器人

🦉 AI新闻 🚀 xAI 可能收购 Character.AI 以测试 Grok 聊天机器人 摘要:马斯克的人工智能初创公司 xAI 正考虑收购聊天机器人制造商 Character.AI,以测试其 Grok 聊天机器人。这种收购可能意在降低训练和运行 AI 模型的高昂成本…

浩瀚、西圣、博雅无线领夹麦克风值得买吗?深度测评三大热门品牌

​无线领夹麦克风是当下热门的音频工具,很多新用户不知买啥牌子,不了解销量口碑,选购易迷茫。作为音频设备测评博主,被问最多的是浩瀚、西圣、博雅等是否值得买。参考数据,口碑好的有西圣、猛犸、博雅等。西圣的认可度…

【北京仁爱堂】痉挛性斜颈一定不能吃的5种食物,好多患者都因此导致病情加重了!

痉挛性斜颈,作为一种神经系统疾病,其发病机制复杂,症状表现为颈部肌肉不自主收缩,导致头部偏向一侧,不仅影响患者的外貌形象,更严重地干扰了他们的日常生活与工作。在治疗与康复过程中,合理的饮…