天天看點

java----java記憶體模型(JMM)java記憶體模型是什麼java運作時資料區

java'記憶體模型

  • java記憶體模型是什麼
    • 1. 緩存一緻性協定---可見性
    • 2. 處理器優化---原子性
    • 3. 指令重排序---有序性
  • java運作時資料區
    • 1. 堆
    • 2. 方法區
    • 3. java虛拟機棧
    • 4. 本地方法棧
    • 5. 程式計數器

java記憶體模型是什麼

java記憶體模型是共享記憶體的并發模型,線程之間通過讀—寫共享變量來完成隐式的通信;

java記憶體模型控制線程之間的通信,決定某個線程對共享記憶體的寫入何時對另一個線程可見。

java記憶體模型就是為了解決以下玉玉多線程通過共享記憶體通信時,緩存不一緻、處理器對代碼執行亂序、編譯器對指令重排序三種問題應運而生。

在多線程情況下,通過共享記憶體通信産生的三種問題提出了java記憶體模型

1. 緩存一緻性協定—可見性

計算機在高速的CPU和相對低速的主存之間速度不比對的情況下,中間需要高速緩存catch進行緩沖。将運算所需的資料從主存複制到高速緩存中,CPU直接在高速緩存中存取資料,将運算結果放到高速緩存,再從高速緩存中同步到主存中。再多個CPU處理任務涉及同一塊主存區域時,就可能導緻緩存不一緻的問題,是以在高速緩存和主存之間必須遵守一個緩存一緻性協定。

2. 處理器優化—原子性

進一步提高CPU的執行效率,為了處理器内部運算單元能夠被最大化充分利用,會将輸入的代碼亂序執行處理,這就是處理器優化。

3. 指令重排序—有序性

現代的處理器采用指令級并行技術将多條指令重地執行,如果不存在資料依賴性,處理器會改變語句對應機器指令的執行順序,這就是指令重排序。

java運作時資料區

java運作時資料區将java記憶體劃分為5個區域,堆、方法區、本地方法棧、java虛拟機棧、程式計數器

java----java記憶體模型(JMM)java記憶體模型是什麼java運作時資料區

1. 堆

堆是線程共享的記憶體區域,存放對象執行個體。是垃圾回收的主要區域。

堆可分為新生代和老年代,新生代又可細分為Eden區、Survivor from區和Survivor to區。

2. 方法區

方法區是線程共享的記憶體區域,存放已被虛拟機加載的類資訊,靜态變量、常量、即時編譯器編譯後的代碼等資料。

3. java虛拟機棧

java虛拟機棧是線程私有的記憶體區域,描述java線程執行的記憶體模型,每個方法在執行的時候,都會建立一個棧幀,棧幀裡面存放局部變量表、操作數棧、方法出口、動态連結等資訊。每個方法對應一個棧幀。

局部變量表存放了基本類型、對象引用和方法傳回類型(指向了一條位元組碼指令位址)。

4. 本地方法棧

本地方法棧是線程私有的記憶體區域,裡面的方法都有關鍵字native,是直接和系統互動的方法, 使用非java語言實作。

5. 程式計數器

程式計數器是線程私有的記憶體區域,用于儲存該線程執行到哪裡,下一條指令的位置。

繼續閱讀