tiemei

只有转化成自己的语言,才算理解了

Java内存模型与多线程

操作系统层面,对每个进程分配内存(代码段,数据段,栈,堆等),且提供brk nmap等这样的系统调用对进程所辖内存进行操作。

C语言层面,提供malloc、free这样的函数经过编译器(例如gcc)映射到系统调用。

Java语言层面,最终肯定也是映射到系统调用,不过Java的内存管理实现跨平台的统一规范:

接着,引入多处理器下的多线程的问题:

如果变量 int a = 0;有两个线程对分别对其执行10次 a = a + 1; 和a = a -1;最终a的值将难以预测,因为这对变量的赋值在JMM里并不是一步到位的,JMM结构如下:

各线程的工作内存需要操作共享变量,需要经过一下步骤:

  1. 从主存中复制变量到当前工作内存(read adn load)
  2. 执行代码改变共享变量值(user and assign)
  3. 待续

感谢:

操作系统内存分配原理 http://blog.csdn.net/jsh13417/article/details/8432227 

浅谈java内存模型 http://www.blogjava.net/qileilove/archive/2011/09/22/359262.html

深入理解Java内存模型  http://www.infoq.com/cn/articles/java-memory-model-4

posted on 2013-02-17 13:31  tiemei  阅读(181)  评论(0)    收藏  举报

导航