Android 系統(90) JIT 編譯器

2021-08-20 12:33:44 字數 1167 閱讀 1479

儘管 jit 和 aot 使用相同的編譯器,它們所進行的一系列優化也較為相似,但它們生成的**可能會有所不同。jit 會利用執行時型別資訊,可以更高效地進行內聯,並可讓堆疊替換 (osr) 編譯成為可能,而這一切都會使其生成的**略有不同。

使用者執行應用,而這隨後就會觸發 art 載入.dex檔案。.oat檔案,art 將一律使用這類檔案。否則,它將在記憶體中使用並解壓 apk 檔案,從而得到.dex檔案,但是這會導致消耗大量記憶體(相當於 dex 檔案的大小)。

針對任何未根據speed編譯過濾器編譯的應用啟用 jit(也就是說,要盡可能多地編譯應用中的**)。

將 jit 配置檔案資料轉存到只限應用訪問的系統目錄內的檔案中。

aot 編譯 (dex2oat) 守護程序通過解析該檔案來推進其編譯。 

舉例來說,google play 服務就是一種由其他應用使用的類似於共享庫的服務。

方法可能有三種不同的狀態:

如果同時存在 jit 和 aot **(例如,由於反覆進行逆優化),經過 jit 編譯的**將是首選**。

在不影響前台應用效能的情況下執行 jit 所需的記憶體取決於相關應用。大型應用比小型應用需要更多記憶體。一般來說,大型應用所需的記憶體穩定維持在 4 mb 左右。

要開啟 jit 日誌記錄,請執行以下命令:

adb rootadb shell stopadb shell setprop dalvik.vm.extra-opts -verbose:jitadb shell start要停用 jit,請執行以下命令:

adb rootadb shell stopadb shell setprop dalvik.vm.usejit falseadb shell start要強制編譯,請執行以下命令:

adb shell cmd package compile 

強制編譯特定軟體包的常見用例:

強制編譯所有軟體包的常見用例:

要清除配置檔案資料並移除經過編譯的**,請執行以下命令:

Android 9 0系統相容適配

android 9.0要求使用安全的網路訪問,如果使用http請求會報錯。解決方案 在 res xml 目錄下新增乙個network security config.xml 檔案 cleartexttrafficpermitted true network security config andro...

android系統原始碼編譯

1.source build envsetup.sh 使用指令碼初始化環境 2.lunch xx 使用 lunch 選擇要編譯的目標,lunch 特定的分支 3.全編 make j8 2 1 tee build.log 4.單編 mm frameworks base 另外m的含義 m,顯然是make...

android系統中編譯main程式

adb的安裝與使用 windows win10測試 系統下的安裝 window版本的adb ubuntu 16.04 系統下的安裝 adb常用命令 連線方式 使用usb連線線和通過網路連線 adb devices 列舉裝置 adb shell 進入裝置 adb push adb pull 拉取檔案 ...