Java Virtual Machine 高速化のためのbyte code 解析 An analysis of byte code to improve the performance of Java Virtual Machine 5401812 鈴木タカハル 谷研究室 Feb, 2003
JVM高速化のためのbytecode解析 目次 研究の目的、概要 調査概要 調査方法 結果 考察 今後の課題 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 特定の実装を指さない仮想マシン JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 研究の目的、概要 動機付け Write Once, Run Anywhere ™ JVMはインタプリタ 実行速度が遅い 高速化したい JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 研究の目的、概要 研究の目的 JVM の高速化 高速化を実現させる為に、 bytecode の解析 この結果から、効果的な高速化の可能性を提示 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 研究の目的、概要 調査の概要 bytecode の頻度を取る 連続する bytecode の頻度を取る JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 調査概要 どうしたら速くなるのか プログラム:ABCA A A B B C C C A A 元データ Bを高速化 Aを高速化 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 調査概要 命令Aを見つける為に bytecode に含まれる命令の頻度を取る 頻度の低いものより最適 頻度の高いものを高速化する 高速化: 命令をアセンブラで書く CPUのキャッシュ率を上げる JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 調査概要 命令ごとの実行速度の偏り A B A B C C C A A JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 調査概要 連続する命令に対して プログラム:A D B E C F A D AD AD BE B E C F CF CF AD AD JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 調査概要 連続する命令に対して どのプログラムでも出現する頻度の高い命令の組み合わせを探す JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 調査方法 出現頻度に関する調査 bytecode に含まれる命令の頻度を取る 80%、90%被覆を取る 何個の命令で、プログラムの80%, 90% をカバー出来るか JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 調査方法 連続性に関する調査 連続する命令の頻度を取る 2連続、5連続 10連続で頻出した命令を、再現出来るか実験 命令の予測など 命令 : A B C D E F G H I J A B C D E F G H I J JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 調査方法 MIPSとの比較調査 連続性に関して、bytecode と MIPS とで差異を取る ls httpd kaffe JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 調査方法 調査対象 対象: JDK 1.4.1 パッケージ lang, io, net, util, awt JDKに含まれる全ての class file eclipse 2.0.2 :開発環境 Jetty 4.2.3 :WEBサーバ OpenOffice 1.0.2 :Word, Excel, ppt yFiles2.0.1 :クラスライブラリ robocode 1.0.6 :ロボコード JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 調査方法 システム class file から bytecode を抜き出す bytecode から 出現頻度を得る bytecode の連続性を取る bytecode を視覚化する class file から constant pool を抜き出す データを統合し、統計を取る 以上の操作を自動で行う JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 出現頻度の結果 : JDK 1.4.1 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 考察 出現頻度に関する考察 パッケージ、アプリケーションの差異にかかわらず、上位の命令は同一 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 80%、90%被覆の結果 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 考察 80%被覆に対する考察 パッケージやアプリケーションによって差異がある JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 結果 連続性の結果:2連続 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 結果 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 考察 2連続する命令の考察 パッケージ、アプリケーションの差異にかかわらずほぼ同一 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 結果 連続性の結果:5連続 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 考察 5連続に対する考察 パッケージ、アプリケーションによって同一のものが上位に来るとは限らない JDKと OpenOffice は、ほぼ同一 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 結果 連続性の被覆率:2連続 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 結果 連続性の被覆率:5連続 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 結果 連続性の被覆率:10連続 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 考察 連続性に対する考察 命令の連続数が増えるのに比例して、被覆率は低くなる OpenOffice が高い被覆率 JDKもやや高い JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 結果 連続性の被覆率:MIPS 2連続 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 結果 連続性の被覆率:MIPS 5連続 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 結果 連続性の被覆率:MIPS 10連続 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 考察 MIPSとの比較に対する考察 MIPSはjavaに比べ、均等に命令が出てくる傾向 Java の命令の連続性はユニークと言えるのではないか JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 再現性の結果 結果 aload_0 ...c2...c3...c4...c5...c6...c7...c8...c9...c10 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 結果 再現性の結果 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 結果 再現性の結果 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 考察 再現性の考察 sastoreで始まる命令の列は、JDK, OpenOffice において顕著な再現性 java.net は、若干再現性が高い 被覆率が低かったことと関係しているのか? JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 考察 まとめ 出現する命令の頻度はほぼ同一 連続性に関しては、差異が見られる 被覆率や再現性は差異が見られる JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 今後の課題 今後の課題 より詳しい検証 命令の連続性の調査をもっと行う 200連続する命令があるclass fileの検証 JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 今後の課題 今後の課題 動的処理 動的統計が取れると、より詳しい情報が読める JVM高速化のためのbytecode解析
JVM高速化のためのbytecode解析 今後の課題 今後の課題 実際に実装し、検証をする 何パーセントのパフォーマンス向上が見られるか JVM高速化のためのbytecode解析