欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JVM?運行時數(shù)據(jù)區(qū)與JMM?內(nèi)存模型

 更新時間:2022年07月31日 08:26:50   作者:樹獺叔叔  
這篇文章主要介紹了JVM?運行時數(shù)據(jù)區(qū)與JMM?內(nèi)存模型,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值。需要的朋友可以參考一下

1. JVM 運行時數(shù)據(jù)區(qū)

JVM運行時數(shù)據(jù)區(qū)可以分為元空間,堆,虛擬機棧,本地方法棧,程序計數(shù)器五大塊。

  • 元空間(方法區(qū)):存放類模版對象,是線程共享的區(qū)域,在磁盤上,一般不會GC
  • 堆空間:線程共享的區(qū)域,對象創(chuàng)建與GC的主要陣地
  • 虛擬機棧:線程私有的,基本組成單位是棧幀,每個棧幀對應(yīng)一個方法,棧幀組成如下
    • 局部變量表:存放方法變量信息
    • 操作數(shù)棧:方法運行的區(qū)域
    • 動態(tài)鏈接:指向方法模板對象,與虛方法表一起實現(xiàn)方法重寫
    • 返回地址:方法的返回地址
  • 本地方法棧:線程私有,本地方法的執(zhí)行區(qū)域
  • 程序計數(shù)器:線程私有,負責在線程上下文切換的過程中記錄線程執(zhí)行到了哪個位置

2. JMM 內(nèi)存模型

硬件內(nèi)存模型

通常情況下,當CPU需要讀取主存時,它會將主存的部分讀到CPU緩存中或者內(nèi)部寄存器中,然后在寄存器中執(zhí)行操作。當CPU需要將結(jié)果寫回到主存中去時,它會將內(nèi)部寄存器的值刷新到緩存中,然后在某個時間點將值刷新回主存。

在多處理器系統(tǒng)中,每個處理器都有自己的高速緩存,而它們又共享同一主內(nèi)存,因此就會存在緩存一致性問題。為了解決一致性的問題,需要各個處理器訪問緩存時都遵循一些協(xié)議,在讀寫時要根據(jù)協(xié)議來進行操作,這類協(xié)議有MSI、MESI等。

JMM

JMM內(nèi)存模型將內(nèi)容分為了線程私有內(nèi)存與主內(nèi)存兩部分,其與我們之前提到的硬件內(nèi)存模型的對應(yīng)關(guān)系如下所示:

私有內(nèi)存與主內(nèi)存的交互由如下八種操作控制:

3. 可見行與 volatile 關(guān)鍵字

一言以蔽之,volatile 關(guān)鍵字通過內(nèi)存屏障的形式來阻止指令重排,以維護變量的有序性與可見行。

一行代碼到執(zhí)行的過程中要經(jīng)歷以下的階段:

volatile 關(guān)鍵字有如下兩個作用:

  • 保證被 volatile 修飾的共享變量對所有線程總是可見的,也就是當一個線程修改了被 volatile 修飾共享變量的值,新值總是可以被其他線程立即得知。
  • 禁止指令重排序優(yōu)化。

JVM中提供了四類內(nèi)存屏障指令:

  • loadload:兩個讀取操作之間
  • storestore:兩個寫操作之間
  • loadstore:讀寫操作之間
  • storelosd:寫讀操作之間

到此這篇關(guān)于JVM 運行時數(shù)據(jù)區(qū)與JMM 內(nèi)存模型的文章就介紹到這了,更多相關(guān)JMM 內(nèi)存模型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot2如何集成ElasticSearch6.4.3

    springboot2如何集成ElasticSearch6.4.3

    這篇文章主要介紹了springboot2如何集成ElasticSearch6.4.3問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • macOS下Spring Boot開發(fā)環(huán)境搭建教程

    macOS下Spring Boot開發(fā)環(huán)境搭建教程

    這篇文章主要為大家詳細介紹了macOS下Spring Boot開發(fā)環(huán)境搭建教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Java打印流原理及實例詳解

    Java打印流原理及實例詳解

    這篇文章主要介紹了Java打印流原理及實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-02-02
  • 學(xué)Java做項目需要學(xué)習的一些技能

    學(xué)Java做項目需要學(xué)習的一些技能

    這篇文章主要介紹了學(xué)Java做項目需要學(xué)習的一些技能,例如JavaSE、Servlet、JSP等,總結(jié)了他們中需要學(xué)習的東西,都是一些經(jīng)驗總結(jié),需要的朋友可以參考下
    2014-07-07
  • Scala可變參數(shù)列表,命名參數(shù)和參數(shù)缺省詳解

    Scala可變參數(shù)列表,命名參數(shù)和參數(shù)缺省詳解

    這篇文章主要介紹了Scala可變參數(shù)列表,命名參數(shù)和參數(shù)缺省詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-06-06
  • Spring Boot集成Ehcache緩存解決方式

    Spring Boot集成Ehcache緩存解決方式

    在本篇文章里小編給大家整理的是關(guān)于Spring Boot集成Ehcache緩存解決方式,需要的朋友們可以學(xué)習下。
    2019-12-12
  • SpringData @Query和@Modifying注解原理解析

    SpringData @Query和@Modifying注解原理解析

    這篇文章主要介紹了SpringData @Query和@Modifying注解原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-08-08
  • spring?boot自動裝配之@ComponentScan注解用法詳解

    spring?boot自動裝配之@ComponentScan注解用法詳解

    @ComponentScan的作用就是根據(jù)定義的掃描路徑,把符合掃描規(guī)則的類裝配到spring容器中,下面這篇文章主要給大家介紹了關(guān)于spring?boot自動裝配之@ComponentScan注解用法的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • 淺析Java中Map與HashMap,Hashtable,HashSet的區(qū)別

    淺析Java中Map與HashMap,Hashtable,HashSet的區(qū)別

    HashMap和Hashtable兩個類都實現(xiàn)了Map接口,二者保存K-V對(key-value對);HashSet則實現(xiàn)了Set接口,性質(zhì)類似于集合
    2013-09-09
  • SpringBoot2.X Kotlin系列之數(shù)據(jù)校驗和異常處理詳解

    SpringBoot2.X Kotlin系列之數(shù)據(jù)校驗和異常處理詳解

    這篇文章主要介紹了SpringBoot 2.X Kotlin系列之數(shù)據(jù)校驗和異常處理詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04

最新評論