java方法调用时如何在栈中执行的

java方法本质

  当我们调用某个java方法时,实际上是线程调用了它私有的虚拟机栈,将方法作为一个栈帧将其压入虚拟机栈中。栈帧中存放着局部变量表(即该java方法中的局部基本类型变量、引用对象指向堆的地址)、操作数栈(用于计算的临时数据存储区,相当于栈帧里面又有一个栈,这个栈的入栈出栈主要用作计算)、动态链接、方法出口。它本质是一个内存区块,里面存储着方法的数据集。一个方法从开始执行到执行完毕其实就对应该栈帧的入栈到出栈的过程。

java方法的互相调用原理

  当方法相互调用时,虚拟机栈又是怎么处理的呢?例如,有一个方法A,方法A调用了方法B,方法B调用了方法C。此时,当方法A开始执行调用时,它产生了一个栈帧S1,放入线程的虚拟机栈中,执行中发现方法A调用了方法B,于是,方法B产生了一个栈帧S2,S2再入栈,在执行S2时又发现方法B调用了方法C,于是,方法C产生了一个栈帧S3,S3再入栈。当方法C的内容执行完毕后,即S3执行完他的内容后,就从虚拟机栈中弹出,接着S2就接着方法C的位置继续往下执行他的内容,S2执行完毕再弹出,然后S1接着方法B的位置继续往下执行他的内容,当S1的内容也执行完毕后,S1也弹出虚拟机栈。这整个过程就是方法A被调用的全过程啦!

如果觉得该文章对你有帮助,点个赞吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值