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