JVM篇-虚拟机栈(Stack)

本文详细介绍了Java虚拟机栈的基本内容,包括虚拟机栈的作用、栈的优点、常见的StackOverFlowError和OutofMemoryError异常。栈帧是虚拟机栈的主要构成,每个栈帧包含局部变量表、操作数栈、动态链接、方法返回地址等部分。方法调用原理涉及静态链接和动态链接,以及虚方法与非虚方法的区分。文章还讨论了栈溢出的原因、栈内存大小的调整以及与垃圾回收的关系。
摘要由CSDN通过智能技术生成

虚拟机栈的概述

总所周知Java是跨平台的的设计,Java的指令都是根据栈来设计,不同平台的CPU架构不同,所以不能设计为基于寄存器的

优势: 跨平台 指令集小,编译器容易实现
不足:性能下降(对比寄存器) 实现同样的功能需要更多的指令

栈(Stack)是运行时的单位 
堆(Heap)是存储的单位(理论上是最大的内存空间)

虚拟机栈的基本内容

什么是虚拟机栈?

每个线程在创建时都会创建一个虚拟机栈
内部保存一个个栈帧(Stack Frame) 对应着一次次的Java方法调动
线程私有(与线程生命周期一致)

虚拟机栈有什么作用

1.主管Java程序的运行 程序中的方法局部变量 部分结果
2. 参与方法的调用返回

在这里插入图片描述

栈的优点

  1. 栈是一种快速有效的分配存储方式 访问速度仅次于程序计数器
  2. JVM直接对栈的操作只有两个
    每个方法的执行会伴随进栈(入栈 压栈)
    执行结束后会出栈(弹栈)
  3. 对于栈来说没有垃圾回收的问题(不存在GC有可能存在OOM)

常见异常

  • Java虚拟机规范循序Java栈的大小是动态的或者固定不变的

异常1 StackOverFlowError
若采用固定不变的容量 那么当请求栈容量超过了Java虚拟机栈允许的最大容量
那么Java虚拟机会抛出一个栈内存溢出(StackOverflowError)
异常2 OutofMemoryError
如果Java虚拟机栈可以动态扩展,并且在尝试扩展的时候无法申请到足够内存
或者没有足够内存去创建对于虚拟机栈
抛出OutofMemoryError异常

设置栈内存的大小


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值