更新時間:2019-10-03 09:00:00 來源:動力節(jié)點(diǎn) 瀏覽2818次
今天動力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編為大家分享java方法的調(diào)用過程,希望通過此文大家能夠掌握java方法的調(diào)用過程,下面就隨小編一起來了解一下吧。

1、java方法的調(diào)用過程:前提
JVM在編譯Bootstrap.java 的過程中,在將源代碼編譯成二進(jìn)制機(jī)器碼的同時,會判斷其中的每一個方法的三個信息:
?。?)在運(yùn)行時會使用到的局部變量的數(shù)量(作用是:當(dāng)JVM為方法創(chuàng)建棧幀的時候,在棧幀中為該方法創(chuàng)建一個局部變量表,來存儲方法指令在運(yùn)算時的局部變量值)
?。?)其機(jī)器指令執(zhí)行時所需要的最大的操作數(shù)棧的大小(當(dāng)JVM為方法創(chuàng)建棧幀的時候,在棧幀中為方法創(chuàng)建一個操作數(shù)棧,保證方法內(nèi)指令可以完成工作)
(3)方法的參數(shù)的數(shù)量
2、java方法的調(diào)用過程:java方法的執(zhí)行
一般地,對于java方法的執(zhí)行,在JVM在其某一特定線程的虛擬機(jī)棧(JVM Stack) 中會為方法分配一個 局部變量表,一個操作數(shù)棧,用以存儲方法的運(yùn)行過程中的中間值存儲。
由于JVM的指令是基于棧的,即大部分的指令的執(zhí)行,都伴隨著操作數(shù)的出棧和入棧
3、java方法的調(diào)用過程:機(jī)器指令的格式
所謂的機(jī)器指令,就是只有機(jī)器才能夠認(rèn)識的二進(jìn)制代碼(這里指的是jVM)一個機(jī)器指令分為兩部分組成:

注:
a). 如上圖所示JVM虛擬機(jī)的操作碼是由一個字節(jié)組成的,也就是說對于JVM虛擬機(jī)而言,其指令的數(shù)量最多為 2^8,即 256個;
b). 上圖中的操作碼如:b2,bb,59….等等都是表示某一特定的機(jī)器指令,為了方便我們識別,其分別有相應(yīng)的助記符:getstatic,new,dup…. 這樣方便我們理解。
4、java方法的調(diào)用過程:機(jī)器指令的執(zhí)行模式—基于操作數(shù)棧的模式
對于傳統(tǒng)的物理機(jī)而言,大部分的機(jī)器指令的設(shè)計(jì)都是寄存器的,物理機(jī)內(nèi)設(shè)置若干個寄存器,用以存儲機(jī)器指令運(yùn)行過程中的值,寄存器的數(shù)量和支持的指令的個數(shù)決定了這個機(jī)器的處理能力。
但是Java虛擬機(jī)的設(shè)計(jì)的機(jī)制并不是這樣的,Java虛擬機(jī)使用操作數(shù)棧 來存儲機(jī)器指令的運(yùn)算過程中的值。所有的操作數(shù)的操作,都要遵循出棧和入棧的規(guī)則,所以在《Java虛擬機(jī)規(guī)范》中,你會發(fā)現(xiàn)有很多機(jī)器指令都是關(guān)于出棧入棧的操作。

以上就是動力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編為大家分享的“java方法的調(diào)用過程”的內(nèi)容,希望對大家有幫助,更多java最新資訊請繼續(xù)關(guān)注動力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)官網(wǎng),每天會有精彩內(nèi)容分享與你。
相關(guān)免費(fèi)視頻教程推薦
java入門學(xué)習(xí)零基礎(chǔ)教程下載——方法的調(diào)用:http://www.soulsinkind.com/xiazai/2664.html
相關(guān)閱讀

初級 202925

初級 203221

初級 202629

初級 203743