1. 程式人生 > 其它 >java記憶體模型到底如何理解

java記憶體模型到底如何理解

  面試被問到java記憶體模型了,我直接回答了,記憶體模型的組成:虛擬機器棧、本地方法棧、方法區、堆、程式計數器;面試官說,出門右拐,我就不送了。。

一路上我的心都在滴血,咋地,甲骨文都背錯了了嗎?????

回來又好好百度了一番,果然是我大意了。

  1、java記憶體模型,原名 JMM。很多文章,對於java記憶體模型定義並沒有給出具體的詞語解釋,我覺得這是不太友好的,可以把解釋說的難懂一些,

無所謂,再加上詳細的解析就可以了。這裡我想表達一種名詞解釋,java記憶體模型就是為了解決多執行緒環境下,資料一致性協議的一套機制。這其實就會

涉及很多方面首先是多執行緒,其次是一致性,隱含的就是可見性,以及效能問題。所有這些問題都需要有一套規範來解決,可能解決方案不是特別完美,

但是這也是一個升級的過程,當前的java記憶體模型已經做得很好了。

  2、就是面試官在問這個問題後,我們該怎麼聊下去呢?

我覺得可以這麼回答,java記憶體模型是一套解決資料可見性,有序性的協議規範,正常情況下,資料都是在主記憶體中,而為了實現高效的讀取,對於java

記憶體模型來說,每個執行緒會維護自己的快取資料,也就是說,每個執行緒其實操作的資料是一個變數副本,在操作結束後,再將新資料寫回到主記憶體。那麼

這個過程中就會有很多問題存在,比如說資料一致性,可見性,原子性等等,為了解決這些問題,java提供了一些關鍵字來讓使用者在使用過程中顯示的避

免這些問題。比如sychronizd 、volatile

  3、這兩個關鍵字的實現原理,這裡就不說了,我感覺網上的比我講的好多了,比較我是個半吊子,以上內容如有不當之處,還請不吝指正。

參考:

https://blog.csdn.net/zwx900102/article/details/106306915