日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 内存模型 ——学习笔记

發布時間:2024/9/21 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 内存模型 ——学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Java 內存模型

java內存模型把 Java 虛擬機內部劃分為線程棧和堆

?

下面這張圖演示了調用棧和本地變量存放在線程棧上,對象存放在堆上。

? ? ?==》》?

?

一個局部變量可能是原始類型,在這種情況下,它總是“呆在”線程上。

一個局部變量也可能是指向一個對象的一個引用。在這種情況下,引用(這個本地變量)存放在線程棧上,但是對象本身存放在堆上。

一個對象可能包含方法,這些方法可能包含局部變量。這些本地變量任然存放在線程棧上,即使這些方法所屬的對象存放在堆上。

一個對象的成員變量可能隨著這個對象自身存放在上。不管這個成員變量是原始類型還是引用類型。

靜態成員變量跟隨著類定義一起也存放在上。

存放在堆上的對象可以被所有持有對這個對象引用的線程訪問。當一個線程可以訪問一個對象時,它也可以訪問這個對象的成員變量。如果兩個線程同時調用同一個對象上的同一個方法,它們將會都訪問這個對象的成員變量(共享),但是每一個線程都擁有這個方法內局部變量的私有拷貝。

?

二、計算機硬件內存模型

?

?

三、java內存模型與硬件內存架構之間橋接

?

Java 內存模型與硬件內存架構之間存在差異。硬件內存架構沒有區分線程棧和堆。對于硬件,所有的線程棧和堆都分布在主內中。部分線程棧和堆可能有時候會出現在 CPU 緩存中和 CPU 內部的寄存器中。

?

?

當對象和變量被存放在計算機中各種不同的內存區域中時,就可能會出現一些具體的問題。主要包括如下兩個方面:

  • 線程對共享變量修改的可見性 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?=》共享變量加上volatile 關鍵字
  • 當讀,寫和檢查共享變量時出現 race conditions ? ? ? =》同步解決,同步塊還可以保證代碼塊中所有被訪問的變量將會從主存中讀入,當線程退出同步代碼塊時,所有被更新的變量都會被刷新回主存中去,不管這個變量是否被聲明為 volatile。

?

轉載于:https://www.cnblogs.com/lwcoding/p/6656589.html

總結

以上是生活随笔為你收集整理的java 内存模型 ——学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。