JVM 运行时数据区

PC寄存器

与操作系统中的PC寄存器功能基本一致。毕竟 JVM 建立的初衷就是模拟一台机器。 指向存储在方法区的字节码methods_info部分的内存地址。

虚拟机栈

虚拟机栈用于存储栈帧

本地方法栈

用于支持 native 方法的执行

栈帧

存储在虚拟机栈中,主要包括局部变量表操作数栈(又称当前栈帧的操作数栈)以及运行时常量池的引用

仍然有必要区别两个概念: 操作数 & 指令 指令指使操作数进行相关操作的基本命令 操作数通常指整数、浮点数以及类型引用等

方法区

方法区是多个线程共享的一块区域,主要用于存储I/O操作中读入的类/接口的字节码(ClassFile 文件) 包括有 constant_pool, field_info, method_info, attribute_info 等

Java堆

用于存储各种类的实例对象

  __                    __                  
 / _| __ _ _ __   __ _ / _| ___ _ __   __ _ 
| |_ / _` | '_ \ / _` | |_ / _ \ '_ \ / _` |
|  _| (_| | | | | (_| |  _|  __/ | | | (_| |
|_|  \__,_|_| |_|\__, |_|  \___|_| |_|\__, |
                 |___/                |___/