前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java发生指令重排的几个地方

Java发生指令重排的几个地方

作者头像
名字是乱打的
发布2021-12-24 08:50:13
7231
发布2021-12-24 08:50:13
举报
文章被收录于专栏:软件工程

一.指定重排的原则

编译器和处理器不是胡乱的重排序的,他们会遵循一个关键的规则,就是数据依赖规则,如果说一个变量的结果依赖于之前的代码执行结果,那么就不能随意进行重排序,要遵循数据的依赖。

二.指定重排的位置

2.1 编译时

编译后的代码的执行顺序:java里有两种编译器,一个是静态编译器(javac),一个是动态编译器(JIT)

  • javac负责把.java文件中的源代码编译为.cass文件中的字节码,这个一般是程序写好之后进行编译的。
  • JIT负责把.class文件中的字节码编译为JVM所在操作系统支持的机器码,一般在程序运行过程中进行编译。

在这个编译的过程中,编译器了提高代码的执行效率,很可能会调整代码的执行顺序。

2.2 处理器执行时候

即使我们给处理器一个代码的执行顺序,处理器也可能会重排代码,更换一种执行顺序。

2.3 内存重排序

有可能一个处理器在实际执行的过程中,在写缓冲器,高速缓存等等一些硬件也能导致指令执行顺序和我们想象的不一样。

如图所示,画红圈的都是可能发生指定重排的地方

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/10/6 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.指定重排的原则
  • 二.指定重排的位置
    • 2.1 编译时
      • 2.2 处理器执行时候
        • 2.3 内存重排序
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档