メモリモデル (プログラミング)
メモリモデルを使用することで、コンパイラは多数の重要な最適化を行えるようになる。loop fusionのようなコンパイラ最適化では、プログラム内のステートメントの移動が行われ、共有されている可能性がある変数の読み取り・書き込みの操作の順序に影響を与える。読み取り・書き込みの操作の変更は競合状態を引き起こすことがある。そのため、メモリモデルがなければ、一般にコンパイラは、マルチスレッドのプログラムを最適化できなくなるか、できるとしても、特殊なケースのみに限定されることになってしまう。
そのため、Javaなどの言語ではメモリモデルを実装している。メモリモデルは、同期ブロックや同期メソッドに突入する際のロックの獲得などの、よく定義された特別な同期操作を用いた同期バリアを規定している。また、メモリモデルは、同期バリアに到達した時点で、共有変数の値の変更が他のスレッドから確認できるようにすることも規定している。さらに、競合状態の完全な表記は、メモリバリアに関する順序の操作を通して定義されている。
このようなセマンティクスのおかげで、最適化コンパイラが最適化を施す際に高い自由度が与えられることになる。コンパイラは、同期バリアに到達した時点で、(共有される可能性のある)変数の値が、最適化された場合と最適化されていない場合で、ともに同じ値になることだけを保証すれば良いことになる。