1. 程式人生 > >java內存模型:簡單理解

java內存模型:簡單理解

共享 先後 執行 但是 順序執行 數據 結果 寄存器 mod

1.Java內存模型(Java Memory Model,JMM)

2.JMM定義了線程和主內存之間的抽象關系:線程之間的共享變量存儲在主內存(main memory)中,每個線程都有一個私有的本地內存(local memory)。

本地內存中存儲了該線程以讀/寫共享變量的副本,本地內存是JMM的一個抽象概念,並不真實存在。它涵蓋了緩存,寫緩沖區,寄存器以及其他的硬件和編譯器優化。

3.指令重排序,一般來說,處理器為了提高程序運行效率,可能會對輸入代碼進行優化,它不保證程序中各個語句的執行先後順序同代碼中的順序一致,但是它會保證程序最終執行結果和代碼順序執行的結果是一致的。

重排序分為三種:

a.編譯器優化的重排序。編譯器在不改變單線程程序語義的前提下,可以重新安排語句的執行順序。
b.指令級並行的重排序。現代處理器采用了指令級並行技術(Instruction-Level Parallelism, ILP)來將多條指令重疊執行。

如果不存在數據依賴性,處理器可以改變語句對應機器指令的執行順序。
c.內存系統的重排序。由於處理器使用緩存和讀/寫緩沖區,這使得加載和存儲操作看上去可能是在亂序執行。

java內存模型:簡單理解