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

发布时间:2024年01月14日

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 最重要的三点内容

文章来源:https://blog.csdn.net/qq_42815188/article/details/135409051
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。