-
线程私有
- 每个线程都有自己的虚拟机栈,与其他线程的栈完全隔离。
- 线程私有的特性确保了多线程环境下的数据安全和并发执行的效率。
-
生命周期与线程相同
- 虚拟机栈的生命周期与线程的生命周期相同。当线程创建时,虚拟机栈也随之创建;当线程结束时,虚拟机栈也随之销毁。所以虚拟机栈不需要进行垃圾回收。
-
栈深度
- 如果方法调用层次过深或者循环调用导致栈帧数量过多,可能会发生栈溢出错误
*Error
。但如果线程太多,线程创建时没有足够的内存去创建虚拟机栈,则会抛出OutOfMemoryError
错误。 - 虚拟机栈的深度是可以配置的,通常通过JVM启动参数 -Xss 来设置每个线程的栈大小。合理配置栈深度可以避免栈溢出和内存不足的问题。
- 如果方法调用层次过深或者循环调用导致栈帧数量过多,可能会发生栈溢出错误
-
栈帧(Stack Frame)
- 每个方法调用都会创建一个新的栈帧,并将其压入当前线程的虚拟机栈顶。
- 当方法执行完毕后,对应的栈帧会被弹出并丢弃。
- 栈帧是方法执行的基本单位,包含局部变量表、操作数栈、动态链接、方法出口信息等。
相关文章
- 11-01《JVM第5课》虚拟机栈-1 栈知识点