本文是学习悟空老师的视频教程线程八大核心基础后所做的心得笔记,想更加具体了解其中知识的小伙伴可以前往慕课网悟空老师的课程中进行学习
- JVM内存结构:和Java虚拟机的运行时区域有关
- Java内存模型:和Java的并发编程有关
- Java对象模型:和Java对象在虚拟机中的表现有关
JVM内存结构
image-20200115141504377.png- 堆(占用的空间最大):里面主要存放通过new或者其他指令创建的实例对象(包括数组)
- 虚拟机栈(VM stack又称Java栈):各个基本数据类型(基本数据存在栈中不存在堆中,不存在引用之类的情况),对对象的引用(在编译的时候就已经确定了大小)
- 方法区:已经加载的static静态变量,类信息,常量信息,永久引用(static修饰的类对象)
- 本地方法栈:native方法
- 程序计数器:保存当前线程所执行的字节码行号数,下一条需要执行的指令,分支,循环,异常处理
Java对象模型
image-20200115143238321.png- JVM会给类创建instanceKlass,保存在方法区中,用来在JVM层表示该Java类
- 在Java代码中,new对象,JVM会创建一个instanceOopDesc对象(包含对象头,实例数据)(堆中新建实例对象,栈中(对对象赋值)保存实例对象的引用)
Java内存模型(JMM)
介绍:是一组规范,是工具类(Lock等)和关键字(synchronized,volatile)的原理,包含最重要的三点(重排序,可见性,原子性)
为什么需要?例如C语言没有,它的处理依赖处理器,不同处理器结果不同 -> 无法保证并发安全 -> 所以我们需要一组规范(JMM),使开发者能够利用规范,更方便地开发多线程程序
如果没有:经过不同的JVM(oracle,openjdk等)的不同规则重排序之后,导致结果不同
使用同步工具和关键字需要自己指定什么时候使用内存栅栏等,十分麻烦
JAVA内存模型详解见我的另一篇文章JAVA内存模型(JMM)探索
网友评论