如何查看java调用栈_「原创」JVM系列03|Java栈—方法是如何调用的?

本文详细介绍了Java栈帧的结构,包括局部变量表、操作数栈和帧数据,阐述了它们在方法调用过程中的作用。通过示例解释了栈溢出、局部变量对垃圾回收的影响以及异常处理机制,帮助理解Java方法调用的内部原理。
摘要由CSDN通过智能技术生成

本文转载自【微信公众号:java进阶架构师,ID:java_jiagoushi】经微信公众号授权转载,如需转载与原文作者联系

b03b479a5c2299d29188d60189a05bd4.png

本文是何适 JVM 修仙系列第 3 篇,文末有本系列文章汇总。

上一篇介绍 Java 虚拟机结构时讲到 Java 栈同 Java 方法的调用密切相关,那么这篇就来探究下 Java 栈到底和方法的调用有什么关系。Java 栈分如下几部分介绍:

栈帧局部变量表操作数栈帧数据1. 栈帧

线程被创建的时候 Java 栈被创建,Java 栈中保存着栈帧。线程中方法被调用时,对应着一个栈帧被压入 Java 栈;方法返回时,对应的栈帧从 Java 栈中弹出;方法中抛出异常时,对应的栈帧也会将栈帧弹出。

举例说明:方法1中调用方法2,方法2中调用方法3,方法3中调用方法4,当执行到方法4时,栈内存结构如下图:

962f949a507db19dea4892520026c69d.png

举例模拟栈溢出:

因为每次方法调用都会生成一个栈帧,当函数调用数量很大,生成的栈帧内存超过 Java 栈总内存时,就会栈溢出 Stack

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值