学习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运行时内存区域结构如下:
二、java内存模型
java内存模型中线程间共享变量有:实例域、静态域、数组元素,存储在堆内存中,线程间共享;
线程间私有:局部变量(local variables)、方法定义参数(format method parameters)、异常处理参数(exception handler parameters)。
java内存模型主要是保证<<共享内存部分>>的原子性、可见性、有序性,内存模型定义了共享内存中多线程程序读写宝座行为的规范。
内存模型解决并发问题主要采用两种方式: 限制处理器优化和使用内存屏障。
Java 内存模型的抽象结构:
三、java对象模型
Java是一种面向对象的语言,而Java对象在JVM中的存储也是有一定的结构的。而这个关于Java对象自身的存储模型称之为Java对象模型。
HotSpot虚拟机中,设计了一个OOP-Klass Model。OOP(Ordinary Object Pointer)指的是普通对象指针,而Klass用来描述对象实例的具体类型。
如下图所示, 就是一个简单的Java对象的OOP-Klass模型,即Java对象模型。
四、总结
通过对比,我们清楚的了解到了这三个概念的区别:
- jvm 运行时内存结构 java虚拟机运行时数据区域有关
- java 内存模型 java并发编程有关,共享内存的可见性、原子性、有序性。
- java 对象模型 java对象的存储结构,不同对象存储在不同数据区,方法区、堆、栈。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。