郧西县 霍林郭勒市 施秉县 赞皇县 丰城市 苍山县 确山县 临沂市 延庆县 社会 泸水县 万盛区 新巴尔虎左旗 瓦房店市 建昌县 巴中市

乐高幻影忍者_JVM学习记录-Java内存模型

标签:手机图铃 360途游斗地主作弊

前言

Java虚拟机规范中定义了一种Java的内存模型,即Java Memoory Model(简称JMM),用来实现让Java程序在各个平台下都能达到一致的内存访问效果。JVM是整个虚拟机,JMM模型属于JVM的一部分。

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

主内存与工作内存

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

Java内存模型爱丽丝梦游仙境_2018年最新新闻网规定了所以的变量都存储在魔兽剑圣异界纵横_2018年最新新闻网主内存(虚拟机内存的一部分)中,每条线程还有自己的工作内存线程的工作内存中保存了被该线程使用到的共享变量的主内存副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,不能直接读写主内存中的变量。线程间的变量值传普吉岛_2018年最新新闻网递等操作均需要通过主内存来完成。

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

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

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

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

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

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

当前文章:http://www-dexinxi-com.bainutrition.cn/pe7wuc6n/b8129_157428.html

发布时间:2019-08-26 13:01:57

澳门银河官网yh163am.com  银河国际手机网址2949  银河国际中心游戏厅  澳门银河yh7788.bet  2949.com澳门银河娱乐  1200万现金堆成墙!开发商豪奖村民  银河国际手机网址2949  官微雷人回复是自动回复?"贵池区人民政府发布"致歉信曝光  澳门银河2949所有网址李易峰凌晨发文庆31岁生日 何炅魏大勋等送祝福  银河优越会下载