进行垃圾回收的过程中,会涉及对象的移动。为了保证对象引用更新的正确性,必须暂停所有的用户线程,像这样的停顿,虚拟机设计者形象描述为Stop The World。
在HotSpot中,有个数据结构(映射表)称为OopMap。一旦类加载动作完成的时候,HotSpot就会把对象内什么偏移量上是什么类型的数据计算出来,记录到OopMap。在即时编译过程中,也会在特定的位置生成 OopMap,记录下栈上和寄存器里哪些位置是引用。
这些特定的位置主要在:
- 循环的末尾(非 counted 循环)
- 方法临返回前 / 调用方法的call指令后
- 可能抛异常的位置
这些位置就叫作安全点(safepoint)。 用户程序执行时并非在代码指令流的任意位置都能够在停顿下来开始垃圾收集,而是必须是执行到安全点才能够暂停。
Java虚拟机的StopTheWorld与OopMap解析
在Java HotSpot虚拟机中,垃圾回收涉及到StopTheWorld事件,即在特定的安全点暂停用户线程以确保引用更新的准确性。OopMap是一种数据结构,用于记录对象内存布局和引用类型,在类加载完成后和即时编译过程中生成。安全点通常位于循环末尾、方法返回前和可能抛异常的位置,保证了垃圾收集时的程序状态一致性。
7971

被折叠的 条评论
为什么被折叠?



