是如何執(zhí)行方法調(diào)用的下_第1頁(yè)
是如何執(zhí)行方法調(diào)用的下_第2頁(yè)
是如何執(zhí)行方法調(diào)用的下_第3頁(yè)
是如何執(zhí)行方法調(diào)用的下_第4頁(yè)
是如何執(zhí)行方法調(diào)用的下_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

classclass{publicStringtoString(){...}class外國(guó)人extends{*進(jìn)外國(guó)人通道*/}extends{/*通道*/void(){/**/}乘客某乘客某乘客自O(shè)bject類的toString方法。虛方法調(diào)invokeinterfaceJava在絕大多數(shù)情況下,Java虛擬機(jī)需要根據(jù)調(diào)用者的動(dòng)態(tài)類型,來(lái)確定虛方法調(diào)用的目標(biāo)方法。在Javainvokestatic指令,和用于調(diào)用構(gòu)造器、invokespecialfinal的方法,那么Java虛擬機(jī)也可以靜態(tài)綁定該虛方法調(diào)用的目標(biāo)方法。方法Javainvokevirtual的虛方法表(virtualmethodtable,vtable)為例介紹方法表的用法。invokeinterface所使用的接口方法表(interfacemethodtable,itable)稍微復(fù)雜些,但是原理其實(shí)是類似的。我們知道,方法調(diào)用指令中的符號(hào)會(huì)在執(zhí)行之前解析成實(shí)際。對(duì)于靜態(tài)綁定的方法調(diào)用而言,實(shí)際將指向具體的目標(biāo)方法。對(duì)于動(dòng)態(tài)綁定的方法調(diào)用而言,實(shí)際則是方法表的在我們的例子中,“乘客”類的方法表包括兩個(gè)方法:“toString”以及“”,分別對(duì)應(yīng)1之所以方法表調(diào)換了ttrn”方法和“”方法的位置,是因?yàn)閛trg”方法的索引值需要與Obt類中同名方法的索引值一致。為了保持簡(jiǎn)潔,這里我就不考慮Obt類中的其他方法?!巴鈬?guó)人”的方法表同樣有兩行。其中,0toString”方法。1號(hào)方法則指向自己重寫(xiě)的“”方法?!暗姆奖戆齻€(gè)法除了承而的乘客類“rng方,己重寫(xiě)的”方之,包括有“買買”法。乘乘客某乘客某乘客這里,Java虛擬機(jī)的工作可以想象為導(dǎo)航員。每當(dāng)來(lái)了一個(gè)乘客需要,導(dǎo)航員會(huì)先問(wèn)是中法表),小冊(cè)子的第1頁(yè)便寫(xiě)著應(yīng)該到哪條通道辦理(用1作為索引來(lái)查找方法表所實(shí)際上,使用了方法表的動(dòng)態(tài)綁定與靜態(tài)綁定相比,僅僅多出幾個(gè)內(nèi)存解操作:棧上的方法。相對(duì)于創(chuàng)建并初始化Java棧幀來(lái)說(shuō),這幾個(gè)內(nèi)存解操作的開(kāi)銷簡(jiǎn)直可以忽略不計(jì)。(inliningcache)和方法內(nèi)聯(lián)(methodinlining)邊通道。如果不是的話,只好拿出外國(guó)人的小冊(cè)子,翻到第1頁(yè),再告知查詢結(jié)果:右邊。的,也就是只有一種動(dòng)態(tài)類型。為了節(jié)省內(nèi)存空間,Java虛擬機(jī)只采用單態(tài)內(nèi)聯(lián)緩存。另外一種選擇則是劣化為超多態(tài)狀態(tài)。這也是Java虛擬機(jī)的具體實(shí)現(xiàn)方式。處于這種狀態(tài)下的具體到我們的例子,如果來(lái)了一隊(duì)乘客,其中外國(guó)人和依次隔開(kāi),那么在重復(fù)使用的單態(tài)getter/setter,CPU總結(jié)與實(shí)Java虛方法調(diào)用包括invokevirtual指令和invokeinterface指令。如果這兩種指令所的目標(biāo)方法被標(biāo)記為final,那么Java虛擬機(jī)會(huì)采用靜態(tài)綁定。否則,Java虛擬機(jī)將采用動(dòng)態(tài)綁定,在Java值,與父類方法表中被重寫(xiě)的方法的索引值一致。在解析虛方法調(diào)用時(shí),Java虛擬機(jī)會(huì)下JavaJava則,Java內(nèi)聯(lián)的影響,請(qǐng)使用如下令。////Runwith: 'class乘{(lán)publicstaticvoidmain(String[]args)乘客乘客a=乘客b=new外國(guó)人longcurrent=System.currentTimeMillis();for(inti=1;i<=2_000_000_000;i++)if(i%100_000_000==0)longtemp=System.out.println(temp-current);current=temp;乘客c(i<1_000

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論