Fight the Future

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

java

Java 11 / JEP 181のNestmatesでのバイトコードの変更を見比べる

JEP 181: Nest-Based Access Controlというものがあります。これはNestmates(ネストメイト)と呼ばれるものです。 http://openjdk.java.net/jeps/181 Nestmatesは、クラスやインタフェースをネストして作成したとき、ネストする側される側の両方を指す言葉…

Java 11 / JEP 309のConstant Dynamic(condy)を試す

JEP 309: Dynamic Class-File Constantsというものがあります。これはConstant Dynamic(condy)と呼ばれるものです。 http://openjdk.java.net/jeps/309 Constant Dynamic、つまり動的な定数です。Javaでは今まで(10まで)プリミティブとリテラルを持つStr…

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

Project Loomのソースを読んでいると、また遭遇しました。 public class Continuation { ... @HotSpotIntrinsicCandidate private static int doYield(int scopes) { throw new Error("Intrinsic not installed"); }; ... } @HotSpotIntrinsicCandidateアノ…

アノテーションをimplementsしたクラスを作成する

アノテーションをimplementsしたクラスを作成できるというのを最近知りました。アノテーションなんてJDK 1.5からあるのに、知らないもんですね… みなさんはご存知ですか?とTwitterにツイートしたところ、ご存知の方もたくさんいらっしゃいましたが、ご存知…

メソッド参照をRunnable型の変数に代入する

こんなことができるのを知りませんでした。 public class MethodReferenceSample { private void method1() { } public static void main(String[] args) { Runnable method1 = new MethodReferenceSample()::method1; } } メソッド参照の値をRunnable型の変…

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

LINE様が東京を始め京都、大阪、福岡などで頻繁に開催されているいわゆる勉強会、Developer Meetupがあります。 2018年7月に福岡のLINE Fukuoka様で開催されたDeveloper Meetupに登壇しました。こちらの模様をLINE様のEngineer Blogに書いていただきました。…

Value Typesもろもろ

以前Project ValhallaのL-World Value Typesのアーリーアクセスビルドを試しました。 www.sakatakoichi.com 今回もう少し触ってみます。 利用バージョン $ java -version openjdk version "11-lworldea" 2018-09-25 OpenJDK Runtime Environment 18.9 (build…

Project ValhallaのL-World Value Typesをちょっと試す

Project ValhallaのL-World Value Typesのアーリーアクセスビルドが出ています。 Valhalla Early-Access Builds Value Typesは、L-WorldではないQタイプのMinimal Value Types(MVT)という初期のプロトタイプがありました。 www.infoq.com 現在は従来のLタ…

Run Fiber from Project Loom

Project Loomの(プロトタイプ的な)ソースコードが公開されました。chiroitoさんがさっそく試されています。 chiroito.hatenablog.jp 記事はLinuxですが、私もmacOSで動作させることができました。 Project Loomって何?という方はこちらをご覧ください。 w…

JVM Language Summit 2018に参加しました

2018年7月30、31日にオラクルのサンタクララオフィス(つまりあのデータベース型の建物ではない)で開催された、JVM Language Summit(通称JVMLS)に参加しました。 http://openjdk.java.net/projects/mlvm/jvmlangsummit/ JVM Language Summitとは The JVM …

Javaチャンピオンになりました!

SUPERB! Please join us in welcoming these new Java Champions to our Community. Well done everyone@alextheedom@TheDonRaab @JonathanGiles@cero_t@jyukutyo @michaelminella @NikhilNanivade @rotnroll666@ustarahman pic.twitter.com/FIp1W6wg13— Jav…

Graalのグラフ、IR

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

"JavaOne"は拡張/終了し、Oracle Code Oneに変わります

以前にJavaOne 2018の日程変更を書きました。 www.sakatakoichi.com JavaOneとはサンフランシスコで開催される、Oracle主催のJavaカンファレンスです(でした)。このエントリの時点で、今まで5日間のカンファレンスだったのが4日と短くなり、少し残念な気持…

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

GraalVMが1.0.0 RC1を出し、公式サイトを公開しました! http://www.graalvm.org/ 日本の技術ブログメディアPublickeyさんも取り上げておられます。 www.publickey1.jp そのこともあって、Graalで検索しこのブログへたどり着いた方も多かったです。私は1年ほ…

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

じゅくちょーです。私はJava製JITコンパイラGraalにとても強く興味を持っています。 Graal の検索結果 - Fight the Future Graalのコードを読んでいる内に、自分はGraalの前にそもそもコンパイラをよく理解していないと感じるようになりました。コンパイラに…

JavaOne 2018の日程が変わったようです

JavaOneは2018/10/28から11/1までと発表されていましたが、おそらく最近変更されたようです。 2018/10/22から10/25となっています。こちらは公式サイト。 JavaOne Conference | JavaOne 2018 レジストレーション開始案内の登録サイトのバナーもこの日程に変…

Java EEからJakarta EEへ

Eclipseファウンデーションへ移管されたJava EEの新名称が決まりました。 And the Name Is… | Life at Eclipse "Jakarta EE"です。 "Jakarta EE" or "Enterprise Profile"の決選投票が2/23までありました。7000弱の投票のうち65%が"Jakarta EE"へ票を入れて…

Serviceability Agentをjhsdbから読み進めてみる

Serviceability Agentやjhsdbについては、OpenJDK Reviewerの末永さんのスライドが大変参考になります。 Java 9で進化する診断ツール from Yasumasa Suenaga www.slideshare.net JDK 8まで、HSDB (CLHSDB)を使うにはjavaコマンドで実行しました。 $ java -Ds…

"Java 10以降のJavaリリース"について話しました at 関西Javaエンジニアの会 #kanjava

2月19日、株式会社ロックオンさんにて関ジャバのイベントを開催しました。 僕はJfokusで聴いた内容、Java 10以降のJava: リリースサイクルの変更とOpenJDKへの統合- JfokusでのMark Reinhold氏のセッションからを話しました。スライドは以下です。 Java rele…

海外カンファレンスJfokusに参加してきた

www.jfokus.se 日程: 2018/02/05(VM tech summit)、02/06-07(カンファレンス本体) 場所: ストックホルム、スウェーデン 参加者数: 2000人弱(VM tech summitは30名ほど) 費用: 10万円(航空券、ホテル別) 感想 カンファレンスでは各セッションの講演と…

Java 10以降のJava: リリースサイクルの変更とOpenJDKへの統合- JfokusでのMark Reinhold氏のセッションから

Java 10以降のJavaについて、少し混乱があるようです。 ちょうど僕は数日前までJfokusというJavaカンファレンスでストックホルムに来ており、オラクルのJavaプラットフォームグループのチーフアーキテクト、Mark Reinhold氏による"Moving Java Forward Faste…

さあ行こう!世界中のJavaカンファレンスへ!

JavaカンファレンスというとJavaOneを想像される方が多いかと思います。 Twitter上でこんなやり取りを見ました。"行くならどのJavaカンファレンスがお気に入り?" 元Sun/OracleのJavaエヴァンジェリスト、現AWSのArun Guptaさんはこう答えています。 Depends…

Fiber - Project Loom

Project Loomをご存知でしょうか? http://cr.openjdk.java.net/~rpressler/loom/Loom-Proposal.html Project Loomは軽量スレッドであるFiberと、継続(Continuation)をJavaに導入することを狙っています。Project Loomはまだ提案されたばかりで、OpenJDKの…

GraalでAOTする

GraalでAOT(Ahead Of Time)コンパイルしました。GraalはJava 9でのAOT実装としても使われています。Java 9ではLinuxのみjaotcコマンドがありAOTコンパイルできますが、GraalではMacでもできました。バイトコードをマシンコードにするのがJITコンパイルであ…

GraalでのPHI

以前SSAそしてPHIとは何かについて学びました。 jyukutyo.hatenablog.com 今回はGraalでのPHIについて調べます。 "static single assignment"で検索すると、org.graalvm.compiler.lir.ssa.SSAUtilクラスを見つけました。 ドキュメンテーションコメントはこう…

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

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

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

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 こ…