目录
JVM定义
Java Virtual Machine组成结构
各部分详解
0、类加载器
1、栈是运行的单位,堆是存储的单位
2、栈中存放各个栈帧
3、方法区——多线程共享区域
JVM定义
- 运行Java程序的平台
- 内存结构、 垃圾回收、 类加载、 性能调优、 JVM 自身优化技术、 执行引擎、 类文件结构、 监控工具等。
下面我们详细聊聊JVM的内存结构(JMM)
Java Virtual Machine组成结构
- 虚拟机栈:JVM 运行过程中存储当前线程运行方法所需的数据, 指令、 返回地址
- 本地方法栈:Java程序自动调用底层C/C++函数库
- 程序计数器:当前线程执行的字节码的行号指示器
- 堆:存放我们申请的对象,也就是实例化对象,数组等
- 方法区:存放虚拟机加载的类相关信息,包括类信息,静态域(静态变量和静态方法),常量池(const val修饰的变量)、字符串常量池、编译后代码等
各部分详解
0、类加载器
JVM要执行文件,需要把编译后的.class文件装入类加载器
1、栈是运行的单位,堆是存储的单位
下图表示,程序计数器指向的代码mian函数执行后
main()内部生成的实例化对象A和对象B保存在堆中
栈中存入在指向A,B堆内存的指针
2、栈中存放各个栈帧
栈帧:在一个线程里,每当调用一个方法就会创建一个栈帧,并入栈,当方法执行完以后进行出栈
栈帧包括:局部变量表、操作数栈、动态链接、返回地址
- 局部变量表:存放基本数据类型的变量或者对象的堆内存地址
- 操作数栈:存储方法运行时执行引擎需要计算的数据
- 动态链接:符号引用
- 返回地址:方法执行完,将程序计数器中地址返回,方便后续栈帧执行
3、方法区——多线程共享区域
- 常量
- 静态属性,方法
- 类信息
- 字符串