Java 虛擬機器底層原理到底還是P8大佬才能講清楚,請簽收你的jvm‘調優神技吧
概述
JVM 的記憶體模型和 JVM 的垃圾回收機制一直是 Java 業內從業者繞不開的話題(實際調優、面試)JVM是java中很重要的一塊知識,也是面試常問的問題之一,直至今天,仍然還有許多面試者在被問到Java虛擬機器相關問題時,還是一臉懵逼,面試完之後直接被虐哭。今天特分享阿里架構師整理的Java虛擬機器底層原理,請簽收!
清單
由於文章篇幅限制,為了避免影響閱讀體驗,以下內容已截圖展示,需要完整超清版本的可以在文末獲取!!!
JVM 記憶體結構
Java 虛擬機器的記憶體空間分為 5 個部分:
- 程式計數器
- Java 虛擬機器棧
- 本地方法棧
- 堆
- 方法區
HotSpot 虛擬機器物件探祕
在 HotSpot 虛擬機器中,物件的記憶體佈局分為以下 3 塊區域:
- 物件頭(Header)
- 例項資料(Instance Data)
- 對齊填充(Padding)
垃圾收集策略與演算法
程式計數器、虛擬機器棧、本地方法棧隨執行緒而生,也隨執行緒而滅;棧幀隨著方法的開始而入棧,隨著方法的結束而出棧。這幾個區域的記憶體分配和回收都具有確定性,在這幾個區域內不需要過多考慮回收的問題,因為方法結束或者執行緒結束時,記憶體自然就跟隨著回收了。
而對於 Java 堆和方法區,我們只有在程式執行期間才能知道會建立哪些物件,這部分記憶體的分配和回收都是動態的,垃圾收集器所關注的正是這部分記憶體。
HotSpot 垃圾收集器
HotSpot 虛擬機器提供了多種垃圾收集器,每種收集器都有各自的特點,雖然我們要對各個收集器進行比較,但並非為了挑選出一個最好的收集器。我們選擇的只是對具體應用最合適的收集器。
記憶體分配與回收策略
物件的記憶體分配,就是在堆上分配(也可能經過 JIT 編譯後被拆散為標量型別並間接在棧上分配),物件主要分配在新生代的 Eden 區上,少數情況下可能直接分配在老年代,分配規則不固定,取決於當前使用的垃圾收集器組合以及相關的引數配置。
JVM 效能調優
在高效能硬體上部署程式,目前主要有兩種方式:
- 通過 64 位 JDK 來使用大記憶體;
- 使用若干個 32 位虛擬機器建立邏輯叢集來利用硬體資源。
類檔案結構
類載入的時機
類從被載入到虛擬機器記憶體開始,到卸載出記憶體為止,它的整個生命週期包括以下
7 個階段:
- 載入
- 驗證
- 準備
- 解析
- 初始化
- 使用
- 解除安裝
驗證、準備、解析 3 個階段統稱為連線。
類載入的過程
類載入過程包括 5 個階段:載入、驗證、準備、解析和初始化。
類載入器
如果需要獲取上述Java 虛擬機器底層原理知識筆記,只需要轉發+關注下方公眾號即可免費獲取!!!