Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

graal の検索結果:

JavaOne 2022に参加しました #javaone #j1jp

…って興味深かったのはGraalVM Community EditionのJavaコードをOpenJDKへ移すということでした。GraalVM JITコンパイラとネイティブイメージのコードが入ってきます。Java 17で"JEP 410: Remove the Experimental AOT and JIT Compiler"としてそれまで含んでいたこのJITコンパイラを削除したところだったんですが… 新たにネイティブイメージ部分が入るというのは多くのJava開発者にとっても…

WindowsでSubstrateVMをビルドする

…として必要なのです。GraalVMのネイティブイメージ部分であるSubstrateVMをLinuxだけでなくWindowsでもビルドして確かめたいことがあり、WindowsのC++環境構築に習熟していないので悪戦苦闘しました! 基本的には、GitHubからGraalVMとMXをクローンして、mx buildするだけなのですが… WindowsのGitやコマンドを揃えるのに、今回はSourceTreeを使いました。 www.sourcetreeapp.com Windowsなの…

『みんなのJava』でGraalVMの入門ガイドの章を書きました #minjava

…す!私は、第5章で、GraalVMの入門ガイドとなる記事を書きました。 gihyo.jp GraalVMの章について この書籍は、現時点でのJavaの最新動向を、とくに今Javaでアプリケーションを構築しているJavaエンジニア向けに解説することを目的としています。そのため、昨年2019年に章立てを考えたときには、GraalVMは少しそこからずれた印象も、自分自身ありました。ただ、執筆している内に情勢は変わり、GraalVM、とくにネイティブイメージの部分は、本番環境で適用で…

JVM Language Summit 2019に参加しました: 2日目 #jvmls_jp

…とAOTコンパイル、GraalVM関連と、私にとって最高の日でした。 最初のセッションは、OpenJ9開発者の方から、JVMでのJIT、AOTコンパイルをさらに詳細に分けながら説明し、最後にOpenJ9のJITaaS (JITコンパイル as a Service, JITサーバ) の話でした。JITaaSは、昨年のOracle Code One 2018で聴いて、少しずつ概要をつかんでいました。ちょうどこのカンファレンスの前に、こういう動画を見たところでした。 Interes…

ドラゴンブック(コンパイラ)を読み終えました。

…Chrisさんに、「Graalが好きでビルドしたりコードを読んだり、論文を読んだりしています。Graalのエキスパートになるにはどうしたらいいですか?」という質問をしたのです。その様子は、こちらに記していました。 www.sakatakoichi.com 答えとしては、コンパイラに関わりたいなら、やはりドラゴンブックを読もう、ということでした。その教えに従い、私はドラゴンブックを読むことを決めたのですが、大いに驚くことになるのです。 ビビる 価格 定価:9,504円! 今まで…

ガベージコレクタとJVMCI

jvm

…r ... org.graalvm.compiler.debug.GraalError: Epsilon garbage collector is not supported by Graal at jdk.internal.vm.compiler/org.graalvm.compiler.hotspot.HotSpotGraalRuntime.getSelectedGC(HotSpotGraalRuntime.java:252) at jdk.internal.vm.com…

作って学ぶガベージコレクタをやってみた

jvm

…lon & !vm.graal.enabled * @summary Epsilon sliding GC works * @library /test/lib * @run main/othervm -Xmx512m -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -XX:+EpsilonSlidingGC gc.epsilon.TestSlidingGC * @run main/othervm -Xmx512m -XX…

JJUGナイトセミナー「JVM言語を作ろう! GraalVMで遊ぼう!」で登壇しました #jjug

…VM言語を作ろう! GraalVMで遊ぼう!」で登壇をしました。 www.java-users.jp 「GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう」というセッションです。スライドは、こちらです。 GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう from Koichi Sakata www.slideshare.net セッション概要 オラクル社からGraalVMというものが発表され、話題を呼んでいます。GraalVMは、Ho…

JJUG CCC 2018 Fallに参加/パネリストをしました #jjug_ccc

…Mの進化のところで、GraalVMのことが話題に上がりましたが、私自身はGraalVMのことより、従来のJVMであるHotSpot自体の進化のことをしっかり伝えたかったです。その一環として、Project Metropolisに触れました。 Javaコミュニティについては、とくに日本と世界のJavaコミュニティを話題に上げました。日本に対する観点で、「フリーライド」という言葉を出しましたが、私もフリーライド自体が悪、という考えではありません。勉強会やカンファレンスに参加するこ…

GraalVMのSubstrateVM (1): ネイティブイメージ関連のコードを読む準備

そういえば、Graal JITコンパイラのコードはいろいろ読んでみたことはあるけれど、ネイティブイメージのSubstrateVMの方はまったく読んでいないなあ、と思いました。 ネイティブイメージを生成してみる、的なことを、1年ほど前に試しただけでした。 www.sakatakoichi.com というわけで、読めるかもわかりませんが、準備していきます。 GraalVMのコードは、GitHub https://github.com/oracle/graal にありますので、まだ…

HotSpot VMビルド時のADファイル処理

jvm

以前HotSpot VMのIntrinsicsを見ました。ビルド時にAD(Architecture Description)ファイルから各CPUアーキテクチャに合わせたC++のソースファイルを生成しています。 www.sakatakoichi.com しかし、ADファイルからどのようにC++のソースを生成しているのか理解していません。 OpenJDKのビルド後buildディレクトリの中にADファイルから生成されたソースがあります(例: build/macosx-x86_64-…

JVM(HotSpot VM)におけるIntrinsics(C2/Graal)

…イラで見てきました。Graalも見てみます。 Graal ここのでGraalはJITコンパイラのGraalです。GraalVMのことではありませんのでご注意ください。私はGraalのことを学んでいます。 www.sakatakoichi.com GraalにおけるIntrinsicsはこちらの論文に詳しいです。私も読みました。 Snippets: Taking the High Road to a Low Level GraalはJavaで書かれていますので、少なくとも私にと…

LINE Fukuoka様でのDeveloper Meetupで登壇しました

…いただきました。私はGraalVMの概要とGraalに少し踏み込んで話しました。スライドはこちらです。 Graal in GraalVM - A New JIT Compiler from Koichi Sakata www.slideshare.net Twitter上ではとくに最適化の話題がおもしろかったという声をいただきました。セッションでの説明の全体的な流れがスムーズにつながっていなかったかな…と自己フィードバックしています。 よく考えると関ジャバとJJUG CCC以…

詳説GraalVM(4) GraalVMが組み込まれたデータベース

…マルチ言語VMであるGraalVMを内包することでMySQL上で複数の開発言語でストアドプログラムを作成/実行可能とする。近日中にMySQL Labsで利用可能となる予定。まずはJavaScriptのサポートから。MySQLデータ型およびPythonのサポートを準備中 https://t.co/MSxhcROA7e #mysql_jp— MySQL_Jp (@mysql_jp) April 28, 2018 GraalVMは組み込みが可能です。MySQL MLE Plugin…

詳説GraalVM(3) Polyglot

…言語実行環境としてのGraalVM、Polyglotに着目します。現時点での最新版、1.0.0-rc5を使います。 http://www.graalvm.org/downloads/ なお、rc5からCommunity EditionがmacOSに対応しました(今まではEnterprise Editionだけでした)。こちらを使います。 $ java -version openjdk version "1.8.0_172" OpenJDK Runtime Environmen…

3年前まで英語で会話したことさえなかった僕が、海外カンファレンスのセッションが理解でき、英語登壇するまでの学習履歴を解説

…復1時間、最近は主にGraal関連の論文を読んでいます。これも専門知識と英語の強化になり、一石二鳥ですね。 オンライン英会話は? Native Campをやっていました。ここ数ヶ月中断しています。普段まったく英語で会話する機会がない場合は、積極的に活用する方がよいですね。発音を聴いてもらって修正したり、フレーズを学んだり、とにかく話すことに慣れたり、さまざまなことに使えます。 https://nativecamp.net/ 私には各オンライン英会話の良し悪しはわかりません。あ…

日本中がGraalに湧いた日

…yo 2018で、"Graal: How to use the new JVM JIT compiler in real life"というセッションがありました。スピーカはTwitter社のChris Thalingerさんです。 www.oracle.co.jp Chrisさんは今年Voxxed DaysやOracle Codeなどさまざまなカンファレンスでこのセッションをやっておられます。日本でもこうしてやっていただけて感無量です! 参加できなかった方は、このセッションタ…

Graalのグラフ、IR

…(昨年2017年)、Graal(JITコンパイラ)のグラフやIR(Intermediate Representation)について調べました。 www.sakatakoichi.com www.sakatakoichi.com このとき、理解が浅く中途半端なままでした。 JKUのwebサイトhttp://ssw.jku.at/Research/Projects/JVM/Graal.htmlに"Graal IR: An Extensible Declarative Interm…

詳説GraalVM(2) 背景事情と情報収集法

詳説GraalVMの第1回として、GraalVMの概要を書きました。 www.sakatakoichi.com 第2回は開発の背景事情と情報収集方法を書きます。使い方はきっといろんな方が書いておられると考えたからです。GraalVMファンとして、他の方があまり書かないマニアック情報を提供します。 GraalVMの日本語初出記事 GraalVMの日本語初出記事は、おそらくJava Magazineではないでしょうか。 http://www.oracle.com/webfolde…

詳説GraalVM(1) イントロダクション

GraalVMが1.0.0 RC1を出し、公式サイトを公開しました! http://www.graalvm.org/ 日本の技術ブログメディアPublickeyさんも取り上げておられます。 www.publickey1.jp そのこともあって、Graalで検索しこのブログへたどり着いた方も多かったです。私は1年ほど前、0.23の頃からGraalVMとGraal(両者の違いは後述)を触ってきました(単に触っているだけの1ファンです)。おそらく熱狂的なファンの方で、JavaOne…

(超簡易な)コンパイラを(参考コードありで)書いてみた

…a製JITコンパイラGraalにとても強く興味を持っています。 Graal の検索結果 - Fight the Future Graalのコードを読んでいる内に、自分はGraalの前にそもそもコンパイラをよく理解していないと感じるようになりました。コンパイラに関してはたくさんよい書籍があるようですが、きしださんのブログで以下の書籍を見つけ、読みました。 d.hatena.ne.jp コンパイラとバーチャルマシン (IT Text)作者: 今城哲二,岩沢京子,千葉雄司,布広永示…

Jfokus 2018に参加します

…聴けない内容です。 Graalがないのが唯一残念なところです。 Javaカンファレンスを探す方法 よいカンファレンス情報を手軽に入手したいという方は、Java Magazine(英語版)を読まれるとよいです。毎号初めの方で、開催されるカンファレンスのイベントが2,3ページで紹介されています。日本語版にはない(翻訳時にはカンファレンスが終了しているため省略されている)ので、英語版をお読みください。 Java Magazine Jfokusも、2018 November/Dece…

GraalのJavaバイトコードからグラフ生成の実装

jvm

今回はGraalのJavaバイトコードからグラフ生成の処理を、JVMCIコンパイラの実装クラスであるorg.graalvm.compiler.hotspot.HotSpotGraalCompilerから見ていきます。 /** * Gets a graph produced from the intrinsic for a given method that can be compiled and * installed for the method. ... */ publi…

GraalでAOTする

GraalでAOT(Ahead Of Time)コンパイルしました。GraalはJava 9でのAOT実装としても使われています。Java 9ではLinuxのみjaotcコマンドがありAOTコンパイルできますが、GraalではMacでもできました。バイトコードをマシンコードにするのがJITコンパイルである以上、これをAOTの実装としても利用できるというのはイメージしやすいです。 実行時間も計測してみるため、サンプルとして以下のコードを使います。 import java.mat…

GraalでのPHI

…og.com 今回はGraalでのPHIについて調べます。 "static single assignment"で検索すると、org.graalvm.compiler.lir.ssa.SSAUtilクラスを見つけました。 ドキュメンテーションコメントはこうです。PHI(ファイ)のLIRInstructionクラスというのは個別にはない。代わりにPHIはコントロールフローのエッジをまたがる並行コピーとして実装される。特定のマージブロックのPHIにより導入される変数は、ブロックの…

JVMのControl Flow Graph可視化

jvm

GraalでのOSRを見たとき、"Control Flow Graph: 制御フローグラフ"(CFG)が出てきました。 Register AllocationとCFGは密接に関わります。さて、JavaでのCFGを検索すると論文が出てきました。 Thomas Würthingerさんの"Visualization of Java Control Flow Graphs"です。 https://pdfs.semanticscholar.org/1f9f/d3658f77aaa4d…

GraalでのOSR

jvm

…og.com 次は、GraalでのOSRの実装を見てみます。org.graalvm.compiler.hotspot.phases.OnStackReplacementPhaseです。各Phaseクラスではrun(StructuredGraph)を実装しなければなりません。OnStackReplacementPhaseクラスではrun()メソッドがすごく長いです。 public class OnStackReplacementPhase extends Phase { ...…

英語論文を初めて読み終えた話

…ITコンパイラであるGraalを理解を深めています。しかし、その過程でそもそもJITコンパイラ、翻ってコンパイラ自身のことをわかっていないとこれ以上進めないとわかりました。 かといって、コンパイラの教科書のようなものから読み始める(ボトムアップ)より、JavaのJITコンパイラに特化したものが読みたいと考えました。こういった書籍も日本語ではありますが、検索してみると上記の論文が出てきて、少し読んでみるとわかりやすかったので最後まで読むことにしました。内容の理解もさることながら…

GraalでのTrace Register Allocation

Graalのレジスタ割り付けアルゴリズムはlinear scan allocationでした。 jyukutyo.hatenablog.com ただ、org.graalvm.compiler.lir.phases.AllocationStageクラスを見ていると、こういうコードでした。 public class AllocationStage extends LIRPhaseSuite<AllocationContext> { public AllocationStage(O…

GraalのRegister Allocation

…nding How Graal Works - a Java JIT Compiler Written in Java に沿ってGraalの理解を深めていたのですが、記事の最後に"Some practicalities that I haven’t talked about"として2つ挙げられています。 Register allocation Scheduling これから一人で学びを進めていきます。まず"Register allocation"を学ぶことにしました。しかし"…