溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

java方法調(diào)用在內(nèi)存中怎么執(zhí)行

發(fā)布時(shí)間:2023-04-19 09:36:11 來(lái)源:億速云 閱讀:117 作者:iii 欄目:編程語(yǔ)言

這篇文章主要介紹“java方法調(diào)用在內(nèi)存中怎么執(zhí)行”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“java方法調(diào)用在內(nèi)存中怎么執(zhí)行”文章能幫助大家解決問(wèn)題。

一.前提

1.棧的內(nèi)存原理圖

java方法調(diào)用在內(nèi)存中怎么執(zhí)行

2.JVM是怎么運(yùn)行方法的???
  • 1.在運(yùn)行階段的時(shí)候,classLoader類(lèi)加載器會(huì)把class文件中方法對(duì)應(yīng)的代碼片段放入內(nèi)存區(qū)中的方法區(qū)中,以便于下次調(diào)用方法時(shí),還能使用該方法。

  • 2.JVM在運(yùn)行過(guò)程中,會(huì)把方法里面的代碼塊按照方法調(diào)用的先后順序壓棧入內(nèi)存中的??臻g,按照方法里語(yǔ)句的執(zhí)行順序(從上到下,從里到外)去進(jìn)行彈棧與運(yùn)行操作

二.調(diào)用(執(zhí)行)過(guò)程

1.方法調(diào)用時(shí)的規(guī)則

方法首次調(diào)用時(shí),會(huì)通過(guò)類(lèi)加載器將方法的對(duì)應(yīng)的代碼塊加載到內(nèi)存中方法區(qū)

每次調(diào)用方法時(shí)相當(dāng)于一次壓棧過(guò)程,當(dāng)方法里面的語(yǔ)句全部執(zhí)行完畢,就會(huì)把該方法進(jìn)行彈棧操作(若不彈棧的話,到某個(gè)時(shí)候必會(huì)產(chǎn)生堆棧溢出異常)

2.示例代碼
public class Practice {
    public static void main(String[] args) {
        System.out.println("main 開(kāi)始");
        show1();
        System.out.println("main 結(jié)束");
    }
    public static void show1(){
        System.out.println("show1 開(kāi)始");
        show2();
        System.out.println("show1 結(jié)束");
    }
    public static void show2(){
        System.out.println("show2 開(kāi)始");
        System.out.println("show2 結(jié)束");
    }
}
3.整個(gè)程序的方法調(diào)用的過(guò)程圖

3.1 JVM會(huì)自動(dòng)調(diào)用main方法,因此main方法首先壓棧,然后依次執(zhí)行main方法里面的語(yǔ)句

java方法調(diào)用在內(nèi)存中怎么執(zhí)行

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

java方法調(diào)用在內(nèi)存中怎么執(zhí)行

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

java方法調(diào)用在內(nèi)存中怎么執(zhí)行

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

java方法調(diào)用在內(nèi)存中怎么執(zhí)行

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

java方法調(diào)用在內(nèi)存中怎么執(zhí)行

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

java方法調(diào)用在內(nèi)存中怎么執(zhí)行

關(guān)于“java方法調(diào)用在內(nèi)存中怎么執(zhí)行”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI