Java内存模型&JVM内存结构&java对象模型

JVM内存结构

分解:

  • 线程独占:栈,本地方法栈,程序计数栈

  • 线程共享:堆,方法区

  1. 栈:每当一个线程执行方法时,就会同时在栈里面创建一个栈针用于存储局部变量表,操作数栈,动态链接,方法出口等。每个方法从调用到执行完成的过程都是对应着栈帧从入栈到出栈的过程。

    栈是线程私有的,每个线程在栈中保有自己的数据,别的线程无法访问。

  2. 本地方法栈:本地方法站和栈差不多,区别在于本地方法栈尾Native方法服务(也是私有的)

  3. 程序计数器:当前线程所执行的字节码的行计数器。

  4. 堆:垃圾回收主要发生在这个区域。堆的唯一作用就是存放对象,不过并非所有的对象都在堆中(堆是多线程共享的)

  5. 方法区:主要存放累的版本号,字段,方法,接口,常量池和运行时常量池。

java内存模型(JMM)

解释:JMM是一个抽象的概念。他与多线程有关,描述了一组规则或规范,这个规范定义了一个线程对共享变量的写入时对另一个线程是可见的。

简单总结下,Java的多线程之间是通过共享内存进行通信的,而由于采用共享内存进行通信,在通信过程中会存在一系列如可见性、原子性、顺序性等问题,而JMM就是围绕着多线程通信以及与其相关的一系列特性而建立的模型。JMM定义了一些语法集,这些语法集映射到Java语言中就是volatile、synchronized等关键字。

java对象模型

解释:java是一种面向对象的语言,而java对象在JVM中的存储也是有一定结构的。关于java对象自身的存储模型称为java对象模型

每一个java类,在被JVM加载的时候,JVM会给这个类创建一个instanceklass保存在方法区,用来在JVM层表示该java类。

图:

posted @ 2021-03-31 00:39  扣扣M  阅读(69)  评论(0)    收藏  举报