漫画:JVM 灵魂拷问“你是什么垃圾?”

Posted 程序人生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了漫画:JVM 灵魂拷问“你是什么垃圾?”相关的知识,希望对你有一定的参考价值。

作者 | iMononoke
本文经授权转载自码个蛋(ID:codeegg)
漫画:JVM 灵魂拷问“你是什么垃圾?”
漫画:JVM 灵魂拷问“你是什么垃圾?”


漫画:JVM 灵魂拷问“你是什么垃圾?”
漫画:JVM 灵魂拷问“你是什么垃圾?”
漫画:JVM 灵魂拷问“你是什么垃圾?”
漫画:JVM 灵魂拷问“你是什么垃圾?”
漫画:JVM 灵魂拷问“你是什么垃圾?”
漫画:JVM 灵魂拷问“你是什么垃圾?”

漫画:JVM 灵魂拷问“你是什么垃圾?”
GC是啥?

GC是一种自动的存储管理机制。当一些被占用的内存不再需要时,就应该予以释放。这种存储资源管理,称为垃圾回收。
就和平时你清理桌面,整理东西一样,很多人都见过听过一个理念“断舍离”吧,不会使用到的物品可以捐赠给其他人或者作为可回收物品被回收掉,很多时候我们存着一些物品,但是好几年都没有用到它们,只是想着可能什么时候会用到,这样一直占据着现实的“内存”。
漫画:JVM 灵魂拷问“你是什么垃圾?”
漫画:JVM 灵魂拷问“你是什么垃圾?”

漫画:JVM 灵魂拷问“你是什么垃圾?”
还“活着”吗?

在0-1的世界里,所谓“垃圾回收”,就是指收回那些不可能再被任何途径使用的对象所占的内存空间,释放了这些内存可以给需要的对象使用。
那么JVM里是怎么来分的?或者说哪些对象是需要被回收的?
主要是问一句:还“活着”吗?
要回收,先要判断是不是可以回收,就是这个对象还“活着”吗?
主要有两种算法来判断:
  • 引用计数法
  • 可达性分析法。
列个表看看~
漫画:JVM 灵魂拷问“你是什么垃圾?”
  • 引用计数法

最大的问题,是很难解决对象之间互相引用的情况。

一图胜千言。
  • 1 互相引用
漫画:JVM 灵魂拷问“你是什么垃圾?”
这是两个对象互相引用的情况,除此之外,这两个对象再无引用,但因为它们的引用计数不为0,所以引用计数器无法通知GC收集器回收它们。
  • 2 循环引用
漫画:JVM 灵魂拷问“你是什么垃圾?”
这是循环引用的情况,没有外部引用指向它们,但它们的引用计数不为0,就无法进行回收了。
漫画:JVM 灵魂拷问“你是什么垃圾?”
比如一把椅子的靠背坏了,椅子的轮子还是好的,但这轮子不能拆下来挪为他用,所以椅子的靠背和它的轮子是互相引用的,但是除了它们自己,没有外界引用它们了。
这样的情况用“引用计数法”来判断的话,它们还是不用被回收的,但实际它们都没有使用作用了。
所以主流的JVM都不使用引用计数法来管理内存,而是采用下面的可达性分析法,下图是它的基本思路示意图。
  • 可达性分析法


漫画:JVM 灵魂拷问“你是什么垃圾?”
由图可知,object5、object6和object7都没有到GCRoots对象的引用链,它们都会被回收。
按照上面的例子,坏了的椅背和没坏的轮子都属于椅子对象(object5),但是椅子本身不被使用,就没有引用到它们的引用链了。
漫画:JVM 灵魂拷问“你是什么垃圾?”
漫画:JVM 灵魂拷问“你是什么垃圾?”
漫画:JVM 灵魂拷问“你是什么垃圾?”


漫画:JVM 灵魂拷问“你是什么垃圾?”
可以做GC Roots的对象

这个大图是不是挺熟悉?
漫画:JVM 灵魂拷问“你是什么垃圾?”
再归个类~
漫画:JVM 灵魂拷问“你是什么垃圾?”
漫画:JVM 灵魂拷问“你是什么垃圾?”
漫画:JVM 灵魂拷问“你是什么垃圾?”
  • 第一次:对象可达性分析之后,发现没有与GCRoots相连接,此时会被第一次标记并筛选。
  • 第二次:对象没有覆盖finalize()方法,或者finalize()方法已经被虚拟机调用过,此时会被认定为没必要执行。
漫画:JVM 灵魂拷问“你是什么垃圾?”
漫画:JVM 灵魂拷问“你是什么垃圾?”
作者简介:公众号码个蛋,码上养成好习惯。

漫画:JVM 灵魂拷问“你是什么垃圾?”

9.5-7日 AI 开发大会(AI ProCon),7位出品人集结国内外60+技术大咖,探秘9大核心技术,深剖行业痛点,亚马逊首席科学家李沐还将亲授「深度学习集训营」,助力开发者实现技术跃迁。

 热 文 推 荐 

☞《

Chrome 为何会成功?

        
          
          
        
你点的每个“在看”,我都认真当成了喜欢

以上是关于漫画:JVM 灵魂拷问“你是什么垃圾?”的主要内容,如果未能解决你的问题,请参考以下文章

面试灵魂拷问:你对 JVM 的运行原理了解多少?

521灵魂拷问:代码重要还是我重要?

高频面试题之JVM灵魂拷问,21题带你通关!

用算法帮上海大妈垃圾分类,扔错罚款!长点心吧你

2021年前端部署的灵魂拷问

中台灵魂拷问,计划经济模式还是市场经济模式