Java 内存结构之虚拟机栈
2.虚拟机栈
- 定义:虚拟机栈(Java Virtual Machine Stacks)就是每个线程运行需要的内存空间,栈由一个一个的栈帧(Frame)组成,栈帧就是每个方法运行时需要的内存(方法的参数、局部变量、返回地址)
- 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法
问题分析
- 垃圾回收是否涉及栈内存?不涉及
- 栈内存分配越大越好吗?不是,设置大一点只不过是增加了递归调用的效率
- 方法内的局部变量是否线程安全?
- 如果方法内局部变量没有逃离方法的作用范围,它就是线程安全的
- 如果局部变量引用了对象,并逃离方法的作用范围,需要考虑线程安全问题
栈内存溢出
- 栈帧过多会导致栈内存溢出(方法递归调用就会导致栈内存溢出)
- 栈帧过大也会导致栈内存溢出(这种情况不太容易出现)
- 两个类之间互相引用,在JSON格式转换的时候会出现递归调用,导致栈内存溢出