エスケープ解析エスケープ解析(エスケープかいせき、英: Escape analysis)とは、コンパイラ最適化理論において、ポインタの動的なスコープを特定するための方法である。エスケープ解析は、ポインタ解析やシェープ解析と関連している。 サブルーチンにおいて変数やオブジェクトが割り当てられるとき、変数へのポインタが、別の実行スレッドや呼び出し元のルーチンに「エスケープ」してしまうことがある。サブルーチンがオブジェクトを割り当て、これに対するポインタを返却すると、オブジェクトはプログラム内の不定の場所からアクセスすることができる。ポインタがグローバル変数やその他のデータ構造に格納された場合にも、現在の処理からエスケープしたと考えることができる。 エスケープ解析は、ポインタが格納されうるすべての場所を特定し、ポインタの生存区間を現在の関数やスレッド内のみに限定してよいかどうかを判断する。 最適化コンパイラはエスケープ解析の結果を、最適化のための土台として用いる。
実用上の考慮点オブジェクト指向プログラム言語では、動的コンパイラがエスケープ解析を行いうる特に有力な候補である。伝統的な静的コンパイルによるメソッドのオーバーライドでは、エスケープ解析が不可能な場合がある。あるメソッドが、ポインタをエスケープする別のバージョンのメソッドによりオーバーライドされる可能性があるためである。動的コンパイラはオーバーロードについての情報を元にエスケープ解析を行い、動的ローディングによってメソッドがオーバーライドされた場合には再度解析を実施することができる。 エスケープ解析は Java 言語により特に興味の対象となってきた。Java のヒープに限定したオブジェクトの割り当て、スレッドのサポート、Sun の HotSpot 動的コンパイラ、という組み合わせが、エスケープ解析に関連した最適化の有望なプラットフォームを作り出している。(Escape analysis in Java参照)。エスケープ解析は、Java Standard Edition 6 で実装されている。 関連項目 |