JVM----Java内存模型与线程

       我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等待成本,但是随着CPU的发展,内存的读写速度也远远跟不上CPU的读写速度,因此,为了解决这一纠纷,CPU厂商在每颗CPU上加入了高速缓存,用来缓解这种症状,因此,现在CPU同内存交互就变成了下面的样子。

                                               

       中间的就是神奇的高速缓存,这样,就算你的CPU和内存之间的IO操作很慢,跟不上CPU的速度,我们的CPU也可以先读取高速缓存中的内容,等IO操作完毕后也不迟......

       基于高速缓存的策略确实很好的解决了处理器与内存速度之间的矛盾,但是随之而来的问题就是:缓存一致性。特别是在多处理系统中(现在的电脑基本都是多核处理器),每个处理器都有属于自己的高速缓存,而他们又是共享一个主内存(Main Memory),那么当多个处理器的运算任务都涉及到同一个主内存时,很大的可能性会导致各自的缓存数据不一致。

                                                 

主内存与工作内存

       针对此问题,我们的Java设计者也在Java语言上加了许许多多的概念模型-----Java内存模型,屏蔽了各种硬件和操作系统之间的内存访问差异。java内存模型主要是定义程序中各个变量的访问规则,就想上面我们所说的Main Memory,对应在java内存模型中就是主内存,而每个处理器的高速缓存,在Java内存模型里就是各个线程对应的工作内存

 

posted @ 2018-06-24 18:16  Booker808  阅读(138)  评论(0编辑  收藏  举报