操作系统层面,对每个进程分配内存(代码段,数据段,栈,堆等),且提供brk nmap等这样的系统调用对进程所辖内存进行操作。
C语言层面,提供malloc、free这样的函数经过编译器(例如gcc)映射到系统调用。
Java语言层面,最终肯定也是映射到系统调用,不过Java的内存管理实现跨平台的统一规范:
接着,引入多处理器下的多线程的问题:
如果变量 int a = 0;有两个线程对分别对其执行10次 a = a + 1; 和a = a -1;最终a的值将难以预测,因为这对变量的赋值在JMM里并不是一步到位的,JMM结构如下:
各线程的工作内存需要操作共享变量,需要经过一下步骤:
从主存中复制变量到当前工作内存(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