JVM 如何判断一个对象可以被回收

Hi, 我是 浮生。
今天分享一道一线互联网公司必问的面试题。
”JVM 如何判断一个对象可以被回收“
关于这个问题,来看看高手的回答。

一、问题解析

在 JVM 里面,要判断一个对象是否可以被回收,最重要的是判断这个对象是否还在被使用,只有没被使用的对象才能回收。
1. (如图)引用计数器,也就是为每一个对象添加一个引用计数器,用来统计指向当前对象的引用次数,如果当前对象存在应用的更新,那么就对这个引用计数器进行增加,一旦这个引用计数
器变成 0,就意味着它可以被回收了。这种方法需要额外的空间来存储引用计数器,但是它的实现很简单,而且效率也比较高。
(如图)不过主流的 JVM 都没有采用这种方式,因为引用计数器在处理一些复杂的循环引用或者相互依赖的情况时,可能会出现一些不再使用但是又无法回收的内存,造成内存泄露的问题。

2. 可达性分析,它的主要思想是,首先确定一系列肯定不能回收的对象作为 GC root,比如虚拟机栈里面的引用对象、本地方法栈引用的对象等,然后以 GC ROOT 作为起始 节点, 从这些节点开始向下搜索,去寻找它的直接和间接引用的对象,当遍历完之后如果发现 有一些对象不可到达, 那么就认为这些对象已经没有用了,需要被回收。 在垃圾回收的时候,JVM 会首先找到所有的 GC root,这个过程会暂停所有用户线程, 也就是 stop the world,然后再从 GC Roots 这些根节点向下搜索,可达的对象保留, 不可达的就会回收掉。 可达性分析是目前主流 JVM 使用的算法。

以上就是我对这个问题的理解。

二、面试总结

很多粉丝和我说,很多东西看完以后过一段时间就忘记了,问我是怎么记下来的。我和他说,技术这些东西不需要记,你唯一能做的就是减少碎片化的学习,多花一点时间在系统学习上,只有体系化的知识是不会忘记的。可是,搭建体系化知识的过程要比碎片化的点状学习痛苦不止一万倍。 技术的沉淀是没有捷径的,只能花苦功夫去学习。
好的,本期的高手面试系列的文章就到这里结束了
喜欢我的作品的小伙伴记得点赞和收藏。
我是 浮生,一个工作了 14 年的 Java 程序员,咱们下期再见。

 三、粉丝福利

最近很多同学问我有没有java学习资料,我根据我从小白到架构师多年的学习经验整理出来了一份50W字面试解析文档、简历模板、学习路线图、java必看学习书籍 、 需要的小伙伴 可以关注我
公众号:“ 灰灰聊架构 ”, 回复暗号:“ 321 ”即可获取

 

 

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

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

相关文章

CyclicBarrier带你玩转并发编程

文章目录 1. 技术背景1.1 并发编程简介 2. 解决的问题2.1 并发协同与同步问题2.2 CountDownLatch与CyclicBarrier的区别 3. 使用场景3.1 多线程任务协同3.2 任务分解与合并3.3 数据分析与计算3.4 游戏开发中的同步3.5 生产者-消费者问题 4. 技术点讲解4.1 CyclicBarrier概述4.2…

项目管理工具--禅道

一.禅道的安装 1.1.安装 二.禅道的使用 ​编辑 三.用产品经理的方式登录 3.1添加产品 3.2提需求 3.3添加产品需求 3.4创建项目 ​编辑 四.项目经理方式登录 ​编辑 4.1关联需求 ​编辑 4.2分解任务 五.测试方式登录 5.1测试建立用例 ​编辑 5.2需要换成项…

vue2 使用pdf.js 实现pdf预览,并可复制文本

需求:pdf预览,并且可以选中pdf的内容进行复制。 在ruoyi的vue前端项目中用到,参考了网上不少文章,因为大部分没给具体的pdf.js版本,导致运行过程中报各种api 错误,经过尝试以下版本可用&#xff0c…

文件夹重命名:一次性解决文件夹名称混乱,中文翻译成英文

在我们的日常生活和工作中,文件夹的名称是我们组织和查找文件的重要方式。然而,随着时间的推移,文件夹名称可能会变得混乱不堪,甚至包含中英文混合的情况,这给我们的文件管理带来了极大的不便。那么,如何一…

【RabbitMQ】快速入门及基本使用

一、引言 1、、消息队列 Ⅰ、什么是消息队列? 消息队列是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据…

java httpclient Post

一、Maven引用httpclient <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.3</version> </dependency> 二、直接上代码 private void PostData(){CloseableHt…

文献分享四:(基础)Pyroelectric drift of integrated-optical LiNbO3 modulators

文献来源——S. M. Kostritskii, Yu. N. Korkishko, V. A. Fedorov & A. V. Yatsenko (2021) Pyroelectric drift of integrated-optical LiNbO3 modulators, Ferroelectrics, 574:1, 170-178, DOI: 10.1080/00150193.2021.1888062 本文分析了我们之所以需要偏置电路的原因…

spring data mongo 在事务中,无法自动创建collection

spring data mongo 在事务中,无法自动创建collection org.springframework.dao.DataIntegrityViolationException: Write operation error on server xxx:30001. Write error: WriteError{code=263, message=Cannot create namespace xxx.xxxin multi-document transaction.…

Python 中的多线程(01/4)

一、说明 本文介绍了 Python 编程语言中多线程的基础知识。就像多处理一样&#xff0c;多线程是实现多任务处理的一种方式。在多线程中&#xff0c;使用线程的概念。让我们首先了解 计算机体系结构中线程的概念。 二、线程一般性概念 2.1 什么是 Python 中的进程&#xff1f;…

[AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言4.5key价格泄漏ChatGPT4.0使用地址ChatGPT正确打开方式最新功能语音助手存档…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-帖子详情页实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…

Python智能挖掘数据新秘器

大家好&#xff0c;本次分享一款在数据探索中表现出色的工具—Python Lux &#xff0c;通过自动化可视化和数据分析过程&#xff0c;使得数据探索变得更加快捷方便。 Lux的使用方法非常简单&#xff0c;只需在Jupyter notebook中输入dataframe&#xff0c;Lux就会智能推荐一组基…