1.举例栈溢出的情况。(StackOverFlowError)
- 栈帧push过多,超过分配栈的大小;StackOverflow
- 当虚拟机申请扩展栈而内存不足;OutOfMemory
2.调整栈的大小,就能保证栈不出现溢出吗?
- 不能保证,调整栈的大小,只能有一个延缓作用,像死循环这种无法保证,一个无限的递归程序也会出现溢出。
3.分配的栈内存越大越好吗?
- 未必,一个线程分配的栈越大,那么其他线程分配的就会相对小,这样系统效率未必能提高。
4.垃圾回收是否会涉及到虚拟机栈?
Rutime Data Area OOM GC
程序计数器 不存在 不存在
虚拟机栈 存在 不存在
本地方法栈 存在 不存在
堆 存在 存在
方法区 存在 存在
5.方法定义的局部变量是否线程安全?
- 内部产生内部消亡是线程安全的;
- 有返回则不安全;