加入收藏 | 设为首页 | 会员中心 | 我要投稿 周口站长网 (https://www.0394zz.cn/)- 数据采集、智能营销、经验、云计算、专属主机!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

理解什么是Java内存模型

发布时间:2021-03-03 11:33:30 所属栏目:外闻 来源:互联网
导读:为在保证CPU技术发展同时优化解决这一问题,人们后来想出来了一个方案,就是在CPU和内存之间增加高速缓冲存储器(Cache)。 高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。

为在保证CPU技术发展同时优化解决这一问题,人们后来想出来了一个方案,就是在CPU和内存之间增加高速缓冲存储器(Cache)。

高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。在计算机存储系统的层次结构中,是介于中央处理器和主存储器之间的高速小容量存储器。它和主存储器一起构成一级的存储器。高速缓冲存储器和主存储器之间信息的调度和传送是由硬件自动进行的。
 

为Cache速度接近于CPU的速度且CPU每次操作主存前都会先访问Cache,所以通过增加Cache后当便达到了优化的效果。

4. 随着CPU的升级,一层缓存慢慢地无法满足要求,因此逐渐地衍生出多级缓存。每一级缓存中所储存的全部数据都是下一级缓存的一部分。而CPU读取数据也演变为:当CPU要读取一个数据时,首先从一级缓存中查找,如果没有找到再从二级缓存中查找,如果还是没有就从下一级缓存查直到访问内存。如下图所示
 

随着计算机能力不断提升,开始支持多线程,那么就可能会问题了。我们分别来分析下单线程、多线程在单核CPU、多核CPU中的影响。

  • 单核cpu与单线程:核心的缓存只被一个线程访问,缓存独占,不会出现访问冲突等问题。
  • 单核CPU与多线程:进程中的多个线程会同时访问进程中的共享数据,CPU将某块内存加载到缓存后,不同线程在访问相同的物理地址的时候,都会映射到相同的缓存位置,这样即使发生线程的切换,缓存仍然不会失效。但由于任何时刻只能有一个线程在执行,因此不会出现缓存访问冲突。
  • 多核CPU与多线程:每个核都至少有一个L1 缓存用于提升效率。当多个线程分别在不同的核心上执行且访问进程中的同个共享内存,由于多核是可以并行的,则可能会出现类似多线程编程中出现的并发问题,如对于同一块内存中的变量,多个核心同时读写修改数据的话,就会出现不可预期的错误,而其解决思路则是通过锁机制。

所以在CPU和主存之间增加缓存,在多核CPU多线程场景下发生并发内存访问操作时可能会出现歧义。

(编辑:周口站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读