天天看点

java----java内存模型(JMM)java内存模型是什么java运行时数据区

java'内存模型

  • java内存模型是什么
    • 1. 缓存一致性协议---可见性
    • 2. 处理器优化---原子性
    • 3. 指令重排序---有序性
  • java运行时数据区
    • 1. 堆
    • 2. 方法区
    • 3. java虚拟机栈
    • 4. 本地方法栈
    • 5. 程序计数器

java内存模型是什么

java内存模型是共享内存的并发模型,线程之间通过读—写共享变量来完成隐式的通信;

java内存模型控制线程之间的通信,决定某个线程对共享内存的写入何时对另一个线程可见。

java内存模型就是为了解决以下玉玉多线程通过共享内存通信时,缓存不一致、处理器对代码执行乱序、编译器对指令重排序三种问题应运而生。

在多线程情况下,通过共享内存通信产生的三种问题提出了java内存模型

1. 缓存一致性协议—可见性

计算机在高速的CPU和相对低速的主存之间速度不匹配的情况下,中间需要高速缓存catch进行缓冲。将运算所需的数据从主存复制到高速缓存中,CPU直接在高速缓存中存取数据,将运算结果放到高速缓存,再从高速缓存中同步到主存中。再多个CPU处理任务涉及同一块主存区域时,就可能导致缓存不一致的问题,因此在高速缓存和主存之间必须遵守一个缓存一致性协议。

2. 处理器优化—原子性

进一步提高CPU的执行效率,为了处理器内部运算单元能够被最大化充分利用,会将输入的代码乱序执行处理,这就是处理器优化。

3. 指令重排序—有序性

现代的处理器采用指令级并行技术将多条指令重地执行,如果不存在数据依赖性,处理器会改变语句对应机器指令的执行顺序,这就是指令重排序。

java运行时数据区

java运行时数据区将java内存划分为5个区域,堆、方法区、本地方法栈、java虚拟机栈、程序计数器

java----java内存模型(JMM)java内存模型是什么java运行时数据区

1. 堆

堆是线程共享的内存区域,存放对象实例。是垃圾回收的主要区域。

堆可分为新生代和老年代,新生代又可细分为Eden区、Survivor from区和Survivor to区。

2. 方法区

方法区是线程共享的内存区域,存放已被虚拟机加载的类信息,静态变量、常量、即时编译器编译后的代码等数据。

3. java虚拟机栈

java虚拟机栈是线程私有的内存区域,描述java线程执行的内存模型,每个方法在执行的时候,都会创建一个栈帧,栈帧里面存放局部变量表、操作数栈、方法出口、动态链接等信息。每个方法对应一个栈帧。

局部变量表存放了基本类型、对象引用和方法返回类型(指向了一条字节码指令地址)。

4. 本地方法栈

本地方法栈是线程私有的内存区域,里面的方法都有关键字native,是直接和系统交互的方法, 使用非java语言实现。

5. 程序计数器

程序计数器是线程私有的内存区域,用于保存该线程执行到哪里,下一条指令的位置。

继续阅读