Java虚拟机栈
什么是虚拟机栈#
每个线程运行时所需要的内存,称为虚拟机栈。
每个栈由多个栈帧(frame)组成,对应着每次方法调用时所占用的内存每个线程只能有一个活动栈,对应着当前正在执行的那个方法。
垃圾回收是否涉及栈内存#
垃圾回收主要指就是堆内存,当栈帧弹栈以后,内存就会释放。
栈内存分配越大越好吗#
未必,默认的栈内存通常为1024k,栈帧过大会导致线程数变少。
方法内的局部变量是否线程安全#
如果方法内局部变量没有逃离方法的作用范围,它是线程安全的如果是局部变量引用了对象,并逃离方法的作用范围,需要考虑线程安全。
什么情况下会导致栈内存溢出#
栈帧过多导致栈内存溢出,典型问题:递归调用。
栈帧过大导致栈内存溢出。
堆栈的区别是什么#
栈内存一般会用来存储局部变量和方法调用,但堆内存是用来存储Java对象和数组的的。
堆会GC垃圾回收,而栈不会。
栈内存是线程私有的,而堆内存是线程共有的。
两者异常错误不同,但如果栈内存或者堆内存不足都会抛出异常。
栈空间不足: java.lang.StackOverFlowError。
堆空间不足: javalang.OutOfMemoryError。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix