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 用户态到内核态切换决定哪个线程有锁
      • 锁升级
  • 相关阅读:
    Go标准库之tar
    redis必知必会
    GORM CRUD指南
    GORM入门指南
    MUI中tap点击事件点击一次连续申请两次
    Go代码启动默认浏览器
    Go实现JWT
    Go Micro
    protobuf初识
    英语作文
  • 原文地址:https://www.cnblogs.com/nightOfStreet/p/13302920.html
Copyright © 2011-2022 走看看