Fight the Future

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

JITWatchが進化してる

jvm

JITWatchはJITコンパイルを可視化し分析するためのツールなのですが、これは2014年にこのブログにも書きました。 jyukutyo.hatenablog.com Twitterでこのツイートを見て、新機能を知りました。 New #JITWatch visualisations! See compiler thread queues, t…

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

Christian Wimmerさんの"Linear Scan Register Allocation for the Java HotSpot™ Client Compiler"、約110ページを読み終えました。 http://www.christianwimmer.at/Publications/Wimmer04a/Wimmer04a.pdf オーストリアのヨハネス・ケプラー大学での修士論…

インナークラスからアウタークラスのprivateメソッドへのアクセスでの奇妙なバイトコード

JVM Language Summit 2017のセッション動画を見ていると、おもしろいコードがありました。 youtu.be JEP 181: Introduce "nests" as an explicit access control contextに関するセッションです。 こんな感じのコードです。mainメソッドは僕が追加しています…

GraalでのTrace Register Allocation

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

GraalのRegister Allocation

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

GraalでのHIRとLIR

jvm

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

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

jvm

JJUG CCC 2017 Fallで一番楽しみにしていたセッション(そして素晴らしいセッションでした)"CPUから見たG1GC"で、初めて知ったことがありました。 CPUから見たG1GC from Kenji Kazumura www.slideshare.net JITコンパイルのコードの中に、使っているGCアル…

Graalでのロック粗粒化

前回はGraalでの大域的値番号付けでした。 jyukutyo.hatenablog.com こちらの記事に沿ってGraalの理解を深めます。 Understanding How Graal Works - a Java JIT Compiler Written in Java 今回はロック粗粒化(Lock coarsening)です。同一のモニタに対して…

Graalでの大域的値番号付け

前回はノードの正規化による最適化でした。 jyukutyo.hatenablog.com こちらの記事に沿ってGraalの理解を深めます。 Understanding How Graal Works - a Java JIT Compiler Written in Java 今回は大域的値番号付けです。大域的値番号付け(Global value num…

Graalのノードの正規化

前回はマシンコードの生成処理を見ました。 jyukutyo.hatenablog.com この記事に沿ってGraalの理解を深めています。 Understanding How Graal Works - a Java JIT Compiler Written in Java 今回はグラフを最適化することでより効率的なコードを生成する、と…

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

jvm

前回はグラフノードの生成を見ました。 jyukutyo.hatenablog.com この記事に沿ってGraalの理解を深めています。 Understanding How Graal Works - a Java JIT Compiler Written in Java 最終的には、グラフにある各ノードに対してマシンコードを生成します(…

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

前回はGraalのグラフを見ました。 jyukutyo.hatenablog.com 実際にどのようにグラフを作るかという謎はありますが、視点を変えて実際にJavaバイトコードをマシンコードに変換する部分を見てみます。 Chris Seatonさんの記事に沿ってGraalの理解を深めます。 …

Graalのグラフ

こちらの内容に沿って、Graalの理解を深めています。 Understanding How Graal Works - a Java JIT Compiler Written in Java 前回はGraalにJITコンパイルをさせました。 jyukutyo.hatenablog.com 今回はGraalのグラフについてです。いわゆるプログラム依存…

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

jvm

前回JITコンパイラで"コンパイルしたコードは戻り値で返すのではなくコードキャッシュにインストールする"と書きました。 jyukutyo.hatenablog.com ではコードキャッシュとは何でしょう?単純化して言うとJITコンパイル後のマシンコードをキャッシュする場所…

Graalが使うJVMCIとは

前回ではGraalをJITコンパイラとして使うため、EnableJVMCIでJVMCIを有効にしました。 jyukutyo.hatenablog.com 引き続き Understanding How Graal Works - a Java JIT Compiler Written in Java を参考に、Graalの理解を深めます。 ところでJVMCIとは何なの…

GraalでJITコンパイルする

きしださんに教えていただいた、Graalについての非常によい入門記事があります。 Understanding How Graal Works - a Java JIT Compiler Written in Java Graalの上のTruffleでのRuby実装であるTruffleRubyを開発しているChris Seatonさんのブログです。この…

Java 9では"-XX:CompileOnly"は"-XX:CompileCommand=quiet"と組み合わせでおこう

jvm

前回のの投稿で、Java 8と9ではjava -XX:+PrintCompilation -XX:CompileOnly=xxxの出力が異なると書きました。 jyukutyo.hatenablog.com すると、OpenJDK Reviewerである末永さんからヒントをいただきました。 Excluding compileって特徴的ですね。これでHot…

Java 9から"-XX:CompileOnly"の出力が違ってるけどどうして?

Java 9とJava 8では-XX:CompileOnlyでの出力が異なってる…すごく大量に出力されるようになってる。 理由やここに仕様が載ってるよ、という方がいればぜひ教えてください!! 対象クラス class Demo { public static void main(String[] args) { while (true)…

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

5回目のCCC登壇です! JJUG CCC 2017 Fall オレオレJVM言語を作ってみる from Koichi Sakata www.slideshare.net ソースコードはこちらです。 github.com このブログ投稿で実装した四則演算のTruffleでの言語実装について、セッションという形で話しました。…

Graalをビルドした

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

OpenJDKのビルドに関するドキュメントがあった!

OpenJDKビルドの前回のエントリ jyukutyo.hatenablog.com で、--disable-warnings-as-errorsについて、 このオプションの公式な説明を検索しましたがうまくヒットせず と書いたところ、OpenJDK Authorの久保田さんから教えていただけました! https://t.co/K…

OpenJDKビルド時に設定するオプション

前回panamaビルド時にいろいろとオプションを設定しました。 jyukutyo.hatenablog.com が、よりよい方法をOpenJDK Reviewerである末永さんに教えていただきました!--disable-warnings-as-errorsをつければOKです。 bash ./configure --disable-warnings-as-…

macOSでOpenJDK(panama)ビルドするとエラーになってたのをクリアしてビルドし、Vector APIを試す

前回amberはビルドできたのですが、panamaはmakeでエラーになりました。 jyukutyo.hatenablog.com 今回panamaもビルドしてVector APIを試すことができました。 結論 configureでオプションを付ける。つまり、エラーを無視しているだけである。 $ bash ./conf…

macOSでOpenJDK(amber)ビルドするとエラーになってたのをクリアしてビルドした

OpenJDKのビルド方法そのものはきしださんのブログをご覧ください。 d.hatena.ne.jp JavaOneから帰国後、僕も最新のOpenJDKビルドするぞ!とmakeしてたのですが、エラーが出てちょっと挫折していました。 /Users/jyukutyo/code/amber/src/hotspot/share/logg…

Java 10はあるよ!!(提案段階)

まだProposalなので、正式決定ではありません。 2018年3月リリースのJavaが10、18年9月が11と半年ごとのリリースでインクリメントしていく。 Javaのチーフアーキテクトである、Mark Reinholdさんがツイートしています。 Proposal: Newer version-string sche…

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

kanjava.connpass.com 懇親会 終了後そのままおやつと飲み物で簡素な懇親会にしました。ごみは各自で手提げごみ袋に入れて持ち帰るスタイルです。運営としてはみなさんの協力で非常に助かりました…なぜなら、当日参加、当日キャンセルOKにすると、事前調査よ…

JavaOne 2017 移動&滞在(もしくは海外カンファレンス参加Tips) #JavaOne #j1jp

2015年から3年連続JavaOneに参加しています。これから参加してみたいという方の役に立てばと思い、情報をまとめます。 ホテル 今年2017年から、JavaOneの会場がモスコーニに戻りました(モスコーニ・ウエスト。モスコーニはノース、サウスもありそちらではOr…

JavaOne 2017 5日目 #JavaOne #j1jp

Java Community Keynote コミュニティキーノートは、技術的な内容ではありません。Javaコミュニティのメンバーによる演劇ですが、これがまたおもしろい!!Javaに関するウィットに富んだ内容となっています。今年はマトリックスがモチーフでした(昨年はスタ…

JavaOne 2017 2日目 #JavaOne #j1jp

Java Keynote 昨年のキーノートでは"火星の悪夢"があったことをご存知の方も多いでしょう。Javaと関係のない火星の話が1時間もあるという悪夢のキーノートでした。 今年は、そつなくまとまっていて合格点はある気がします。3年連続3度目のJavaOneでしたが、…

JavaOne 2017 0日目〜1日目 #JavaOne #j1jp

10/1-5までサンフランシスコで開催される、JavaOne 2017に参加しています。 1日目はコミュニティセッション、Java User Group (JUG)やJCPのセッションです。本格的な技術セッションは2日目から5日目の昼過ぎまで、というのが例年の流れです。1日目は英語セッ…