文章目录
整体方向上的区别
- 整体方向上的区别
- JVM内存结构
- Java对象模型
jvm内存结构: 和Java虚拟机的运行时区域有关.
Java内存模型: 和Java的并发编程有关
Java对象模型: 和Java对象在虚拟机中的表现形式有关.
JVM内存结构Java代码是运行在jvm虚拟机上的, 并且分为了不同的区域. 下图为jvm的运行时数据区:绿色的为线程共享的, 橙色的为线程对有的 .
-
堆: 创建的对象和数组存放在此处, 也是jvm垃圾回收的主要区域.
-
方法区: 存储已经加载的static 静态变量, 类的信息. 常量信息. 以及永久引用(static修饰的对象).
-
本地方法栈: 用于执行native方法
-
虚拟机栈(Java栈): 保存了基本的数据类型, 以及对于对象的引用.
-
程序计数器: 占用空间最小, 保存当前线程所执行到的字节码的行号数 , 即CPU上下文切换的时候要保存的数据. 以及 下一条需要执行的指令, 分支,循环 , 异常处理等.
Java的一门面向对象的语言, 因此程序在jvm执行的时候, 是有一定的数据结构的. 而这个结构的模型, 就叫做Java对象模型. 下图为Java对象模型的示意图 . Java对象模型表达的概念是对象自身的存储模型.
Jvm会给这个类创建一个instanceKlass , 保存在方法区中, 用来在JVM层表示该Java类. 接着在实例化对象的时候, 在堆中新建实例对象. 每一个对象包含了对象头(Mark word 与元数据指针 )与实例数据. 如果这个对象被某个方法调用了, 就会在栈中把对象的引用保存下来.