Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Javaで使えるもう一つのコンパイル方式 - AOT
… を無理やりWindowsでやってみた話
【東京】JJUG ナイトセミナー: 年送りビール&LT大会 2017/12/27
松原 正和
https://a5m2.mmatsubara.com
松原正和 - 自己紹介
A5:SQL Mk-2の作者
・SQL&ER図ツール
双子のパパ
・5歳になったよ
本人
https://a5m2.mmatsubara.com
20年開発してます。
JJUG CCC 2017 Fall (2017/11/18)にて
西川彰広さんのセッション「Javaで使えるも
う一つのコンパイル方式 - AOT」が大変面白
かったです。
https://a5m2.mmatsubara.com
Java 9...
AOTコンパイラとは
AOTコンパイラの役割
・これまではアプリケーション開始時にJavaインタプリタが動作
→その後JITコンパイル
・事前にAOTコンパイラでclassファイルをネイティブコードに
変換
・アプリケーション起動時にインタプリ...
やってみたい!!
…だが、Java 9ではLinux版のみ!。
俺はWindowsプログラマなんだ!!。
…でも、あきらめない!。
我々にはWindows Subsystem for Linux があるじゃあないか!!。
※ Windows S...
やってみた!!
手持ちのソートアルゴリズムとか動かしてみる。
・10,000,000件の乱数ソートを10回動かすベンチマーク
https://a5m2.mmatsubara.com
JITコンパイルだと、
アルゴリズムに
よって初回実行が
遅い...
コマンド
■AOTコンパイルは jaotcコマンド
■実行時オプション
$ jaotc --output ../mmsort.so mmsort/*.class
$ java -classpath bin -XX:AOTLibrary=./mm...
結果
・AOTなし(JITコンパイル)
初回実行:7.6秒前後、2回目以降:5.0~5.1秒前後
・AOTコンパイル
初回実行:8.1~8.2秒前後、2回目以降: 8.1~8.2秒前後
https://a5m2.mmatsubara.com
なんで?
Windows Subsystem for Linuxのせい?
…でもないらしい。
そもそも、JITコンパイルは「実行時の情報を利用できる」から、
高速に動くという能書きだったはず。
https://a5m2.mmatsubara.c...
なんで?…その2
そもそもJITコンパイルは次の5つの段階がある。
一般的にレベルは 0→3→4と変化するらしい。
レベル2とレベル4じゃAOTコンパイル勝てない…。
レベル (Tier) コンパイラ 動作モード
0 インタプリタ
1
C1 ク...
でももうちょっと何とか…
デフォルトでは、AOTコンパイルしたらJITコンパイラは働かない
モードらしい。オプション指定でJITコンパイラも併用できる。
■AOTコンパイルのオプションを変える
$ jaotc --compile-for-tie...
何とかした結果
・AOTなし(JITコンパイル)
初回実行:7.6秒前後、2回目以降:5.0~5.1秒前後
・AOTコンパイル(--compile-for-tieredつき)
初回実行:7.3秒前後、2回目以降: 5.0~5.1秒前後
初回実行...
まとめ…というか感想
・AOTコンパイルはJITコンパイルより遅い。
・…というか、JITコンパイルは優秀。
・AOTコンパイル使いどころ難しい…効果もそれほど…。
・まだ出たばかりの機能、サポートもない。これからいろいろ改
善されてくはず。
...
Copyright © 2017 松原正和
ご清聴ありがとうございました。
https://a5m2.mmatsubara.com
Nächste SlideShare
Wird geladen in …5
×

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

1.058 Aufrufe

Veröffentlicht am

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

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

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

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

×