码迷,mamicode.com
首页 > 其他好文 > 详细

【JVM】JMM导致的问题和解决手段

时间:2020-07-15 01:02:42      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:总线   问题   一个   决定   升级   ESS   内核   access   dem   

思路:

  • cpu多级缓存 - 伪共享
    • 解决一致性
      • 缓存锁MESI + 总线锁
      • 缓存行填充
    • cpu指令乱序
      • 演示demo
      • 为什么乱序 - 好处
        • 因为cpu比内存块太多,为了充分压榨cpu
      • cpu内存屏障阻止乱序
        • sfence&lfence&mfence
  • volatile实现
    • 字节码层面
      • 在access flag上标识了他是volatile的 - demo
    • jvm层面
      •  SS 写操作 SL  
      •  LL 读操作 LS
    • 操作系统
      • lock指令
        • 写操作会回写到主内存,其他线程有读操作只能读取最新的
  • synchronized实现
    • 字节码层面
      • 修饰代码块 monitorenter & 2 monitorexit
      • 修饰方法 同volatile会有一个修饰符标识
    • jvm
      • c语言调用操作系统同步机制 - monitor对象和reentrant实现很类似
    • 操作系统
      • lock指令 - metux 用户态到内核态切换决定哪个线程有锁
    • 锁升级

 

【JVM】JMM导致的问题和解决手段

标签:总线   问题   一个   决定   升级   ESS   内核   access   dem   

原文地址:https://www.cnblogs.com/nightOfStreet/p/13302920.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!