主記憶體和工作記憶體怎麼理解?

時間 2021-05-29 22:26:51

1樓:Butters

這個問題,本質上是對應於實際上CPU和記憶體的關係模型。尤其是多核心的CPU和記憶體的關係。

首先,CPU是無法直接對記憶體中的資料進行計算的,CPU的計算是這樣的:

CPU把記憶體中的資料載入到暫存器中;

對暫存器中的資料進行計算;

把計算後的資料寫回到記憶體中;

而且,在CPU和記憶體中間還有幾層高速的快取。

所以,JVM在設計的時候,其實就是對底層的CPU和記憶體的關係進行了乙個抽象。那麼,這些概念就是對應於實際中的角色的:

主記憶體:就是對應於計算機的記憶體;

工作記憶體:對應於CPU中的暫存器和快取等等,而由於有多核的存在,這個工作記憶體也會有多個存在。這個概念和執行緒私有的記憶體還是不一樣的,執行緒私有的記憶體,其實是棧記憶體。

由於有工作記憶體的存在,而且可能是分布在不同的CPU核心中,所以就會有資料的「可見行問題」:

可見性問題,本質上就是當有多CPU核心中的多個執行緒,同時在對乙個主記憶體中的共享資料進行修改的時候,其中乙個核心修改之後,其他的核心需要知道這個變數被修改了,以便把自己核心中的快取給失效了,然後去主存中重新讀取。

2樓:

我個人理解jvm主記憶體和工作記憶體是和實際cpu工作模式對應的(對cpu的一種抽象).cpu是無法直接操作記憶體的,必須先讀入暫存器再操作,所以jvm同樣如此設計.jvm主記憶體對應記憶體,jvm工作記憶體對應暫存器(還包括快取).

大致就是如此.

怎樣理解 Mac OS 的 記憶體壓力 和實際記憶體占用有何異同

記憶體壓力是乙個指示器,表示系統滿足使用者活動的記憶體要求的能力。較高記憶體壓力表示系統即將達到極限,並且效能可能降低。物理記憶體 此電腦上安裝的記憶體總量。已快取檔案 為提高效能,由系統快取入未使用的記憶體大小。已使用的交換 暫時移至磁碟,以便在記憶體中為最近使用的資料騰出空間的記憶體壓縮量。 看...

記憶體洩漏和記憶體溢位有啥區別?

碼樂樂 記憶體溢位,申請不到足夠的記憶體 記憶體洩露,無法釋放已申請的記憶體 兩者關係 記憶體洩露 剩餘記憶體不足 後續申請不到足夠記憶體 記憶體溢位。 5險1金3頓飯 看了通篇的回覆,大家都在用 與水有關的場景 打比方,能看懂,因為大同小異 大家都理解這個意思 我在想,能否舉1個 與水沒有關係的場...

c 怎麼檢測記憶體洩露,怎麼定位記憶體洩露?

忘憂北萱草 C Bulilder 2007以上版本支援 ReporterMemoryLeakOnShutdown 變數,設定為 True 就能自動監測記憶體洩露。 低球 有興趣的話可以看看這個 裡面有很多很詳細的文件。ASAN的話效能也是很不錯的,wiki裡面也有和其他工具的比較 比如 Valgri...