Fight the Future

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

java

OpenJDKをZeroを有効にしてビルドする

Zeroはインタプリタのみにするものです。macOS 14.3.1でビルドしました。 $ sh ./configure --with-jvm-variants=zero --enable-debug $ make images $ ~/jdk/build/macosx-aarch64-zero-fastdebug/jdk/bin/java -version openjdk version "23-internal" 202…

JavaOne 2022に参加しました #javaone #j1jp

2022年10月18日から20日にかけて開催されたJavaOneに参加しました。17日にはJava Leaders Summitにも参加してきました。 開催場所がサンフランシスコからラスベガスへ JavaOneは2017年が最後の開催となり、2018年からOracle Code Oneにリブランドしました。 …

M1 Mac (Apple Silicon) 版OpenJDKがビルドできるようになりました

タイトルがすべてという感じもしますが、プルリクエストがマージされ、M1 Mac (Apple Silicon) 向けのOpenJDKをビルドできるようになりました。 github.com M1 Mac版OpenJDKは、aarch64-portというメインラインと別のリポジトリで途中まで進行していました。…

OpenJDKのgtestを実行する

openjdk.java.net OpenJDKにはjtregのテストとgtest(GoogleTest)のテストがあるのですが、gtestの方です。ドキュメントにあるmake test-only TEST=の形式ですぐに動かせなかったので、同僚に教えてもらった他の実行方法をメモとして残します。 セットアッ…

WindowsでSubstrateVMをビルドする

7,8年ぶりにWindowsも使い始めました。ビルド環境として必要なのです。GraalVMのネイティブイメージ部分であるSubstrateVMをLinuxだけでなくWindowsでもビルドして確かめたいことがあり、WindowsのC++環境構築に習熟していないので悪戦苦闘しました! 基本的…

HotSpot VMのシンボル名に関わるコード

師匠から教えていただいた内容であり、私自身がいきなり気づいたわけではないのですが、OpenJDKのメーリングリストでも他の方からも教えていただいたので、自分の備忘録的にまとめます。 Javaのシンボル名に関するHotSpot VMのコードの話です。ここでのシン…

『みんなのJava』でGraalVMの入門ガイドの章を書きました #minjava

2020年3月13日に、『みんなのJava OpenJDKから始まる大変革期!』という書籍が出ます!私は、第5章で、GraalVMの入門ガイドとなる記事を書きました。 gihyo.jp GraalVMの章について この書籍は、現時点でのJavaの最新動向を、とくに今Javaでアプリケーション…

FOSDEM 2020 & Jfokus 2020に参加しました

fosdem.org www.jfokus.se FOSDEMはブリュッセル(ベルギー)、Jfokusはストックホルム(スウェーデン)です。Jfokusは、2年前2018年にも参加しました。 www.sakatakoichi.com この2つのカンファレンスは、(あえて)日程がつながるようになっており、Javaを…

JVM Language Summit 2019 参加記 #jvmls_jp

2019/07/29-31に、JVM Language Summit(通称JVMLS)に参加しました。 期間中、メモのようなブログエントリを残しています。 www.sakatakoichi.com www.sakatakoichi.com www.sakatakoichi.com 今回、私にしては珍しく、カメラを持参して撮影したので、写真…

JVM Language Summit 2019に参加しました: 3日目:最終日 #jvmls_jp

JVM Language Summit (JVMLS) 2019の3日目、最終日が終わりました。 1日目はこちら。 www.sakatakoichi.com 2日目はこちら。 www.sakatakoichi.com 3日目は、半日しかなく、しかもJava系のセッションはNullnessのものだけでした(要するに、どのセッションも…

JVM Language Summit 2019に参加しました: 2日目 #jvmls_jp

JVM Language Summit (JVMLS) 2019の2日目が終わりました。 JVMLSとは、1日目に関しては、こちらのエントリにあります。 www.sakatakoichi.com 2日目は、JITコンパイルとAOTコンパイル、GraalVM関連と、私にとって最高の日でした。 最初のセッションは、Open…

JVM Language Summit 2019に参加しました: 1日目 #jvmls_jp

2019/07/29-31に、オラクルのUSサンタクララオフィス(本社ではないところ)で開催されている、JVM Language Summit(通称JVMLS)に参加しています。 http://openjdk.java.net/projects/mlvm/jvmlangsummit/ 私は昨年2018年に初参加して、今回が2回目です。 …

Micronautの@Introspected

DevNexus 2019で、Micronautのセッションを聴いてきたので、メモがてら断片的に記します。 Micronautの特徴の中に、こういったものがあります。 Minimal use of reflection Minimal use of proxies リフレクションや動的プロキシの利用を最低限にして、起動…

Oracle Code One 2019の参加登録が始まりました

Oracle Code One(昨年2018年に、JavaOneからリブランドしたカンファレンス)の、参加登録が始まりました。 www.oracle.com 元がJavaOneですので、Javaのセッションが多いのはもちろんですが、他言語やコンテナ、DevOps、MySQLを始めとするデータベース、ブ…

JJUGナイトセミナー「JVM言語を作ろう! GraalVMで遊ぼう!」で登壇しました #jjug

2019/02/27に、JJUG(日本Javaユーザグループ)さんでのナイトセミナー、「JVM言語を作ろう! GraalVMで遊ぼう!」で登壇をしました。 www.java-users.jp 「GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう」というセッションです。スライド…

DevNexus 2019に参加しました

2019/03/06 -08に開催された、DevNexusというカンファレンスに参加しました。 場所はUSのアトランタです。 devnexus.com DevNexusとは アトランタJava User Group(JUG)主催のカンファレンスです。 JUG主催ですので、Javaが中心ではありますが、アジャイル…

macOSでのjtregセットアップ

OpenJDKのテストは、jtregなので、セットアップしました。 http://openjdk.java.net/projects/code-tools/jtreg/intro.html macOSでビルドします。 http://openjdk.java.net/jtreg/build.html $ sh make/build-all.sh /Library/Java/JavaVirtualMachines/jdk…

static finalな定数が速いのは、何がどうなって速い?

定数を利用した最適化、というのはイメージしやすいですし、実際速くなります。今回、Alekseyさんのサンプルを使いながら、まずはstatic finalな値のコンパイルコードを実際に見て、どう速いのか学びました。 JVM Anatomy Park #15: Just-In-Time Constants …

JMHの`-prof perfasm`がめちゃすごい

JMH(Java Microbenchmark Harness)で、-prof perfasmをすると、perfと-XX:+PrintAssemblyを使って、JITコンパイラ生成コードでのホットな部分を表示してくれるという機能があります。これが、思いの外すごい機能だったので、紹介します。 前提条件 JMHを知…

TLABとフィラー(詰め物)

以前、TLABとBump the Pointerについて、検証しました。 www.sakatakoichi.com AlekseyさんのJVM Anatomy Parkには、もう1つTLABの話題があります。今回、その内容も、実際に動かして見てみます。 JVM Anatomy Park #5: TLABs and Heap Parsability こんなコ…

TLABとBump the Pointer

JJUG CCC 2018 Fallのセッション、数村さんのGCを発生させないJVMとコーディングスタイルにて、TLABとBump the Pointerについての説明がありました。 (https://www.slideshare.net/kenjikazumura/gcjvm より抜粋) TLAB、理屈は知っているけれど、よく考え…

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鈴木会長の司会の下、せろさん、きしださんとともにパネリストとし…

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…