0
点赞
收藏
分享

微信扫一扫

三、Java内存模型(上)

吴陆奇 2022-05-05 阅读 146

为什么要学习

我们为什么要学习jvm?給大家一个代码列子,说明一下

public class CatTest {
    public  CatTest() {
        Object t=new Object();
    }
}

接下来执行javac CatTest.java 后面调用javap -v CatTest.class

这里可以看出Object t=new Object(),这代码执行了好多个jvm指令码,但是学过操作系统的肯定知道,cpu执行指令有可能是乱序的,是不是我们的代码就乱了?单线程结果一般都是正确的,但是多线程情况下有可能出问题,但是Java也给我们提供了一些工具,去保证在多线程数据的安全性。

硬件层基础

存储器的层次结构

如何保证数据一致性 

  • 总线锁: 使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占共享内存。
  • MESI Cache缓存一致性协议
    • 每个cache line标记四种状态(invaild、exclusive、modified、shard)
    • 大家可以参考一下别的文章,会理解的更透彻点。

缓存行

  • Cache 中的数据是按块读取的,当CPU访问某个数据时,会假设该数据附近的数据以后会被访问到,因此,第一次访问这一块区域时,会将该数据连同附近区域的数据(共64字节)一起读取进缓存中,那么这一块数据称为一个Cache Line 缓存行。
  • 缓存系统是以缓存行为单位存储的。目前主流的CPU Cache的Cache Line大小都是64字节。
     

执行顺序 

如何保证特定情况下有序执行:

cpu内存屏障 

 

举报

相关推荐

0 条评论