小说连载系列是我第一次尝试的新的技术讲解方式,希望通过小说的形式将技术细节讲解清楚。
第一篇中长篇连载小说《我在JVM公司的那些年》,主要讲解JVM内部的一些原理,希望大家能够喜欢,多多支持。
郑重声明:小说人物和故事情节均是原创,未经同意禁止任何形式的转载,侵权将进入法律程序。大佬除外。
欢迎大家转发文章,谢谢!
本节知识点预告:方法区简介。
大家好,我叫小史,是一个非科班程序员 …… 哦,不,在这部小说中,我是一个 java 对象。
前情回顾:
【技术小说连载】我在JVM公司的那些年(一)——奇怪的面试
【技术小说连载】我在JVM公司的那些年(二)——残酷的制度
【技术小说连载】我在JVM公司的那些年(三)——恐怖的垃圾回收
【技术小说连载】我在JVM公司的那些年(四)——工位调整
【技术小说连载】我在JVM公司的那些年(五)——主动出击
【技术小说连载】我在JVM公司的那些年(六)——智斗黑老大
【技术小说连载】我在JVM公司的那些年(七)——玉石俱焚
【技术小说连载】我在JVM公司的那些年(八)——死里逃生
【技术小说连载】我在JVM公司的那些年(九)——潜规则
【技术小说连载】我在JVM公司的那些年(十)——不一样的垃圾回收
以往都是十点才到公司的小史,今天八点多就到了,他是来听 方法区 的大佬来进行分享交流的,顺便了解下方法区都是些什么人,为什么他们可以当 GCRoot 。
小史认为, GCRoot是引用链的根节点 ,是永远不会被回收的,所以对他们还是挺崇拜的。(小史的理解不一定对哈)
九点一到,一位女同事走上了讲台:“大家好,我是小林,是方法区的员工,我们方法区主要负责记录大家的 类信息,常量,静态变量 等数据 …… ”
说着说着,就开始介绍起他们的工作流程。
小林:“其实当你们的简历,也就是你们的 .class文件 交给公司的时候,公司就会对这份简历进行分析,里面定义的一些 类信息呀,静态变量呀,常量呀 ,会在我们 方法区进行存储 。”
我:“哦,所以你们保存了我们每个员工的基本信息?”
小林:“没错,每个员工入职之后,他的基本信息就在我们这里保存下来。”
我:“原来如此,不愧是人事部。”
小林:“其实方法区除了存储这些基本信息之外,还有一个 运行时常量池 也在方法区,但是这是另一个同事负责的,我也不太了解,后面有机会可以请他来分享。”
半个小时之后,小林终于讲完了。
小林:“ …… 今天的分享就到这里了,大家还有什么问题吗?”
我赶紧抓住机会问了 GCRoot 的问题:“我记得方法区里面是有 GCRoot 的,这块能介绍一下吗?”
小林:“好的,这就要说到 垃圾回收器 了,他每次进行垃圾回收的时候,都会先到我们这里来领一份表,我们会把每个类的 静态变量和常量 这两个信息给他,据说 他会把这两个东西当做GCRoot ,去进行引用链分析,后面的事情我就不知道了 …… ”
我:“哦,明白了,谢谢!”
会议结束后,我仔细理了理小林的分享,结合之前经过的垃圾回收经历,我大概明白了。
方法区和堆内存其实是JVM公司的两个区域 。当一个类被加载到 JVM 公司时,它的 类信息,静态变量,常量会被存储在方法区 。而进行垃圾回收的时候,会把 方法区的静态变量和常量作为GCRoot之一 ,从它们引用的对象开始分析引用链。
想着想着,碰到了师兄。
师兄:“怎么样啊?小史,有没有收获?”
小史:“有啊,收获还挺大的,这种分享真的不错,能够让我们了解公司其他人都在做什么事情。以后还有这样的分享记得通知我啊!”
师兄:“嗯,最近就有一个,下个礼拜, 虚拟机栈 中的同事会来进行分享,你要去吗?”
虚拟机栈?我记得虚拟机栈中也有可以作为GCRoot的人,这我可不能放过啊。
小史:“当然要去啦!”
(未完待续……)
通过这次分享,小史已经了解了方法区人事部的一些事情,了解了GCRoot的一部分源头。接下来的虚拟机栈同事的分享,又有什么内容? 欲知后事如何,请听下回分解。
方法区是和堆内存并列的一个区域,它主要记录类信息、类静态变量、类常量等信息,其中还有一个运行时常量池。方法区的静态变量和常量可是作为GCRoot的哟。
下节知识点预告:虚拟机栈
第一次尝试写技术小说,如果你喜欢这种形式,麻烦动动手指转发一下,你不经意间的动作,可能就会给大家带来一部伟大的技术小说。