在執行程序時爲了提升性能,編譯器和處理器常常會對指令進行重排序。重排序分紅三種類型:緩存
- 編譯器優化的重排序。編譯器在不改變單線程程序語義放入前提下,能夠從新安排語句的執行順序。
- 指令級並行的重排序。現代處理器採用了指令級並行技術來將多條指令重疊執行。若是不存在數據依賴性,處理器能夠改變語句對應機器指令的執行順序。
- 內存系統的重排序。因爲處理器使用緩存和讀寫緩衝區,這使得加載和存儲操做看上去多是在亂序執行。
從Java源代碼到最終實際執行的指令序列,會通過下面三種重排序:性能
源代碼--->1:編譯器優化重排序--->2:指令級並行衝排序--->3:內存系統重排序--->最終執行的指令序列優化