1. 程式人生 > >【JVM】——記憶體模型

【JVM】——記憶體模型

(一)總體架構圖


(二)簡介

  1. 程式計數器:當前執行緒執行的位元組碼的行號指示器。執行緒私有
  2. java虛擬機器棧:執行緒私有。虛擬機器棧描述的是虛擬機器執行Java方法執行的記憶體模型:每個方法被執行的時會同時建立一個棧幀(Stack Frame ①)用於儲存區域性變量表、操作棧、動態連結、方法出口等資訊。
    1. 區域性變量表:存放編譯期可知的基本資料型別(booleanbytecharshortintfloatlongdouble)、物件引用reference 型別
  1. 本地方法棧:執行緒私有。描述的是虛擬機器使用到的Native方法服務。
  2. Java堆:所有執行緒共享的。虛擬機器啟動時建立。
    1. 目的:存放物件例項,幾乎所有的物件例項都在這裡分配記憶體。
    2. Java堆是垃圾收集器管理的主要區域。也稱GC
      1. 收集器基本都採用分代收集演算法。Java堆可分為新生代和老年代。
  3. 方法區
    1. 所有執行緒共享
    2. 用於儲存已被虛擬機器載入的類資訊、常量、靜態變數、即時編譯器編譯後的程式碼等資料
  4. 執行時常量池
    1. 是方法區的一部分。Class 檔案中除了有類的版本、欄位、方法、介面等描述等資訊外,還有一項資訊是常量池(Constant PoolTable),用於存放編譯期生成的各種字面量和符號引用,這部分內容將在類載入後存放到方法區的執行時常量池中。
  5. 直接記憶體:NIO可以使用Native函式庫直接分配堆外記憶體,然後通過一個儲存在
    Java 堆裡面的DirectByteBuffer 物件作為這塊記憶體的引用進行操作。這樣能在一些場景中顯著提高效能,因為避免了在Java 堆和Native 堆中來回覆制資料。