C轮融资|java内存模型之概览

一:概念
很多人会混淆【Java内存结构】和【java内存模型】 , 它们之间基本上是没有什么关系的 。
【java内存模型】的英文全称是Java Memory Model , 简称JMM 。 简单来说 , JMM定义了一套在多线程存在共享数据(类的成员变量、数组等)的情况下 , 对共享数据的原子性、可见性、有序性的规则和保障 。
二:硬件的效率和一致性
现在的电脑的CPU几乎都是多核的 , 同时处理多个任务也是现代操作系统的一个必备功能 。 在说JMM之前 , 我们先思考下CPU是如何处理并发问题的呢?它的结构是怎样的呢?
绝大多数的计算机任务 , 不能只靠处理器“计算”完成 , 还需要数据的读取和运算结果的保持 , 那就绕不开要对磁盘进行IO操作 。 但是磁盘IO于处理器的运算速度有好几个数量级的差距 。
所以现代计算机就加了一层或者几层的高速缓存 , 作为内存和处理间的缓冲 , 也就是说把处理器需要的数据复制到高速缓存中 , 让计算快速运行 , 之后再把计算结果从高速缓存中同步到内存中 , 这样就不需要等待缓慢的内存读写了 。
高速缓存解决了处理器和内存之间处理速度的矛盾 , 但是又引入了一个新的问题那就是:缓存一致性问题 。
现在的电脑几乎都是多个处理器 , 每个处理器都有自己的告诉缓存 , 但是这多个处理器共享同一主内存 。 如果多个处理器上的计算任务需要读写同一块内存区域时 , 就会出现各处理器的高速缓存中的数据不一致问题 。 为了解决这个问题 , 各个处理器访问主内存时 , 必须遵守缓存一致性协议 。
图片来自《深入理解Java虚拟机》一书
二:Java内存模型
JMM规定了所有的变量都存在主内存中 , 这里说的变量不包括方法的局部变量 , 因为它是线程私有的 , 不存在共享 , 那也就不存在数据竞争 。
每个线程有自己的工作内存(类似处理器的高速缓存) , 线程的工作内存中保存着该线程使用的变量的主内存副本 , 线程对变量的所有操作都在工作内存中完成 , 不能直接操作主内存 。
不同线程之间也不能访问对方的工作内存中的变量 , 线程间变量值的传递只能通过主内存完成 。
深入理解Java虚拟机
JMM中的工作内存 , 主内存和Java内存结构中的堆、栈、方法区中根本就是在不同维度上的划分 , 它们之间可以说没有什么关系 。
【C轮融资|java内存模型之概览】如果要勉强对应的话 , 主内存主要对应于Java堆中的对象实例数据部分 , 而工作内存 则对应于虚拟机栈中的部分区域 。
- 36氪首发|烹饪机器人公司「智谷天厨」获数千万元天使轮融资,羲融善道独家投资
- 疫情期间获近亿元A轮投资,青浦这家企业数字化服务商乘“长三角数字干线”发展快车逆势上扬
- 雅典表把动力储存显示立体化,抢眼度不输本身的飞行陀飞轮
- Java|干翻小米,红米又出超大杯旗舰,120W+2K直屏+双旗舰芯
- 百度地图|Java程序员应知应会之Maven和Gradle的区别
- javascript|穿戴设备将迎变革,OPPO又增新专利,能提升模式切换效率!
- Java|Gamamobi CEO黄继德:我们的元宇宙游戏不担心体验落差
- Java|美国传来新消息,ASML态度也变了,这一切竟如此之快
- Java|李佳琦消失扯下阿里“遮羞布”,原来淘宝根本就没有护城河
- Java|我做公众号终于不亏钱了
