小说连载系列是我第一次尝试的新的技术讲解方式,希望通过小说的形式将技术细节讲解清楚。
第一篇中长篇连载小说《我在JVM公司的那些年》,主要讲解JVM内部的一些原理,希望大家能够喜欢,多多支持。
郑重声明:小说人物和故事情节均是原创,未经同意禁止任何形式的转载,侵权将进入法律程序。大佬除外。
欢迎大家转发文章,谢谢!
本节知识点预告:可达性分析算法。
大家好,我叫小史,是一个非科班程序员……哦,不,在这部小说中,我是一个java对象。
前情回顾:
【技术小说连载】我在JVM公司的那些年(一)——奇怪的面试
【技术小说连载】我在JVM公司的那些年(二)——残酷的制度
【技术小说连载】我在JVM公司的那些年(三)——恐怖的垃圾回收
【技术小说连载】我在JVM公司的那些年(四)——工位调整
【技术小说连载】我在JVM公司的那些年(五)——主动出击
由于与黑老大结下了梁子,我在公司更加小心行事。
这天,我下班,像往常一样去上个厕所再回家,没想到厕所里竟然碰到了黑老大和黑小弟二人。
狭路相逢
黑老大和黑小弟一下子把我控制住了。
黑老大:“哟,这不是前段时间敢和垃圾回收器对话的小史吗?”
我:“你们想干什么?”
黑老大:“你说的对,我们两个是循环引用,要不是你,我们可以在公司一直待下去,但是现在我们有点危险,需要你帮我们做一件事情。”
我:“什么事情?”
黑老大:“你引用我们俩。”
我坚决地说:“不行,这是违反公司规定的!”
黑老大:“看来你是敬酒不吃吃罚酒。”
旁边的黑小弟已经拿出了菜刀。
这两货果然是暴徒,光天化日之下就敢在公司行凶,我好汉不吃眼前亏。
我:“先别忙,行吧,我引用你们。”
黑小弟:“早这样多好”,说着把菜刀又收了回去。
我拿出工牌引用了他们俩,这一切都做好之后,黑老大竟然抢走了我的工牌。
黑老大:“工牌先没收了,万一你反悔了啥时候又把我们的引用给去掉了,那我们不是白忙活了?”
看来我的小心思被他们看破了,这下我没了工牌,没法做手脚了,我真是恨这两货恨得牙痒痒。
垃圾回收新制度
很快,公司又迎来了一次垃圾回收,不过这一次,和往常有点不太一样,垃圾回收器先开口了。
垃圾回收器:“鉴于上次有位同事提到的循环引用的问题,经公司高层讨论之后,决定使用另一种算法来决定哪些员工需要被垃圾回收。”
大家都很好奇会是什么样的算法,毕竟是和自己能否留在公司密切相关的,但是也没有一个人说话,大家都安静地听着。
垃圾回收器顿了一会儿开口了:“这种算法叫可达性分析算法,我们会以GC Roots为起点,去寻找他们引用的对象,然后一直往下找,找出整个引用链,没有在引用链上的员工,就会被垃圾回收。”
听到这里,大家都开始盘算自己会不会被垃圾回收,但是算来算去,发现没有GC Roots没法算啊。
我:“哪些人有资格做GC Roots呢?”
垃圾回收器:“你们这里的人都没有资格,包括老年代里那些人,公司规定,能够做GC Roots的人是这些:
虚拟机栈中引用的对象(局部变量)
方法去中类静态属性引用的对象(static对象实例)
方法区中常量引用的对象(常量实例)
本地方法引用的对象
我小声问师兄:“这些人你都认识吗?”
师兄:“这些人都不在堆内存这个区,我也只是有时候在电视里看到过,没见过真人。”
就是这样,公司里总有一些你见都没见过的人,但他们却能决定你的去留。
还好,由于有师兄,还有几位同事引用了我,我在引用链中,而当垃圾回收器走到黑老大和黑小弟面前时……
垃圾回收器:“把他俩押送出公司。”
黑老大大吃一惊,大声喊到:“冤枉啊,我有被引用,这个人,小史,他引用的我!”
我走到黑老大面前,拿回我的工牌:“看来你还没明白,为了让你安安心心地离开,我就告诉你吧。”
(未完待续……)
小史到底用了什么方法,让垃圾回收器回收了黑老大和黑小弟?欲知后事如何,请听下回分解。
小结
现在的垃圾回收器大多都用可达性分析算法来决定一个对象是否该被垃圾回收,从而解决了循环引用的问题。
下节知识点预告:四种引用
第一次尝试写技术小说,如果你喜欢这种形式,麻烦动动手指转发一下,你不经意间的动作,可能就会给大家带来一部伟大的技术小说。