[發(fā)明專(zhuān)利]一種Java虛擬機(jī)后端編譯的改進(jìn)方法在審
| 申請(qǐng)?zhí)枺?/td> | 201910590531.3 | 申請(qǐng)日: | 2019-07-02 |
| 公開(kāi)(公告)號(hào): | CN110275713A | 公開(kāi)(公告)日: | 2019-09-24 |
| 發(fā)明(設(shè)計(jì))人: | 李波;岳永勝;孫小波 | 申請(qǐng)(專(zhuān)利權(quán))人: | 四川長(zhǎng)虹電器股份有限公司 |
| 主分類(lèi)號(hào): | G06F8/41 | 分類(lèi)號(hào): | G06F8/41 |
| 代理公司: | 四川省成都市天策商標(biāo)專(zhuān)利事務(wù)所 51213 | 代理人: | 吳瑞芳 |
| 地址: | 621000 四*** | 國(guó)省代碼: | 四川;51 |
| 權(quán)利要求書(shū): | 查看更多 | 說(shuō)明書(shū): | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 編譯 詞法分析 字節(jié)碼 注解 源代碼 虛擬機(jī)運(yùn)行 計(jì)算資源 文件系統(tǒng) 語(yǔ)法分析 語(yǔ)意分析 語(yǔ)義分析 編譯器 標(biāo)注 改進(jìn) 保存 | ||
本發(fā)明公開(kāi)了一種Java虛擬機(jī)后端編譯的改進(jìn)方法,所述方法包括步驟1:對(duì)java程序的源代碼進(jìn)行標(biāo)注,在需要進(jìn)行本地編譯的方法頭部增@NativeCompile加注解;步驟2:對(duì)加注解的代碼進(jìn)行編譯,進(jìn)行詞法分析,詞法分析沒(méi)問(wèn)題后進(jìn)行語(yǔ)法分析,再進(jìn)行語(yǔ)意分析,語(yǔ)義分析完成后進(jìn)行字節(jié)碼生成,將生成的字節(jié)碼保存到文件系統(tǒng)中;步驟3:運(yùn)行java程序,編譯器通過(guò)獲取虛擬機(jī)運(yùn)行情況,根據(jù)計(jì)算資源判斷是否需要開(kāi)啟本地編譯。
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)軟件技術(shù)領(lǐng)域,具體的說(shuō),是一種Java虛擬機(jī)后端編譯的改進(jìn)方法。
背景技術(shù)
軟件系統(tǒng)已經(jīng)運(yùn)用到社會(huì)生產(chǎn)的各行各業(yè),軟件行業(yè)中java開(kāi)發(fā)語(yǔ)言占比比較大,小到個(gè)人手機(jī)平板電腦,大到航天航空領(lǐng)域,都用到j(luò)ava作為軟件開(kāi)發(fā)語(yǔ)言。
Java通過(guò)犧牲運(yùn)行性能和一些本地化特性的方式獲得了跨平臺(tái)的特性,做到一次編寫(xiě),多平臺(tái)運(yùn)行,方便了軟件開(kāi)發(fā)。Java程序在各個(gè)方面做了優(yōu)化,編譯方面分為前端編譯器和后端編譯器,前端側(cè)重詞法分析、語(yǔ)法分析和語(yǔ)義分析。后端側(cè)重對(duì)字節(jié)碼進(jìn)行優(yōu)化,使java語(yǔ)言開(kāi)發(fā)的程序能盡可能貼近本地系統(tǒng)運(yùn)行速度。后端編譯優(yōu)化有即時(shí)編譯和靜態(tài)編譯。兩種編譯方式主要缺陷在于,即時(shí)編譯是針對(duì)熱點(diǎn)代碼進(jìn)行編譯,在編譯的過(guò)程中比較消耗計(jì)算資源,會(huì)在一定程度上影響運(yùn)算速度。而靜態(tài)編譯的時(shí)間較長(zhǎng),影響程序的啟動(dòng)速度。因此針對(duì)如上情況提出在代碼層面對(duì)代碼進(jìn)行標(biāo)注。將重點(diǎn)代碼段標(biāo)注為需要編譯為本地機(jī)器代碼。Java程序在運(yùn)行之前就能確定哪些代碼為需要進(jìn)行優(yōu)化的部分。Java編譯器即可把特定代碼段編譯為本地機(jī)器碼,可以直接在內(nèi)存中進(jìn)行運(yùn)行,而不用再在java虛擬機(jī)中進(jìn)行運(yùn)行。從而減輕jvm負(fù)載。重點(diǎn)代碼段主要針對(duì)的是與客戶(hù)緊密相關(guān)的邏輯。每個(gè)人對(duì)系統(tǒng)反應(yīng)時(shí)間的忍耐程度不同。普通客戶(hù)要求的是最短時(shí)間響應(yīng),系統(tǒng)響應(yīng)時(shí)間過(guò)長(zhǎng)容易造成客戶(hù)流失,對(duì)公司營(yíng)收帶來(lái)影響。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種Java虛擬機(jī)后端編譯的改進(jìn)方法,用于解決現(xiàn)有技術(shù)中系統(tǒng)響應(yīng)時(shí)間長(zhǎng)導(dǎo)致用戶(hù)難以忍受而致使用戶(hù)流失的問(wèn)題。
本發(fā)明通過(guò)下述技術(shù)方案解決上述問(wèn)題:
一種Java虛擬機(jī)后端編譯的改進(jìn)方法,所述方法包括如下步驟:
步驟1:對(duì)java程序的源代碼進(jìn)行標(biāo)注,在需要進(jìn)行本地編譯的方法頭部增@NativeCompile加注解;
步驟2:對(duì)加注解的代碼進(jìn)行編譯,進(jìn)行詞法分析,詞法分析沒(méi)問(wèn)題后進(jìn)行語(yǔ)法分析,再進(jìn)行語(yǔ)意分析,語(yǔ)義分析完成后進(jìn)行字節(jié)碼生成,將生成的字節(jié)碼保存到文件系統(tǒng)中;
步驟3:運(yùn)行java程序,編譯器通過(guò)獲取虛擬機(jī)運(yùn)行情況,根據(jù)計(jì)算資源判斷是否需要開(kāi)啟本地編譯。
通過(guò)本方法,jvm后端編譯有針對(duì)性的代碼邏輯進(jìn)行優(yōu)化,在jvm后端編譯中對(duì)特定標(biāo)識(shí)進(jìn)行判斷,若有標(biāo)志性字段的方法,則啟動(dòng)實(shí)時(shí)編譯,將代碼進(jìn)行本地化編譯,讓程序直接運(yùn)行在本地計(jì)算機(jī)上,而不是虛擬機(jī)上。這樣可以提高特定方法的執(zhí)行效率。同時(shí)避免其他不相關(guān)邏輯影響執(zhí)行速度。在通用優(yōu)化的方面進(jìn)行進(jìn)一步優(yōu)化,有助于提升執(zhí)行效率。
進(jìn)一步地,在字節(jié)碼第一次加載到虛擬機(jī)中時(shí)對(duì)當(dāng)前環(huán)境進(jìn)行判斷,若當(dāng)前環(huán)境可用計(jì)算資源不足則不編譯,在虛擬機(jī)資源充足的情況下再進(jìn)行編譯。
進(jìn)一步地,編譯時(shí)前端編譯器對(duì)java源碼編譯成字節(jié)碼后,后端編譯器先對(duì)源碼進(jìn)行常規(guī)的優(yōu)化如公共子表達(dá)式消除、數(shù)組范圍消除、方法內(nèi)聯(lián)和逃逸分析,完成后再將字節(jié)碼編譯為本地方法。
本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn)及有益效果:
(1)本發(fā)明使用了本方式進(jìn)行后端優(yōu)化編譯后,能明顯加快編譯速度和執(zhí)行速度,用戶(hù)端能得到很好的用戶(hù)體驗(yàn)。避免了靜態(tài)編譯和JIT及時(shí)編譯帶來(lái)的啟動(dòng)問(wèn)題和編譯占用資源等問(wèn)題。
該專(zhuān)利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專(zhuān)利權(quán)人授權(quán)。該專(zhuān)利全部權(quán)利屬于四川長(zhǎng)虹電器股份有限公司,未經(jīng)四川長(zhǎng)虹電器股份有限公司許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買(mǎi)此專(zhuān)利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201910590531.3/2.html,轉(zhuǎn)載請(qǐng)聲明來(lái)源鉆瓜專(zhuān)利網(wǎng)。
- 一種軟件開(kāi)發(fā)中的自動(dòng)化編譯方法及系統(tǒng)
- 一種動(dòng)態(tài)分配編譯機(jī)的系統(tǒng)及其方法
- 一種實(shí)現(xiàn)安卓編譯隔離的方法和系統(tǒng)
- 調(diào)度服務(wù)器、編譯服務(wù)器及分布式編譯方法
- 代碼編譯方法、編譯設(shè)備、存儲(chǔ)介質(zhì)及裝置
- 文件編譯方法、裝置、編譯設(shè)備及存儲(chǔ)介質(zhì)
- 一種編譯方法、裝置及系統(tǒng)
- 一種編譯方法和相關(guān)裝置
- 一種編譯方法、電子設(shè)備及計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)
- 一種代碼編譯方法、裝置及計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)
- 基于移動(dòng)終端WAP瀏覽器詞法分析器的實(shí)現(xiàn)方法
- 基于詞法分析的客戶(hù)名稱(chēng)計(jì)算機(jī)檢索方法
- 一種基于MySQL的SQL解析器及其解析方法
- 新聞標(biāo)題的處理方法及裝置
- 網(wǎng)管系統(tǒng)北向監(jiān)控訂購(gòu)?fù)ㄖ^(guò)濾方法
- 詞法分析模型的訓(xùn)練方法、裝置、電子設(shè)備、存儲(chǔ)介質(zhì)
- 軌道業(yè)務(wù)的自動(dòng)化測(cè)試方法、裝置及設(shè)備
- 一種面向神經(jīng)網(wǎng)絡(luò)機(jī)器翻譯的英文詞法分析方法及系統(tǒng)
- 一種自動(dòng)化更新的詞法分析系統(tǒng)
- 基于Bi-LSTM-CRF的三位一體字標(biāo)注漢語(yǔ)詞法分析方法
- 字節(jié)碼優(yōu)化數(shù)據(jù)庫(kù)及其建立方法以及字節(jié)碼優(yōu)化方法
- 多版本的字節(jié)碼處理方法、系統(tǒng)和一種虛擬機(jī)
- 用于提高Java處理器取指令帶寬的字節(jié)碼緩沖裝置
- 一種字節(jié)碼織入方法、裝置及系統(tǒng)
- 防止故障攻擊的Javacard虛擬機(jī)字節(jié)碼執(zhí)行保護(hù)
- 基于字節(jié)碼比對(duì)的影響性回溯分析方法以及回溯分析裝置
- 應(yīng)用程序安裝包中JAVA字節(jié)碼轉(zhuǎn)換方法、裝置及設(shè)備
- 字節(jié)碼的優(yōu)化方法、裝置、存儲(chǔ)介質(zhì)、處理器及終端
- 字節(jié)碼編譯方法、字節(jié)碼編譯裝置及計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)
- 用于處理和運(yùn)行字節(jié)碼的方法、裝置及字節(jié)碼運(yùn)行系統(tǒng)
- 文檔處理裝置和文檔處理方法
- 沖壓模具孔注解系統(tǒng)及方法
- 一種注解列表的生成方法及電子設(shè)備
- 優(yōu)化群集的結(jié)構(gòu)注解的放置
- 注解后端校驗(yàn)方法、裝置、計(jì)算機(jī)設(shè)備及存儲(chǔ)介質(zhì)
- 信息處理方法及信息處理系統(tǒng)
- 調(diào)用消息的方法、裝置、計(jì)算機(jī)設(shè)備及存儲(chǔ)介質(zhì)
- 時(shí)序圖注解處理系統(tǒng)及方法
- 注解配置方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)
- 一種遠(yuǎn)程會(huì)議注解方法及其相關(guān)設(shè)備





