JMM导读_jmm是什么意思

JMM导读_jmm是什么意思JMM优秀文章导读。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一. volatile

理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。

前文提到过,x86处理器仅会对写-读操作做重排序。X86不会对读-读,读-写和写-写操作做重排序,因此在x86处理器中会省略掉这三种操作类型对应的内存屏障。在x86中,JMM仅需在volatile写后面插入一个StoreLoad屏障即可正确实现volatile写-读的内存语义。这意味着在x86处理器中,volatile写的开销比volatile读的开销会大很多(因为执行StoreLoad屏障开销会比较大)。

二. 锁

当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中;当线程获取锁时,JMM会把该线程对应的本地内存置为无效。从而使得被监视器保护的临界区代码必须要从主内存中去读取共享变量。

对比锁释放-获取的内存语义与volatile写-读的内存语义,可以看出:锁释放与volatile写有相同的内存语义;锁获取与volatile读有相同的内存语义。

下面对锁释放和锁获取的内存语义做个总结:

  •  线程A释放一个锁,实质上是线程A向接下来将要获取这个锁的某个线程发出了(线程A对共享变量所做修改的)消息。
  • 线程B获取一个锁,实质上是线程B接收了之前某个线程发出的(在释放这个锁之前对共享变量所做修改的)消息。
  • 线程A释放锁,随后线程B获取这个锁,这个过程实质上是线程A通过主内存向线程B发送消息。

二. JMM

  1. 深入理解java内存模型(一)——基础
  2. 深入理解java内存模型(二)——重排序
  3. 深入理解java内存模型(三)——顺序一致性
  4. 深入理解java内存模型(四)——volatile
  5. 深入理解java内存模型(五)——锁
  6. 深入理解java内存模型(六)——final
  7. 深入理解java内存模型(七)——总结

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197094.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 理论基础 —— 排序 —— 直接选择排序

    理论基础 —— 排序 —— 直接选择排序概述 直接选择排序又称简单选择排序 是一种不稳定的排序方法 其是选择排序中最简单一种 其基本思想是 第 i 趟排序再待排序序列 a i a n 中选取关键码最小的记录 并和第 i 个记录交换作为有序序列的第 i 个记录 其实现利用双重循环 外层 i 控制当前序列最小值存放的数组元素位置 内层循环 j 控制从 i 1 到 n 序列中选择最小的元素所在位置 k 排序过程 1 排序

    2025年11月2日
    3
  • mysql longtext 查询_mysql中longtext存在大量数据时,会导致查询很慢?

    mysql longtext 查询_mysql中longtext存在大量数据时,会导致查询很慢?一个表,1.5w条数据,字段:id,name,content,last_update_timeid,自定义主键name,varchar类型content是longtext类型,last_update_time为datetime类型,不为空content当中是文本和代码等,平均长度在20k+。case1:selectid,namefromtorderbylast_update_tim…

    2022年5月14日
    46
  • VMM与OVM_vvm是什么意思

    VMM与OVM_vvm是什么意思验证方法学主要有vmm和ovm两种。摘录一些言论,供参考:    个人感觉Synopsys的口碑好一些,Cadence的FAE比较能忽悠,但有时候不是很能解决问题。偶绝对不是Synopsys的托了;synopsys的VMM更成熟;前端设计还是喜欢synopsys多一点;VMM的用户可能多一些,特别在国内(个人感受),不过Synopsys的东西,质量上不如C

    2025年12月7日
    2
  • pycharm减少缩进快捷键_怎么取消整段缩进

    pycharm减少缩进快捷键_怎么取消整段缩进Pycharm整体缩进:选择要缩进的段落,按tab整体取消缩进tab+shift

    2022年8月25日
    15
  • java switch用法_Java switch语句

    java switch用法_Java switch语句Javaswitch语句用于从多个条件执行一个语句。它就像if-else-if语句一样。语法:switch(expression){casevalue1://codetobeexecuted;break;//optionalcasevalue2://codetobeexecuted;break;//optional……default://codetobee…

    2022年7月8日
    31
  • 线程可以通过ipc通信吗_教育理论基础知识

    线程可以通过ipc通信吗_教育理论基础知识IPC——线程基础理论

    2022年4月20日
    167

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号