【技术实现步骤摘要】
内存屏障的优化方法、装置、设备及介质
[0001]本申请涉及计算机
,尤其涉及一种内存屏障的优化方法
、
装置
、
设备及介质
。
技术介绍
[0002]Java
内存模型中,在对象初始化时,为保证
Java
线程的安全性,要求元数据和
final
类型字段的可见性先于该对象的可见性
。
具体解释为:要求对象初始时的元数据和
final
类型字段的写操作,在该对象的引用传递的写操作之前完成,以保证在另一个线程看到该对象时,看到的是该对象的最终字段的正确构造版本
。
[0003]已知技术中,对于上述要求,在
Java
虚拟机的即时编译器将对象初始化方法转化成语法树过程中,分别实现为:在用于写对象元数据的存储节点后面插入一个内存屏障节点,类型为
StoreStore
,以指示在内存屏障节点之后的写操作需要在位于内存屏障节点之前的写操作执行完毕后执行;在写
f ...
【技术保护点】
【技术特征摘要】
1.
一种内存屏障的优化方法,应用于编译器,其特征在于,包括:对于每个对象初始化方法,查找所述初始化方法对应的语法树中是否存在预设类型的目标内存屏障节点;所述语法树是所述编译器根据所述初始化方法的原始代码生成的;若存在所述目标内存屏障节点,则查找所述语法树中是否存在满足预设条件的目标存储节点;若存在所述目标存储节点,则根据所述目标内存屏障节点和所述目标存储节点,得到更新节点;通过所述编译器的后端架构生成用于实现所述更新节点的原子访存指令,并根据所述原子访存指令更新所述初始化方法,以形成所述初始化方法对应的优化代码
。2.
根据权利要求1所述的方法,其特征在于,所述根据所述目标内存屏障节点和所述目标存储节点,得到更新节点,包括:合并所述目标内存屏障节点和所述目标存储节点,以得到原子存储节点;将所述原子存储节点作为所述更新节点
。3.
根据权利要求1所述的方法,其特征在于,所述根据所述目标内存屏障节点和所述目标存储节点,得到更新节点,包括:删除所述目标内存屏障节点,并根据保序标识和所述目标存储节点,得到所述更新节点;所述保序标识用于指示所述目标存储节点需要保序
。4.
根据权利要求1‑3任一项所述的方法,其特征在于,所述查找语法树中是否存在预设类型的目标内存屏障节点,包括:从所述语法树的根节点开始,向上查找所述初始化方法对应的返回节点,所述返回节点是所述初始化方法的唯一出口;从所述返回节点开始,沿所述语法树向上查找所述预设类型的内存屏障节点;将查找到的第一个所述预设类型的内存屏障节点作为所述目标内存屏障节点
。5.
根据权利要求4所述的方法,其特征在于,所述方法还包括:从所述目标内存屏障节点开始,沿所述语法树继续向上查找所述预设类型的第
N
个内存屏障节点,
N
为大于1的整数;从所述第
N
个内存屏障节点开始,沿所述语法树继续向上查找所述第
N
个内存屏障节点对应的目标存储节点;所述目标存储节点用于存储所述初始化方法的元数据或
final
类型字段;根据所述第
...
【专利技术属性】
技术研发人员:孙国云,王锐,敖琪,
申请(专利权)人:龙芯中科技术股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。