JVM内存结构 vs. Java对象模型 vs. Java内存模型

0.三者的区别

JVM内存结构:和Java虚拟机的运行时区域有关。

Java对象模型:和Java对象在虚拟机中的表现形式有关。

Java内存模型:和Java的并发编程有关。

1.JVM内存结构

在这里插入图片描述

2.Java对象模型

Java对象模型就是Java对象自身的存储模型。

JVM会给这个类创建一个instanceKlass,保存在方法区,用来在JVM层表示该Java类。

当我们在Java代码中,使用new创建一个对象的时候,JVM会创建一个instanceOopDesc对象,这个对象中包含了对象头以及实例数据。

在这里插入图片描述

3.Java内存模型(JMM)

3.1 为什么需要JMM

回顾一下Java程序的编译与运行,从Java代码到CPU指令的过程如下图所示。

在这里插入图片描述

  • 最开始,我们编写的Java代码是.java文件
  • 在编译(javac命令)后,从刚才的.java文件会变出一个新的Java字节码文件.class
  • JVM会执行刚才生成的字节码文件.class,并把字节码文件转化为机器指令
  • 机器指令可以直接在CPU上运行,也就是最终的程序执行

由上述过程可知,JVM实现会带来不同的“翻译”,不同的CPU平台的机器指令又千差万别,无法保证并发安全的效果一致。因此,需要一个标准(转化过程的规范、原则),让多线程运行的结果可预期。

3.2 JMM是规范

Java内存模型(Java Memory Model, JMM)是一组规范,需要各个JVM的实现来遵守JMM规范,以便于开发者可以利用这些规范,更方便地开发多线程程序。

如果没有这样的一个JMM内存模型来规范,那么很可能经过了不同JVM的不同规则的重排序之后,导致不同的虚拟机上运行的结果不一样,那是很大的问题。

3.3 JMM是工具类和关键字的原理

volatile、synchronized、Lock等的原理都是JMM。

如果没有JMM,那就需要我们自己指定什么时候用内存栅栏等,那是相当麻烦的,幸好有了JMM,让我们只需要用同步工具和关键字就可以开发并发程序。

3.4 最重要的三点内容

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值