エスケープ解析と粗粒度ロック
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/14 21:52 UTC 版)
「Javaの性能」の記事における「エスケープ解析と粗粒度ロック」の解説
「ロック_(情報工学)」および「エスケープ解析」を参照 Javaは言語レベルでマルチスレッドに対応している。マルチスレッドとは、下記のようなことを可能にする技術である。 並行コンピューティング - 例えばプログラムがバックグラウンドでタスクを実行中であってもユーザーがGUIを操作できるようにすることで、応答性やユーザーに与える印象を改善する 並列コンピューティング - 例えばマルチコアプロセッサのアーキテクチャを活かして、依存関係のない複数の作業を異なるコアで同時に実行し、処理時間を削減する しかし、マルチスレッドを使用するプログラムは、スレッド間で共有されるオブジェクトやメソッド、コードブロックに開発者が特別な注意を払う必要がある。またオブジェクトやコードブロックをロックすることは、それに伴うOSの性質によって時間のかかる操作である(並行性制御やロックの粒度を参照)。 Javaライブラリにはどのメソッドが複数のスレッドから使用されるか分からないため、マルチスレッド環境で使用される標準的なライブラリは常にコードブロックのロックを行っている。 Java 6以前では、複数の異なるスレッドが同時にオブジェクトを変更するリスクがない場合でも、仮想マシンはオブジェクトやコードブロックのロックをプログラムの要求にしたがって行っていた(ロックの実装を参照)。例えば、ローカル変数のVectorがあり、それに対する add 操作を行う際、それが確実にローカルでしか使用されずロックが不要である状況でも、同時に他のスレッドから変更されないようロックを行っていた。 public String getNames() { Vector v = new Vector(); v.add("Me"); v.add("You"); v.add("Her"); return v.toString();} Java 6では、コードブロックやロックは必要なときだけロックされるようになり 、上記の例では仮想マシンはVectorオブジェクトのロックを行わない。 バージョン 6 Update 14で、Javaは実験的ながらエスケープ解析をサポートするようになった。
※この「エスケープ解析と粗粒度ロック」の解説は、「Javaの性能」の解説の一部です。
「エスケープ解析と粗粒度ロック」を含む「Javaの性能」の記事については、「Javaの性能」の概要を参照ください。
- エスケープ解析と粗粒度ロックのページへのリンク