12.1 Java内存模型,主内存和工作内存

1. 什么是Java内存模型?(JMM)

  • Java 内存模型试图屏蔽各种硬件和操作系统的内存访问差异,来实现让 Java 程序在各种平台下都能达到一致的内存访问效果。处理器的读写速度比内存快几个数量级,为了解决这种速度矛盾,在它们之间加入了高速缓存。每个处理器都有自己的高速缓存,而它们又共享同一主内存,可能操作同一位置引起各自缓存不一致,所以还在高速缓存和主内存之间加入了缓存一致性协议。(Volatile可以解决这个问题 )
  • Java 内存模型有三个特性:
    • 原子性是指一个操作不可以被中断
    • 可见性是指一个线程修改了共享变量的值,其他线程能立即知道这个修改。Java 内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值来实现可见性的。
    • 有序性:程序执行时可能进行指令重排,重排后的指令与原指令的顺序可能不一致。可以使用 Volatile 关键字添加内存屏障来禁止指令重排。
      在这里插入图片描述

2. 主内存和工作内存

  • Java 内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。它规定了所有的变量都存储在主内存中,每条线程有自己的工作内存,工作内存保存了被该线程使用到的变量的主内存副本,线程对变量的读取、赋值等操作都必须在工作内存中进行,而不能直接读写主内存中的变量,不同线程也无法直接访问对方工作内存中的变量。线程间变量值的传递需要通过主内存来完成。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值