Java虚拟机栈

什么是虚拟机栈#

每个线程运行时所需要的内存,称为虚拟机栈。
每个栈由多个栈帧(frame)组成,对应着每次方法调用时所占用的内存每个线程只能有一个活动栈,对应着当前正在执行的那个方法。

垃圾回收是否涉及栈内存#

垃圾回收主要指就是堆内存,当栈帧弹栈以后,内存就会释放。

栈内存分配越大越好吗#

未必,默认的栈内存通常为1024k,栈帧过大会导致线程数变少。

方法内的局部变量是否线程安全#

如果方法内局部变量没有逃离方法的作用范围,它是线程安全的如果是局部变量引用了对象,并逃离方法的作用范围,需要考虑线程安全。

什么情况下会导致栈内存溢出#

栈帧过多导致栈内存溢出,典型问题:递归调用。
栈帧过大导致栈内存溢出。

堆栈的区别是什么#

栈内存一般会用来存储局部变量和方法调用,但堆内存是用来存储Java对象和数组的的。
堆会GC垃圾回收,而栈不会。
栈内存是线程私有的,而堆内存是线程共有的。
两者异常错误不同,但如果栈内存或者堆内存不足都会抛出异常。
栈空间不足: java.lang.StackOverFlowError。
堆空间不足: javalang.OutOfMemoryError。

posted @   worshipone  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示