[發(fā)明專利]字節(jié)碼優(yōu)化方法及裝置有效
| 申請?zhí)枺?/td> | 201611235713.1 | 申請日: | 2016-12-28 |
| 公開(公告)號: | CN108614702B | 公開(公告)日: | 2022-02-11 |
| 發(fā)明(設(shè)計)人: | 肖浩龍 | 申請(專利權(quán))人: | 阿里巴巴集團控股有限公司 |
| 主分類號: | G06F8/41 | 分類號: | G06F8/41 |
| 代理公司: | 北京清源匯知識產(chǎn)權(quán)代理事務(wù)所(特殊普通合伙) 11644 | 代理人: | 馮德魁 |
| 地址: | 英屬開曼群島大開*** | 國省代碼: | 暫無信息 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 字節(jié) 優(yōu)化 方法 裝置 | ||
本申請實施例公開了一種字節(jié)碼優(yōu)化方法及裝置。所述字節(jié)碼優(yōu)化方法包括:解析字節(jié)碼文件,生成關(guān)于類及類中的屬性和方法的信息;從所述方法中選取待裁剪的成員訪問方法,并構(gòu)造相應(yīng)的直接訪問指令;將所述信息中對所述待裁剪的成員訪問方法的調(diào)用指令,替換為相應(yīng)的直接訪問指令,并針對相應(yīng)被訪問成員的訪問權(quán)限描述符進行處理;以及,從所述信息中刪除所述待裁剪的成員訪問方法,并根據(jù)執(zhí)行刪除操作后的所述信息生成作為優(yōu)化結(jié)果的字節(jié)碼文件。采用上述方法,解決現(xiàn)有技術(shù)中的解決方法存在裁剪方法不充分、應(yīng)用程序運行性能差、應(yīng)用包增大的問題。
技術(shù)領(lǐng)域
本申請實施例涉及軟件開發(fā)領(lǐng)域,具體涉及一種字節(jié)碼優(yōu)化方法及裝置。
背景技術(shù)
目前,隨著應(yīng)用軟件需求的提高,客戶端代碼的體量越來越大,在安卓應(yīng)用構(gòu)建中,單一dex(Android平臺上可執(zhí)行文件的類型)模式下對方法名數(shù)量的限定已不能滿足業(yè)務(wù)需求,因此提出了對字節(jié)碼文件中的方法數(shù)量進行精簡的需求,避免dex文件構(gòu)建失敗的問題。
現(xiàn)有技術(shù)中的Proguard作為一種壓縮、優(yōu)化和混淆Java字節(jié)碼文件的工具,實現(xiàn)了刪除無用的類、字段、方法和屬性的功能。Proguard的實現(xiàn)方案是針對每一對調(diào)用方法-被調(diào)用方法,通過一系列的邏輯判斷該種情況是否可以執(zhí)行內(nèi)聯(lián),當(dāng)判斷可以執(zhí)行內(nèi)聯(lián),直接將callee函數(shù)體內(nèi)聯(lián)到caller函數(shù)。
在實際應(yīng)用過程中,基于Proguard工具進行字節(jié)碼優(yōu)化,存在以下缺陷:
1)在判斷方法是否可以進行內(nèi)聯(lián)時,當(dāng)發(fā)現(xiàn)方法內(nèi)部訪問私有屬性/方法,則會直接跳過不做處理,而這恰恰是成員訪問方法(例如getter,setter,access$)的普遍應(yīng)用場景,這導(dǎo)致非常大的方法裁剪空間被忽略,影響應(yīng)用程序的執(zhí)行性能;
2)在進行方法內(nèi)聯(lián)時,不能有針對性地對待裁剪的成員訪問方法進行處理,而是采用了通用化方案,導(dǎo)致內(nèi)聯(lián)后的方法冗余較多的store/load指令,不僅導(dǎo)致生成的應(yīng)用程序包增大,而且影響應(yīng)用程序的執(zhí)行性能。
綜上所述,現(xiàn)有技術(shù)中的解決方法存在裁剪不充分、應(yīng)用程序運行性能差、應(yīng)用包增大的問題。
發(fā)明內(nèi)容
本申請實施例提供一種字節(jié)碼優(yōu)化方法,以解決現(xiàn)有技術(shù)中的解決方法存在裁剪方法不充分、應(yīng)用程序運行性能差、應(yīng)用包增大的問題。
所述字節(jié)碼優(yōu)化方法包括:
解析字節(jié)碼文件,生成關(guān)于類及類中的屬性和方法的信息;
從所述方法中選取待裁剪的成員訪問方法,并構(gòu)造相應(yīng)的直接訪問指令;
將所述信息中對所述待裁剪的成員訪問方法的調(diào)用指令,替換為相應(yīng)的直接訪問指令,并針對相應(yīng)被訪問成員的訪問權(quán)限描述符進行處理;以及,
從所述信息中刪除所述待裁剪的成員訪問方法,并根據(jù)執(zhí)行刪除操作后的所述信息生成作為優(yōu)化結(jié)果的字節(jié)碼文件。
可選的,所述從所述方法中選取待裁剪的成員訪問方法,包括:從所述方法中選取屬于預(yù)設(shè)類別的待裁剪的成員訪問方法。
可選的,所述預(yù)設(shè)類別包括以下類別之一或者任意組合:
來自源代碼的屬性值讀取方法;
來自源代碼的屬性值寫入方法;
由編譯器生成的供內(nèi)部類訪問宿主類私有屬性或私有方法的方法。
可選的,當(dāng)所述預(yù)設(shè)類別包括來自源代碼的屬性值讀取方法時,所述從所述方法中選取待裁剪的成員訪問方法,并構(gòu)造相應(yīng)的直接訪問指令,包括:
針對所述信息中的每個屬性,執(zhí)行下述操作:
至少根據(jù)該屬性所屬類以及屬性名稱和數(shù)據(jù)類型確定與該屬性對應(yīng)的屬性值讀取方法的名稱、參數(shù)列表和返回值類型;
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于阿里巴巴集團控股有限公司,未經(jīng)阿里巴巴集團控股有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201611235713.1/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





