JVMJMM导致的问题和解决手段
Posted nightofstreet
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVMJMM导致的问题和解决手段相关的知识,希望对你有一定的参考价值。
思路:
- cpu多级缓存 - 伪共享
- 解决一致性
- 缓存锁MESI + 总线锁
- 缓存行填充
- cpu指令乱序
- 演示demo
- 为什么乱序 - 好处
- 因为cpu比内存块太多,为了充分压榨cpu
- cpu内存屏障阻止乱序
- sfence&lfence&mfence
- 解决一致性
- volatile实现
- 字节码层面
- 在access flag上标识了他是volatile的 - demo
- jvm层面
- SS 写操作 SL
- LL 读操作 LS
- 操作系统
- lock指令
- 写操作会回写到主内存,其他线程有读操作只能读取最新的
- lock指令
- 字节码层面
- synchronized实现
- 字节码层面
- 修饰代码块 monitorenter & 2 monitorexit
- 修饰方法 同volatile会有一个修饰符标识
- jvm
- c语言调用操作系统同步机制 - monitor对象和reentrant实现很类似
- 操作系统
- lock指令 - metux 用户态到内核态切换决定哪个线程有锁
- 锁升级
- 字节码层面
以上是关于JVMJMM导致的问题和解决手段的主要内容,如果未能解决你的问题,请参考以下文章
关于近期开发中遇到的同一账户多人登录造成数据库数据不一致的思考和解决(避开了数据库存状态的常用处理手段)
[架构之路-55]:架构师 - 嵌入式软件常见难查问题与解决办法大总结-3-按照故障类型分类(调试手段与信息不足指针内存栈溢出性能)