Java内存模型背诵版

Java虚拟机规范中试图定义一种Java内存模型(JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。

主内存与工作内存

Java内存模型的主要目标是定义程序中各个变量的访问规则

原子性synchrnized

synchronized 既保证了原子性又保证了可见性

可见性volatile

volatile修饰保证变量不同线程的可见性,强制读主存

有序性

volatile可禁用指令重排,DCL在多线程访问时会有问题.

CAS与原子类

CAS(synchronized效率低,要加锁解锁,线程切换,上下文切换)

乐观锁与悲观锁是一种思想:synchronized体现了悲观锁的思想,CAS + volatile体现了乐观锁的思想,并且可细线无锁并发

Java并发包下提供了一些原子类,底层实现用的CAS+volatile

synchronized优化

对象头重的Mark Word

偏向锁:thread-id(名字)

轻量级锁 :栈帧中的锁记录结构

重量级锁:Monitor

重量级锁自旋优化


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!