【エスケープかいせき】
エスケープ解析 とは?
公開:
💡 このデータ、外の誰かにも見られる?を調べる
オブジェクトなどへの参照が、メソッドやスレッドの外へ届くかを調べるコンパイラの解析。メモリ割り当てや同期の省略などを判断する材料になる。
📌 このページのポイント
- 参照がどこまで伝わるかを調べ、オブジェクトの使われる範囲を分析する
- 解析結果は、割り当ての除去や不要なロックの除去などに利用される
- 外へ出ないことだけで最適化が必ず起きるわけではなく、処理系にも依存する
エスケープって、何が逃げるの?
外に出ないと何がうれしいの?
ローカル変数に入れておけば必ず省略される?
もっと詳しく知りたい人へ
解析に合わせてコードを複雑にしたほうがよいですか?
まず読みやすい実装を保ち、実際の処理系と負荷で割り当て量などを測ります。JITでは実行時の情報や最適化の段階でも結果が変わるため、ソース上のnewの数だけでは実際の割り当て回数を断定できません。
まとめ:ざっくりこれだけ覚えればOK!
「エスケープ解析」って出てきたら「参照の届く範囲を調べて、最適化の可否を判断する解析」と思えればだいたいOK!