国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

為什么會有JMM?從0到1一次性說清楚

這篇具有很好參考價值的文章主要介紹了為什么會有JMM?從0到1一次性說清楚。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

JMM(Java Memory Model)是一種規(guī)范,定義了在多線程環(huán)境下Java程序中的內(nèi)存訪問行為。JMM保證了在多線程環(huán)境下程序的正確性,同時也允許編譯器和處理器對指令進行優(yōu)化,以提高程序的性能。

Java線程之間的通信由Java內(nèi)存模型(簡稱JMM)控制,從抽象的?度來說,JMM定義了線程和主內(nèi)存之間的抽象關(guān)系。JMM的抽象示意圖如圖所示:

為什么會有JMM?從0到1一次性說清楚

?對于每?個線程來說,棧都是私有的,?堆是共有的。也就是說在棧中的變量(局部變量、?法定義參數(shù)、異常處理器參數(shù))不會在線程之間共享,也就不會有內(nèi)存可?性的問題,也不受內(nèi)存模型的影響。?在堆中的變量是共享的,稱為共享變量。

所以,內(nèi)存可?性是針對的共享變量

既然堆是共享的,為什么在堆中會有內(nèi)存不可?問題?

這是因為現(xiàn)代計算機為了?效,往往會在?速緩存區(qū)中緩存共享變量,因為cpu訪問緩存區(qū)?訪問內(nèi)存要快得多。

線程之間的共享變量存在主內(nèi)存中,每個線程都有?個私有的本地內(nèi)存,存儲了該線程以讀、寫共享變量的副本。本地內(nèi)存是Java內(nèi)存模型的?個抽象概念,并不真實存在。它涵蓋了緩存、寫緩沖區(qū)、寄存器等。

Java線程之間的通信由Java內(nèi)存模型(簡稱JMM)控制,從抽象的?度來說,JMM定義了線程和主內(nèi)存之間的抽象關(guān)系。JMM的抽象示意圖如圖所示:

為什么會有JMM?從0到1一次性說清楚

?從圖中可以看出:
1. 所有的共享變量都存在主內(nèi)存中。
2. 每個線程都保存了?份該線程使?到的共享變量的副本。
3. 如果線程A與線程B之間要通信的話,必須經(jīng)歷下?2個步驟:

i. 線程A將本地內(nèi)存A中更新過的共享變量刷新到主內(nèi)存中去。
ii. 線程B到主內(nèi)存中去讀取線程A之前已經(jīng)更新過的共享變量。

所以,線程A?法直接訪問線程B的?作內(nèi)存,線程間通信必須經(jīng)過主內(nèi)存。

注意,根據(jù)JMM的規(guī)定,線程對共享變量的所有操作都必須在??的本地內(nèi)存中進?,不能直接從主內(nèi)存中讀取。

那么怎么知道這個共享變量的被其他線程更新了呢?這就是JMM的功勞了,也是JMM存在的必要性之?。JMM通過控制主內(nèi)存與每個線程的本地內(nèi)存之間的交互,來提供內(nèi)存可?性保證。

Java中的volatile關(guān)鍵字可以保證多線程操作共享變量的可?性以及禁?指令重排序,synchronized關(guān)鍵字不僅保證可?性,同時也保證了原?性(互斥性)。在更底層,JMM通過內(nèi)存屏障來實現(xiàn)內(nèi)存的可?性以及禁?重排序。為了程序員的?便理解,提出了happens-before,它更加的簡單易懂,從?避免了程序員為了理解內(nèi)存可?性?去學習復雜的重排序規(guī)則以及這些規(guī)則的具體實現(xiàn)?法。

happens-before?談?wù)?JMM的happens-before_眾樂樂_2016的博客-CSDN博客??

JMM與Java內(nèi)存區(qū)域劃分的區(qū)別與聯(lián)系

上?兩?節(jié)分別提到了JMM和Java運?時內(nèi)存區(qū)域的劃分,這兩者既有差別?有聯(lián)系:

區(qū)別:兩者是不同的概念層次。JMM是抽象的,他是?來描述?組規(guī)則,通過這個規(guī)則來控制各個變量的訪問?式,圍繞原?性、有序性、可?性等展開的。?Java運?時內(nèi)存的劃分是具體的,是JVM運?Java程序時,必要的內(nèi)存劃分。

聯(lián)系:都存在私有數(shù)據(jù)區(qū)域和共享數(shù)據(jù)區(qū)域。?般來說,JMM中的主內(nèi)存屬于共享數(shù)據(jù)區(qū)域,他是包含了堆和?法區(qū);同樣,JMM中的本地內(nèi)存屬于私有數(shù)據(jù)區(qū)域,包含了程序計數(shù)器、本地?法棧、虛擬機棧。

實際上,他們表達的是同?種含義文章來源地址http://www.zghlxwxcb.cn/news/detail-419542.html

到了這里,關(guān)于為什么會有JMM?從0到1一次性說清楚的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • NFT 為什么會有差異,探索底層的鑄造協(xié)議

    NFT 為什么會有差異,探索底層的鑄造協(xié)議

    NFT 的流行,讓許多人都對它已經(jīng)不怎么陌生了。但你真正了解過它么?從表面來看,每個 NFT 之間的性質(zhì)、特點以及屬性和功能等都沒有多大的差別,當我們深入了解時才會發(fā)現(xiàn),在不同應(yīng)用領(lǐng)域的 NFT 之間,也有一些細微的不同。是什么導致了這些差異的存在呢?這個問題

    2024年02月15日
    瀏覽(16)
  • 為什么會有刷掉第一名、刷掉400+的院校?

    為什么會有刷掉第一名、刷掉400+的院校?

    本期為大家整理熱門院校-“南昌大學”的擇校分析,這個擇校分析專題會為大家結(jié)合:初試復試占比、復試錄取規(guī)則(是否公平)、往年錄取錄取名單、招生人數(shù)、分數(shù)線、專業(yè)課難度等進行分析。希望能夠幫到大家! –所有數(shù)據(jù)來源于研招網(wǎng),如有錯誤,歡迎指正,謝謝!

    2024年02月08日
    瀏覽(21)
  • 【C++入門】你知道C++為什么會有內(nèi)聯(lián)函數(shù)嗎?

    【C++入門】你知道C++為什么會有內(nèi)聯(lián)函數(shù)嗎?

    ??個人主頁:@Weraphael ???作者簡介:目前學習C++和算法 ??專欄:C++航路 ?? 希望大家多多支持,咱一起進步!?? 如果文章對你有幫助的話 歡迎 評論?? 點贊???? 收藏 ?? 加關(guān)注? 本章是補充C語言語法的不足,以及C++是如何對C語言設(shè)計不合理的地方進行優(yōu)化的。 我

    2024年02月03日
    瀏覽(22)
  • 為什么會有分布式鎖?分布式鎖實現(xiàn)方案

    為什么會有分布式鎖?分布式鎖實現(xiàn)方案

    分布式鎖是控制分布式系統(tǒng)之間同步訪問共享資源的一種方式。分布式環(huán)境下會出現(xiàn)資源競爭的地方都需要分布式鎖的協(xié)調(diào)。 分布式鎖的作用:在整個系統(tǒng)提供一個全局、唯一的鎖,在分布式系統(tǒng)中每個系統(tǒng)在進行相關(guān)操作的時候需要獲取到該鎖,才能執(zhí)行相應(yīng)操作。 服務(wù)

    2024年02月08日
    瀏覽(20)
  • python 一次性刪除列表(list)的空白元素(空內(nèi)容) 或者 一次性刪除列表(list)中的指定元素

    看看下述代碼: 輸出: 當你遇見這種情況,有哪些方法來去除里面的空內(nèi)容呢(即 \\\'\\\' )? 1.1 刪除空內(nèi)容(方法一) : 輸出: 1.2 刪除空內(nèi)容(方法二) : 需要 配合 lambda 表達式 一起使用! 輸出: 2.3 刪除指定內(nèi)容 : 輸出: 注 :此方法既可以刪除空元素,也可以刪除指

    2024年02月03日
    瀏覽(304)
  • 【人工智能】為什么說大模型會有「幻覺」問題,又如何去解決呢

    【人工智能】為什么說大模型會有「幻覺」問題,又如何去解決呢

    大家好,我是全棧小5,歡迎閱讀文章! 此篇是【話題達人】序列文章,這一次的話題是《如何解決大模型的幻覺問題》 先來了解基本術(shù)語和縮寫全稱,比如LLM。 LLM是Large Language Model的縮寫,指的是一種 大規(guī)模語言模型 ,可以用來為許多自然語言處理(Natural Language Processing

    2024年02月03日
    瀏覽(21)
  • 《一次性分割一切》閱讀筆記

    《一次性分割一切》閱讀筆記

    目錄 0 體驗 1 摘要 2 十個問題 參考文獻 體驗地址 :SEEM - a Hugging Face Space by xdecoder 體驗結(jié)果 : 將哈士奇和汽車人從圖片中分割出來。 盡管對于交互式人工智能系統(tǒng)的需求不斷增長,但在視覺理解(例如分割)中的人工智能交互方面,很少有全面的研究。本文受到基于提示的

    2024年02月01日
    瀏覽(170)
  • 公眾號一次性訂閱消息

    公眾號一次性訂閱消息

    洛塔服務(wù)號回復007獲取代碼。 之前發(fā)布通知,要用訂閱通知替代一次性訂閱消息,不知道是被罵的太慘還是技術(shù)原因,一次性訂閱消息還是一直能用。 和模板消息不同的是,一次性訂閱消息無需用戶關(guān)注公眾號,但是必須用戶點擊同意發(fā)送才能接收消息。 模板消息:需要關(guān)

    2024年02月09日
    瀏覽(90)
  • Python:一次性輸出多個量

    有的時候我們在輸入一個字符串時,需要在中間加一個int類型變量時,如果一段一段輸出就要寫三個print,非常麻煩。今天bug君就給大家講講如何在Python里一次性輸出多個量。 粽所粥汁,在Python里輸出需要寫 print(\\\"輸出內(nèi)容\\\") ,而輸出一個變量則需要寫 print(變量名) 。 注意:

    2024年02月04日
    瀏覽(99)
  • 一次性打包學透 Spring

    一次性打包學透 Spring

    不知從何時開始,Spring 這個詞開始頻繁地出現(xiàn)在 Java 服務(wù)端開發(fā)者的日常工作中,很多 Java 開發(fā)者從工作的第一天開始就在使用 Spring Framework,甚至有人調(diào)侃“不會 Spring 都不好意思自稱是個 Java 開發(fā)者”。 之所以出現(xiàn)這種局面,源于 Spring 是一個極為優(yōu)秀的一站式集成框架

    2023年04月19日
    瀏覽(102)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包