Java內存模型與JVM運行時數據區(qū)的區(qū)別詳解
首先,這兩者是完全不同的概念,絕對不能混為一談。
1.什么是Java內存模型?
Java內存模型是Java語言在多線程并發(fā)情況下對于共享變量讀寫(實際是共享變量對應的內存操作)的規(guī)范,主要是為了解決多線程可見性、原子性的問題,解決共享變量的多線程操作沖突問題。
多線程編程的普遍問題是:
- 所見非所得
- 無法肉眼檢測程序的準確性
- 不同的運行平臺表現不同
- 錯誤很難復現
故JVM規(guī)范規(guī)定了Java虛擬機對多線程內存操作的一些規(guī)則,主要集中體現在volatile和synchronized這兩個關鍵字。
- volatile 是JVM提供的對共享變量在多線程讀寫時的可見性保證,主要作用是對volatile修飾的共享變量禁止被緩存(這里跟CPU的高速緩存和緩存一致性協(xié)議有關),不做重排序(重排序:在CPU處理速度遠大于內存讀寫速度的現狀下為了提高性能而進行的優(yōu)化),但是并不保證共享變量操作的原子性。
- synchronized 是JVM提供的鎖機制,通過鎖的特性和內存屏障保證鎖住區(qū)域操作的原子性、可見性、有序性。
- 鎖爭搶的是對象(static鎖的是類對象,非static鎖的是當前對象,即this,鎖方法塊鎖的是自定義對象)在堆內存中對象頭的一塊內存的“主權”,只有一個線程能獲取該“主權”,即排他性,通過鎖的排他性保證對鎖住區(qū)域的操作的原子性
- 通過在代碼前后加入加載屏障(Load Barrier)和存儲屏障(Store Barrier),能保證鎖住代碼塊或者方法中對共享變量的操作的可見性
- 通過在代碼前后加入獲取屏障(Acquire Barrier)和釋放屏障(Release Barrier),能保證鎖住代碼塊或者方法中對共享變量的操作的有序性
2.什么是JVM運行時數據區(qū)?
JVM運行時數據區(qū),是Java虛擬機在運行時對該Java進程占用的內存進行的一種邏輯上的劃分,包括方法區(qū)、堆內存、虛擬機棧、本地方法棧、程序計數器。這些區(qū)塊實際都是Java進程在Java虛擬機的運作下通過不同數據結構來對申請到的內存進行不同使用。
- 方法區(qū):JVM用來存儲加載的類信息、常量、靜態(tài)變量、編譯后的代碼等數據。不同虛擬機有不同的實現,oracle的HotSpot在Java7中方法區(qū)放在永久代,Java8中方法區(qū)放在元空間,并通過GC機制來管理。
- 虛擬機棧:每個線程私有的空間,由多個棧幀組成,一個方法對應一個棧幀,棧幀包括局部變量表、操作數棧、動態(tài)鏈接、方法返回地址、附加信息等。棧內存默認最大1M,超出跑出StackOverFlowError。
- 本地方法棧:類似虛擬機棧,是為虛擬機使用native本地方法而準備的。具體實現由虛擬機廠商來實現。HotSpot虛擬機中實現與虛擬機棧一致,同時超出大小拋StackOverFlowError。
- 程序計數器:記錄當前線程執(zhí)行字節(jié)碼的位置,存儲的是字節(jié)碼指令地址,如果native方法,則為空。CPU同一時間只能執(zhí)行一條線程中的指令,線程切換后通過程序計數器來恢復正確的執(zhí)行位置。
- 堆內存:所有線程都可以訪問修改,存放的是對象實例,是數據區(qū)中占用空間最大的部分,在HotSpot虛擬機中分為新生代和老年代,新生代又分為Eden區(qū)和Survivor0區(qū)、Survivor1區(qū)。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
為spring get請求添加自定義的參數處理操作(如下劃線轉駝峰)
這篇文章主要介紹了為spring get請求添加自定義的參數處理操作(如下劃線轉駝峰),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
java中PriorityBlockingQueue的入隊知識點總結
在本篇文章里小編給大家整理一篇關于java中PriorityBlockingQueue的入隊知識點總結內容,有需要的朋友們可以學習下。2021-01-01
Liquibase結合SpringBoot使用實現數據庫管理功能
Liquibase 是一個強大的數據庫管理工具,它幫助你通過自動化管理數據庫的變更、版本控制、和回滾,簡化了開發(fā)中的數據庫遷移工作,這篇文章主要介紹了Liquibase結合SpringBoot使用實現數據庫管理,需要的朋友可以參考下2024-12-12
IDEA中request.getParameter爆紅問題及解決
這篇文章主要介紹了IDEA中request.getParameter爆紅問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11

