为了解决可达性分析中从GC Roots
节点找引用链这个操作会消耗很多时间这个问题,采用了一组称为OopMap
的数据结构来达成这个目的!
在类加载完成的时候,HotSpot
就把对象内什么偏移量上是什么类型的数据计算出来,在JIT
编译过程中,也会在特定的位置记录下栈和寄存器中哪些位置是引用。但是如果每个指令都记录,那将会需要大量的额外空间!
所以采用安全点,简单的说就是将程序用安全点进行分割,分割开的每小段程序有个OopMap
,只在安全点才进行记录信息,至于安全点的选取在此就不说了,可以自行百度!
去安全点的方法:抢先式中断和主动式中断
以上均基于个人理解!