天天看點

JVM 核心工作原理

首先jvm底層涉及知識過于廣泛,這裡介紹一個jvm的基礎運作流程:

1:java類檔案主要通過 類轉載子系統 加載到jvm中。

2:将xxx.class檔案的 常量、靜态變量、類元資訊等加載到元空間(方法區)存儲起來。

3:然後棧裡面存儲都棧幀,每個線程都是獨立的。裡面主要存儲:局部周遊表,操作數棧,動态連結,方法出口等核心資料。

4:這裡大緻介紹一下一個方法的運作流程:主要是通過位元組碼執行引擎調用程式計數器來執行棧幀裡面的方法。main方法程每一行的執行,都是程式計數器記錄了執行到哪一行,每一個線程,對應的程式計數器都是獨享。

5:方法與發放之間的調用,主要是動态連結存儲了目前方法執行的記憶體位址,可以了解為程式計數器的開始位置。

6:方法執行結束主要是由方法出口記錄了方法的下一步對應程式技術器的第幾部。然後方法結束時,就可以傳回到上一個調用方法的位置。

7:對應的操作數棧就是簡單的變量的對應的值,如下圖的30、2、1等,局部變量表也就是存儲了對應該方法作用域内定義的局部變量。

8:然後對象是如果找到對應的類元資訊的。對象裡有一個叫對象頭的部分,存儲了對應該類所對應的内元資訊的位址指針。

9:棧裡面存儲的對象位址,然後實際的對象值,是存放在堆裡面。這樣也就是會導緻對應的堆記憶體會很大,下一站會專門分析堆裡面的記憶體是如何運轉的以及對應的分布情況。

10:這裡還有一個就是本地方法棧,也即是jvm底層其實采用的是C和C++開發的。有些方法,需要使用調用底層的Native修飾的方法。對應的方法指針記憶體存儲在本地方法棧中,也是每個線程獨享的。

JVM 核心工作原理