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

标签 java jvm jvm-hotspot

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

最佳答案

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

OopMap 共有三种:

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

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

关于java - Oop Maps 在 Hotspot VM 中到底意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48477522/

相关文章:

java - 如何使用 Servlet 使用 JSONObject 在 Java 中创建正确的 JsonArray

java - 更新 Vaadin 网格中的数据

linux - 在没有 RHN 订阅的 RHEL 5.6 上安装 Zebra ZM600,并且我没有收到 Java VM 错误

java - 关于Java中的HotSpot优化

java - 如何访问jsp页面中添加的没有属性名称的ModelAndView对象

java - 为基于文本的游戏编写代码

java - 如何在 xp 和 windows 7 上运行 SWT 应用程序

Java 1.7 - 通用错误语法

java - 优化循环内对象的创建

java - 为什么 java.lang.Object.getClass() (和反射)比平时慢?