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





