jvm之栈

栈是运行时单位,堆是存储单位,栈是用来解决程序的运行问题的,或者说是程序是如何处理数据的。

栈是线程私有的,他用来存放实例对象的方法。以及方法运行时的局部变量(八大基本类型和对象的引用。)

栈的特点:栈是快速的存储方式,仅次于程序计数器

jvm 对栈 的操作只有方法的进栈和出栈。

栈不存在垃圾回收(因为方法在执行之后就被压出栈了)

栈存在内存溢出(当递归不当时,方法循环调用时就造成了栈溢出 stackoverflow error)

开发过程中遇到的异常 或者栈在运行过程中可能发生的异常?

栈的内存大小可以是定值,也可以是动态增加的,

当栈的内存是定值,递归不当时,方法循环调用时就造成了栈溢出 stackoverflow

当栈的内存大小是动态增加的,内存被占完了无法栈无法再申请内存进行扩展,或者无法为新的线程分配足够的内存去创建其私有的栈就会报 outofmemory error (oom)内存溢出

可以用-Xss来设置栈的内存大小。

栈的存储结构和运行原理

栈里面存储的是栈帧,每一个方法都对应着一个栈帧。

运行原理:一个线程一个时间点只有一个栈帧在工作,正在工作的栈帧就是当前栈帧,当前栈帧里的方法就是当前方法,定义当前方法的类就是当前类,一个线程的栈帧不能与另外线程的栈帧进行相互调用作用

执行引擎的字节码指令只对当前栈帧起作用

如果在当前方法里调用了另一个方法,则执行到这一步时,这个被执行的方法就会被放到栈帧被压到栈顶成为当前方法,当这个方法执行完之后,这个方法会对应的栈帧就会被压出栈,同时会把结果返回给调用方法,调用方法再次成为当前方法。

java有两种返回函数的方式,一种是正常return,一种程序在处理时出现未处理的异常,这两种哪一种都会使栈帧被弹出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值