Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Javaで使えるもう一つのコンパイル方式 AOT … を無理やりwindowsでやってみた話

971 visualizaciones

Publicado el

2017/12/27 のJJUG ナイトセミナー年送りビール&LT大会 でのライトニングトークの発表内容です。

Java 9 で導入されたAOTコンパイル(事前コンパイル)ですが、まだLinux版Java 9でしか動作しません。これをWindows Subsystem for Linux上で無理やり動作させたお話です。

Publicado en: Software
  • Sé el primero en comentar

Javaで使えるもう一つのコンパイル方式 AOT … を無理やりwindowsでやってみた話

  1. 1. Javaで使えるもう一つのコンパイル方式 - AOT … を無理やりWindowsでやってみた話 【東京】JJUG ナイトセミナー: 年送りビール&LT大会 2017/12/27 松原 正和 https://a5m2.mmatsubara.com
  2. 2. 松原正和 - 自己紹介 A5:SQL Mk-2の作者 ・SQL&ER図ツール 双子のパパ ・5歳になったよ 本人 https://a5m2.mmatsubara.com 20年開発してます。
  3. 3. JJUG CCC 2017 Fall (2017/11/18)にて 西川彰広さんのセッション「Javaで使えるも う一つのコンパイル方式 - AOT」が大変面白 かったです。 https://a5m2.mmatsubara.com Java 9から導入された AOTコンパイル方式のお話。
  4. 4. AOTコンパイラとは AOTコンパイラの役割 ・これまではアプリケーション開始時にJavaインタプリタが動作 →その後JITコンパイル ・事前にAOTコンパイラでclassファイルをネイティブコードに 変換 ・アプリケーション起動時にインタプリタ動作で時間がかかる のを抑制する https://a5m2.mmatsubara.com
  5. 5. やってみたい!! …だが、Java 9ではLinux版のみ!。 俺はWindowsプログラマなんだ!!。 …でも、あきらめない!。 我々にはWindows Subsystem for Linux があるじゃあないか!!。 ※ Windows Subsystem for Linuxとは Windows 上でLinuxカーネルをエミュレーションし、その上で Ubuntuとか動かしたりする。仮想化ではない。 https://a5m2.mmatsubara.com 20年来の。
  6. 6. やってみた!! 手持ちのソートアルゴリズムとか動かしてみる。 ・10,000,000件の乱数ソートを10回動かすベンチマーク https://a5m2.mmatsubara.com JITコンパイルだと、 アルゴリズムに よって初回実行が 遅いことがある。
  7. 7. コマンド ■AOTコンパイルは jaotcコマンド ■実行時オプション $ jaotc --output ../mmsort.so mmsort/*.class $ java -classpath bin -XX:AOTLibrary=./mmsort.so mmsort.SortTest mmsort.Mas4Sort 10000000 R I 10 共有ライブラリ形式で出力される -XX:AOTLibraryオプションで指定 https://a5m2.mmatsubara.com
  8. 8. 結果 ・AOTなし(JITコンパイル) 初回実行:7.6秒前後、2回目以降:5.0~5.1秒前後 ・AOTコンパイル 初回実行:8.1~8.2秒前後、2回目以降: 8.1~8.2秒前後 https://a5m2.mmatsubara.com
  9. 9. なんで? Windows Subsystem for Linuxのせい? …でもないらしい。 そもそも、JITコンパイルは「実行時の情報を利用できる」から、 高速に動くという能書きだったはず。 https://a5m2.mmatsubara.com CPU中心の処理はパフォーマンス低下はほとんどない。 ファイル操作はまだ苦手みたい。 プロセス生成が遅いという話も。
  10. 10. なんで?…その2 そもそもJITコンパイルは次の5つの段階がある。 一般的にレベルは 0→3→4と変化するらしい。 レベル2とレベル4じゃAOTコンパイル勝てない…。 レベル (Tier) コンパイラ 動作モード 0 インタプリタ 1 C1 クライアントレベル プロファイリングなし 2 基本的なプロファイリング使用 3 全てのプロファイリング使用 4 C2 サーバーレベル AOTコンパイル 方式はレベル2 相当らしい。 https://a5m2.mmatsubara.com AOTコンパイル はレベル2相当 JITコンパイルは 最終的にレベル 4になる
  11. 11. でももうちょっと何とか… デフォルトでは、AOTコンパイルしたらJITコンパイラは働かない モードらしい。オプション指定でJITコンパイラも併用できる。 ■AOTコンパイルのオプションを変える $ jaotc --compile-for-tiered --output ../mmsort.so mmsort/*.class 段階的なコンパイル…つまりJITコ ンパイルを併用するオプション https://a5m2.mmatsubara.com
  12. 12. 何とかした結果 ・AOTなし(JITコンパイル) 初回実行:7.6秒前後、2回目以降:5.0~5.1秒前後 ・AOTコンパイル(--compile-for-tieredつき) 初回実行:7.3秒前後、2回目以降: 5.0~5.1秒前後 初回実行がちょっとだけ速くなった。2回目 以降はJITコンパイラ並み!!。 https://a5m2.mmatsubara.com
  13. 13. まとめ…というか感想 ・AOTコンパイルはJITコンパイルより遅い。 ・…というか、JITコンパイルは優秀。 ・AOTコンパイル使いどころ難しい…効果もそれほど…。 ・まだ出たばかりの機能、サポートもない。これからいろいろ改 善されてくはず。 ・Windows のAOT対応はJava 10かららしい。 ・Windows Subsystem for Linux結構使える。 https://a5m2.mmatsubara.com
  14. 14. Copyright © 2017 松原正和 ご清聴ありがとうございました。 https://a5m2.mmatsubara.com

×