jvm
JDK 16以降は以下でOKです。 jcmd <PID> Compiler.perfmap perf用ですのでこのコマンドはLinuxのみです。 これはAdd diagnostic command to write Linux perf map file で入りました。 JDK 8や11などのJDK 15以前だとjcmdにこのコマンドがありません。別途perf-ma</pid>…
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…
openjdk.java.net OpenJDKにはjtregのテストとgtest(GoogleTest)のテストがあるのですが、gtestの方です。ドキュメントにあるmake test-only TEST=の形式ですぐに動かせなかったので、同僚に教えてもらった他の実行方法をメモとして残します。 セットアッ…
このブログで以下のエントリを投稿していました。 www.sakatakoichi.com この中で、 サーバーで指定したJDKのバージョンと、WindowsでGUIを起動したJDKのバージョンが異なると、上記の警告が出ます。 という、リモート・デバッグ・サーバーとクライアントの…
手持ちのコアファイルがない場合は、yasuenagさんのリポジトリからすぐに作れます!! https://github.com/YaSuenag/garakuta/tree/master/NativeSEGV Linuxではあらかじめulimit -c unlimitedしてから実行してください。 デバッグ情報付きのOpenJDKビルドを…
師匠から教えていただいた内容であり、私自身がいきなり気づいたわけではないのですが、OpenJDKのメーリングリストでも他の方からも教えていただいたので、自分の備忘録的にまとめます。 Javaのシンボル名に関するHotSpot VMのコードの話です。ここでのシン…
2019/07/29-31に、JVM Language Summit(通称JVMLS)に参加しました。 期間中、メモのようなブログエントリを残しています。 www.sakatakoichi.com www.sakatakoichi.com www.sakatakoichi.com 今回、私にしては珍しく、カメラを持参して撮影したので、写真…
JVM Language Summit (JVMLS) 2019の3日目、最終日が終わりました。 1日目はこちら。 www.sakatakoichi.com 2日目はこちら。 www.sakatakoichi.com 3日目は、半日しかなく、しかもJava系のセッションはNullnessのものだけでした(要するに、どのセッションも…
JVM Language Summit (JVMLS) 2019の2日目が終わりました。 JVMLSとは、1日目に関しては、こちらのエントリにあります。 www.sakatakoichi.com 2日目は、JITコンパイルとAOTコンパイル、GraalVM関連と、私にとって最高の日でした。 最初のセッションは、Open…
2019/07/29-31に、オラクルのUSサンタクララオフィス(本社ではないところ)で開催されている、JVM Language Summit(通称JVMLS)に参加しています。 http://openjdk.java.net/projects/mlvm/jvmlangsummit/ 私は昨年2018年に初参加して、今回が2回目です。 …
ZGCのセッションで、今後の長期目標の1つとして、JVMCIに対応する、と聞きました。逆に考えると、GCの中には、JVMCIに対応していないものがある、と理解しました。 現時点で新しめのOpenJDK(53918:616a32d6b463)で、試します。 デフォルト(G1GC) $ build…
2019年2月のFOSDEMというイベントが、ベルギーのブリュッセルでありました。 FOSDEMは、Free and Open Source Developer's European Meetupの頭文字です。 そこで、「Build your own GC with OpenJDK in 20 minutes」というセッションがありました。 録画も…
2019/02/27に、JJUG(日本Javaユーザグループ)さんでのナイトセミナー、「JVM言語を作ろう! GraalVMで遊ぼう!」で登壇をしました。 www.java-users.jp 「GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう」というセッションです。スライド…
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…
定数を利用した最適化、というのはイメージしやすいですし、実際速くなります。今回、Alekseyさんのサンプルを使いながら、まずはstatic finalな値のコンパイルコードを実際に見て、どう速いのか学びました。 JVM Anatomy Park #15: Just-In-Time Constants …
JMH(Java Microbenchmark Harness)で、-prof perfasmをすると、perfと-XX:+PrintAssemblyを使って、JITコンパイラ生成コードでのホットな部分を表示してくれるという機能があります。これが、思いの外すごい機能だったので、紹介します。 前提条件 JMHを知…
以前、TLABとBump the Pointerについて、検証しました。 www.sakatakoichi.com AlekseyさんのJVM Anatomy Parkには、もう1つTLABの話題があります。今回、その内容も、実際に動かして見てみます。 JVM Anatomy Park #5: TLABs and Heap Parsability こんなコ…
JJUG CCC 2018 Fallのセッション、数村さんのGCを発生させないJVMとコーディングスタイルにて、TLABとBump the Pointerについての説明がありました。 (https://www.slideshare.net/kenjikazumura/gcjvm より抜粋) TLAB、理屈は知っているけれど、よく考え…
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…
JJUG CCC 2018 Fallのセッション、GCを発生させないJVMとコーディングスタイルにて、GCの発生を抑えるアプリケーション側の対処として、以下のことをするケースもある、とありました。 (https://www.slideshare.net/kenjikazumura/gcjvm より抜粋) String#…
OpenJDKをhg cloneしたあと、bin/idea.shを実行して、IntelliJ IDEAでソースコードを読んでいました。ただ、C++のコードを読む割合が増えてきて、IntelliJでは読みづらいな、と感じてきました。 以前chiroitoさんが、Eclipse上でOpenJDKをデバッグしていたこ…
そういえば、Graal JITコンパイラのコードはいろいろ読んでみたことはあるけれど、ネイティブイメージのSubstrateVMの方はまったく読んでいないなあ、と思いました。 ネイティブイメージを生成してみる、的なことを、1年ほど前に試しただけでした。 www.saka…
JEP 181: Nest-Based Access Controlというものがあります。これはNestmates(ネストメイト)と呼ばれるものです。 http://openjdk.java.net/jeps/181 Nestmatesは、クラスやインタフェースをネストして作成したとき、ネストする側される側の両方を指す言葉…
以前HotSpot VMのIntrinsicsを見ました。ビルド時にAD(Architecture Description)ファイルから各CPUアーキテクチャに合わせたC++のソースファイルを生成しています。 www.sakatakoichi.com しかし、ADファイルからどのようにC++のソースを生成しているのか…
Project Loomのソースを読んでいると、また遭遇しました。 public class Continuation { ... @HotSpotIntrinsicCandidate private static int doYield(int scopes) { throw new Error("Intrinsic not installed"); }; ... } @HotSpotIntrinsicCandidateアノ…
LINE様が東京を始め京都、大阪、福岡などで頻繁に開催されているいわゆる勉強会、Developer Meetupがあります。 2018年7月に福岡のLINE Fukuoka様で開催されたDeveloper Meetupに登壇しました。こちらの模様をLINE様のEngineer Blogに書いていただきました。…
以前Project ValhallaのL-World Value Typesのアーリーアクセスビルドを試しました。 www.sakatakoichi.com 今回もう少し触ってみます。 利用バージョン $ java -version openjdk version "11-lworldea" 2018-09-25 OpenJDK Runtime Environment 18.9 (build…
こちらのツイートが話題になっていました。 MySQL MLE Pluginはマルチ言語VMであるGraalVMを内包することでMySQL上で複数の開発言語でストアドプログラムを作成/実行可能とする。近日中にMySQL Labsで利用可能となる予定。まずはJavaScriptのサポートから。M…
今回は他言語実行環境としてのGraalVM、Polyglotに着目します。現時点での最新版、1.0.0-rc5を使います。 http://www.graalvm.org/downloads/ なお、rc5からCommunity EditionがmacOSに対応しました(今まではEnterprise Editionだけでした)。こちらを使い…
Project ValhallaのL-World Value Typesのアーリーアクセスビルドが出ています。 Valhalla Early-Access Builds Value Typesは、L-WorldではないQタイプのMinimal Value Types(MVT)という初期のプロトタイプがありました。 www.infoq.com 現在は従来のLタ…