【JVM】——記憶體模型
阿新 • • 發佈:2019-02-10
(一)總體架構圖
(二)簡介
- 程式計數器:當前執行緒執行的位元組碼的行號指示器。執行緒私有。
- java虛擬機器棧:執行緒私有。虛擬機器棧描述的是虛擬機器執行Java方法執行的記憶體模型:每個方法被執行的時會同時建立一個棧幀(Stack
Frame ①)用於儲存區域性變量表、操作棧、動態連結、方法出口等資訊。
- 區域性變量表:存放編譯期可知的基本資料型別(boolean、byte、char、short、int、float、long、double)、物件引用reference 型別
- 本地方法棧:執行緒私有。描述的是虛擬機器使用到的Native方法服務。
- Java堆:所有執行緒共享的。虛擬機器啟動時建立。
- 目的:存放物件例項,幾乎所有的物件例項都在這裡分配記憶體。
- Java堆是垃圾收集器管理的主要區域。也稱GC堆
- 收集器基本都採用分代收集演算法。Java堆可分為新生代和老年代。
- 方法區
- 所有執行緒共享。
- 用於儲存已被虛擬機器載入的類資訊、常量、靜態變數、即時編譯器編譯後的程式碼等資料
- 執行時常量池
- 是方法區的一部分。Class 檔案中除了有類的版本、欄位、方法、介面等描述等資訊外,還有一項資訊是常量池(Constant PoolTable),用於存放編譯期生成的各種字面量和符號引用,這部分內容將在類載入後存放到方法區的執行時常量池中。
- 直接記憶體:NIO可以使用Native函式庫直接分配堆外記憶體,然後通過一個儲存在