java 内存模型 多线程_Java内存模型与多线程

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

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

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

91f660c3448d82f24f4134f8b452ea96.png

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

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

ce1bad8f0a251092d112161da25f45e1.gif

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

从主存中复制变量到当前工作内存(read adn load)

执行代码改变共享变量值(user and assign)

待续

感谢:

操作系统内存分配原理 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值