小说连载系列是我第一次尝试的新的技术讲解方式,希望通过小说的形式将技术细节讲解清楚。
第一篇中长篇连载小说《我在JVM公司的那些年》,主要讲解JVM内部的一些原理,希望大家能够喜欢,多多支持。
郑重声明:小说人物和故事情节均是原创,未经同意禁止任何形式的转载,侵权将进入法律程序。大佬除外。
欢迎大家转发文章,谢谢!
本节知识点预告:标记——复制算法。
大家好,我叫小史,是一个非科班程序员 …… 哦,不,在这部小说中,我是一个 java 对象。
前情回顾:
【技术小说连载】我在JVM公司的那些年(一)——奇怪的面试
【技术小说连载】我在JVM公司的那些年(二)——残酷的制度
【技术小说连载】我在JVM公司的那些年(三)——恐怖的垃圾回收
还没从刚刚的垃圾回收缓过神来,大伙儿都忙着抢占工位了,只见 Survior1区 的老油条们赶紧抢占了 Survior2区 的好的工位。
师兄抢了一个远离走道的位置,这样不会被人打扰。
我过去找到师兄问到:“ Survior2区 不是不坐人吗?怎么现在大家都跑到 Survior2 区 来了?”
师兄:“这也是公司的制度,进行垃圾回收之后, eden区和Survior1区留下的员工都会被转移到Survior2区 ,并且工位从前往后排列,这叫 标记——复制算法 。”
我:“为啥要这样呢?这样工位移来移去的不是很麻烦吗?”
师兄:“这你就有所不知了,这是公司的一位高管,吕老师发明的制度。”
师兄:“吕老师刚进公司的时候,还是和你差不多大,当时我们在进行垃圾回收的时候,用的还是 标记——清除算法 。”
小史:“这是什么算法?”
师兄:“这种算法很简单,也没有分这么多区,就是看看哪些人的引用计数是 0 ,然后 直接把他们清理出去,工位空出 。”
小史:“对呀,这样不是挺好的吗?”
师兄:“但是 一个个清理工位也是不容易的事情 ,你也知道,我们这边裁员比例高得厉害,刚刚你也看见了,裁掉了 98% 的人, 意味着我们要一个个地清理98%的工位,这个工作量还是挺大的 。”
小史:“哦,我明白了,与其清理 98% 的工位,不如让剩下的2 % 的人自己换个位置。”
师兄:“这只是其一,其实一开始公司也没有改变制度,直到发生了一件事情。”
师兄:“那年我们开拓新业务,一下子招进来 100 多人,但是却发现 没有这么多连续的工位 。频繁的垃圾回收导致了大量的 工位碎片 。”
师兄:“这下这个团队只能分开坐,很快他们就开始抗议了,这时候吕老师把他的设计讲了出来。”
吕老师:“我建议 把新生代区分为三个区,eden区,Survior1区和Survior2区 。”
吕老师:“一开始的时候, 新来的同事都在eden区 。”
吕老师:“ 当进行第一次垃圾回收的时候,eden区上留下来的同事就移动到Survior1区,然后把eden整体清空 。这样,新来的同事在 eden 区就有连续工位。”
吕老师:“ 当第二次垃圾回收的时候,eden区和Survior1区留下来的同事就移动到Survior2区,然后把eden区和Survior1区清空 。”
吕老师:“ 当第三次垃圾回收的时候,eden区和Survior2区留下来的同事就移动到Survior1区,然后把eden区和Survior2区清空 。以此类推。”
这时候马上就有其他同事提出质疑:“也就是说 Survior1区 和 Survior2区 是交替使用对吧?”
吕老师:“是的。”
其他同事:“但是你这样移来移去有什么意义呢?”
吕老师:“首先不需要一个一个去清理 eden 区或者 Survior 区的工位,要知道, 把一个区整体直接清空比一个一个工位清理要轻松很多 。其次就是 解决了工位碎片的问题 。”
公司高层觉得这个方案不错,决定试运行一段时间。
结果果然提高了效率,也没有出现一个团队分配不到连续工位的情况了。
后来公司就采用吕老师的方案,吕老师也很快晋升到了公司高层,坐到了 老年代 工作区。
听了吕老师的故事,小史竟有一丝敬仰之情,自己也想做一个改变公司制度的人。
(未完待续……)
通过这第一次垃圾回收,小史对公司的制度也有了更加全面的了解,自己在公司将如何发展?欲知后事如何,请听下回分解。
目前的垃圾回收器,在新生代区基本都是使用标记——复制算法,这样能够提高清理效率,有效避免内存碎片。
下节知识点预告:循环引用
第一次尝试写技术小说,如果你喜欢这种形式,麻烦动动手指转发一下,你不经意间的动作,可能就会给大家带来一部伟大的技术小说。