比较jvm内存结构&java内存模型&java对象模型

  学习java过程中有三个概念,分别是jvm内存结构、java内存模型、java对象模型。我们系统的学习完之后,如果不加以总结对比,很容易混淆,相信不光是自己有时候会搞混,好多人应该也同样的困惑,所以这里对这三个知识点做一个总结和对比。希望能帮到大家。

参考文档:
https://docs.oracle.com/javas...(Java虚拟机规范(Java SE 8))
《java并发编程的艺术》
《HotSpot实战》

一、jvm内存结构(jvm运行时内存结构)

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机的进程启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。

根据《Java虚拟机规范(Java SE 8)》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域,JVM运行时内存区域结构如下:
比较jvm内存结构&java内存模型&java对象模型

二、java内存模型

java内存模型中线程间共享变量有:实例域、静态域、数组元素,存储在堆内存中,线程间共享;
线程间私有:局部变量(local variables)、方法定义参数(format method parameters)、异常处理参数(exception handler parameters)。

java内存模型主要是保证<<共享内存部分>>的原子性、可见性、有序性,内存模型定义了共享内存中多线程程序读写宝座行为的规范。

内存模型解决并发问题主要采用两种方式: 限制处理器优化和使用内存屏障。

Java 内存模型的抽象结构:
比较jvm内存结构&java内存模型&java对象模型

三、java对象模型

Java是一种面向对象的语言,而Java对象在JVM中的存储也是有一定的结构的。而这个关于Java对象自身的存储模型称之为Java对象模型。

HotSpot虚拟机中,设计了一个OOP-Klass Model。OOP(Ordinary Object Pointer)指的是普通对象指针,而Klass用来描述对象实例的具体类型。
如下图所示, 就是一个简单的Java对象的OOP-Klass模型,即Java对象模型。
比较jvm内存结构&java内存模型&java对象模型

四、总结

通过对比,我们清楚的了解到了这三个概念的区别:

  • jvm 运行时内存结构 java虚拟机运行时数据区域有关
  • java 内存模型 java并发编程有关,共享内存的可见性、原子性、有序性。
  • java 对象模型 java对象的存储结构,不同对象存储在不同数据区,方法区、堆、栈。

相关推荐