亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java內存模型

2019-11-06 06:19:59
字體:
來源:轉載
供稿:網友

學習java的同學注意了!!! 學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:523047986  我們一起學Java!

1. 概述

  多任務和高并發是衡量一臺計算機處理器的能力重要指標之一。一般衡量一個服務器性能的高低好壞,使用每秒事務處理數(Transactions Per Second,TPS)這個指標比較能說明問題,它代表著一秒內服務器平均能響應的請求數,而TPS值與程序的并發能力有著非常密切的關系。在討論Java內存模型和線程之前,先簡單介紹一下硬件的效率與一致性。

2.硬件的效率與一致性

  由于計算機的存儲設備與處理器的運算能力之間有幾個數量級的差距,所以現代計算機系統都不得不加入一層讀寫速度盡可能接近處理器運算速度的高速緩存(cache)來作為內存與處理器之間的緩沖:將運算需要使用到的數據復制到緩存中,讓運算能快速進行,當運算結束后再從緩存同步回內存之中沒這樣處理器就無需等待緩慢的內存讀寫了?! 』诟咚倬彺娴拇鎯换ズ芎玫亟鉀Q了處理器與內存的速度矛盾,但是引入了一個新的問題:緩存一致性(Cache Coherence)。在多處理器系統中,每個處理器都有自己的高速緩存,而他們又共享同一主存,如下圖所示:多個處理器運算任務都涉及同一塊主存,需要一種協議可以保障數據的一致性,這類協議有MSI、MESI、MOSI及Dragon PRotocol等。Java虛擬機內存模型中定義的內存訪問操作與硬件的緩存訪問操作是具有可比性的,后續將介紹Java內存模型。

  除此之外,為了使得處理器內部的運算單元能竟可能被充分利用,處理器可能會對輸入代碼進行亂起執行(Out-Of-Order Execution)優化,處理器會在計算之后將對亂序執行的代碼進行結果重組,保證結果準確性。與處理器的亂序執行優化類似,Java虛擬機的即時編譯器中也有類似的指令重排序(Instruction Recorder)優化。

3.Java內存模型

  定義Java內存模型并不是一件容易的事情,這個模型必須定義得足夠嚴謹,才能讓Java的并發操作不會產生歧義;但是,也必須得足夠寬松,使得虛擬機的實現能有足夠的自由空間去利用硬件的各種特性(寄存器、高速緩存等)來獲取更好的執行速度。經過長時間的驗證和修補,在JDK1.5發布后,Java內存模型就已經成熟和完善起來了。

3.1 主內存與工作內存

  Java內存模型的主要目標是定義程序中各個變量的訪問規則,即在虛擬機中將變量存儲到內存和從內存中取出變量這樣底層細節。此處的變量與Java編程時所說的變量不一樣,指包括了實例字段、靜態字段和構成數組對象的元素,但是不包括局部變量與方法參數,后者是線程私有的,不會被共享。

  Java內存模型中規定了所有的變量都存儲在主內存中,每條線程還有自己的工作內存(可以與前面將的處理器的高速緩存類比),線程的工作內存中保存了該線程使用到的變量到主內存副本拷貝,線程對變量的所有操作(讀取、賦值)都必須在工作內存中進行,而不能直接讀寫主內存中的變量。不同線程之間無法直接訪問對方工作內存中的變量,線程間變量值的傳遞均需要在主內存來完成,線程、主內存和工作內存的交互關系如下圖所示,和上圖很類似。

這里的主內存、工作內存與Java內存區域的Java堆、棧、方法區不是同一層次內存劃分。

3.2 內存間交互操作

  關于主內存與工作內存之間的具體交互協議,即一個變量如何從主內存拷貝到工作內存、如何從工作內存同步到主內存之間的實現細節,Java內存模型定義了以下八種操作來完成:

lock(鎖定):作用于主內存的變量,把一個變量標識為一條線程獨占狀態。unlock(解鎖):作用于主內存變量,把一個處于鎖定狀態的變量釋放出來,釋放后的變量才可以被其他線程鎖定。read(讀?。鹤饔糜谥鲀却孀兞浚岩粋€變量值從主內存傳輸到線程的工作內存中,以便隨后的load動作使用load(載入):作用于工作內存的變量,它把read操作從主內存中得到的變量值放入工作內存的變量副本中。use(使用):作用于工作內存的變量,把工作內存中的一個變量值傳遞給執行引擎,每當虛擬機遇到一個需要使用變量的值的字節碼指令時將會執行這個操作。assign(賦值):作用于工作內存的變量,它把一個從執行引擎接收到的值賦值給工作內存的變量,每當虛擬機遇到一個給變量賦值的字節碼指令時執行這個操作。store(存儲):作用于工作內存的變量,把工作內存中的一個變量的值傳送到主內存中,以便隨后的write的操作。write(寫入):作用于主內存的變量,它把store操作從工作內存中一個變量的值傳送到主內存的變量中。

  如果要把一個變量從主內存中復制到工作內存,就需要按順尋地執行read和load操作,如果把變量從工作內存中同步回主內存中,就要按順序地執行store和write操作。Java內存模型只要求上述操作必須按順序執行,而沒有保證必須是連續執行。也就是read和load之間,store和write之間是可以插入其他指令的,如對主內存中的變量a、b進行訪問時,可能的順序是read a,read b,load b, load a。Java內存模型還規定了在執行上述八種基本操作時,必須滿足如下規則:

不允許read和load、store和write操作之一單獨出現不允許一個線程丟棄它的最近assign的操作,即變量在工作內存中改變了之后必須同步到主內存中。不允許一個線程無原因地(沒有發生過任何assign操作)把數據從工作內存同步回主內存中。一個新的變量只能在主內存中誕生,不允許在工作內存中直接使用一個未被初始化(load或assign)的變量。即就是對一個變量實施use和store操作之前,必須先執行過了assign和load操作。一個變量在同一時刻只允許一條線程對其進行lock操作,lock和unlock必須成對出現如果對一個變量執行lock操作,將會清空工作內存中此變量的值,在執行引擎使用這個變量前需要重新執行load或assign操作初始化變量的值如果一個變量事先沒有被lock操作鎖定,則不允許對它執行unlock操作;也不允許去unlock一個被其他線程鎖定的變量。對一個變量執行unlock操作之前,必須先把此變量同步到主內存中(執行store和write操作)。

 3.3 重排序

  在執行程序時為了提高性能,編譯器和處理器經常會對指令進行重排序。重排序分成三種類型:

編譯器優化的重排序。編譯器在不改變單線程程序語義放入前提下,可以重新安排語句的執行順序。指令級并行的重排序。現代處理器采用了指令級并行技術來將多條指令重疊執行。如果不存在數據依賴性,處理器可以改變語句對應機器指令的執行順序。內存系統的重排序。由于處理器使用緩存和讀寫緩沖區,這使得加載和存儲操作看上去可能是在亂序執行。

從Java源代碼到最終實際執行的指令序列,會經過下面三種重排序:

為了保證內存的可見性,Java編譯器在生成指令序列的適當位置會插入內存屏障指令來禁止特定類型的處理器重排序。Java內存模型把內存屏障分為LoadLoad、LoadStore、StoreLoad和StoreStore四種:

3.4 同步機制

介紹volatile、synchronized和final

3.5 原子性、可見性與有序性

介紹三個特性

學習Java的同學注意了!?。?nbsp;學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:523047986  我們一起學Java!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品中文字幕av| 日韩欧美国产网站| 欧美亚洲第一页| 欧美在线观看视频| 欧美激情中文字幕乱码免费| 亚洲人午夜精品免费| 色狠狠久久aa北条麻妃| 色偷偷888欧美精品久久久| 免费成人高清视频| 欧美最猛性xxxxx亚洲精品| 久久精品人人爽| 欧美日韩国产精品| 91久久久久久久久久久久久| 精品国产欧美一区二区三区成人| 日韩禁在线播放| 国产精品99久久久久久白浆小说| 国产精品久久久av| 2019中文字幕在线| 国产主播在线一区| 91美女高潮出水| 亚洲视频视频在线| 日韩网站免费观看| 日韩中文字幕在线视频| 国产精品午夜国产小视频| 性欧美xxxx交| 一区二区三区 在线观看视| 日韩视频在线观看免费| 亚洲欧美日韩精品久久奇米色影视| 欧美成人剧情片在线观看| 国产精品视频白浆免费视频| 日韩欧美国产中文字幕| 欧美日韩国产一区二区| 2019最新中文字幕| 97涩涩爰在线观看亚洲| 国产69精品99久久久久久宅男| 成人美女免费网站视频| 国产女人18毛片水18精品| 国产69久久精品成人看| 久久久亚洲影院| 亚洲国产日韩欧美在线99| 亚洲天堂av高清| 国产日韩欧美视频| 色婷婷综合久久久久中文字幕1| 国产成人福利网站| 久久天堂电影网| 最近2019中文字幕一页二页| 精品视频www| 成人在线播放av| 亚洲片在线资源| 日韩av在线一区二区| 欧美激情影音先锋| 亚洲黄色av女优在线观看| 久久久久久国产精品久久| 欧美在线免费观看| 久久视频在线直播| 日韩电影大片中文字幕| 国产精品美女久久久久av超清| 久久久精品国产一区二区| 国产美女久久精品香蕉69| 中文字幕亚洲国产| 亚洲网站在线看| 久久久噜噜噜久久中文字免| 久久久噜久噜久久综合| 久久的精品视频| 国产成人精品免高潮在线观看| 欧美主播福利视频| 91av在线精品| 久久久久久久久久久久av| 国内精品视频一区| 最近2019年中文视频免费在线观看| 国产精品美女免费看| 欧美性极品xxxx做受| 91精品国产成人www| 欧美一级电影久久| 欧美在线视频观看| 4p变态网欧美系列| 亚洲人成网站999久久久综合| 欧美国产日韩二区| 欧美精品国产精品日韩精品| 国产日韩av在线播放| 日韩欧美a级成人黄色| 日韩视频在线免费观看| 欧美人在线观看| 中文字幕国产精品久久| 久色乳综合思思在线视频| 日韩精品在线私人| 日本精品一区二区三区在线播放视频| 欧美一级黄色网| 欧美自拍视频在线| 国产成人精品a视频一区www| 国产精品福利无圣光在线一区| 久久精品国产一区二区电影| 亚洲国产日韩欧美在线图片| 国产精品美女www爽爽爽视频| 米奇精品一区二区三区在线观看| 亚洲免费成人av电影| 国产精品扒开腿做爽爽爽男男| 国产午夜精品美女视频明星a级| 亚洲午夜小视频| 久久福利网址导航| 97精品一区二区三区| 欧美激情性做爰免费视频| 一区三区二区视频| 国内精品久久久久久中文字幕| 亚洲美女av在线| 91中文字幕在线| 日韩av网站电影| 美日韩精品视频免费看| 在线播放国产一区中文字幕剧情欧美| 国产91精品最新在线播放| 日韩欧美中文字幕在线观看| 欧美视频中文在线看| 欧美激情手机在线视频| 国产69精品久久久久9| 国产在线精品成人一区二区三区| 大胆欧美人体视频| 久久久久久国产精品三级玉女聊斋| 国产精品夜色7777狼人| 色综合久久久久久中文网| 亚洲一区二区久久久久久| 欧美高清视频免费观看| 美女啪啪无遮挡免费久久网站| 国产精品国产福利国产秒拍| 亚洲黄色有码视频| 青草成人免费视频| 国产日本欧美视频| 亚洲va欧美va国产综合剧情| 亚洲欧美综合精品久久成人| 久久精品视频免费播放| 久久久久久美女| 久久精品国产99国产精品澳门| 国语自产偷拍精品视频偷| 久久精品99国产精品酒店日本| 欧美放荡办公室videos4k| 欧美一区三区三区高中清蜜桃| 91黑丝在线观看| 久久久久久亚洲精品不卡| 亚洲精品影视在线观看| 国产视频亚洲精品| 91经典在线视频| 91精品综合久久久久久五月天| 日韩美女免费视频| 狠狠色狠狠色综合日日小说| 91av在线看| 伊人久久久久久久久久久久久| 亚洲第一综合天堂另类专| 久久精品夜夜夜夜夜久久| 91av在线网站| 国产精品福利在线| 中文字幕亚洲情99在线| 亚洲最大的av网站| 国产精品人成电影在线观看| 国产精品9999| 国产精品久久久久久久久久新婚| 国内精品一区二区三区| 琪琪第一精品导航| 国产精品人成电影| 中文字幕亚洲情99在线| 日本高清不卡在线| 色综合久久天天综线观看| 日韩av网址在线观看| 黄色一区二区三区| 欧美日韩午夜剧场| 久久久精品亚洲|