Escape Analysis 続き
ここ の続き。幾つかまた参考リンクを発見。
- http://developer.amd.com/documentation/Articles/pages/01302008_jvm.aspx
- http://www.cag.lcs.mit.edu/~rinard/pointer_and_escape_analysis/
- Java 6のスレッド最適化は実際に動作しているのか? - パートII
Escape Analysis 自体はざっくりと雰囲気をつかむと、
- ローカルスコープでしか利用されていないオブジェクトをヒープ割当でなくスタック割当に変更
- 「エスケープしない」オブジェクトメソッドで、同期を要求するメソッドを同期実行しない
- この辺りを動的コンパイル時に判断して最適化
といった雰囲気な模様(多分他にも色々ある)。ただ、上述の AMD のサイトにあるコードを実行してもあまり大差でないですね。。。
同期化コードについては、そもそも自分で synchronized 使うときはよく気をつけなはれ、と言われればそれまで。そこは自分で頑張ろう。ただ、例えば依存ライブラリの深い所で利用されている synchronized とかがある場合には効くかもしれないのかな、といった所でしょうか。変数のインライン化でのオブジェクトの割当位置の変更は結構効くような気もします。パフォーマンス的な観点では、UseBiasedLocking の方が効きそうな雰囲気ですねー、InfoQ の記事を読む限り。