概念:

  1. (Java Virtual Machine),也称为JAVA虚拟机,它是java程序可以实现跨平台的基础,因为java的源文件生成的字节码文件都可以先通过jvm来进行中转,再生成当前的操作系统可以识别的二进制文件进行执行,所以但任何一个操作系统配置了jvm环境,就是编写java代码进行运行了,毕竟其可以将字节码文件转化成当前操作系统可以识别的二进制文件.
  2. JVM内存模式是适合我们初学者了解和掌握的,关于JVM的其他相关知识点很多,以后我会再写相关的博客.

jvm内存模型主要组成:

  1. 让我们从线程的角度来看:

共有部分

私有部分

java堆

java虚拟机栈

方法区(元空间)

本地方法栈

常量池

PC寄存器(程序计数器)

具体分析每一个模块的作用

  1. java堆:--------------->>>>>>Java 堆指的是从 JVM 划分出来的一块区域,这块区域专门用于 Java 实例对象的内存分配,几乎所有实例对象都在会这里进行内存的分配,其实Jvm就是从电脑堆内存中割出一大部分来让自己设计管理,然后在这块自己的地盘再划分堆,栈等其他区域.
  2. 方法区:--------------->>>>>>方法区指的是存储 Java 类字节码数据的一块区域,它存储了每一个类的结构信息,例如运行时常量池、字段和方法数据、构造方法等。可以看到常量池其实是存放在方法区中的,但《Java 虚拟机规范》将常量池和方法区放在同一个等级上,这点我们知晓即可。jdk1.7前为永久代1.8后为元空间
  3. 常量池:静态常量池和运行时常量池。其实常量池是存放在方法区中的.
  4. java虚拟机栈:--------------->>>>>> 这个栈与线程同时创建,用来存储栈帧,即存储局部变量与一些过程结果的地方。栈帧存储的数据包括:局部变量表、操作数栈。
  5. 本地方法栈:--------------->>>>>>存储一些底层c++语言编写的方法.
  6. PC寄存器(程序计数器):--------------->>>>>> PC 寄存器,顾名思义 Program Counter 寄存器,指的是保存线程当前正在执行的方法。
    如果这个方法不是 native 方法,那么 PC 寄存器就保存 Java 虚拟机正在执行的字节码指令地址。如果是 native 方法,那么 PC 寄存器保存的值是 undefined。任意时刻,一条 Java 虚拟机线程只会执行一个方法的代码,而这个被线程执行的方法称为该线程的当前方法,其地址被存在 PC 寄存器中。