美文网首页程序员
java 内存模型(1)

java 内存模型(1)

作者: zidea | 来源:发表于2019-05-23 20:55 被阅读4次

java 内存模型也是语言级别的模型。而是 java 面试不不可缺少的问题。所谓模型就是定义 java 方法内存的规则。

什么是模型呢? 模型就是以对事物的描述,描述内容包括事物的属性和行为。

内存交互操作

其实整个流程和现在快递业务比较相似

  • read : 读取主内存的值,然后传输到工作内存
  • load : 将read 内存值存放到工作内存

read 就是快递运输车,将货物(内存值)从货场(主内存)运送到站点(工作内存)。
load read 只是运送过去,并没有卸货 load 就是将货物加载到站点。

  • use : 将工作区的变量值交给引擎处理
  • assign : 引擎处理对变量进行修改
  • store : 将工作内存的运输返回到主内存
  • write : 将工作内存值写入主内存

快递员获取签收的凭证,返回到货站更新获取货站中货物的状态。

  • lock : 用于主内存,将主内存中将一个变量表示为一个线程独占。
  • unlock : 作用于主内存变量,用于解锁变量

内存指令规则

  • read 和 load 以及 store 和 write 必须成对出现
  • assign 操作,工作内存变量改变后必须返回到主内存
  • 同一个时间只能运行一个线程对变量进行 lock,当前线程 lock 可重入,unlock 次数必须等于 lock 的次数,该变量才能解锁。
  • 对一个变量 lock 后,会从工作内存中清除变量值,重新执行 load 或者 assign 操作初始化工作区的内存。
  • unlock 前,必须将变量同步到主内存(store/write)操作

重排序

  • 编译器重排
    编译器在不改变单线程程序语句的语义的前提下,可以重排语句执行顺序
  • 指令级并行的重排序
    现代处理器采用了指令级并行技术实现多条指令重叠执行,在不存在数据依赖的时候,处理器可以改变指令执行的顺序

相关文章

网友评论

    本文标题:java 内存模型(1)

    本文链接:https://www.haomeiwen.com/subject/uzftwqtx.html