虚拟机栈面试题

本篇文章总结虚拟机栈的面试题!!

问题一:栈溢出的情况?

《Java 虚拟机规范》中描述了两种异常:

注意:栈容量只能由 -Xss 参数来设定

问题二:调整栈容量,就能保证不出现溢出吗?

不能!!通过调整栈容量,可能会使原本出现溢出的代码不出现溢出了;但无法保证所有情况都不出现溢出!!

假设原本栈容量可以支持 5000 次调用,但代码有 6000 次调用,就会出现溢出;此时调整栈容量保证其可以支持 7000 次调用,那么原来的代码就不会出现溢出了

但如果另外一个代码有 8000 次调用,依旧会出现溢出!!

问题三:分配栈容量越大越好吗?

不一定!!分配越大的栈容量,会压缩其他部分的大小,比如:堆,方法区等

问题四:垃圾回收是否会涉及到虚拟机栈?

这里总结一下「运行时数据区域」的各个部分是否会发生 Error 或者 GC!!

 ErrorGC
方法区
虚拟机栈
本地方法栈
程序计数器 (PC)

问题五:方法中定义的局部变量是否线程安全?

需要分情况讨论,有的情况是线程安全,有的情况是线程不安全,会发生对象逃逸