Fight the Future

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

graal の検索結果:

GraalでのHIRとLIR

jvm

…nding How Graal Works - a Java JIT Compiler Written in Java に沿って、Graalの理解を深めてきました。前回はロック粗粒化、記事の最後の解説でした。 jyukutyo.hatenablog.com これからは少しづつ自分で調べていきます。Graalがというかコンパイラの基本的なことを理解していないと、進まない気もしてきています。なので、HotSpotのJITコンパイラについて調べて、それがGraalでどうなっているか…

JITコンパイルのコードにあるGCアルゴリズムの分岐

jvm

…う分岐があります。 Graalにもあるだろうと考え、調べてみました。"g1gc"で検索すると、org.graalvm.compiler.hotspot.phases.WriteBarrierAdditionPhaseとWriteBarrierVerificationPhaseが見つかりました。 WriteBarrierVerificationPhaseのコードです。 private void validateWrite(Node write) { ... NodeFlood …

Graalでのロック粗粒化

前回はGraalでの大域的値番号付けでした。 jyukutyo.hatenablog.com こちらの記事に沿ってGraalの理解を深めます。 Understanding How Graal Works - a Java JIT Compiler Written in Java 今回はロック粗粒化(Lock coarsening)です。同一のモニタに対して続けて2回同期化しているコードがあるとします。直接そういうコードは書かないでしょうが、インライン化の結果として実際にこうな…

Graalでの大域的値番号付け

…こちらの記事に沿ってGraalの理解を深めます。 Understanding How Graal Works - a Java JIT Compiler Written in Java 今回は大域的値番号付けです。大域的値番号付け(Global value numbering, GVN)はコンパイラ最適化手法の1つです。単純に言うと、同一内容の処理が複数あれば、ノードは1つしか使わないということです。 次のコードを考えてみます。 int workload(int a, int…

Graalのノードの正規化

…m この記事に沿ってGraalの理解を深めています。 Understanding How Graal Works - a Java JIT Compiler Written in Java 今回はグラフを最適化することでより効率的なコードを生成する、という部分です。 正規化(Canonicalisation) ここでの正規化は、ノードを再配置することを意味しています。さまざまな目的のためのものですが、定数畳み込みとノードの簡素化に着目します。 ノード自体に(子ノードを含む)自…

Graalのノードからマシンコードの生成

jvm

…m この記事に沿ってGraalの理解を深めています。 Understanding How Graal Works - a Java JIT Compiler Written in Java 最終的には、グラフにある各ノードに対してマシンコードを生成します(グラフ自体を簡素化するアプローチは別途)。マシンコードが関連してくるので、メソッドの処理を加算ではなくインクリメントにします。 class Demo2 { public static void main(String[] a…

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

前回はGraalのグラフを見ました。 jyukutyo.hatenablog.com 実際にどのようにグラフを作るかという謎はありますが、視点を変えて実際にJavaバイトコードをマシンコードに変換する部分を見てみます。 Chris Seatonさんの記事に沿ってGraalの理解を深めます。 Understanding How Graal Works - a Java JIT Compiler Written in Java サンプルとして加算するメソッドを用意します。 cla…

Graalのグラフ

…ちらの内容に沿って、Graalの理解を深めています。 Understanding How Graal Works - a Java JIT Compiler Written in Java 前回はGraalにJITコンパイルをさせました。 jyukutyo.hatenablog.com 今回はGraalのグラフについてです。いわゆるプログラム依存グラフ(program-dependence-graph)です。無駄な処理を発見するために、コードをデータ構造(今回はグラフ)で表現…

JITコンパイルが使うコードキャッシュ

jvm

…す。 せっかくなのでGraalのコードも見ます。org.graalvm.compiler.hotspot.CompilationTask#installMethod()でマシンコードをコードキャッシュにインストールしています。 private void installMethod(DebugContext debug, final CompilationResult compResult) { final CodeCacheProvider codeCache = jvmci…

Graalが使うJVMCIとは

前回ではGraalをJITコンパイラとして使うため、EnableJVMCIでJVMCIを有効にしました。 jyukutyo.hatenablog.com 引き続き Understanding How Graal Works - a Java JIT Compiler Written in Java を参考に、Graalの理解を深めます。 ところでJVMCIとは何なのでしょうか?JVMCIはJEP 243で定義されています。 JEP 243: Java-Level JVM Co…

GraalでJITコンパイルする

…に教えていただいた、Graalについての非常によい入門記事があります。 Understanding How Graal Works - a Java JIT Compiler Written in Java Graalの上のTruffleでのRuby実装であるTruffleRubyを開発しているChris Seatonさんのブログです。この記事の内容に沿って、Graalの理解を深めていきます。 Graalのセットアップはこちらを参考にしてください。 jyukutyo.hate…

JJUG CCC 2017 Fallでスピーカーをしました #jjug_ccc #ccc_c5

…ffleでは基本的にGraal(JITコンパイラ)に任せるもののはずです。今までのたくさんの叡智が詰まったJVMとJITコンパイラを利用できるところにTruffleのメリットがあるからです。 セッションの感想 緊張感があり、疲れました。聴講者を見るとオラクルの方やJCP ECメンバーの方、B社のGC好きな方がいて、あいまいなことや間違ったことを言ったら刺されるんじゃないかという緊張感がありました。もちろん他の方もディープなことが好きで参加されているでしょうし、ライト層の僕は登…

Graalをビルドした

Graalはこちらからダウンロードできるのですが、 Oracle Labs GraalVM: Download ソースを読むついでにビルドしました。 Graalとmxが要ります。Graalはバージョン0.29を使います。 $ git clone https://github.com/graalvm/graal.git $ cd ../graal $ git checkout vm-enterprise-0.29 $ git clone https://github.com/g…

JavaOne 2017 報告会 in 大阪を開催しました! #kanjava #j1jp

…関連の最近の出来事〜GraalとOpenJ9〜 from 浩一 阪田 www.slideshare.net 3回目のJavaOne参加ですが、JVM関連のセッションに行くことがほとんどです。Graalという単語があるセッションはすべて出ましたが、AoTの話が多くそれほど目新しいことはなかったです。OpenJ9もほぼ出ました。パフォーマンス関連が多く、内部構造などはDevoxxUSでのセッションの方が多く話されていました。 なので、JavaOneで聴いた内容そのものというより、…

JavaOne 2017 5日目 #JavaOne #j1jp

…果比較のセッション。Graalが絡んでおります。AOTはまだ実験段階という感じです。この方、JVM Language Summit(JVMLS)でも話されていました。 Byte Buddy: Bytecode Generation Made Easy 中の人によるバイトコード操作ライブラリByte Buddyについてのセッションです。ただ、すごく初心者向けでした。AspectJやSpring AOPと比較するという観点から入り、Javaエージェントを作り、といった感じです。B…

JavaOne 2017 2日目 #JavaOne #j1jp

… a Wholly Graal Runtime [CON5989] 今日一番驚いたセッションです。私がGraal自体に大変興味を持っていて、直接的な内容ではないだろうと思いつつ聞きました。ところが、TwitterはすでにGraalを本番環境で運用しているとのこと!もちろんバージョン1.0にもなっていませんし、本当にびっくりしました。Graalでのパフォーマンス向上によるサーバコスト削減が目的とのことです。 Shenandoah 2.0: Now That We’ve Gott…

オレオレJVM言語を作ろう! How to create a new JVM language #Graal #Truffle

…ンでは、ANTLRとGraal(とくにTruffle)を使って四則演算する言語を作ろう!というものでした。とてもおもしろかったのですが、1つ問題がありました。 ソースが公開されていない! OlegのGitHubにもありませんでした。 そこで僕は決めました。セッション動画を見ながら、表示されるコードを写して自分で実装しよう!と… 結果、できました! ソースはこちらです。 github.com ただ、動画では公開されていない部分もあり、いろいろ検索してTruffleのサンプルで簡…

JJUG CCC 2017 Spring 参加&スポンサーセッション登壇 #jjug_ccc

… JVM with Graal Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた(スピーカー) (自分のセッションが終わったので脱力) ハックで生きる:オープンソースで会社を興すには JHipsterもReladomoも気になりましたね!Kafkaはアーキテクチャ内にはあるのですが、僕は全然詳しくなくてここで初歩を学べてよかったです。DevoxxUSでKafkaのセッション出て何かよくわかっていなかったので。 “ハッ…