zoukankan      html  css  js  c++  java
  • 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内存模型里就是各个线程对应的工作内存

  • 相关阅读:
    Android应用开发——系统自带样式Android:theme
    Android权限Uri.parse的详细资料
    Android中级教程之Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)!
    Android源码下载方法详解
    C#编程中的66个好习惯,你有多少个
    浏览时只显示指定文件类型
    如何在32位ubuntu11.10 下编译android 4.0.1源码和goldfish内核
    USACO2.3.1 The Longest Prefix 题解
    usaco1.1.3 Friday the Thirteenth 题解
    USACO 2.4.5 Fractions to Decimals 题解
  • 原文地址:https://www.cnblogs.com/Booker808-java/p/9221289.html
Copyright © 2011-2022 走看看