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被调用的全过程啦!
如果觉得该文章对你有帮助,点个赞吧!