簡單解析java方法在調(diào)用在內(nèi)存中的執(zhí)行過程
一.前提
1.棧的內(nèi)存原理圖

2.JVM是怎么運(yùn)行方法的???
- 1.在運(yùn)行階段的時候,classLoader類加載器會把class文件中方法對應(yīng)的代碼片段放入內(nèi)存區(qū)中的方法區(qū)中,以便于下次調(diào)用方法時,還能使用該方法。
- 2.JVM在運(yùn)行過程中,會把方法里面的代碼塊按照方法調(diào)用的先后順序壓棧入內(nèi)存中的??臻g,按照方法里語句的執(zhí)行順序(從上到下,從里到外)去進(jìn)行彈棧與運(yùn)行操作
二.調(diào)用(執(zhí)行)過程
1.方法調(diào)用時的規(guī)則
方法首次調(diào)用時,會通過類加載器將方法的對應(yīng)的代碼塊加載到內(nèi)存中方法區(qū)
每次調(diào)用方法時相當(dāng)于一次壓棧過程,當(dāng)方法里面的語句全部執(zhí)行完畢,就會把該方法進(jìn)行彈棧操作(若不彈棧的話,到某個時候必會產(chǎn)生堆棧溢出異常)
2.示例代碼
public class Practice {
public static void main(String[] args) {
System.out.println("main 開始");
show1();
System.out.println("main 結(jié)束");
}
public static void show1(){
System.out.println("show1 開始");
show2();
System.out.println("show1 結(jié)束");
}
public static void show2(){
System.out.println("show2 開始");
System.out.println("show2 結(jié)束");
}
}3.整個程序的方法調(diào)用的過程圖
3.1 JVM會自動調(diào)用main方法,因此main方法首先壓棧,然后依次執(zhí)行main方法里面的語句

3.2 當(dāng)遇到show1()方法時,會把show1()方法壓棧,并去執(zhí)行show1方法里面的語句

3.3 執(zhí)行show1方法里面的語句時,當(dāng)執(zhí)行到show2()時,show1方法暫停,然后對show2方法壓棧,然后執(zhí)行show2方法的內(nèi)容

3.4 當(dāng)執(zhí)行完show2方法里面的內(nèi)容時,會對show2方法進(jìn)行彈棧,返回至show1方法中調(diào)用show2方法的位置,若沒有對返回值有賦值操作,就會去執(zhí)行后面的語句

3.5 執(zhí)行完show1方法后會對show1方法進(jìn)行彈棧,返回show1方法調(diào)用處的位置,然后去執(zhí)行show1方法調(diào)用處以及后面的語句

4.示例代碼運(yùn)行截圖

到此這篇關(guān)于簡單解析java方法在調(diào)用在內(nèi)存中的執(zhí)行過程 的文章就介紹到這了,更多相關(guān)java方法調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java調(diào)用WebService服務(wù)的四種方法總結(jié)
- Java對象方法的調(diào)用執(zhí)行過程詳解
- java反射調(diào)用方法NoSuchMethodException的解決方案
- Java多線程異步調(diào)用性能調(diào)優(yōu)方法詳解
- java異步調(diào)用的4種實(shí)現(xiàn)方法
- Java 帶參數(shù)與帶返回值的方法的定義和調(diào)用
- 詳解Java方法method的定義與調(diào)用及重載
- Java多線程run方法中直接調(diào)用service業(yè)務(wù)類應(yīng)注意的問題及解決
- Java方法調(diào)用解析靜態(tài)分派動態(tài)分派執(zhí)行過程
相關(guān)文章
Java Class 解析器實(shí)現(xiàn)方法示例
這篇文章主要通過對class文件的分析,介紹了Java Class 解析器實(shí)現(xiàn)方法示例,具有一定參考價值,需要的朋友可以了解下。2017-09-09
Java多線程之鎖的強(qiáng)化學(xué)習(xí)
Java多線程的鎖都是基于對象的,Java中的每一個對象都可以作為一個鎖。這篇文章主要來通過一下示例為大家強(qiáng)化一下鎖的相關(guān)知識的掌握,希望對大家有所幫助2023-02-02
SpringBoot + JPA @ManyToMany的操作要點(diǎn)說明
這篇文章主要介紹了SpringBoot + JPA @ManyToMany的操作要點(diǎn)說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
SpringCloud兩種注冊中心的實(shí)現(xiàn)
本文主要介紹了SpringCloud兩種注冊中心的實(shí)現(xiàn),包括服務(wù)注冊、服務(wù)拉取、負(fù)載均衡和實(shí)例權(quán)重配置等,具有一定的參考價值,感興趣的可以了解一下2025-01-01
java數(shù)組實(shí)現(xiàn)隊(duì)列及環(huán)形隊(duì)列實(shí)現(xiàn)過程解析
這篇文章主要介紹了java數(shù)組實(shí)現(xiàn)隊(duì)列及環(huán)形隊(duì)列實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-10-10

