OpenJ9はIBMが開発しているJVMです。
OpenJDKベースでオープンソース、高速な起動、低いメモリフットプリントを謳っています。
以前確認したときはMac用のビルドが無かった気がしますが、Java 11のビルドが出たので試してみました。
以下のページより “OpenJDK11-jdk_x64_mac_openj9_11.0.1_13.tar.gz” というファイルをダウンロード出来ます。
・Latest release | AdoptOpenJDK – Open source, prebuilt OpenJDK binaries
展開すると”jdk-11.0.1+13″という謎のファイルが現れますが、これはパッケージ(Macでディレクトリを1ファイルに見せる仕組み)になっているだけで、実態はJavaHomeが含まれるディレクトリです。
展開したディレクトリはどこに置いても大丈夫ですが、Macの流儀に従うのであれば /Library/Java/JavaVirtualMachines/ に置くことになります。
素のOpenJDKと区別するため、自分の環境ではjdk-j9-11.0.1+13という名前にしておきました。
IntelliJ IDEAでも普通に認識されます。
もちろんLambda内でのvarも使えます。
スレッドダンプを取得してみようと思いましたが、jpsコマンドでは見えません。Hotspotじゃないからかな?
しかも、kill -3 PID でもスレッドダンプが出ません。あれ?
とりあえず動かして見たかっただけなので報告だけして深追いはしないでおきます。
追記:
IntelliJ IDEAから起動した場合だけスレッドダンプが出ないという問題で、直りました。
デフォルトではkill -9では何も出ません。
どんなイベントでどんな情報が出力されるかは,J9ではDump Agent(-Xdumpコマンドラインオプション)で構成します。デフォルトで構成されているものの一覧は「-Xdump:what」をつけて起動すると表示されます。
一般にスレッドダンプと呼ばれるのはstderrへの出力はJ9では「-Xdump:stack:」で構成されますが,この出力はデフォルトでは構成されていません。かわりにスレッドダンプを含んだJavaDump(-Xdump:java:)を別ファイルを書き出すものが使用されます。デフォルトの構成はこうなってます。
———————-
-Xdump:java:
events=gpf+user+abort+traceassert+corruptcache,
file=/Library/Java/JavaVirtualMachines/jdk-11.0.1+13/Contents/Home/bin/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt,
range=1..0,
priority=400,
request=exclusive+preempt
———————-
eventsとしてuserが定義されてますので,kill -3とかを投げてください。