Fight the Future

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

Java 11でPrintStringTableStatisticsするとクラッシュする

Java 11でのみ発生します。7、8、9、10では発生せず、現在開発中のJava 12では、fixされています。 $ java -version openjdk version "11.0.1" 2018-10-16 OpenJDK Runtime Environment 18.9 (build 11.0.1+13) OpenJDK 64-Bit Server VM 18.9 (build 11.0.1…

String#intern()を使った場合の、パフォーマンスへの影響を学ぶ

JJUG CCC 2018 Fallのセッション、GCを発生させないJVMとコーディングスタイルにて、GCの発生を抑えるアプリケーション側の対処として、以下のことをするケースもある、とありました。 (https://www.slideshare.net/kenjikazumura/gcjvm より抜粋) String#…

OpenJDKのC++コードを、CLionでデバッグする

OpenJDKをhg cloneしたあと、bin/idea.shを実行して、IntelliJ IDEAでソースコードを読んでいました。ただ、C++のコードを読む割合が増えてきて、IntelliJでは読みづらいな、と感じてきました。 以前chiroitoさんが、Eclipse上でOpenJDKをデバッグしていたこ…

書籍「現場至上主義 Spring Boot2 徹底活用」をいただき、読み終えました

現場至上主義 Spring Boot2 徹底活用作者: 廣末丈士,宮林岳洋,高安厚思出版社/メーカー: ソシム発売日: 2018/11/30メディア: 単行本この商品を含むブログを見る はじめに 書籍「現場至上主義 Spring Boot2 徹底活用」を、この書籍を編集された会社からいただ…

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

JJUG CCC 2018 Fallに参加しました! www.java-users.jp そろそろ始発近くの新幹線で向かうのは、体力的にきついなと感じ始めました… JJUG基調講演「Javaの未来を考えよう」パネリスト JJUG鈴木会長の司会の下、せろさん、きしださんとともにパネリストとし…

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

そういえば、Graal JITコンパイラのコードはいろいろ読んでみたことはあるけれど、ネイティブイメージのSubstrateVMの方はまったく読んでいないなあ、と思いました。 ネイティブイメージを生成してみる、的なことを、1年ほど前に試しただけでした。 www.saka…

Oracle Code One 2018参加記: GC編

Oracle Code Oneは、JavaOneとして2017年まで開催されていたものを、リブランドしたカンファレンスです。 2018/10/22〜25までの4日間、USサンフランシスコのモスコーンコンベンションセンターで開催されました。このブログでは、時系列ではなく、トピックご…

MacでIntelliJ IDEAを使うと、optionキーを含んだショートカットが効かない/特殊文字が出る場合

いつのバージョンから発生していたのか、気づけばIntelliJ IDEAでoptionキーを含んだショートカットを使うと、動作しなかったり、特殊文字が入力されるようになりました。 具体的には、次のようなものです。 キーマップでは、option + shift + Gでクラスをナ…

Oracle Code One 2018参加記: イベント編

Oracle Code Oneは、JavaOneとして2017年まで開催されていたものを、リブランドしたカンファレンスです。 2018/10/22〜25までの4日間、USサンフランシスコのモスコーンコンベンションセンターで開催されました。このブログでは、時系列ではなく、トピックご…

Oracle Code One 2018参加記: 登壇編

Oracle Code Oneは、JavaOneとして2017年まで開催されていたものを、リブランドしたカンファレンスです。 www.sakatakoichi.com 2018/10/22〜25までの4日間、USサンフランシスコのモスコーンコンベンションセンターで開催されました。このブログでは、時系列…

今後のJavaのサポートやアップデートについてJavaチャンピオンが執筆したドキュメント、Java is Still Freeの日本語訳を公開

今後のJavaのサポートとアップデートに関して、世界のJavaチャンピオン数十名が執筆したJava is Still Freeというドキュメントを、日本のJavaコミュニティメンバーで翻訳しました。翻訳したドキュメントはこちらです。 docs.google.com 簡約バージョンと詳細…

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…

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

jvm

以前HotSpot VMのIntrinsicsを見ました。ビルド時にAD(Architecture Description)ファイルから各CPUアーキテクチャに合わせたC++のソースファイルを生成しています。 www.sakatakoichi.com しかし、ADファイルからどのようにC++のソースを生成しているのか…

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…

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

こちらのツイートが話題になっていました。 MySQL MLE Pluginはマルチ言語VMであるGraalVMを内包することでMySQL上で複数の開発言語でストアドプログラムを作成/実行可能とする。近日中にMySQL Labsで利用可能となる予定。まずはJavaScriptのサポートから。M…

詳説GraalVM(3) Polyglot

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

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…

C-y を繰り返したいとき

C-x (でキーボードマクロ開始 C-yなど操作をして C-x )でキーボードマクロ終了 C-u 100 C-x eでマクロの繰り返し

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

JJUG CCC 2018 Springで"海外登壇経験者パネルディスカッション"のパネリストをしました。他のみなさんは英語がとても堪能だったり何度も英語登壇をされていたりする中、15分の英語登壇をしただけの私がパネリストというのもとても恐縮でした。 ただ、私は日…

JOnsen 2018 - 2回目のJOnsen #JOnsenUnconf #JOnsen

JOnsenは"Java Unconference at a Japanese Onsen"、つまり日本の温泉宿で開催するJavaアンカンファレンスです。 JOnsen、そしてアンカンファレンスについては、JJUG/Java女子部のよこなさんがすばらしいエントリを書いていらっしゃるので、そちらをぜひお読…

日本中がGraalに湧いた日

Java Day Tokyo 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/Project…