什么样的对象可以称为垃圾对象?换句话说:在垃圾收集器工作的时候,那些对象是可以被回收的,哪些对象是不可以被回收的?判断的标准是什么?系统中的对象千千万,怎么才能准确无误的找出来并“杀”掉就显得尤为重要。

2、你才是垃圾

为了解决上面的问题。JVM 专门设计一套判断对象是的是垃圾的算法——可达性分析。

可达性分析的原理是:根据每一个对象,一层一层的引用往上找,说白了就是看看那些地方在引用着这个对象。直到找到能被称之为GC Roots的对象在引用这个这个对象,那么这个时候 JVM 就认为这个对象是不是垃圾对象。也就是在垃圾回收的时候是不会去回收这部分对象的。反之,这样的对象就可以被称为垃圾对象。也就意味着是会被在垃圾收集器工作的时候就会回收这部分对象。

3、GC Roots

说到这里,哪些是垃圾对象我们是可以判断了。那么刚刚提到的 GC Roots 又是什么鬼?简单的来讲,静态变量、局部变量、常量、本地方法栈中的对象。但是一般最常见的就是。静态变量、局部变量。

我们姑且先这个记住,也就是凡是被这些对象引用的对象,就是不能被回收的。换言之,系统是在某些地方还在使用这些对象。这些对象我们也称之为强引用。对应的还有软引用,弱引用和虚引用。

# 强引用(使用频率:☆☆☆☆☆)我们平时开发时候通过 new 关键创建出来的对象就是强引用,这类对象在垃圾回收的时候只要是能找到 G CRoots,那么他们是不会被回收的。# 软引用(使用频率:☆☆☆☆)所谓软引用,就是表示该对象在垃圾回收期间,不软是否被其他对象引用,只要是内存空间不够了,那么该对象就会别垃圾收集器回收。
(PS:这个也是大家很容易和弱引用搞混淆的一个术语。我相信你平时开发常用的一定是 SoftReference ,而很少使用 WeakReference 。也就是说,强引用下面的一个就是软引用。希望能帮助大家理解这两个之间的区别。)# 弱引用(使用频率:☆)这类引用存在的价值更容易被忽视,只要是在垃圾回收阶段,不管内存是否足够,该类型的对象都会被垃圾收集器回收。# 虚引用(使用频率:程序员基本不会使用到)“虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收。虚引用主要用来跟踪对象被垃圾回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列(ReferenceQueue)联合使用

JVM如何识别“到底谁才是垃圾“?相关推荐

  1. JVM最详细知识点笔记-内存与垃圾回收篇

    内存与垃圾回收 一.JVM与JAVA体系结构 1.1 概述 JAVA虚拟机: 含义: Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语 ...

  2. JVM基础系列第10讲:垃圾回收的几种类型

    我们经常会听到许多垃圾回收的术语,例如:Minor GC.Major GC.Young GC.Old GC.Full GC.Stop-The-World 等.但这些 GC 术语到底指的是什么,它们之间 ...

  3. 大数据面前无隐私 到底谁才是老大哥

    (原标题:大数据面前无隐私,到底谁才是老大哥) 最近,几家大型的互联网企业,都因为数据隐私过得都不太安生. 阿里系这边,旗下子公司支付宝被爆出在"年度账单"活动中,靠默认勾选套取用 ...

  4. JVM垃圾收集之——怎样判定一个对象是不是垃圾

    文章目录 1引用计数法 2可达性分析 3一个对象真的非死不可吗? 3.1对象的自我救赎 3.2finalize的作用 3.3finalized的问题 3.4finalize的执行过程(生命周期) 学过 ...

  5. JSP和ASP.NET到底谁才是未来的主宰

    随着计算机行业的发展,以后到底谁才是 web 网站开发的主宰者呢? 1. 说说JSP.(本人工作中用的最多的就是JSP)  JSP, JavaServer Pages 是Java技术的一部分,可以说是 ...

  6. 到底怎么样才叫看书【转载】

    到底怎么样才叫看书 作者:   Tony Zhao  来源:   博客园  发布时间: 2013-11-18 18:31  阅读: 5541 次  推荐: 68     原文链接     [收藏]   ...

  7. 我们学习到底是为了什么,到底什么才是我们真正想要的

    原创 科大云炬 科大云炬 2019-04-26 . 今天看到一句话,感慨颇多:"现在的教育只是一味的强调一定要好好学习,却没有强调为什么要好好学习. 我们学习到底是为了什么,到底什么才是我们 ...

  8. JVM实用参数(五)新生代垃圾回收

    原文链接  作者: PATRICK PESCHLOW :译者:严亮 本部分,我们将关注堆(heap) 中一个主要区域,新生代(young generation).首先我们会讨论为什么调整新生代的参数会 ...

  9. php java 架构_JAVA和PHP到底谁才是老大?

    原标题:JAVA和PHP到底谁才是老大? 大家还记得PHP和JAVA的那些梗吗?有一天JAVA说我是世界上最好的语言!!!啦啦啦啦!我是老大,所有的编程语言都给我靠边站,激动!学习了JAVA的孩子们心 ...

最新文章

  1. 十个免费的WEB压力测试工具
  2. 采购Invoice校验_事后借记和事后贷记
  3. java flex xml_FLEX与JAVA的交互问题 -DOM4J-xml
  4. 终于可以摆脱 Pipenv 这坑货了
  5. 面试题19:二叉树镜像
  6. 最炫国漫《雾山五行》用 Python 了解一下到底有多优秀
  7. python爬取百度百科搜索结果_用Python抓取百度搜索结果,python,爬取,的
  8. 错误率_研究发现,商业语音识别系统存在高错误率
  9. ActiveMq 不能正确获取有过期时间的消息的原因
  10. scala练习:依据输入的年和月打印该月日历
  11. android 界面布局
  12. java 使用response方式下载txt文件
  13. android华为状态栏字体颜色,Flutter修改状态栏颜色以及字体颜色
  14. Chrome浏览器历史版本下载
  15. python读取海康威视摄像头价格_OpenCV+海康威视摄像头的实时读取
  16. 小米盒子共享电脑文件 服务器,小米盒子3S访问局域网电脑共享安装软件和观看视频的方法...
  17. 绩效管理实务与管理效率提升-王晓耕老师
  18. 《Objective-C 程序设计(第4版)》图书信息(二)
  19. 微信公众号自定义菜单CLICK返回的是大写
  20. 2021年衡水中学高考成绩查询,2019年衡水中学的高考成绩会怎样,看看往年的战绩就明白了...

热门文章

  1. IT项目管理知识体系九大知识领域
  2. gephi导入含时间线的动态数据
  3. 一键实现前程无忧(51job)简历不停刷新(selenium)
  4. redis命令之哈希表类型hgetall命令用法详情
  5. 计算机面试常见题目-网络
  6. 密码爆破工具:Medusa(美杜莎)-操作说明
  7. NPOI创建DOCX常用操作
  8. 哪家科技巨头的人工智能最先觉醒:谷歌、Facebook、还是特斯拉?
  9. jdbc shadring 扩容_shadring-jdbc解决查询数据库分库分表的问题
  10. 认生、内敛不等同于孤独症[图]