您好,登錄后才能下訂單哦!
這篇文章主要講解了“java緩存行與volatile有什么用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“java緩存行與volatile有什么用”吧!
CPU 為了更快的執行代碼。于是當從內存中讀取數據時,并不是只讀自己想要的部分。而是讀取足夠的字節來填入高速緩存行。根據不同的 CPU ,高速緩存行大小不同。如 X86 是 32BYTES ,而 ALPHA 是 64BYTES 。并且始終在第 32 個字節或第 64 個字節處對齊。這樣,當 CPU 訪問相鄰的數據時,就不必每次都從內存中讀取,提高了速度。 因為訪問內存要比訪問高速緩存用的時間多得多。
可以看出來,CPU都是很機智的,每次讀取不止把本次需要的數據讀取進緩存,還會把相鄰的數據也讀進來,但是這樣就有一個問題了,現在的CPU都是多核的,如果有一個數據同時被多個核心緩存,其中一個核心修改了這個數據的值,其他核心的緩存值就失效了,這時程序就出錯了。
那么,如何應對這種情況呢?java中,可以給字段加上volatile關鍵字,使用volatile關鍵字的字段在值被改變后會強制令其他CPU的緩存失效,也就是說一個CPU在另外一個CPU改變了volatile修飾的數據后這個CPU會重新從內存讀取而不會從緩存讀取該數據,保證讀取到的是新數據而不是失效數據。
可以看出,volatile解決了一個CPU更改數據后另外一個CPU不知道的問題,但是,如果使用不當,volatile是會降低程序效率的,下節將分析一個volatile導致的性能問題。
感謝各位的閱讀,以上就是“java緩存行與volatile有什么用”的內容了,經過本文的學習后,相信大家對java緩存行與volatile有什么用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。