java----java内存模型(JMM)

java内存模型是什么

java内存模型是共享内存的并发模型,线程之间通过读—写共享变量来完成隐式的通信;
java内存模型控制线程之间的通信,决定某个线程对共享内存的写入何时对另一个线程可见。
java内存模型就是为了解决以下玉玉多线程通过共享内存通信时,缓存不一致、处理器对代码执行乱序、编译器对指令重排序三种问题应运而生。
在多线程情况下,通过共享内存通信产生的三种问题提出了java内存模型

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

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

2. 处理器优化—原子性

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

3. 指令重排序—有序性

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

java运行时数据区

java运行时数据区将java内存划分为5个区域,堆、方法区、本地方法栈、java虚拟机栈、程序计数器
在这里插入图片描述

1. 堆

堆是线程共享的内存区域,存放对象实例。是垃圾回收的主要区域。
堆可分为新生代和老年代,新生代又可细分为Eden区、Survivor from区和Survivor to区。

2. 方法区

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

3. java虚拟机栈

java虚拟机栈是线程私有的内存区域,描述java线程执行的内存模型,每个方法在执行的时候,都会创建一个栈帧,栈帧里面存放局部变量表、操作数栈、方法出口、动态链接等信息。每个方法对应一个栈帧。
局部变量表存放了基本类型、对象引用和方法返回类型(指向了一条字节码指令地址)。

4. 本地方法栈

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

5. 程序计数器

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值