Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introduction to GraalVM

358 views

Published on

2019/07/06 KanJava JUG Event
https://kanjava.connpass.com/event/134390/
* GraalVMが照らす未来/ Introduction to GraalVM

多言語対応の仮想マシンGraalVMは、通常のJVMとしての利用に加え、JavaScriptやRuby、Pythonなど他の言語の実行環境としても利用でき、すべての言語間で相互利用できます。また、JITコンパイラの機能を利用して、ネイティブイメージを作成し、JVMを利用せずにアプリケーションを実行できます。ネイティブイメージは、MicronautやQuarkus、Helidonといった最新のフレームワークが対応しており、この機能を利用して起動時間の短縮を図っています。このセッションでは、GraalVMの概要や基礎を説明します。

Published in: Technology
  • Be the first to comment

Introduction to GraalVM

  1. 1. GraalVMが照らす未来 関西Javaエンジニアの会 阪田 浩一 #kanjava
  2. 2. About Me • 阪田 浩一 (Koichi Sakata) • KanJava JUG Leader/Founder • • Twitter: @jyukutyo • Blog: sakatakoichi.com • JVMになりたい人 – GCとJITコンパイラに関心
  3. 3. http://www.graalvm.org/
  4. 4. Today’s Target つかみづらい GraalVMの概要を 把握する
  5. 5. Question GraalVMは JVM?
  6. 6. GraalVMは JVMの機能を すべて包含します
  7. 7. 既存のJVMにできることは すべてできます
  8. 8. ベースはHotSpot VM
  9. 9. ただし、 JITコンパイラが 異なります
  10. 10. HotSpotVM Compiler Interface C2C1 HotSpotVM C++
  11. 11. GraalVM Compiler Interface GraalC1 HotSpotVM JVMCI Java
  12. 12. GraalVM ≠ Graal
  13. 13. Graalは Javaで書かれた JITコンパイラ
  14. 14. Graalは GraalVMの機能の核
  15. 15. GraalはJDKにもある http://openjdk.java.net/jeps/317
  16. 16. Java 10以降でGraalを使う java -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler -XX:+PrintCompilation Main
  17. 17. Summary • GraalVMは –JVMにできることがすべてできる –JITコンパイラGraalとは異なる
  18. 18. Graal JITコンパイラの 何がいいの?
  19. 19. Pros 1. Javaで書かれている – C++で書かれたC2は、複雑化した – コントリビュートを受けやすく
  20. 20. Pros 2. Graal向けに作られた 言語実装用フレームワークTruffleが ある
  21. 21. Truffle • トラフル(トリュフ) • 言語実装用フレームワーク – ASTインタプリタ構築の基盤を提供する
  22. 22. Truffleで実装した言語を (Graalを通し) GraalVM上で実行できる
  23. 23. 何がうれしいの?
  24. 24. さまざまな言語を 実行できる環境として 高パフォーマンス
  25. 25. Polyglot on the JVM with Graal
  26. 26. さらに、その言語間で 相互に呼び出しできる
  27. 27. Truffleでの言語実装 HotSpot VM JVMCI Graal JVM Lang Truffle LLVMJS R Ruby C C++ Fortran Interpreter
  28. 28. Truffleでの言語実装 • TruffleRuby (Ruby) – https://github.com/graalvm/truffleruby • FastR (GNU R) – https://github.com/graalvm/fastr • Graal.js (JavaScript) – ECMAScript 2018/Node.js 10.15.0 – https://github.com/graalvm/graaljs • SimpleLanguage (学習用) – https://github.com/graalvm/simplelanguage
  29. 29. Interoperability
  30. 30. Java <-> Truffle言語 はもちろん
  31. 31. Truffle言語間でも (Ruby <-> JavaScriptなど)
  32. 32. e.g.) Call Ruby code from JavaScript
  33. 33. Execute Ruby Code in JavaScript js> var array = Polyglot.eval("ruby", "[1,2,42,4]") js> array[2] 42 [GRAALVM_HOME]/bin/polyglot --shell --jvm https://www.sakatakoichi.com/entry/graalvmpolyglot
  34. 34. デバッグ
  35. 35. Debug on Chrome
  36. 36. デモ
  37. 37. 自分で言語を実装することも • 四則演算する言語を実装してみた – https://github.com/jyukutyo/JVM-Math-Language
  38. 38. GraalVMとは 高パフォーマンスな 多言語実行環境
  39. 39. Polyglot = 多言語を実行できる
  40. 40. GraalVM • 研究から生まれたプロダクト – Oracle Labs – ヨハネス・ケプラー大学 • オーストリア • Compiler and JVM Research at JKU – GraalやTruffleについての論文多数 • 大学内にOracle Labsのブランチがある • オープンソース(Community Edition: 後述) • https://github.com/oracle/graal
  41. 41. Now working for Windows
  42. 42. Summary • GraalVMは –高パフォーマンスな多言語実行環境 –Polyglot VM
  43. 43. ネイティブイメージ化は 何なの?
  44. 44. Custom Part in GraalVM • Graal – JIT Compiler • Truffle – Language Implementation Framework • Substrate VM – Runtime Library and Tools for Java AOT Compiled Code
  45. 45. AOTコンパイル (Ahead-of-Time) = 事前コンパイル
  46. 46. 実行可能な ネイティブイメージに コンパイルすること
  47. 47. つまり、JVM不要 クラスロードなし
  48. 48. 起動が高速になる!
  49. 49. JITコンパイルしないので ピーク時の パフォーマンスは落ちる
  50. 50. AOTコンパイルは JITコンパイルと 違うのでは…?
  51. 51. AOT/JITコンパイル • AOTコンパイル – コードから機械語に • JITコンパイル(JVMでの) – バイトコードとプロファイルデータから 機械語に
  52. 52. バイトコード と実行時の情報 から 機械語に
  53. 53. AOTコンパイル コードをバイトコードに 変換するとして、 プロファイルデータなしでの JITコンパイル と捉えてみる
  54. 54. 実装がこうなっている、 というより あくまで捉え方の観点
  55. 55. 他のJVM言語のコードも ネイティブイメージに できる以上、 遠からずな捉え方
  56. 56. https://openjdk.java.net/jeps/295
  57. 57. https://twitter.com/thomaswue/status/1145603781108928513
  58. 58. Summary • Substrate VMは –ネイティブイメージを生成する 小型の仮想マシン
  59. 59. GraalVMができる 具体的なこと
  60. 60. Top 10 Things To Do With GraalVM 1. High-performance modern Java 2. Low-footprint, fast- startup Java 3. Combine JavaScript, Java, Ruby, and R 4. Run native languages on the JVM 5. Tools that work across all languages 6. Extend a JVM-based application 7. Extend a native application 8. Java code as a native library 9. Polyglot in the database 10.Create your own language
  61. 61. これから 何が起こるのか?
  62. 62. ネイティブイメージで 起動時間が短くなり FaaSでもJavaが〜
  63. 63. 処理ごとに それが得意な言語を 使える
  64. 64. 解析にはR、 機械学習にはPython、 Webフレームワークには Javaを使う、など (あくまで例)
  65. 65. デモ
  66. 66. データベースなど ミドルウェアに GraalVMが組み込まれ、 プログラミング言語を 使えるようにする
  67. 67. 9. Polyglot in the database Top 10 Things To Do With GraalVM
  68. 68. たとえば ユーザ関数
  69. 69. 他の言語のライブラリに ある関数を 使えたら便利
  70. 70. Execute JavaScript Function in SQL SQL> select validator.isEmail('alice@example.com’) from dual; VALIDATOR.ISEMAIL('ALICE@EXAMPLE.COM’) -------------------------------------- 1 SQL> select validator.isEmail('bob@example') from dual; VALIDATOR.ISEMAIL('BOB@EXAMPLE’) -------------------------------- 0 https://www.sakatakoichi.com/entry/graalvmembeddeddb
  71. 71. SQL内でNode.jsの validatorモジュールに ある関数を使う
  72. 72. GraalVM-Embedded Database • Oracle Database – Oracle Multilingual Engine (Oracle MLE) • MySQL – MySQL MLE Plugin • Available shortly from MySQL Labs
  73. 73. Deploy With dbjs Command $ dbjs deploy -uscott -p tiger -c localhost:1521/ORCLCDB validator +validator.js ... ├─┬isEmail │ └──SCALAR FUNCTION VALIDATOR.ISEMAIL("p0" IN VARCHAR2) RETURN NUMBER ...
  74. 74. Wrap Up GraalVM is AWESOME!
  75. 75. Fin.

×