10. JIT コンパイラの気持ちになって
JavaOne Tokyo 2012
How to Write Low Latency Java Applications
What you need to know about JIT compilation
ポイント
Optimization impact from "method inlining"
11. JIT コンパイラの気持ちになって
JavaOne Tokyo 2012
How to Write Low Latency Java Applications
What you need to know about JIT compilation
ポイント
Optimization impact from "method inlining"
結論
●
● JIT コンパイラのことなんて気にしなくていいよ(^^;
● 後でボトルネック調査して最適化しろ
12. Method inlining と脱仮想化について
Product P = ...
interface Product { ...
public void invoke(); P.invoke();// 仮想関数呼び出し
}
...
class ProductA{
public void invoke() {
//...
System.out.println("hello");
}
}
13. Method inlining と脱仮想化について
Product P = ...
interface Product { ...
public void invoke(); P.invoke();// 仮想関数呼び出し
}
...
呼び出し先が一意に決まる
直接呼び出しに置換して
インライン展開しちゃう。
class ProductA{
public void invoke() {
Product P = ...
//... ...
System.out.println("hello"); { //ProductA.invoke();
} //...
}
Direct devirtialization System.out.println("hello");
Method inlining
}
...
15. Method inlining と脱仮想化について
public interface Product {
public void invoke();
}
クラスローダーが
後から読み込んだら
Interface を
実装するクラスが
複数あったら?
public class ProductB{
public void invoke() {
//...
System.out.println(”world");
public class ProductA{ }
public void invoke() { }
//...
System.out.println("hello");
}
}
28. オプションで確認する。
XX:+UnlockDiagnosticVMOptions XX:+PrintInlining
XX:+PrintCompilation
XX:+PrintOptoAssembly
JVM のオプションは下記スライドが詳しい。
Øredev 2011 JVM JIT for Dummies (What the JVM Does
With Your Bytecode When You're Not Looking)
29. JIT コンパイラの生成したコード
JVM が JIT コンパイルしたアセンブラを読むのは
結構おもろい
OpenJDK を debug 版でビルドしてチャレンジ
XX:+PrintOptoAssembly
C2 で JIT コンパイル
public static long testCompare() { 52byte
long sum=0;
String base = new String("abcdefghijklmnopqrstuvwxyz5555");
for (int i=0; i<TEST_LENGTH; i++) {
sum += base.compareTo(sarray.get(i%INIT_LENGTH));
}
return sum;
}