做网站到八方资源网怎么样,网站开发亿玛酷给力5,重庆网站建设公司那家好,seo系统培训课程点个关注#xff0c;必回关 随着CPU和内存的发展速度差异的问题#xff0c;导致CPU的速度远快于内存#xff0c;所以现在的CPU加入了高速 缓存#xff0c;高速缓存一般可以分为L1、L2、L3三级缓存。基于上面的例子我们知道了这导致了缓存一致 性的问题#xff0c;所以加入…点个关注必回关 随着CPU和内存的发展速度差异的问题导致CPU的速度远快于内存所以现在的CPU加入了高速 缓存高速缓存一般可以分为L1、L2、L3三级缓存。基于上面的例子我们知道了这导致了缓存一致 性的问题所以加入了缓存一致性协议同时导致了内存可见性的问题而编译器和CPU的重排序 导致了原子性和有序性的问题JMM内存模型正是对多线程操作下的一系列规范约束因为不可能 让陈雇员的代码去兼容所有的CPU通过JMM我们才屏蔽了不同硬件和操作系统内存的访问差异 这样保证了Java程序在不同的平台下达到一致的内存访问效果同时也是保证在高效并发的时候程 序能够正确执行。
原子性
Java内存模型通过read、load、assign、use、store、write来保证原子性操作此外还有 lock和unlock直接对应着synchronized关键字的monitorenter和monitorexit字节码指令。 阿里内部资料
可见性
可见性的问题在上面的回答已经说过Java保证可见性可以认为通过volatile、 synchronized、final来实现。
有序性
由于处理器和编译器的重排序导致的有序性问题Java通过volatile、synchronized来保 证。
happen-before规则
虽然指令重排提高了并发的性能但是Java虚拟机会对指令重排做出一些规则限制并不能让所有 的指令都随意的改变执行位置主要有以下几点
单线程每个操作happen-before于该线程中任意后续操作volatile写happen-before与后续对这个变量的读synchronized解锁happen-before后续对这个锁的加锁final变量的写happen-before于final域对象的读happen-before后续对final变量的读传递性规则A先于BB先于C那么A一定先于C发生
工作内存和主内存是什么
说了半天到底工作内存和主内存是什么 主内存可以认为就是物理内存Java内存模型中实际就是虚拟机内存的一部分。而工作内存就是 CPU缓存他有可能是寄存器也有可能是L1\L2\L3缓存都是有可能的