Java多线程 一文区分: JVM内存结构 Java对象模型

整体方向上的区别

jvm内存结构: 和Java虚拟机的运行时区域有关.

Java内存模型: 和Java的并发编程有关

Java对象模型: 和Java对象在虚拟机中的表现形式有关.

JVM内存结构

Java代码是运行在jvm虚拟机上的, 并且分为了不同的区域.
下图为jvm的运行时数据区:绿色的为线程共享的, 橙色的为线程对有的 .

  • 堆: 创建的对象和数组存放在此处, 也是jvm垃圾回收的主要区域.

  • 方法区: 存储已经加载的static 静态变量, 类的信息. 常量信息. 以及永久引用(static修饰的对象).

  • 本地方法栈: 用于执行native方法

  • 虚拟机栈(Java栈): 保存了基本的数据类型, 以及对于对象的引用.

  • 程序计数器: 占用空间最小, 保存当前线程所执行到的字节码的行号数 , 即CPU上下文切换的时候要保存的数据. 以及 下一条需要执行的指令, 分支,循环 , 异常处理等.

    扫描二维码关注公众号,回复: 11601993 查看本文章

Java对象模型

Java的一门面向对象的语言, 因此程序在jvm执行的时候, 是有一定的数据结构的. 而这个结构的模型, 就叫做Java对象模型.
下图为Java对象模型的示意图 .
Java对象模型表达的概念是对象自身的存储模型.

Jvm会给这个类创建一个instanceKlass , 保存在方法区中, 用来在JVM层表示该Java类.
接着在实例化对象的时候, 在堆中新建实例对象. 每一个对象包含了对象头(Mark word 与元数据指针 )与实例数据. 如果这个对象被某个方法调用了, 就会在栈中把对象的引用保存下来.

猜你喜欢

转载自blog.csdn.net/qq_33229669/article/details/108415442