[發(fā)明專利]Java虛擬機的編譯方法和Java虛擬機在審
| 申請?zhí)枺?/td> | 201310722834.9 | 申請日: | 2013-12-24 |
| 公開(公告)號: | CN103729235A | 公開(公告)日: | 2014-04-16 |
| 發(fā)明(設(shè)計)人: | 鮑翀;王彥茹 | 申請(專利權(quán))人: | 華為技術(shù)有限公司 |
| 主分類號: | G06F9/455 | 分類號: | G06F9/455;G06F9/45 |
| 代理公司: | 北京龍雙利達知識產(chǎn)權(quán)代理有限公司 11329 | 代理人: | 王君;肖鸝 |
| 地址: | 518129 廣東*** | 國省代碼: | 廣東;44 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | java 虛擬機 編譯 方法 | ||
技術(shù)領(lǐng)域
本發(fā)明實施例涉及計算機網(wǎng)絡(luò)領(lǐng)域,并且更具體地,涉及一種Java虛擬機的編譯方法和Java虛擬機。
背景技術(shù)
JAVA是目前用戶最多、使用范圍最廣的軟件開發(fā)技術(shù),它擺脫了硬件平臺的束縛,實現(xiàn)了程序“一次編寫,到處運行”的理想。而在這期間,JAVA虛擬機(JVM)可謂功不可沒。
用戶編寫的JAVA程序,只需要在本地編譯成JAVA字節(jié)碼(.class文件)。然后該字節(jié)碼程序放在不同的平臺上執(zhí)行時,由平臺上的Java虛擬機(Java?Virtual?Machine,JVM)將字節(jié)碼翻譯成與平臺相關(guān)的指令,運行在平臺上。正是因為有JVM實現(xiàn)了程序和操作系統(tǒng)的分離,從而實現(xiàn)了JAVA的平臺無關(guān)性。
JVM包括解釋器(Interpreter)、即時(JIT)編譯器和運行時系統(tǒng)(Run?Time)三部分。
JAVA程序最初由解釋器解釋執(zhí)行,當JVM發(fā)現(xiàn)某個方法或代碼塊調(diào)用很頻繁時,就會用JIT將其編譯成和本地平臺相關(guān)的機器碼,并進行各種層次的優(yōu)化,當執(zhí)行該方法時直接調(diào)用本地代碼,以提高程序執(zhí)行效率。
一種分布式JIT編譯的方法,由若干個計算節(jié)點(Computer?Node)連網(wǎng)組成一個并行計算機(Parallel?Computer),每個Computer?Node上有程序觸發(fā)JIT編譯時會發(fā)出JIT編譯請求,然后應(yīng)用管理裝置(Application?Manager)響應(yīng)請求,將該程序分成許多程序片段,通過全局聯(lián)合網(wǎng)絡(luò)(Global?Combining?Network)分發(fā)給其他Computer?Node同時并行編譯。編譯完成后,將生成的本地代碼通過Global?Combining?Network傳給JIT請求的發(fā)出方,由此實現(xiàn)并行加速JIT編譯的目的。其缺點是需要很多電腦組網(wǎng)成一個Parallel?Computer,數(shù)據(jù)通過Global?Combining?Network在Computer?Node間傳輸,耗時較大,且分割、傳輸、收集數(shù)據(jù)較復(fù)雜。
另一種由JIT服務(wù)器專門執(zhí)行JIT編譯的方法,設(shè)立一個專用JIT編譯系統(tǒng)(Dedicated?JIT?Compilation?System)服務(wù)器。每個客戶端將需要JIT編譯的JAVA字節(jié)碼和客戶端的JAVA平臺信息通過網(wǎng)絡(luò)(Network)傳給服務(wù)器,服務(wù)器利用其強大的編譯功能將字節(jié)碼程序編譯成和客戶平臺相關(guān)的本地代碼,再將編好的本地代碼通過Network傳回客戶端。其缺點是需要設(shè)立專門的Dedicated?JIT?Compilation?System服務(wù)器,該服務(wù)器的實現(xiàn)、控制比較復(fù)雜,并且數(shù)據(jù)需要在Network間傳輸,耗時較大。
需要一種優(yōu)化JVM編譯的方法,能夠在提高編譯效率的同時避免較高的硬件成本。
發(fā)明內(nèi)容
本發(fā)明實施例提供一種Java虛擬機的編譯方法和Java虛擬機,能夠以較低的成本提高Java虛擬機的編譯效率,優(yōu)化Java虛擬機的性能。
第一方面,提供了一種Java虛擬機的編譯方法,該方法包括:在Java虛擬機啟動對第一Java方法的編譯后根據(jù)該Java虛擬機的方法計數(shù)器總表獲取多個方法,該多個方法包括該第一Java方法,該方法計數(shù)器總表用于記錄該Java虛擬機的所有Java方法的方法計數(shù)器的當前值;并行啟動多個任務(wù)對該多個方法進行編譯,該多個任務(wù)中的每一個任務(wù)通過即時JIT編譯器編譯該多個方法之一;在該多個任務(wù)的編譯完成后刷新該方法計數(shù)器總表,并用該多個方法編譯后的本地代碼的指針替換該多個方法對應(yīng)的方法入口。
結(jié)合第一方面,在第一種可能的實現(xiàn)方式中,根據(jù)該Java虛擬機的方法計數(shù)器總表獲取多個方法具體實現(xiàn)為:獲取該方法計數(shù)器總表中的所有方法。
結(jié)合第一方面,在第二種可能的實現(xiàn)方式中,根據(jù)該Java虛擬機的方法計數(shù)器總表獲取多個方法具體實現(xiàn)為:獲取該方法計數(shù)器總表的所有方法中的前N個熱點方法,N大于1,且N小于該方法計數(shù)器總表的所有方法的個數(shù)。
結(jié)合第一方面或第一方面的第一種可能的實現(xiàn)方式或第一方面的第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,并行啟動多個任務(wù)對該多個方法進行編譯具體實現(xiàn)為:將該多個方法中的每一個方法的字節(jié)碼程序壓入該Java虛擬機所在主機的GPU的一個Kernel中,以使得該Kernel執(zhí)行的JIT編譯器對壓入該Kernel的方法進行編譯,其中該Kernel在創(chuàng)建時被設(shè)置為執(zhí)行該Java虛擬機的JIT編譯器。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于華為技術(shù)有限公司,未經(jīng)華為技術(shù)有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201310722834.9/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





