JVM中的Java虚拟机栈
一、虚拟机栈的基本内容
1、概述
Java虚拟机栈是线程私有的。每个线程在创建时都会创建一个虚拟机栈,栈内部保存一个个的栈帧。一个栈帧对应一个方法,随着方法的调用和执行完毕,相应的栈帧执行入栈和出栈。
在java程序中,main方法是一个主线程。
2、特点
- 生命周期和线程保持一致;
- 主管Java程序的运行,栈是运行时的单位,堆是存储的单位,也就是说:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么放、放在哪儿;
- 栈保存方法的局部变量(8种基本数据类型、对象的引用地址),部分结果,并参与方法的调用和返回。这里的对象的引用地址指的就是地址,对象是在堆中存放,每个对象均有一个地址,栈中存放的就是这个地址(指针);
- 栈存在溢出(OOM)问题,不存在垃圾回收(GC)问题
二、栈的内部结构和运行原理
1、内部结构
- 栈中的数据是以栈帧的格式存在,栈帧是一个内存块,维系着方法执行过程中的数据信息;
- 局部变量表
- 操作数栈(或表达式栈)
- 动态链接(或指向运行时常量池的方法引用)
- 方法返回地址