Oop Maps在Hotspot VM中的含义是什么?

时间:2014-09-25 02:56:42

标签: java jvm jvm-hotspot

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

1 个答案:

答案 0 :(得分:22)

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

有三种OopMaps:

  1. 用于解释方法的OopMaps 。它们是懒惰地计算的,即当GC发生时,通过分析字节码流来计算。最好的参考是源代码(包含大量注释),请参阅generateOopMap.cpp。 InterpreterOopMaps存储在OopMapCache
  2. JIT编译方法的OopMaps 。它们是在JIT编译期间生成的,并与编译后的代码一起保存,以便VM可以通过指令地址快速查找堆栈位置和保存对象引用的寄存器。
  3. 用于生成的共享运行时存根的OopMaps。这些映射由开发人员手动构建 - 这些运行时存根的作者。
  4. 在GC期间,JVM遍历所有线程堆栈。每个堆栈都被解析为堆栈帧流。帧可以是解释或编译的,也可以是存根。解释的帧包含有关Java方法和bci(字节码索引)的信息。 OopMapCache有助于找到与给定方法和bci相对应的OopMap。通过指令地址查找发现编译帧的方法。