国产男女猛烈无遮挡免费视频 應用性能優化之VerifyClass


发布日期:2022-05-19 04:29    点击次数:183


 

為了加快應用冷啟動過程且不過度波及業務改動,本文從虛擬機加載類的過程中找到優化項,且與業界的决策作了對比,并實現了半自動化的分析功能。類在使用或實例化之前需要被加載到虛擬機中并進走运养息。整個過程如下圖所示:主要由LoadingClass和InitializingClass兩部分組合。

LoadingClass旨在把Class從Dex加載到虛擬機中,但不波及類的使用或執行历程。InitializingClass旨在保證使用類前已經經過了运养息历程,此历程镶嵌類的使用或執行過程中。

加載類

DefineClass主要通過SetupClass、InsertClass以及LoadClass將一個類加載到虛擬機中,终末复返mirror:Class對象指針。

SetupClass:設置類的訪問標志以及ClassLoader。 InsertClass:將類插入到對應ClassLoader的ClassTable中,以便查找。 LoadClass:將類的屬性实时代加載到類中。 類运养息

類的屬性或时代在使用前必須經過類的运养息。

InitializeClass:核驗類、运养息父類、接口时代以及靜態屬性。 VerifyClass:核驗類的正当性,不才一節詳細分析。 核驗類

VerifyClass使用VerifyClassUsingOatFile或PerformClassVerification时代之一去核查Class。其中PerformClassVerification就包含了Systrace中耗時VerifyClass的Tag,如下圖所示:

VerifyClassUsingOatFile:通過Oat文献中的Class狀態位去核驗Class,當狀態位即是kStatusVerified時,核查历程到此為止,径爽快速复返。否則需要進入耗時的PerformClassVerification历程。 PerformClassVerification:主要核驗類中的径直时代和虛时代。 ComputeWidthsAndCountOps:判斷PC值與dalvik领导數是否相等。 ScanTryCatchBlocks:檢查Try語句開始地址、結束地址以及try開始操作符的正当性。檢查catch中handler語句開始操作符的正当性。 VerifyInstructions:檢查各種dalvik领导,同時將GC檢查點插入到括號、switch、throw领导中。 VerifyCodeFlow:檢查每條dalvik领导的寄存器以及參數的正当性。 提前發現

從上头的分析不错看出,應該盡可能讓核查走VerifyClassUsingOatFile历程,即通過Oat文献狀態位核查告捷。Oat文献中類的狀態位是什么以及為什么狀態位不即是kStatusVerified是問題的冲破點。

通過oatdump号令去dump相應的odex文献,不错巡视類的狀態位,操作神气如下:

“当前,用户消费正在从消费商品向消费服务转化,消费者更看重购买过程的便捷性和可信度,演出榜单的升级正是顺应了用户这个核心需求,通过口碑指南的方式,为消费者提供多元的参考指标,让用户逛的舒心、买的放心、看的开心。”大麦运营总负责人刘娟表示。

游戏分析师Jose Najarro认为,此次融资也意味着元宇宙对游戏厂商的吸引力,元宇宙或许是游戏产业发展的未来趋势,同时,这笔资金还可以进一步推动 Epic 的游戏引擎开发:“虚幻引擎是一种用于创建和设计视频游戏的软件工具,并且可能是创建虚拟世界的重要工具。”

《山河月明》由高希希、赵立军执导,董哲编剧,冯绍峰、陈宝国、颖儿等人主演,讲述了明太祖朱元璋(陈宝国饰)第四子朱棣(冯绍峰饰),从年少起追随元帅徐达(张丰毅)喋血沙场、历经战阵,最终成长为合格的军事将领和一国统帅的故事。全剧以历史的宏大视角, 国产幕精品无码亚洲精品描绘出从“洪武之治”到“永乐盛世”数十载明史画卷。首播剧情中,陈宝国、张丰毅、王姬等老戏骨纷纷出场,演绎明朝初年帝后、君臣,在风云激荡下的趣味日常,被网友点赞:“很久没有这么好看的历史剧了!”

同时,企鹅电竞(本条内指深圳市腾讯计算机系统有限公司)通知,企鹅电竞与主播、公会所涉主体所签订的入驻协议(包括《企鹅电竞直播平台主播入驻协议》《企鹅电竞直播平台公会入驻协议》)将于2022年6月7日解除;但企鹅电竞将继续按照主播(也包括公会,如有)与企鹅电竞的相关约定就截至此时(具体指2022年6月7日23时59分)主播/公会账户可分配余额及其他约定款项(以下合称“主播收入”)进行结算并相应支付。

VLOG默認是不會被打印的,需要動態開啟,開啟的神气不错通過:art::gLogVerbosity.class_linker = true而打開,因為本項目需要看到dex2oat和其他進程的打印情況,本身是在系統源碼中進行編譯生成的so,然后,通過ptrace注入so到Zygote的,此时代需要root設備,要是只需要巡视本進程,老司机午夜精品视频资源應不需要這么麻煩,具體时代還未探索,但思绪應該是一致的。舉举例下,本身遭受的問題是AppCompat包中的類不行被核驗通過。

解決决策

將Runtime對象中的verify_設置成verifier::VerifyMode::kNone。

需要通過Runtime對象首地址遍歷查找verify_屬性,魔改廠商可能帶來兼容性問題。 穷乏VerifyClass過程,可能會后置發現犯警领导問題。 對zygote中值verify_進行修改將酿成cow內存消费。 將多出EnsureSkipAccessChecksMethods一步處理邏輯,將類中每個函數flag進行修改,此處邏輯沒有對單個類進行處理,是以,每個類的每個函數的flag都將被無謂修改,如下圖所示:

直面問題本身,通過VLOG的輸出信息,去修正源碼,具體到本案例,是由于AppCompat庫中使用了系統不复旧的語句,如下圖所示:

本App運行環境是在8.1(API27)上,TextView沒未必代setFirstBaselineToTopHeight,是以,因為领导犯警導致類核驗失敗。(贵重Build.VERSION.SDK_INT是不會被編譯優化的,它本身是final類型,但它的取值是即是SystemProperties.getInt("ro.build.version.sdk", 0),是以,必須運行時,本领確定)。本身嘗試了如下时代: 將系統源碼sdk中的Build.VERSION.SDK_INT值設置成27進行編譯出新的sdk,然后,將此sdk覆蓋源生的android.jar,但愿編譯時將appcompat中的Build.VERSION.SDK_INT >= 28判斷邏輯優化掉,但實際aar不會參與sdk的編譯,此項只可優化項目自身的邏輯。 將appcompat源碼下載下來,去掉犯警领导,重新編譯成aar使用。 径直在android8.1源碼中編譯support v7包使用。 以上兩種时代,能定制我方所需的aar,致使能剪辑資源,但遭受了致命的問題:腾达成的aar不行發布到maven了,這樣的話,需要推動業務修改包名,另一個問題是,要是是項目中的第三方aar依賴了appcompat的話,問題又會出現。是以,最終通過制作ASM插件,將Build.VERSION.SDK_INT值設置成固定27,問題解決了,且使得本項目中apk size減少了22K。 要是是應用需要兼容多個不同版块的ROM,也不错按照ROM版块的不同,使用App Bundle下發“最合適”的App。 平臺化

為了裁汰决策實施難度,現已將决策平臺化,惟有將apk拖入網頁中即可看到類核驗欠亨過的原因。

作家:鼎力智能技術

鏈接:https://juejin.cn/post/6951225539990388750

來源:掘金

文章權歸作家扫数。商業轉載請聯系作家獲得授權国产男女猛烈无遮挡免费视频,非商業轉載請注明出處。