当前位置: 首页 > 面试题库 >

Oop Maps在Hotspot VM中到底意味着什么

充星腾
2023-03-14
问题内容

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


问题答案:

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

OopMap共有三种:

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

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



 类似资料:
  • 问题内容: 我对gulp比较陌生,我想知道gulp任务到底是做什么的?我已经搜集到它通常在a 和after之后运行,但是它还必须更多。我一直无法在网上或gulp的文档中找到任何东西,我真的很想了解我在使用什么。 编辑我发现了这个,但是在解释它方面做得很差 问题答案: 从Node文档中: https://nodejs.org/api/stream.html#stream_visible_pipe_d

  • 问题内容: 我有这个时间戳值由Web服务返回 我知道这意味着时区,但是那到底是什么意思呢? 而且我正在尝试模拟此Web服务,因此有没有办法在python中使用生成此时间戳的方法? 很抱歉,如果这很明显,但Google的帮助不是很大,参考页面也没有。 我目前正在使用这个: 问题答案: 在并没有真正纳入什么。这仅仅是 分隔 的ISO 8601相结合的日期时间格式 要求。您可以将其阅读为 Time 的缩

  • 对于下面的代码,我为一个对象< code>obj提供< code>isShiny,它被列为属性的一部分,本质上是一个键-值对,其中键是< code>isShiny,值是匿名函数。 但是,当我为函数 提供 时,幕后到底发生了什么?当我打印出一个函数时,没有提示在哪里。 这是来自的输出。

  • 假设我们有以下内容: 现在,我知道我们需要选择最专业的类

  • 我想创建一个

  • 问题内容: 下面是代码片段。 有人可以向我解释@符号在Java中的含义吗? 问题答案: 这是一个注释。 注释是元数据的一种形式。它们提供的程序数据不属于程序本身。注释对其注释的代码的操作没有直接影响。 注释确实会影响工具和库对待程序的方式,进而会影响正在运行的程序的语义。可以从源文件,类文件中读取注释,也可以在运行时从中读取注释。