转载

【技术小说连载】我在JVM公司的那些年(十)——不一样的垃圾回收

【技术小说连载】我在JVM公司的那些年(十)——不一样的垃圾回收

小说连载系列是我第一次尝试的新的技术讲解方式,希望通过小说的形式将技术细节讲解清楚。

第一篇中长篇连载小说《我在JVM公司的那些年》,主要讲解JVM内部的一些原理,希望大家能够喜欢,多多支持。

郑重声明:小说人物和故事情节均是原创,未经同意禁止任何形式的转载,侵权将进入法律程序。大佬除外。

欢迎大家转发文章,谢谢!

本节知识点预告:老年代垃圾回收。

大家好,我叫小史,是一个非科班程序员 …… 哦,不,在这部小说中,我是一个 java 对象。

前情回顾:

【技术小说连载】我在JVM公司的那些年(一)——奇怪的面试

【技术小说连载】我在JVM公司的那些年(二)——残酷的制度

【技术小说连载】我在JVM公司的那些年(三)——恐怖的垃圾回收

【技术小说连载】我在JVM公司的那些年(四)——工位调整

【技术小说连载】我在JVM公司的那些年(五)——主动出击

【技术小说连载】我在JVM公司的那些年(六)——智斗黑老大

【技术小说连载】我在JVM公司的那些年(七)——玉石俱焚

【技术小说连载】我在JVM公司的那些年(八)——死里逃生

【技术小说连载】我在JVM公司的那些年(九)——潜规则

接受了公司潜规则,我在老年代也兢兢业业地工作起来。

老年代不愧是老年代,已经快一个月了,这里一次垃圾回收都没有发生,新生代都已经发生好几次垃圾回收了。

这对于公司来说,其实是有利的, 垃圾回收的次数越少,我们工作时被打扰的次数就越少,就越能高效率地工作

只是每一次新生代垃圾回收,都有几个同事进入老年代,慢慢的,老年代的工位也越来越紧张,已经快坐不下了。

垃圾回收

该来的还是来了。这天,我正在奋力运行代码,突然一队穿着警服的人闯进了老年代,我们立刻停下了手中的活。

队尾慢慢走来一个人,身穿一身警服,却是一副凶神恶煞的样子,他也是垃圾回收器。

原来老年代的垃圾回收器和新生代的垃圾回收器不是同一个人啊

垃圾回收器开口说话了:“可能有些人还不认识我,自我介绍一下,我是垃圾回收器,负责老年代的垃圾回收工作,请大家配合一下。”

相比于新生代温文尔雅却冷酷的垃圾回收器来说,这位表面上凶神恶煞的垃圾回收器倒是更有礼貌,果然是人不可貌相。

垃圾回收器话音刚落,警队的人就冲了上来。但是与新生代直接把人带走不同的是,警队的人并没有一上来就把人带走,而是 对大家进行标记,给在GCRoot引用链中的人做了一个记号

【技术小说连载】我在JVM公司的那些年(十)——不一样的垃圾回收

记号做完之后,又来 第二轮,直接对大家进行工位调整,让有记号的同事们从老年代区第一个工位开始依次排列 。排好之后,把剩下的工位直接清空了。这次大概清理了 6.25% 的工位。

【技术小说连载】我在JVM公司的那些年(十)——不一样的垃圾回收

整个过程 比新生代垃圾回收慢了很多

我的工位也进行了调整,并且调整完之后,我和师兄坐在了一起。

讨论

垃圾回收器走了之后,我问师兄:“师兄,这老年代的垃圾回收和新生代完全不一样啊?”

师兄:“是的,老年代的这个垃圾回收算法叫做 标记-整理算法 。”

我一听有点耳熟:“我记得新生代一开始用的是标记 - 清除算法。”

师兄:“对的,但是标记 - 清除算法不是有一个致命的缺点么?”

我:“是的,我记得 标记-清除算法会产生工位碎片 ,这将导致一些稍大一点的团队无法分配到连续的工位,必须分开坐。”

师兄:“没错,所以 老年代的标记-整理算法在标记-清除算法上进行了改进 ,把大家的工位进行 整理 ,把空余的工位归拢在一起,避免了工位碎片。”

我:“哦,原来如此,不过我还有一个问题啊,为什么老年代不像新生代一样,用复制算法呢?”

师兄:“这个问题问得好,这和这两个区的特点有关。 新生代的特点是回收率高 ,一次回收之后,剩下的员工很少了,所以让他们迁移工位,把他们复制到另一个 survior 区,成本很小。但是老年代 ……

我瞬间明白了:“ 老年代回收率低 ,如果采用复制算法,那么有很多员工需要复制, survior 区也需要设置得很大,反而得不偿失了。”

师兄:“哈哈,说得没错,而且你要注意,因为新生代有两个 survior 区,它们是交替使用,所以 其实survior区总体使用率只有50% 。”

我:“哦,这也是复制算法的缺点之一呀。”

方法区

师兄:“对了,明天上班别迟到。明天 方法区 的人会过来和我们进行交流。”

方法区?就是有资格做 GCRoot 的人所在的区?哈哈,早就想会会他们了。

我:“没问题,明天我一定早来。”

(未完待续……)

小史已经挺过了老年代的垃圾回收,马上要会见方法区的大佬了,方法区的人和新生代老年代的人有什么区别? 欲知后事如何,请听下回分解。

小结

老年代的垃圾回收采用标记-整理算法,之所以这样是因为老年代的回收率并不高,所以只需要将少量未被标记的对象清理就好,而为了防止内存碎片的产生,会对内存中的对象再进行一次整理,这种方法也有缺点,就是很慢。

下节知识点预告:方法区

第一次尝试写技术小说,如果你喜欢这种形式,麻烦动动手指转发一下,你不经意间的动作,可能就会给大家带来一部伟大的技术小说。

【技术小说连载】我在JVM公司的那些年(十)——不一样的垃圾回收

原文  http://mp.weixin.qq.com/s?__biz=MzIzMTE1ODkyNQ==&mid=2649412022&idx=1&sn=654d0e7ec3ad49d408847659aa72dd99
正文到此结束
Loading...