Java并发编程Demo01——Java内存模型(JMM)

一.概述

JMM定义了java并发编程中各个线程之间如何通信如何同步的规范。java并发采用的是共享内存模型,通过读写内存当中的公共部分来实现线程之间的通信和同步。
JMM的抽象模型可表示为:
Java并发编程Demo01——Java内存模型(JMM)
如上图所示,每一个线程都对应着一个特有的本地内存,这里面存放着来自主内存的共享变量(实例域、静态域和数组元素等)的副本。如果要在不同线程之间进行通信和同步,就必须通过主内存才能实现。
注意:本地内存只是JMM的一个抽象概念,实际上并不存在。

二.实现

JVM的内存区域划分:
Java并发编程Demo01——Java内存模型(JMM)

:堆中数据可被多线程共享,java程序中所创建的所有Class对象、static域和数组元素都存放在堆当中。
方法区:也是做为共享内存区域,其中存放类的方法代码、方法名、变量名、访问权限等信息
虚拟机栈:每一个线程在运行时都会拥有一个只属于自己的线程栈,其中的每一个方法在执行的时候都会创建一个用于存储局部变量表、操作数栈、动态链表、方法出口信息等的栈帧,方法的执行与结束就对应着栈帧的入栈和出栈。线程栈的生命周期与线程同步。
本地方法栈:与虚拟栈栈类似,也是用来执行方法的。只不过本地方法栈是用来执行Native Method的。Native Method简单理解:简单说来,本地方法即是用非java代码实现的方法。定义一个native method方法时不必提供实现体,因为本地方法是在外部用其他语言实现的。
程序计数器:是用来存放执行指令地址的地方。CPU通过在程序计数器中存放指令的地址保证进程的成功执行。