“热”和“冷”对象的行为如何?


此处展示的工作是作为 甲骨文、乌普萨拉大学和 KTH 之间的联合研究项目 的一部分进行的。在 inside.java 上关注博客系列,以阅读更多有关在斯德哥尔摩甲骨文开发办公室进行的 JVM 研究的信息。


我的名字是 Hanna Nyblom。我在 2019 年下半年在甲骨文撰写了我的硕士论文,完成了我在 KTH(瑞典斯德哥尔摩皇家理工学院)的计算机科学硕士学位。

我的论文“对 Java 虚拟机垃圾收集器分类为热和冷的对象的行为倾向的实验研究”检查了被 ThinGC 垃圾收集器分类为热(最近引用)或冷的对象的行为。我想要检查的主要行为倾向是对象一旦变冷是否倾向于保持冷,冷条纹是否倾向于比热条纹更长,以及对象在其生命周期中是否倾向于主要为热或冷。针对一般对象检查了这些行为,也针对不同类别的对象检查了这些行为,以确定某些类别是否表现出独特性。

我开始学习 ZGC 和 ThinGC,乌普萨拉大学的博士生 Albert Mingkung Yang 给了我极好的介绍,我有机会与他合作。Albert 是 ThinGC 的架构师,ThinGC 是 ZGC 的“扩展”,它将热对象和冷对象分隔到不同的内存空间,并使用两个不同的垃圾收集器收集这两个空间。

在更好地理解了 ZGC 和 ThinGC 之后,我能够稍微修改 ThinGC 的代码,以记录每个遇到的对象的(地址、热度和类别)对象信息,以及每个对象从一个地址转发到另一个地址的信息。由于 ThinGC 是从 ZGC 开发的,因此我还可以向办公室的 ZGC 开发人员学习,并确保在 GC 周期的正确阶段记录了正确的信息。然后,我对一个脚本进行了处理,以总结记录的信息,并收集与同一对象有关的所有信息。这些收集的对象信息可用于计算回答我的研究问题的指标。在这里,我花时间了解哪些指标最能回答我的研究问题,并选择要展示哪些指标。所选指标的一些示例是最长的热/冷条纹和“重新加热”(从冷存储到热存储的转换)次数。这同样是一个协作,我从 Albert 那里获取了意见。

论文的最终结果表明,大多数物体在变冷后倾向于保持寒冷,而且寒冷条纹往往比炎热条纹更长。结果还表明,由于持续高温的短寿命物体的普遍存在,大多数物体在其生命周期中实际上主要是热的。然而,在不考虑持续高温/低温物体的情况下,物体更有可能大部分时间是寒冷的,而不是炎热的。结果还显示了不同类别的不同行为。

chart

这些结果随后可用于证明“ThinGC”方法。这些结果还可能用于改进 GC 调优,如果同时计算,还可以支持冻结/重新加热决策并预测重新加热。

如果您有兴趣了解更多信息,可以 在此处找到我的论文。

我认为,与博士生 Albert Mingkung Yang 合作的事实确实提升了我的论文,我对此次经历表示感谢。这也给了我一个更好的机会真正为研究做出贡献。我很高兴我的结果最终对 Albert 有用,他将在 2020 年国际内存管理研讨会上展示他的论文 “ThinGC:具有边际开销的完全隔离”

感谢 Oracle Stockholm 的人员,我的经历非常具有教育意义。团队非常乐于助人,我很高兴能够深入研究垃圾回收这个对我来说相对较新的领域,并将我的硕士论文重点放在这样一个有趣的话题上。