Oop Maps 在 Hotspot VM 中究竟是什么意思

2022-09-03 12:14:21

我从一些文档中读到,Hotspot VM 利用一种名为 Oop Maps 的数据结构来管理 VM 中的所有 OOP。我的问题是,这个Oop Map数据结构是什么时候生成的?在编译时还是在运行时?任何有关这方面的进一步详细文件将非常受欢迎。谢谢你们。


答案 1

OopMap 是一种记录对象引用 (OOP) 在 Java 堆栈上的位置的结构。其主要目的是在 Java 堆栈上查找 GC 根,并在堆内移动对象时更新引用。

有三种类型的OopMaps:

  1. 解释方法的OopMaps。它们是通过分析字节码流来懒惰地计算的,即当GC发生时。最好的参考是源代码(有很多注释),请参阅生成OopMap.cpp。InterpreterOopMaps存储在OopMapCache中。
  2. OopMaps for JIT编译的方法。它们是在 JIT 编译期间生成的,并与编译的代码一起保存,以便 VM 可以通过指令地址快速找到堆栈位置和保存对象引用的寄存器。
  3. 用于生成的共享运行时存根的 OopMaps。这些映射由开发人员手动构建 - 这些运行时存根的作者。

在 GC JVM 期间,遍历所有线程堆栈。每个堆栈都解析为堆栈帧流。帧要么是解释的,要么是编译的,要么是存根的。解释的帧包含有关 Java 方法和 bci(字节码索引)的信息。OopMapCache有助于找到与给定方法和bci相对应的OopMap。编译帧的方法通过指令地址查找发现。


答案 2

推荐