Java内存模型与多线程

本文探讨了操作系统层面对进程的内存管理机制,包括不同内存区域的分配,并介绍了C语言和Java语言中如何通过特定函数或系统调用来管理内存。特别关注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.youkuaiyun.com/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

转载于:https://www.cnblogs.com/tiemei/archive/2013/02/17/2914193.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值