JMM(JavaMemoryModel)
Java内存模型,简称JMM,隶属于JVM。
Jeff Dean在Google全体工程大会的报告 数据参考(从图中可以看出大多数时间花在了IO上真正运算并没有占用多少时间)现在的cpu都存在多级缓存(比如常见的3级缓存),多级缓存介于cpu和内存之间,多级缓存的技术使cpu能够更快读取缓存的数据进行运算。
过程:将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中,这样处理器就无须等待缓慢的内存读写了。(所以会导致在不加锁的情况下,某些复合操作再多线程情况下会冲突。)
JMM定义了工作内存(线程)与主内存的抽象关系(不是真实存在的),线程之间的共享变量存储于主内存中,每个线程都拥有私有的本地变量。
在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排序。
不可变(Immutable)的对象一定是线程安全的(如final关键字修饰的String、枚举类型)
如果线程A与线程B之间要通信的话,必须要经历下面2个步骤:
1)线程A把本地内存(工作内存)A中更新过的共享变量刷新到主内存中去。
2)线程B到主内存中去读取线程A之前已更新过的共享变量。
网友评论