一、JVM主要的架構如下:
二、各區域功能介紹
1)、方法區(Method Area):
(1)用於儲存虛擬機器載入的類別資訊、常數、靜態變數等,是各個執行緒共享的記憶體區域;
(2)預設最小值為16MB,最大值為64MB,可透過-XX:PermSize 和-XX:MaxPermSize 參數限制方法區的大小;
(3)方法區中也有一部分是執行時間常數池,主要用來儲存編譯時產生的字面量和符號引用,常數也可以在執行時產生,如String的intern方法;
(4)和Java堆一樣不需要連續的記憶體和可以選擇固定大小或可擴充外,也可以選擇不實作垃圾收集。
2)、堆疊:
(1)Java虛擬機器堆疊是執行緒私有的,生命週期與線程相同。
(2)在每個方法執行的時候同時創建一個堆疊幀(stack frame),用於儲存局部變數表,操作堆疊,動態鏈接,方法出口等資訊。每一個方法執行完的過程就對應堆疊訊框
在堆疊中進入進出的過程。
(3)JVM虛擬機堆疊中的局部變數表儲存了編譯期可知的各種基本資料型別。局部變數表所需的空間在編譯期就分配完成。
(4)堆疊訊框是方法運作期的基礎資料結構。
3)、本機方法堆疊(Native Method Stack):
(1)本機方法堆疊為JVM虛擬機器所使用的Native方法服務。
4)、堆(Heap):
(1)Java虛擬機器所管理的記憶體中最大的一塊。
(2)Java堆是所有執行緒共享的區域,在虛擬機器啟動時創建。
(3)記憶體區域的唯一目的是存放物件實例,所有的物件實例以及陣列都在堆上分配記憶體。
(4)Java堆是JVM垃圾回收機制主要管理的記憶體區域,Java堆可以處於記憶體上不連續的記憶體空間。
5)、程式計數器:
## (1)一塊較小的記憶體空間,它的功能可視為目前執行緒所執行的位元組碼的行號指示器 (2)字節碼解釋器工作時就是透過改變這個計數器的值來選取下一條需要執行的字節碼指令、分支,循環、跳轉、異常處理、執行緒復原等都需要依賴程式計數器。
6)、執行時間常數池:
(1)執行時間常數池是方法區的一部份。 (2)Class檔案中除了有類別的版本、欄位、方法介面描述等資訊外,還有一個資訊是常數池,用於存放編譯期產生的各種字面量和符號引用,這部分內容將在類別載入
之後存放到方法區的執行時間常數池。7)、直接記憶體:
由於Java引進了NIO,引入了通道和緩衝區的IO方式,可以呼叫Native方法直接分配堆外內存,這個堆外內存就是本機內存,不會影響堆內存大小。 相關文章:以上是Java虛擬機器的具體詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!