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

Bil*_*son 14 java jvm jvm-hotspot

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

apa*_*gin 25

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

OopMaps有三种:

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

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

  • @BillRanderson 1)最好的参考是源代码(详细记录的BTW):[generateOopMap.cpp](http://hg.openjdk.java.net/jdk7u/jdk7u/hotspot/file/d638e49facb6/src/share/vm /oops/generateOopMap.cpp)。InterpreterOopMap存储在[OopMapCache](http://hg.openjdk.java.net/jdk7u/jdk7u/hotspot/file/d638e49facb6/src/share/vm/interpreter/oopMapCache.hpp)中。 (2认同)
  • @BillRanderson 2)GC JVM遍历所有线程堆栈.每个堆栈都被解析为堆栈帧流.帧可以是解释或编译的,也可以是存根.解释的帧包含有关Java方法和bci(字节码索引)的信息.OopMapCache有助于找到与给定方法和bci相对应的OopMap.通过指令地址查找发现编译帧的方法.编译的方法包含OopMaps以及代码. (2认同)