册亨县 正阳县 巴林左旗 临泽县 台北县 金华市 海城市 阜宁县 高阳县 车致 元阳县 大埔县 射阳县 万山特区 吉林省 沙雅县
国内 >

12辆车集体逆行_JVM学习记录-Java内存模型

标签:亲疏 新澳门棋牌游戏

前言

J快乐大本营_2018年最新新闻网ava虚拟机规范中定义了一种Java的内存模型,即Java Memoory Model(简称JMM),用来实现让Java程序在各个平台下都能达到一致的内存访问效果。JVM是整个虚拟机,JMM模型属于JV再见阿郎_2018年最新新闻网M的一部分。

定义Java内存模型并不是一件容易的事情,即要足够严谨,又要足够宽松。初始的Java内存模型并不完善,经过不断的改善,到JDK1.5后才逐渐的成熟和完善起来。

主内存与工作内存

Java内存模型的主要目标是定义程序中各个变量的访问规则,此处的变量与Java编程中所说的变量有所区别,它包括了实例字段、静态字段和构成数组对象的元素,但不包含局部变量与方法参数,因为后者是线程私有的。

Java内存模型规定了所以的变量都存储在主内存(虚拟机内存的一部分)中,每条线程还有自己的工作内存线程的工作内存中保存了被该线程使用到的共享变量的主内存副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,不能直接读写主内存中的变量。线程间的变量值传递等操作均需要通过主内存来完成。

线程、工作内存、主内存三者的交互关系如图:

一个变量如何从主内存拷贝到工作内存、如何从工作内存同步会主内存的实现细节,在Java内存模型中定义了以下8种操作来完成,虚拟机实现时必须保证下面的每一个操作都是原子的,不可再分的。

变量从主内存复制到工作内存:顺序执行read和load操作。

变量从工作内存同步回主内存:顺序的执行store和write操作。

Java内存模型还规定了在执行上述8种基本操作时必须满足如下严格的规则:

  • 不允许read和load、store和write操作之一单独出现。
  • 不允许一个线程丢弃它的最近的assign操作(在线程中改变了变量必须同步回主内存)。
  • 不允许一个线程无原因地把数据从线程的工作内存同步回主内存。
  • 一个新的变量只能从主内存中“诞生”,不允许在工作内存中直接使用一个未被初始化的变量。
  • 一个变量在同一时刻只允许一条线程对其进行lock操作,但可以在一条线程中重复多次lock一个变量,但unlock时也必须强殖装甲_2018年最新新闻网重复相应的次数。
  • 如果一个变量执裁决_2018年最新新闻网行lock操作,那将会清空工作内存中此变量的值,在执行引擎是用这个变量前,需要观众席执行load或assign卡地亚_2018年最新新闻网操作初始化变量的值。
  • 如果一个变量事先没有被lock操作锁定,那就不允许对它执行unlock操作。
  • 对一个变量执行unlock操作之肌肤之钥_2018年最新新闻网前,必须先把此变量同步回主内存中(执行store、write操作)。

当前文章:http://www-zaieyi-com.manconsultant.cn/yj126/b8129_157428.html

发布时间:2019-09-23 00:52:01

银河娱乐首页yh163am.com  中国男乒夺冠:揭秘男乒夺冠幕后  世界杯官网  银河娱乐在线官方网址  澳门银河yh7788.bet  澳门银河yh7788.bet  银河优越会会员申请  澳门银河娱乐送彩金网站  银河娱乐手机官网  银河娱乐是正规网站吗  

相关文章
推荐图文
最热文章