語言虛擬機中熱點中間代碼的識別方法以及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及編譯技術(shù),具體涉及一種熱點中間代碼的識別方法以及裝置。
【背景技術(shù)】
[0002]在代碼的執(zhí)行過程中,為了屏蔽平臺的差異性,首先要把源代碼轉(zhuǎn)換為中間代碼,然后運行在各自的語言虛擬機,語言虛擬機為運行中間代碼的虛擬機,例如執(zhí)行JAVA的中間代碼(字節(jié)碼)的JAVA虛擬機(JVM,Java Virtual Machine ) —般包括解釋器(Interpreter)、即時(JIT,Just In Time)編譯器。在中間代碼的執(zhí)行過程中,解釋器用于在程序啟動時,對中間代碼進行逐個翻譯并執(zhí)行,執(zhí)行效率比較低,即時編譯器用于將中間代碼編譯為用于被調(diào)用執(zhí)行的本地代碼,本地代碼的執(zhí)行效率比較高。一些即時編譯器又可以細分為輕量級編譯器、重量級編譯器。重量級編譯器相比輕量級編譯器優(yōu)化手段更豐富,編譯效果更好,但編譯時開銷更大。
[0003]然而,在不能有效地識別熱點的中間代碼(執(zhí)行頻率高的中間代碼)時,使得即時編譯器編譯出執(zhí)行頻率低的本地代碼,這些執(zhí)行頻率低的本地代碼占據(jù)了大量存儲空間,會影響接下來的執(zhí)行頻率高的中間代碼的編譯過程,造成了存儲空間浪費且嚴重影響語言虛擬機整體運行性能。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的在于提供一種熱點中間代碼的識別方法以及裝置,用于識別熱點的中間代碼。
[0005]上述目標和其它目標將通過獨立權(quán)利要求中的特征來達成。進一步的實現(xiàn)方式在從屬權(quán)利要求、說明書和附圖中體現(xiàn)。
[0006]第一方面,提供一種熱點中間代碼的識別裝置,所述裝置包括:
[0007]獲取電路,用于在待識別函數(shù)被語言虛擬機執(zhí)行時,獲取指令計數(shù)器中的指令地址;
[0008]第一判斷電路,用于根據(jù)所述獲取電路獲取的所述指令計數(shù)器中的指令地址,判斷所述指令計數(shù)器中的指令地址對應(yīng)的本地指令是否為所述待識別函數(shù)的本地指令;
[0009]更新電路,用于在所述第一判斷電路確定所述指令計數(shù)器中的指令地址對應(yīng)的本地指令為所述待識別函數(shù)的本地指令時,將所述待識別函數(shù)的當(dāng)前的熱度值增加預(yù)設(shè)值,以更新所述待識別函數(shù)的熱度值;
[0010]第二判斷電路,用于判斷所述更新電路得到的所述待識別函數(shù)的更新后的熱度值是否大于或等于所述待識別函數(shù)的熱度閾值,在所述待識別函數(shù)的更新后的熱度值大于所述待識別函數(shù)的熱度閾值時,將所述待識別函數(shù)的中間代碼作為熱點中間代碼。
[0011]其中,更新所述待識別函數(shù)的熱度值指的是用新的熱度值來替換當(dāng)前的熱度值,當(dāng)前的熱度值在更新前后會發(fā)生改變,更新之后的當(dāng)前的熱度值,或者說更新后的熱度值就變成了更新前的那個新的熱度值。
[0012]該裝置通過獲取指令計數(shù)器中的指令地址,判斷所述指令計數(shù)器中的指令地址對應(yīng)的本地指令是否為所述待識別函數(shù)的本地指令,使得可以實現(xiàn)在解釋器或是即時編譯執(zhí)行代碼的過程中識別出熱點中間代碼。
[0013]根據(jù)第一方面,在所述裝置第一種可能的實現(xiàn)方式中,所述第一判斷電路用于:
[0014]判斷所述指令計數(shù)器中的指令地址是否在所述待識別函數(shù)的本地指令空間的地址范圍內(nèi),所述待識別函數(shù)的本地指令空間中的本地指令包括所述待識別函數(shù)的本地指令,并且所述待識別函數(shù)的本地指令空間中的本地指令不包括用于實現(xiàn)所述語言虛擬機功能的本地指令。該實現(xiàn)方式可以有效區(qū)分當(dāng)前正在執(zhí)行的指令是用于實現(xiàn)語言虛擬機自身功能的本地指令,還是語言虛擬機執(zhí)行的函數(shù)的本地指令,從而簡單且有效的實現(xiàn)判斷所述指令計數(shù)器中的指令地址對應(yīng)的本地指令是否為所述待識別函數(shù)的本地指令。其中函數(shù)也可以稱為方法,用于實現(xiàn)語言虛擬機自身功能的本地指令也可以稱為主機端代碼中的指令,語言虛擬機執(zhí)行的函數(shù)的本地指令也可以稱為客戶端代碼中的指令。
[0015]根據(jù)第一方面的第一種實現(xiàn)方式,在所述裝置第二種可能的實現(xiàn)方式中,所述語言虛擬機包括解釋器,所述待識別函數(shù)的本地指令空間中的本地指令包括用于中的本地指令包括所述解釋器翻譯的中間指令對應(yīng)的本地指令,所述用于所述解釋器翻譯的中間指令對應(yīng)的本地指令包括所述待識別函數(shù)的本地指令。
[0016]相應(yīng)的,所述待識別函數(shù)被執(zhí)行可以包括:所述待識別函數(shù)的中間代碼被執(zhí)行。
[0017]在語言虛擬機中的解釋器翻譯中間代碼的過程中,所有中間指令對應(yīng)的本地指令被存儲在連續(xù)的存儲空間,也就是可通過所述解釋器翻譯獲得的本地指令的存儲空間,所述存儲空間可以是內(nèi)存空間,所述本地代碼可以是匯編代碼,所述中間代碼也可以是字節(jié)碼,通過判斷當(dāng)前執(zhí)行的本地指令的指令地址是否在可通過所述解釋器翻譯獲得的本地指令的存儲空間的地址范圍內(nèi),可實現(xiàn)解釋器翻譯階段中判斷所述指令計數(shù)器中的指令地址對應(yīng)的本地指令是否為所述待識別函數(shù)的本地指令。
[0018]根據(jù)第一方面的第一種實現(xiàn)方式,在所述裝置第三種可能的實現(xiàn)方式中,所述語言虛擬機包括及時編譯器,所述待識別函數(shù)的本地指令空間用于存儲所述待識別函數(shù)的本地代碼,所述待識別函數(shù)的本地指令為所述待識別函數(shù)的本地代碼中的指令,所述待識別函數(shù)的本地代碼通過所述及時編譯器編譯獲得。
[0019]相應(yīng)的,所述待識別函數(shù)被執(zhí)行可以包括:所述待識別函數(shù)的本地代碼被執(zhí)行。
[0020]即時編譯器編譯獲得的所述待識別函數(shù)的本地代碼,會以所述待識別函數(shù)為一個整體,將所述待識別函數(shù)的本地代碼存儲在用于存儲所述待識別函數(shù)的本地代碼的存儲空間,其中,該存儲空間可以是內(nèi)存,例如,該存儲空間可以是代碼緩沖區(qū)(code cache),其中所述待識別函數(shù)的本地代碼可以是通過及時編譯器中的輕量級編譯器獲得的所述待識別函數(shù)的輕量級本地代碼,也可以是通過及時編譯器中的重量級編譯器獲得的所述待識別函數(shù)的重量級本地代碼。在所述待識別函數(shù)的本地代碼為輕量級本地代碼時,通過判斷當(dāng)前執(zhí)行的本地指令的指令地址是否在用于存儲所述待識別函數(shù)的本地代碼的存儲空間的地址范圍內(nèi),可實現(xiàn)在輕量級本地代碼被執(zhí)行階段中,判斷所述指令計數(shù)器中的指令地址對應(yīng)的本地指令是否為所述待識別函數(shù)的本地指令;在所述待識別函數(shù)的本地代碼為重量級本地代碼時,通過判斷當(dāng)前執(zhí)行的本地指令的指令地址是否在用于存儲所述待識別函數(shù)的本地代碼的存儲空間的地址范圍內(nèi),可實現(xiàn)在重量級本地代碼被執(zhí)行階段中,判斷所述指令計數(shù)器中的指令地址對應(yīng)的本地指令是否為所述待識別函數(shù)的本地指令,從而實現(xiàn)對重量級本地代碼的執(zhí)行頻率的統(tǒng)計。
[0021]根據(jù)第一方面,或以上第一方面的任意一種實現(xiàn)方式,在所述裝置第四種可能的實現(xiàn)方式中,所述更新電路包括熱度值計數(shù)器,所述熱度值計數(shù)器用于:將所述熱度值計數(shù)器中的所述待識別函數(shù)的熱度值加I。該熱度值計數(shù)器為計數(shù)器,可以通過輸入的電平(例如,通過電平變化的上升沿)來觸發(fā)計數(shù),從而替代軟件計數(shù)的實現(xiàn)方式,從而減輕軟件實現(xiàn)的負擔(dān)。并且由于是電路直接實現(xiàn),使得執(zhí)行效率更高。
[0022]根據(jù)第一方面的第四種實現(xiàn)方式,在所述裝置第五種可能的實現(xiàn)方式中,所述第二判斷電路包括減法器和用于存儲所述待識別函數(shù)的熱度閾值的閾值寄存器,所述減法器與所述閾值寄存器相連,所述減法器與所述熱度值計數(shù)器相連,所述減法器用于獲取所述熱度值計數(shù)器中的所述待識別函數(shù)的熱度值減去所述閾值寄存器中的所述待識別函數(shù)的熱度閾值的差值,其中,所述差值大于O指示所述待識別函數(shù)的更新后的熱度值大于或等于所述待識別函數(shù)的熱度閾值。
[0023]通過將減法器、閾值寄存器以及熱度值計數(shù)器相連,通過電路實現(xiàn)判斷所述待識別函數(shù)的更新后的熱度值是否大于或等于所述待識別函數(shù)的熱度閾值的功能,從而進一步降低了代碼的運算量,進一步使得執(zhí)行效率更高。
[0024]根據(jù)第一方面的第四種實現(xiàn)方式,在所述裝置第六種可能的實現(xiàn)方式中,所述第二判斷電路包括第一比較器和用于存儲所述待識別函數(shù)的熱度閾值的閾值寄存器,所述第一比較器與所述閾值寄存器相連,所述第一比較器與所述熱度值計數(shù)器相連,所述第一比較器用于判斷所述熱度值計數(shù)器中的所述待識別函數(shù)的更新后的熱度值是否大于或等于所述閾值寄存器中的所述待識別函數(shù)的熱度閾值。
[0025]通過將第一比較器、閾值寄存器以及熱度值計數(shù)器相連,通過電路實現(xiàn)判斷所述待識別函數(shù)的更新后的熱度值是否大于或等于所述待識別函數(shù)的熱度閾值的功能,從而減輕軟件實現(xiàn)的負擔(dān),進一步使得執(zhí)行效率更高。
[0026]根據(jù)第一方面的第五種或第六種實現(xiàn)方式,在所述裝置第七種實現(xiàn)方式的一種可能的實現(xiàn)方式中,所述裝置還包括處理器和存儲器;所述存儲器用于存儲代碼;所述處理器通過讀取所述存儲器中存儲的所述代碼,以用于:
[0027]在所述待識別函數(shù)被所述語言虛擬機調(diào)用時,加載所述待識別函數(shù)的當(dāng)前的熱度值到所述熱度值計數(shù)器;
[0028]在所述待識別函數(shù)被所述語言虛擬機返回時,保存所述熱度值計數(shù)器中的所述待識別函數(shù)的更新后的熱度值到所述存儲器。
[0029]僅在所述待識別函數(shù)被執(zhí)行期間,令熱度值計數(shù)器中的值為所述待識別函數(shù)的熱度值,使得在所述待識別函數(shù)不被執(zhí)行期間,熱度值計數(shù)器可以被用于其它功能,優(yōu)化了存儲資源的使用。
[0030]根據(jù)上述第一方面第七種可能的實現(xiàn)方式,作為第一方面第七種實現(xiàn)方式的另一種實現(xiàn)方式,所述處理器還可以用于在所述待識別函數(shù)被所述語言虛擬機調(diào)用時,加載所述待識別函數(shù)的熱度閾值到所述閾值寄存器,以適用于不同函數(shù)具有不同的熱度閾值的情況,應(yīng)理解,在待識別函數(shù)被所述語言虛擬機返回之后,閾值寄存器可以用于除存儲待識別函數(shù)的熱度閾值之外的其它用途。
[0031]根據(jù)上述第一方面第七種可能的實現(xiàn)方式,作為第一方面第七種實現(xiàn)方式的另一種實現(xiàn)方式,所述處理器還可以用于在所述待識別函數(shù)被所述語言虛擬機返回時,保存所述閾值寄存器中的所述待識別函數(shù)的熱度閾值到所述存儲器,以適用于待識別函數(shù)在執(zhí)行期間閾值寄存器中的熱度閾值發(fā)生改變的情況。
[0032]根據(jù)第一方面的第七種實現(xiàn)方式,在所述裝置第八種可能的實現(xiàn)方式中,所述處理器還用于:在所述待識別函數(shù)被所述語言虛擬機調(diào)用時,保存所述熱度值計數(shù)器中的主調(diào)函數(shù)的更新后的熱度值到所述存儲器,所述待識別函數(shù)為所述主調(diào)函數(shù)的子函數(shù);
[0033]在所述待識別函數(shù)被所述語言虛擬機返回時,加載所述主調(diào)函數(shù)的當(dāng)前的熱度值到所述熱度值計數(shù)器。使得主調(diào)函數(shù)以及待識別函數(shù)的熱度值可以區(qū)分處理。
[0034]在不同函數(shù)具有不同的熱度閾值時,所述處理器還可以用于在所述待識別函數(shù)被所述語言虛擬機返回時,加載所述主調(diào)函數(shù)的熱度閾值到所述閾值寄存器,在所述主調(diào)函數(shù)執(zhí)行期間,閾值寄存器中的熱度閾值會發(fā)生改變時,所述處理器還可以用于在所述待識別函數(shù)被調(diào)用時,保存所述閾值寄存器中的所述主調(diào)函數(shù)的熱度閾值到所述存儲器。
[0035]根據(jù)第一方面,或以上第一方面的任意一種實現(xiàn)方式,在所述裝置第九種可能的實現(xiàn)方式中,所述獲取電路包括與指令計數(shù)器相連接的指令地址寄存器,所述指令地址寄存器通過接收觸發(fā)電平,觸發(fā)所述獲取指令計數(shù)器中的指令地址的動作,所述指令地址寄存器還用于存儲所述指令計數(shù)器中的指令地址。
[0036]通過電路實現(xiàn)獲取指令計數(shù)器中的指令地址的功能,從而減輕軟件實現(xiàn)的負擔(dān),進一步使得執(zhí)行效率更高。
[0037]根據(jù)第一方面的第九種實現(xiàn)方式,在所述裝置第十種可能的實現(xiàn)方式中,所述待識別函數(shù)的本地指令空間為地址連續(xù)的存儲空間,所述待識別函數(shù)的本地指令空間的地址范圍用所述待識別函數(shù)的本地指令空間的起始地址和所述待識別函數(shù)的本地指令空間的終止地址來表示,其中,所述待識別函數(shù)的本地指令空間的終止地址大于或等于所述待識別函數(shù)的本地指令空間的起始地址;
[0038]所述第一判斷電路包括用于存儲所述待識別函數(shù)的本地指令空間的起始地址的起始地址寄存器,和用于存儲所述待識別函數(shù)的本地指令空間的終止地址的終止地址寄存器,第三比較器和第二比較器,所述第三比較器與所述指令地址寄存器連接,所述第三比較器與所述起始地址寄存器連接,所述第三比較器用于:比較所述指令地址寄存器中的所述指令計數(shù)器中的指令地址是否大于或等于所述起始地址寄存器中的所述待識別函數(shù)的本地指令空間的起始地址;
[0039]所述第二比較器與所述指令地址寄存器連接,所述第二比較器與所述終止地址寄存器連接,所述第二比較