亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java內(nèi)存模型與JVM運行時數(shù)據(jù)區(qū)的區(qū)別詳解

 更新時間:2019年10月18日 10:05:26   作者:Java_老男孩  
這篇文章主要介紹了Java內(nèi)存模型與JVM運行時數(shù)據(jù)區(qū)的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

首先,這兩者是完全不同的概念,絕對不能混為一談。

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

Java內(nèi)存模型是Java語言在多線程并發(fā)情況下對于共享變量讀寫(實際是共享變量對應(yīng)的內(nèi)存操作)的規(guī)范,主要是為了解決多線程可見性、原子性的問題,解決共享變量的多線程操作沖突問題。

多線程編程的普遍問題是:

  • 所見非所得
  • 無法肉眼檢測程序的準確性
  • 不同的運行平臺表現(xiàn)不同
  • 錯誤很難復(fù)現(xiàn)

故JVM規(guī)范規(guī)定了Java虛擬機對多線程內(nèi)存操作的一些規(guī)則,主要集中體現(xiàn)在volatile和synchronized這兩個關(guān)鍵字。

  • volatile 是JVM提供的對共享變量在多線程讀寫時的可見性保證,主要作用是對volatile修飾的共享變量禁止被緩存(這里跟CPU的高速緩存和緩存一致性協(xié)議有關(guān)),不做重排序(重排序:在CPU處理速度遠大于內(nèi)存讀寫速度的現(xiàn)狀下為了提高性能而進行的優(yōu)化),但是并不保證共享變量操作的原子性。
  • synchronized 是JVM提供的鎖機制,通過鎖的特性和內(nèi)存屏障保證鎖住區(qū)域操作的原子性、可見性、有序性。
  • 鎖爭搶的是對象(static鎖的是類對象,非static鎖的是當前對象,即this,鎖方法塊鎖的是自定義對象)在堆內(nèi)存中對象頭的一塊內(nèi)存的“主權(quán)”,只有一個線程能獲取該“主權(quán)”,即排他性,通過鎖的排他性保證對鎖住區(qū)域的操作的原子性
  • 通過在代碼前后加入加載屏障(Load Barrier)和存儲屏障(Store Barrier),能保證鎖住代碼塊或者方法中對共享變量的操作的可見性
  • 通過在代碼前后加入獲取屏障(Acquire Barrier)和釋放屏障(Release Barrier),能保證鎖住代碼塊或者方法中對共享變量的操作的有序性

2.什么是JVM運行時數(shù)據(jù)區(qū)?

JVM運行時數(shù)據(jù)區(qū),是Java虛擬機在運行時對該Java進程占用的內(nèi)存進行的一種邏輯上的劃分,包括方法區(qū)、堆內(nèi)存、虛擬機棧、本地方法棧、程序計數(shù)器。這些區(qū)塊實際都是Java進程在Java虛擬機的運作下通過不同數(shù)據(jù)結(jié)構(gòu)來對申請到的內(nèi)存進行不同使用。

  • 方法區(qū):JVM用來存儲加載的類信息、常量、靜態(tài)變量、編譯后的代碼等數(shù)據(jù)。不同虛擬機有不同的實現(xiàn),oracle的HotSpot在Java7中方法區(qū)放在永久代,Java8中方法區(qū)放在元空間,并通過GC機制來管理。
  • 虛擬機棧:每個線程私有的空間,由多個棧幀組成,一個方法對應(yīng)一個棧幀,棧幀包括局部變量表、操作數(shù)棧、動態(tài)鏈接、方法返回地址、附加信息等。棧內(nèi)存默認最大1M,超出跑出StackOverFlowError。
  • 本地方法棧:類似虛擬機棧,是為虛擬機使用native本地方法而準備的。具體實現(xiàn)由虛擬機廠商來實現(xiàn)。HotSpot虛擬機中實現(xiàn)與虛擬機棧一致,同時超出大小拋StackOverFlowError。
  • 程序計數(shù)器:記錄當前線程執(zhí)行字節(jié)碼的位置,存儲的是字節(jié)碼指令地址,如果native方法,則為空。CPU同一時間只能執(zhí)行一條線程中的指令,線程切換后通過程序計數(shù)器來恢復(fù)正確的執(zhí)行位置。
  • 堆內(nèi)存:所有線程都可以訪問修改,存放的是對象實例,是數(shù)據(jù)區(qū)中占用空間最大的部分,在HotSpot虛擬機中分為新生代和老年代,新生代又分為Eden區(qū)和Survivor0區(qū)、Survivor1區(qū)。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring純Java配置集成kafka代碼實例

    Spring純Java配置集成kafka代碼實例

    這篇文章主要介紹了Spring純Java配置集成kafka代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • Java vector的詳解及實例

    Java vector的詳解及實例

    這篇文章主要介紹了Java vector的詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Java發(fā)送https請求并跳過ssl證書驗證方法

    Java發(fā)送https請求并跳過ssl證書驗證方法

    最近在負責一個對接第三方服務(wù)的事情,在對接期間因為第三方服務(wù)為https的請求,這篇文章主要給大家介紹了關(guān)于Java發(fā)送https請求并跳過ssl證書驗證的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • Java基于Socket實現(xiàn)多人聊天室

    Java基于Socket實現(xiàn)多人聊天室

    這篇文章主要為大家詳細介紹了Java基于Socket實現(xiàn)多人聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • springBoot項目啟動類啟動無法訪問的解決方法

    springBoot項目啟動類啟動無法訪問的解決方法

    這篇文章主要介紹了springBoot項目啟動類啟動無法訪問的解決方法,需要的朋友可以參考下
    2018-10-10
  • Java之HashMap案例詳解

    Java之HashMap案例詳解

    這篇文章主要介紹了Java之HashMap案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Spring?Boot的優(yōu)點及項目創(chuàng)建步驟詳解

    Spring?Boot的優(yōu)點及項目創(chuàng)建步驟詳解

    這篇文章主要介紹了Spring?Boot的優(yōu)點及項目創(chuàng)建步驟,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • springboot如何使用thymeleaf完成頁面緩存

    springboot如何使用thymeleaf完成頁面緩存

    這篇文章主要介紹了springboot如何使用thymeleaf完成頁面緩存,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Netty的Handler鏈調(diào)用機制及如何組織詳解

    Netty的Handler鏈調(diào)用機制及如何組織詳解

    這篇文章主要為大家介紹了Netty的Handler鏈調(diào)用機制及如何組織示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Java?GUI實現(xiàn)多個窗口切換效果

    Java?GUI實現(xiàn)多個窗口切換效果

    這篇文章主要為大家詳細介紹了Java?GUI實現(xiàn)多個窗口的切換效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評論