Java深入|JVM内存结构与Java内存模型

JVM内存结构与Java内存模型

文章目录

1)JVM内存结构
2)Java内存模型


JVM内存结构

  • JVM内存结构,由Java虚拟机规范定义,描述的是Java程序执行过程中,由JVM管理的不同数据区域。
  • Java代码是运行在虚拟机上的,虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,各个区域有其特定的功能。
    • 1).PC寄存器
      • 各个线程独享
    • 2).Java虚拟机栈
      • 各个线程独享
    • 3).本地方法栈
      • 各个线程独享
    • 4).Java堆
      • 所有线程共享
    • 5).方法区
      • 所有线程共享
  • 栈内存堆内存的区别
    • 1.栈内存用来存储局部变量和方法调用,堆内存用来存储Java中的对象。
    • 2.栈内存属于单个线程,堆内存中的对象对所有线程可见,可以被所有线程访问。
    • 3.栈内存没有可用的空间存储方法调用和局部变量,会抛出StackOverFlowError,堆则会抛出OutofMemoryError
    • 4.栈的内存要远远小于堆内存。

Java内存模型

  • JMM并不像JVM内存结构一样是真实存在的,只是一个抽象的概念它与多线程相关,描述了一组规则或规范,定义了一个线程对共享变量的写入时对另一个线程是可见的。
  • Java多线程之间通过共享内存进行通信。
  • JMM定义了一些语法集,这些语法集映射到Java语言中就是volatile、synchronized等关键字。
    • 1.主内存
      • 所有的变量(实例字段,静态字段,构成数组对象的元素,但是不包括局部变量和方法参数)都必须在主内存中产生
    • 2.工作内存
      • 每个线程都有自己的工作内存,保存了线程需要的变量在内存中的副本。
      • 线程对主内存变量的修改必须在线程的工作内存中进行,不能直接读取主内存中的变量。
      • 不同线程之间也不能相互访问对方的工作内存,如需传递变量的值,必须通过主内存来作为中介进行传递。
  • 工作内存与主内存进行交互
    • lock
      • 作用于主内存的变量,一个变量在同一时间只能一个线程锁定,表示这条线程独占这个变量。
    • unlock
    • read
      • 把一个主内存变量的值传输到线程的工作内存
    • load
      • 把read操作从主内存中读取的变量的值放到工作内存的变量副本中。
    • use
      • 把工作内存中的一个变量的值传递给执行引擎
    • assign
      • 把执行引擎返回的结果赋值给工作内存中的变量
    • store
      • 把工作内存中的变量的值传递给主内存
    • write
      • 把store操作得到的值放入主内存的变量中
      • 从主内存传输到工作内存,执行read->load
      • 从工作内存回写到主内存,执行store->write
  • java虚拟机中主内存和工作内存交互,就是一个变量如何从主内存传输到工作内存中,如何把修改后的变量从工作内存同步回主内存。
  • 并发内存模型
    • Java内存模型围绕着并发过程中如何处理原子性、可见性和顺序性这三个特征来设计的。
    • 1.原子性
      • 在Synchronized块之间的代码都具有原子性
    • 2.可见性
      • volatile,synchronized,final可以实现可见性
    • 3.有序性
      • volatile禁止指令重排序
      • synchronized 一个变量在同一时刻只能被一个线程对其lock操作

参考

JVM内存结构 VS Java内存模型 VS Java对象模型
JVM中堆和栈的区别
深入理解Java内存模型

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值