1. 程式人生 > 實用技巧 >Java 虛擬機器底層原理到底還是P8大佬才能講清楚,請簽收你的jvm‘調優神技吧

Java 虛擬機器底層原理到底還是P8大佬才能講清楚,請簽收你的jvm‘調優神技吧

概述

JVM 的記憶體模型和 JVM 的垃圾回收機制一直是 Java 業內從業者繞不開的話題(實際調優、面試)JVM是java中很重要的一塊知識,也是面試常問的問題之一,直至今天,仍然還有許多面試者在被問到Java虛擬機器相關問題時,還是一臉懵逼,面試完之後直接被虐哭。今天特分享阿里架構師整理的Java虛擬機器底層原理,請簽收!

清單

不愧是阿里p8大佬!終於把Java 虛擬機器底層原理講清楚了,請簽收

由於文章篇幅限制,為了避免影響閱讀體驗,以下內容已截圖展示,需要完整超清版本的可以在文末獲取!!!

JVM 記憶體結構

Java 虛擬機器的記憶體空間分為 5 個部分:

  • 程式計數器
  • Java 虛擬機器棧
  • 本地方法棧
  • 方法區

不愧是阿里p8大佬!終於把Java 虛擬機器底層原理講清楚了,請簽收

不愧是阿里p8大佬!終於把Java 虛擬機器底層原理講清楚了,請簽收

HotSpot 虛擬機器物件探祕

在 HotSpot 虛擬機器中,物件的記憶體佈局分為以下 3 塊區域:

  • 物件頭(Header)
  • 例項資料(Instance Data)
  • 對齊填充(Padding)

不愧是阿里p8大佬!終於把Java 虛擬機器底層原理講清楚了,請簽收

垃圾收集策略與演算法

程式計數器、虛擬機器棧、本地方法棧隨執行緒而生,也隨執行緒而滅;棧幀隨著方法的開始而入棧,隨著方法的結束而出棧。這幾個區域的記憶體分配和回收都具有確定性,在這幾個區域內不需要過多考慮回收的問題,因為方法結束或者執行緒結束時,記憶體自然就跟隨著回收了。

而對於 Java 堆和方法區,我們只有在程式執行期間才能知道會建立哪些物件,這部分記憶體的分配和回收都是動態的,垃圾收集器所關注的正是這部分記憶體。

不愧是阿里p8大佬!終於把Java 虛擬機器底層原理講清楚了,請簽收

不愧是阿里p8大佬!終於把Java 虛擬機器底層原理講清楚了,請簽收

HotSpot 垃圾收集器

HotSpot 虛擬機器提供了多種垃圾收集器,每種收集器都有各自的特點,雖然我們要對各個收集器進行比較,但並非為了挑選出一個最好的收集器。我們選擇的只是對具體應用最合適的收集器。

不愧是阿里p8大佬!終於把Java 虛擬機器底層原理講清楚了,請簽收

記憶體分配與回收策略

物件的記憶體分配,就是在堆上分配(也可能經過 JIT 編譯後被拆散為標量型別並間接在棧上分配),物件主要分配在新生代的 Eden 區上,少數情況下可能直接分配在老年代,分配規則不固定,取決於當前使用的垃圾收集器組合以及相關的引數配置。

不愧是阿里p8大佬!終於把Java 虛擬機器底層原理講清楚了,請簽收

JVM 效能調優

在高效能硬體上部署程式,目前主要有兩種方式:

  • 通過 64 位 JDK 來使用大記憶體;
  • 使用若干個 32 位虛擬機器建立邏輯叢集來利用硬體資源。

不愧是阿里p8大佬!終於把Java 虛擬機器底層原理講清楚了,請簽收

類檔案結構

不愧是阿里p8大佬!終於把Java 虛擬機器底層原理講清楚了,請簽收

不愧是阿里p8大佬!終於把Java 虛擬機器底層原理講清楚了,請簽收

類載入的時機

類從被載入到虛擬機器記憶體開始,到卸載出記憶體為止,它的整個生命週期包括以下

7 個階段:

  • 載入
  • 驗證
  • 準備
  • 解析
  • 初始化
  • 使用
  • 解除安裝

驗證、準備、解析 3 個階段統稱為連線。

不愧是阿里p8大佬!終於把Java 虛擬機器底層原理講清楚了,請簽收

類載入的過程

類載入過程包括 5 個階段:載入、驗證、準備、解析和初始化。

不愧是阿里p8大佬!終於把Java 虛擬機器底層原理講清楚了,請簽收

類載入器

不愧是阿里p8大佬!終於把Java 虛擬機器底層原理講清楚了,請簽收

如果需要獲取上述Java 虛擬機器底層原理知識筆記,只需要轉發+關注下方公眾號即可免費獲取!!!