温习《Java并发编程的艺术》java
轻量级的synchonized编程
在多处理器开发保证了共享变了的可见性(一个线程修改了一个共享变了,另一个线程可以读取这个修改的值)数组
Lock前缀指令会引发处理器缓存回写到内存缓存
一个处理器的缓存回到内存会致使其余处理器的缓存无效并发
准确和一致地更新共享变量jvm
追加字节能优化性能高并发
为何追加64字节可以提升并发编程的效率呢性能
在下面两种状况不该该是用64字节 缓存行非64字节宽的处理器 缓存变量不会被频繁地写优化
对于普通同步形式,锁是当前实例对象线程
对于静态同步方法,锁是当前Class对象
对于同步方法块,锁是synchonized括号里配置的对象
jvm基于进入和退出Monitor对象来实现方法同步和代码同步
使用monitorenter和monitorexit指令实现,在编译后插入到插入代码
synchonized用的锁是存在java对象头里的,数组用3个字宽存储对象头,非数组用2个字宽存储对象头
Markword 默认存储对象的Hashcode、分代年龄、锁标记位
从1.6之后为了减小得到锁和释放锁带来的性能消耗,引入了偏向锁和轻量锁
无锁状态
偏向锁状态
轻量锁状态
重量锁状态
名词解释
内存屏障
缓存行
原子操做
缓存行填充
缓存命中
写命中
写缺失