深刻理解Java虛擬機讀書筆記-第11章 後端編譯與優化

第11章 後端編譯與優化

11.1概述

前面一章講的是從*.java到*.class的過程,即源碼到字節碼的過程。 這一章講的是從二進制字節碼到目標機器碼的過程,分爲兩種即時編譯器和提早編譯器。java

11.2 即時編譯器

目前主流的兩款商用Java虛擬機(HotSpot、OpenJ9)裏,Java程序最初都是經過解釋器 (Interpreter)進行解釋執行的,當虛擬機發現某個方法或代碼塊的運行特別頻繁,就會把這些代碼認 定爲「熱點代碼」(Hot Spot Code),爲了提升熱點代碼的執行效率,在運行時,虛擬機將會把這些代 碼編譯成本地機器碼,並以各類手段儘量地進行代碼優化,運行時完成這個任務的後端編譯器被稱 爲即時編譯器。後端

11.3 提早編譯器

  • 即時編譯消耗的時間都是本來可用於程序運行的時間,消耗的運算資源都是本來可用

於程序運行的資源,緩存

  • 給即時編譯器作緩存加速,去改善Java程序的啓動時間,以

及須要一段時間預熱後才能到達最高性能的問題。這種提早編譯被稱爲動態提早編譯(Dynamic AOT)或者索性就大大方方地直接叫即時編譯緩存(JIT Caching)markdown

Android虛擬機歷程: Android4.4以前 Dalvik虛擬機 即便編譯器 Android4.4開始 Art虛擬機 提早編譯器,致使安裝時須要編譯App,很是耗時,但運行性能獲得提高 Android7.0開始 從新啓用解釋執行和即時編譯,系統空閒時間時自動進行提早編譯。性能

11.3 編譯器優化技術

優化

相關文章
相關標籤/搜索