衡阳市网站建设公司如何管理网站开发周期以保持进度?
摘要:网站开发周期和进度管理,衡阳市网站建设公司,公司做的网站搜索不到,wap端是电脑还是手机文章目录 1. Java内存模型2. 内存交互3. 三大特性3.1 可见性3.1.1 可见性问题3.1.2 原因3.1.3 解决方法 3.2 原子性3.
网站开发周期和进度管理,衡阳市网站建设公司,公司做的网站搜索不到,wap端是电脑还是手机文章目录 1. Java内存模型2. 内存交互3. 三大特性3.1 可见性3.1.1 可见性问题3.1.2 原因3.1.3 解决方法 3.2 原子性3.3 有序性 4. 指令重排5. JMM 与 happens-before5.1 happens-before关系定义5.2 happens-before 关系 在继续学习JUC之前#xff0c;我们现在这里介绍一下Java… 文章目录 1. Java内存模型2. 内存交互3. 三大特性3.1 可见性3.1.1 可见性问题3.1.2 原因3.1.3 解决方法 3.2 原子性3.3 有序性 4. 指令重排5. JMM 与 happens-before5.1 happens-before关系定义5.2 happens-before 关系 在继续学习JUC之前我们现在这里介绍一下Java内存模型也就是JMM进而引出关键字volatile的使用条件。
1. Java内存模型
Java 内存模型是 Java Memory ModelJMM本身是一种抽象的概念实际上并不存在描述的是一组规则或规范通过这组规范定义了程序中各个变量包括实例字段静态字段和构成数组对象的元素的访问方式
JMM 作用
屏蔽各种硬件和操作系统的内存访问差异实现让 Java 程序在各种平台下都能达到一致的内存访问效果规定了线程和内存之间的一些关系
根据 JMM 的设计系统存在一个主内存Main MemoryJava 中所有变量都存储在主存中对于所有线程都是共享的每条线程都有自己的工作内存Working Memory工作内存中保存的是主存中某些变量的拷贝线程对所有变量的操作都是先对变量进行拷贝然后在工作内存中进行不能直接操作主内存中的变量线程之间无法相互直接访问线程间的通信传递必须通过主内存来完成 主内存和工作内存
主内存计算机的内存也就是经常提到的 8G 内存16G 内存存储所有共享变量的值工作内存存储该线程使用到的共享变量在主内存的的值的副本拷贝
JVM 和 JMM 之间的关系JMM 中的主内存、工作内存与 JVM 中的 Java 堆、栈、方法区等并不是同一个层次的内存划分这两者基本上是没有关系的如果两者一定要勉强对应起来
主内存主要对应于 Java 堆中的对象实例数据部分而工作内存则对应于虚拟机栈中的部分区域从更低层次上说主内存直接对应于物理硬件的内存工作内存对应寄存器和高速缓存
2. 内存交互
Java 内存模型定义了 8 个操作来完成主内存和工作内存的交互操作每个操作都是原子的
非原子协定没有被 volatile 修饰的 long、double 外默认按照两次 32 位的操作 lock作用于主内存将一个变量标识为被一个线程独占状态对应 monitorenterunclock作用于主内存将一个变量从独占状态释放出来释放后的变量才可以被其他线程锁定对应 monitorexitread作用于主内存把一个变量的值从主内存传输到工作内存中load作用于工作内存在 read 之后执行把 read 得到的值放入工作内存的变量副本中use作用于工作内存把工作内存中一个变量的值传递给执行引擎每当遇到一个使用到变量的操作时都要使用该指令assign作用于工作内存把从执行引擎接收到的一个值赋给工作内存的变量store作用于工作内存把工作内存的一个变量的值传送到主内存中write作用于主内存在 store 之后执行把 store 得到的值放入主内存的变量中
3. 三大特性
3.1 可见性
可见性是指当多个线程访问同一个变量时一个线程修改了这个变量的值其他线程能够立即看得到修改的值
3.1.1 可见性问题
存在不可见问题的根本原因是由于缓存的存在线程持有的是共享变量的副本无法感知其他线程对于共享变量的更改导致读取的值不是最新的。但是 final 修饰的变量是不可变的就算有缓存也不会存在不可见的问题。
