最大胆的大胆西西人艺人术_欧美在线看片a免费观看_欧美人与动人物a级_国产欧美日韩va另类在线播放

廣州為學(xué)教育科技有限公司

主營:JAVA開發(fā),軟件工程師,教育培訓(xùn)

免費店鋪在線升級

聯(lián)系方式
  • 公司: 廣州為學(xué)教育科技有限公司
  • 地址: 廣州天河區(qū)車陂灃宏大廈3樓
  • 聯(lián)系: 謝老師
  • 手機: 13632401219
  • 一鍵開店

什么是 Java 內(nèi)存模型

2018-12-21 04:58:00  1600 次瀏覽

前面介紹了計算機內(nèi)存模型,這是解決多線程場景下并發(fā)問題的一個重要規(guī)范。

那么具體的實現(xiàn)是如何的呢?不同的編程語言,在實現(xiàn)上可能有所不同。

我們知道,Java 程序是需要運行在 Java 虛擬機上面的,Java 內(nèi)存模型(Java Memory Model,JMM)就是一種符合內(nèi)存模型規(guī)范的,屏蔽了各種硬件和操作系統(tǒng)的訪問差異的,保證了Java 程序在各種平臺下對內(nèi)存的訪問都能保證效果一致的機制及規(guī)范。

提到 Java 內(nèi)存模型,一般指的是 JDK 5 開始使用的新內(nèi)存模型,主要由 JSR-133:JavaTM Memory Model and Thread Specification 描述。

Java 內(nèi)存模型規(guī)定了所有的變量都存儲在主內(nèi)存中,每條線程還有自己的工作內(nèi)存。

線程的工作內(nèi)存中保存了該線程中用到的變量的主內(nèi)存副本拷貝,線程對變量的所有操作都必須在工作內(nèi)存中進行,而不能直接讀寫主內(nèi)存。

不同的線程之間也無法直接訪問對方工作內(nèi)存中的變量,線程間變量的傳遞均需要自己的工作內(nèi)存和主存之間進行數(shù)據(jù)同步進行。

JMM 就作用于工作內(nèi)存和主存之間數(shù)據(jù)同步過程。它規(guī)定了如何做數(shù)據(jù)同步以及什么時候做數(shù)據(jù)同步。

內(nèi)存模式.png這里面提到的主內(nèi)存和工作內(nèi)存,讀者可以簡單的類比成計算機內(nèi)存模型中的主存和緩存的概念。

特別需要注意的是,主內(nèi)存和工作內(nèi)存與 JVM 內(nèi)存結(jié)構(gòu)中的 Java 堆、棧、方法區(qū)等并不是同一個層次的內(nèi)存劃分,無法直接類比。

《深入理解Java虛擬機》中認為:如果一定要勉強對應(yīng)起來的話,從變量、主內(nèi)存、工作內(nèi)存的定義來看,主內(nèi)存主要對應(yīng)于 Java 堆中的對象實例數(shù)據(jù)部分。而工作內(nèi)存則對應(yīng)于虛擬機棧中的部分區(qū)域。

所以,再來總結(jié)下,JMM 是一種規(guī)范,是解決由于多線程通過共享內(nèi)存進行通信時,存在的本地內(nèi)存數(shù)據(jù)不一致、編譯器會對代碼指令重排序、處理器會對代碼亂序執(zhí)行等帶來的問題。

目的是保證并發(fā)編程場景中的原子性、可見性和有序性。

Java 內(nèi)存模型的實現(xiàn)

了解 Java 多線程的朋友都知道,在 Java 中提供了一系列和并發(fā)處理相關(guān)的關(guān)鍵字,比如 Volatile、Synchronized、Final、Concurren 包等。

其實這些就是 Java 內(nèi)存模型封裝了底層的實現(xiàn)后提供給程序員使用的一些關(guān)鍵字。

在開發(fā)多線程的代碼的時候,我們可以直接使用 Synchronized 等關(guān)鍵字來控制并發(fā),這樣就不需要關(guān)心底層的編譯器優(yōu)化、緩存一致性等問題。

所以,Java 內(nèi)存模型,除了定義了一套規(guī)范,還提供了一系列原語,封裝了底層實現(xiàn)后,供開發(fā)者直接使用。

網(wǎng)友評論
0條評論 0人參與
最新評論
  • 暫無評論,沙發(fā)等著你!
百業(yè)店鋪 更多 >

特別提醒:本頁面所展現(xiàn)的公司、產(chǎn)品及其它相關(guān)信息,均由用戶自行發(fā)布。
購買相關(guān)產(chǎn)品時務(wù)必先行確認商家資質(zhì)、產(chǎn)品質(zhì)量以及比較產(chǎn)品價格,慎重作出個人的獨立判斷,謹防欺詐行為。

回到頂部