- 组成:
- 3大部分:
- 类装载子系统
- 字节码执行引擎
- 运行时数据区(内存模型)
- 3大部分:
- java代码执行流程:
- javac 编译成字节码文件
- 类装载子系统(类加载器) 加载到运行时数据区
- 字节码执行引擎执行代码
- 运行时数据区(内存模型)组成:
- 栈(虚拟机栈):每个线程工作都会分配一个栈内存
- 本地方法栈
- 程序计数器
- 堆
- 方法区(元空间)
- 其中:栈 , 本地方法栈,和程序计数器是线程私有的; 堆和方法区是线程共享的:
- 如下图
- 栈的组成:
- 栈帧:每一个方法执行都会在栈给他分配一个内存,这就是栈帧内存
- 局部变量表
- 操作数栈(存放要操作的数据的地方)
- 动态链接(可以理解为存放方法数据地址的地方:代码执行的时候可以从这找到地址)
- 方法出口
- 一个基本数据类型赋值过程:将基本数据 压入操作数栈, 然后再赋值给局部变量
- 栈帧:每一个方法执行都会在栈给他分配一个内存,这就是栈帧内存
- 方法区:jdk8之前叫永久代
- 存放常量
- 静态变量
- 类信息
- 堆:
- 年轻代(1/3)
- eden :新创建的对象都在这里
- survival 1区
- survival 2区
- 老年代(2/3)
- 年轻代(1/3)