zoukankan      html  css  js  c++  java
  • 【JVM】JMM导致的问题和解决手段

    思路:

    • 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 用户态到内核态切换决定哪个线程有锁
      • 锁升级
  • 相关阅读:
    2016/4/27 xml
    2016/4/27 网络编程
    2016/4/25 java io
    mysql 基础列题
    数据库的语法
    数据库
    io流
    xml
    网络编程
    gui2
  • 原文地址:https://www.cnblogs.com/nightOfStreet/p/13302920.html
Copyright © 2011-2022 走看看