Java并发编程Demo01——Java内存模型(JMM)
一.概述
JMM定义了java并发编程中各个线程之间如何通信
、如何同步
的规范。java并发采用的是共享内存模型
,通过读写内存当中的公共部分来实现线程之间的通信和同步。
JMM的抽象模型可表示为:
如上图所示,每一个线程都对应着一个特有的本地内存
,这里面存放着来自主内存的共享变量(实例域、静态域和数组元素等)的副本。如果要在不同线程之间进行通信和同步,就必须通过主内存才能实现。
注意:本地内存只是JMM的一个抽象概念,实际上并不存在。
二.实现
JVM的内存区域划分:
堆
:堆中数据可被多线程共享,java程序中所创建的所有Class对象、static域和数组元素都存放在堆当中。方法区
:也是做为共享内存区域,其中存放类的方法代码、方法名、变量名、访问权限等信息。虚拟机栈
:每一个线程在运行时都会拥有一个只属于自己的线程栈,其中的每一个方法在执行的时候都会创建一个用于存储局部变量表、操作数栈、动态链表、方法出口信息等的栈帧,方法的执行与结束就对应着栈帧的入栈和出栈。线程栈的生命周期与线程同步。本地方法栈
:与虚拟栈栈类似,也是用来执行方法的。只不过本地方法栈是用来执行Native Method的。Native Method简单理解:简单说来,本地方法即是用非java代码实现的方法。定义一个native method方法时不必提供实现体,因为本地方法是在外部用其他语言实现的。程序计数器
:是用来存放执行指令地址的地方。CPU通过在程序计数器中存放指令的地址保证进程的成功执行。