1.概念
1.每个线程运行所需要的内存,称为虚拟机栈
2.每个虚拟机栈都有很多栈帧,栈帧是每个方法执行所需要的内存
3.每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法
2.3个问题需要思考?
1.垃圾回收是否涉及栈内存?
拿到这个问题一时不知道如何去分析,没有搞清楚他们之间的关联性
栈是方法调用产生的内存,方法一旦调用完成,就弹栈,这个时候就不需要垃圾回收。
2.栈内存分配是否越大越好?
这个也同样的不知道如何去分析,首先看到栈内存是线程运行时所占用的内存,如果栈内存分配越多,每个线程运行时所占用的内存就大,而物理内存是固定的,线程就会减少。
3.方法内的局部变量是否线程安全?
如果局部变量没有逃离方法之外,它是线程安全的,它逃离了,就是非线程安全,比如传参的时候传递了一个对象,这里引用,在方法外仍然可以对该对象的修改.或者返回一个对象的引用。
3.栈内存溢出
首先需要考虑为什么栈内存会溢出?
要么就是栈帧比较多,比如递归调用
要么就是栈帧过大,超过了栈的大小。