java記憶體模型

來源:互聯網
上載者:User

標籤:描述   關聯   線程   記憶體回收   地區   jmm   類成員變數   結構   地方   

幾個概念

java記憶體結構,也叫jvm記憶體結構,也可以叫也就是運行時的資料區域

記憶體模型

 

1、記憶體結構,

A、棧

棧和線程緊密關聯的。當建立線程的時候,會建立java棧,java棧又包含多個幀棧,方法啟動並執行時候,資訊就存在幀棧裡面,比如局部變數,傳回值,運算元等。Java棧資料不是線程共有的,所以不需要關心其資料一致性,也不會存在同步鎖的問題

B、堆

存放對象執行個體,以及數組,記憶體回收主要針對的就是這個地區,這裡的資料是線程共用的,所以不是安全執行緒的

C、方法區

類相關資訊,例如類成員變數,方法名,等資訊,當然包括類名,描述等資訊,方法區還包括常量池,存放的是字串,字面量等

D、程式計數器

由於java是多線程的,線程來回切換,程式計數器執行會指向幀棧的棧定,以表示程式執行到什麼位置了。

E、本地方法棧

和棧相似,只不過執行的java外部的方法,比如c++的方法。

2、記憶體模型

java記憶體模型主要程式房屋變數的規則,也就是java虛擬機器中的變數是如何儲存到主存中,以及如何從主存中取到虛擬機器中的這些細節。JMM規定了JMM規定了所有的變數都儲存在主記憶體(Main Memory)中。每個線程還有自己的工作記憶體(Working Memory),線程的工作記憶體中儲存了該線程使用到的變數的主記憶體的副本拷貝,線程對變數的所有操作(讀取、賦值等)都必須在工作記憶體中進行,而不能直接讀寫主記憶體中的變數,資料交換必須通過主存。

Java記憶體模型是圍繞著並發編程中原子性、可見度、有序性這三個特徵來建立的,

可見度,主記憶體中的資料修改,工作記憶體是可見的。立即知道。

有序性,主要是針對多線程執行時候,線程的一些操作一些先後的規則,這就是before-happen。例如volatile修飾的變數,寫操作先發生於讀操作,

所以衡量並發安全問題一切必須以happens-before 原則為準。

 

java記憶體模型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.