1. 程式人生 > >jvm 記憶體結構初步理解

jvm 記憶體結構初步理解

執行緒隔離區
1.
虛擬機器棧:當方法執行時 會建立虛擬棧幀 儲存區域性變量表運算元棧,動態連結和方法出口,而初學者說的’堆疊’指的是棧中棧幀的區域性變量表中的內容,會存放編譯期可知的所有的基本資料型別,和物件型別的引用;
2.
本地方法棧:作用與虛擬機器棧類似,但是是讀取本地方法的;
3.
程式計數器:較小的記憶體空間,用於記錄程式的行號;以便完成執行緒程式的執行程式是逐行執行的

公共資料區
1.
堆區(heap):存放一切物件,對然可以更加詳細的 劃分,但是儲存的都是物件,也是jvm最大的區域
2.
方法區(method area):已經被jvm載入的類的資訊(反射),常量,靜態變數,即時編譯器(*)編譯的程式碼

         方法區中有個執行時常量池 存放各種字面量和符號的引用,可以動態新增 String 的intern()方法

(*)即時編譯器:Java程式最初是通過直譯器(Interpreter)進行解釋執行的,
當虛擬機發現某個方法或程式碼塊的執行特別頻繁時,就會把這些程式碼認定為“熱點程式碼”。
為了提高熱點程式碼的執行效率,在執行時,虛擬機器將會把這些程式碼編譯成與本地平臺相關的機器碼,
並進行各種層次的優化,完成這個任務的編譯器稱為即時編譯器(Just In Time Compiler,JIT)。