java面試進階:JVM優化Java代碼時都做了什麼?

JVM 在對代碼執行的優化可分爲運行時(runtime)優化和即時編譯器(JIT)優化。運行時優化主要是解釋執行和動態編譯通用的一些機制,比如說鎖機制(如偏斜鎖)、內存分配機制(如 TLAB)等。除此之外,還有一些專門用於優化解釋執行效率的,比如說模版解釋器、內聯緩存(inline cache,用於優化虛方法調用的動態綁定)。

JVM 的即時編譯器優化是指將熱點代碼以方法爲單位轉換成機器碼,直接運行在底層硬件之上。它採用了多種優化方式,包括靜態編譯器可以使用的如方法內聯、逃逸分析。JIT 對 Java 編譯的基本單元是整個方法,通過對方法調用的計數統計,甄別出熱點方法,編譯爲本地代碼。JIT 可以看作就是基於兩個計數器實現,方法計數器和回邊計數器提供給 JVM 統計數據,以定位到熱點代碼。

有哪些可以觸手可及的調優角度和手段呢?

1)調整熱點代碼門限值(server 模式下,JIT 會在一段代碼執行 10000 次後,將其編譯爲本地代碼,client 模式則是 1500 次以後。)

2)調整 Code Cache 大小

3)調整編譯器線程數,或者選擇適當的編譯器模式

在 JIT 過程中,逆優化等場景會需要插入安全點。

常量摺疊(Constant Folding)。JVM 如果發現計算過程是依賴於常量或者事實上的常量,就可能會直接計算其結果

方法內聯:指的是在即時編譯過程中遇到方法調用時,直接編譯目標方法的方法體,並替換原方法調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章