Fight the Future

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

2017-01-01から1年間の記事一覧

GraalでのOSR

jvm

以前JITコンパイルでのOSR(on-stack replacement)について見ました。 jyukutyo.hatenablog.com 次は、GraalでのOSRの実装を見てみます。org.graalvm.compiler.hotspot.phases.OnStackReplacementPhaseです。各Phaseクラスではrun(StructuredGraph)を実装し…

ラムダ式からコンパイルされたメソッドの3つのパターン

Javaでのラムダ式はinvokedynamicとMethodHandleを使って呼び出されますが、ラムダ式に書いた処理はコンパイラがメソッドに変換します。 僕はあーstaticメソッドになるんだよね、と感覚的にしか理解していなかったのですが、やってみるとそうでないものもの…

JITコンパイルでのOSRとは

jvm

JITコンパイルのログなどを見ると、OSR(on-stack replacement)という単語が出てきます。このブログでも以前JITWatchを触ったときに少し書きました。 OSRはOn-Stack replacementのことで、ループ内の最適化のことを指します。 jyukutyo.hatenablog.com で、…

Java 8リリース以降のG1GCに対する改善

jvm

JavaOne 2017のセッションで、Java 8のリリース以降に実施されたG1GCの改善を解説するものがありました。 youtu.be 主要な改善は5つあります。 String deduplication (JDK 8u20) Class unloading with concurrent mark (JDK 8u40) Eagerly reclaim humongous…

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にすると、事前調査よ…