java 内存模型与线程 前传
2016-07-05 11:21
369 查看
尽管各类框架 , 中间件已经尽可能的处理多的线程并发细节,让程序员在编码时更注重业务逻辑, 但是了解一些并发内幕比不可少.
在实际硬件中的并发问题跟jvm虚拟机中的问题有一些相似之处. 任何任务都不是光靠计算才能完成, 最起码得与内存有交互,比如取运算数据,存储结果等等,由于计算机的存储设备与处理器的计算能力有几个数量级的差别, 所以计算机不得不加入一个读写尽可能接近处理器运算速度的告诉缓存(cache) 来作为内存与处理器之间的缓冲: 将运算需要的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步到内存中,这样处理器就无需等待缓慢的内存读写了.
JMM(java 内存模型)
java内存模型规定了所有的变量都存储在主内存中,每条线程有自己的工作内存,工作内存中保存了该线程使用到的变量的主内存副本拷贝, 线程对变量的所有操作,读取,赋值等都必须在公共内存中进行,不能直接读写主内存中的变量.
一般主内存中包括了 实例字段, 静态字段, 构成数组的对象的元素.
工作内存中有局部变量与方法参数, 为各个线程私有, 所以不存在竞争问题,不会被共享.
不同线程之间无法直接访问其他线程工作内存中的变量,线程间的传递均需要通过主内存来完成.
在实际硬件中的并发问题跟jvm虚拟机中的问题有一些相似之处. 任何任务都不是光靠计算才能完成, 最起码得与内存有交互,比如取运算数据,存储结果等等,由于计算机的存储设备与处理器的计算能力有几个数量级的差别, 所以计算机不得不加入一个读写尽可能接近处理器运算速度的告诉缓存(cache) 来作为内存与处理器之间的缓冲: 将运算需要的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步到内存中,这样处理器就无需等待缓慢的内存读写了.
JMM(java 内存模型)
java内存模型规定了所有的变量都存储在主内存中,每条线程有自己的工作内存,工作内存中保存了该线程使用到的变量的主内存副本拷贝, 线程对变量的所有操作,读取,赋值等都必须在公共内存中进行,不能直接读写主内存中的变量.
一般主内存中包括了 实例字段, 静态字段, 构成数组的对象的元素.
工作内存中有局部变量与方法参数, 为各个线程私有, 所以不存在竞争问题,不会被共享.
不同线程之间无法直接访问其他线程工作内存中的变量,线程间的传递均需要通过主内存来完成.
相关文章推荐
- Java互斥锁的一个简单Demo
- 华为机试---质数因子
- java.net.SocketException: Too many open files 问题的解决办法
- spring 之浅析1
- NoSuchMethodError: java.lang.System.lineSeparator()
- no sigar-amd64-winnt.dll in java.library.path 错误
- MyEclipse8.6中提交SVN报错
- java 读写者问题 实现
- jdk 线程池 threadPoolExecutor 源码剖析
- Java关键字
- Java数据类型转换
- java Servlet
- spring的事务隔离机制
- java的第一章节
- java I/O流(1)编码
- Java单链表的实现代码
- 20160705_Java基础知识(访问权限)
- Ubuntu下安装JDK7(附Clojure下载)
- JAVA中抽象类和接口的区别
- Java类、属性、方法分类及修饰符整合