Red Hat で Java Platform Advocate として OpenJDK を担当している伊藤ちひろ(@chiroito)です。
この記事は、OpenJDK のWikiページ、https://wiki.openjdk.java.net/display/shenandoah/Main の一部を翻訳した記事です。何回かに分けて翻訳していきますので、ぜひ最後までごらん下さい。
翻訳の各リンクはこちらです。
- Shenandoah GCのサポート概要とバグ報告について - 赤帽エンジニアブログ
- Shenandoah GCの実装概要 - 赤帽エンジニアブログ
- Shenandoah GCの性能指針と診断 - 赤帽エンジニアブログ
- Shenandoah GCの機能診断 - 赤帽エンジニアブログ
Shenandoahは低い停止時間のガベージコレクタです。これは、実行中のJavaプログラムと同時に、より多くのガベージコレクション作業を行うことで、GCの停止時間を短縮します。Shenandoahは、同時コンパクションを含め、GC作業の大部分を同時進行で行います。つまり、停止時間はヒープサイズに正比例しなくなりました。200GBのヒープをガベージコレクションしても、2GBのヒープをガベージコレクションしても、同様の低い停止時間の動作になるべきです。
サポート概要
OS サポート
ShenandoahはOSから特別な要求があるわけではありません。しかし、ビルドにはコードをいじる必要があるかもしれません。
サポート | コメント | |
---|---|---|
Linux | 主要ターゲット、継続的にテスト | |
Windows | 次点のターゲット、継続的にテスト | |
macOS | 追加ターゲット、コミュニティでテスト | |
Solaris | 追加ターゲット、コミュニティでテスト. | |
その他 | 移植は些細なことであるはずです。成功・失敗の報告をShenandoahの開発者に連絡してみてください |
ハードウェアサポート
Shenandoahは、いくつかのハードウェア固有のビットを実装する必要があります。移植には、いくつかのアセンブリレベルのコーディングが必要です。
サポート | コメント | |
---|---|---|
x86_64 | 主要ターゲット、継続的にテスト | |
x86_32 | 次点ターゲット、継続的にテスト | |
AArch64 | 主要ターゲット、継続的にテスト | |
PPC64 | 次点ターゲット、コミュニティによるテスト | |
RISCV64 | 次点ターゲット、コミュニティによるテスト。riscv-portの一部 | |
ARM32 | ゆっくり開発中、ヘルプ歓迎 | |
S390X | サポートしてません。貢献歓迎 | |
SPARC | サポートしてません。試験をするハードウェアがない | |
Others | 他のプラットフォームにShenandoahを移植する意思がある場合は、Shenandoah開発者に連絡して指導を受けてください。 |
JDK サポート
Shenandoahは、アップストリームのOpenJDK 12+ ( JEP 189 )に含まれています。その後、OpenJDK 11u にコントリビュートされました。 OpenJDK 8uへのダウンストリームバックポートも利用可能です。Shenandoahは、"express "開発モデルに従っています。機能およびバグフィックスは、サポートされる以前のJDKリリースに継続的にバックポートされます。重要なバグフィックスは、最初にバックポートされます。そして、できるだけ早くリリースされます。クリティカルでないバグフィックスや機能は、少し遅れてバックポートされるかもしれません。共有GCやランタイムコードの改良は、簡単にバックポートできないかもしれません。OpenJDK Updatesプロジェクトの一部として、それらのいくつかはバックポートされています。主要なGCの改良は、さらに後に出荷されるかもしれません。
Supported | Ready for Production | Role | Comment | |
---|---|---|---|---|
JDK 8 | 安定版LTS | 8uの主流ではないバックポートとして利用可能です。利用可能かどうかはベンダに確認してください。以下の既知のベンダーのリストを参照してください。 | ||
JDK 9 | 終了、早急に11/17に移行してください。 | |||
JDK 10 | 終了、早急に11/17に移行してください。 | |||
JDK 11 | 安定版LTS | 11.0.9以降OpenJDK 11uに搭載されています。ビルド時に事前の許可が必要です。利用可能かどうかはベンダに確認してください。以下の既知のベンダーのリストを参照してください。 | ||
JDK 12 | 終了、早急に17に移行してください。 | |||
JDK 13 | 終了、17に移行してください。 | |||
JDK 14 | 終了、17に移行してください。 | |||
JDK 15 | 終了、17に移行してください。 | |||
JDK 16 | 終了、17に移行してください。 | |||
JDK 17 | 安定版LTS | 主流のOpenJDKビルドです | ||
JDK 18 | Dev/Test | 主流のOpenJDKビルドです |
最新のJDKリリースを選択しなくても、ほとんどの修正と便利な機能を利用することができます。しかし、後の方のリリースの方がより最新である可能性があります。 開発リポジトリとビルドの間でどのように変更が行われるのか、その詳細を理解したい場合は、こちらをご覧ください。
リリース
Shenandoahの利用可能性は、ベンダーやJDKのリリースによって異なります。OpenJDK 12以降のビルドは、通常、デフォルトでShenandoahを含んでいます。OpenJDK 11では、ビルド時に事前の許可が必要です。 既知のベンダーのステータスは
- Red Hat
- Fedora 24+ OpenJDK 8+ ビルドはShenandoahを含む
- RHEL 7.4+ は技術プレビューとしてShenandoah GCを含んだOpenJDK 8+ があります。
- Red Hat OpenJDK 8u builds for Windows はShenandoah を含む
- Amazon
- Amazon Correttoは, OpenJDK 11.0.9からShenandoahを含む
- Oracle
- OpenJDKビルドと独自ビルドの両方において如何なるリリースでShenandoahを含めない。
- Azul
- Azul Zuluは, OpenJDK 11.0.9からShenandoahを含む
- SAP
- (ステータス不明)
- AdoptOpenJDK
- デフォルトバイナリで, OpenJDK 11.0.9からShenandoahを含む
- Linux distributions
- Debian は, OpenJDK 11.0.9からShenandoahを含む
- Gentoo ebuilds for IcedTea はShenandoah を使うフラグを持つ
- RHEL/Fedoraをベースとするディストリビューションやそれらのパッケージを使う他のディストリビューションもまたShenandoahが有効化されている。注目すべきは, CentOS, Oracle Linux, とAmazon Linux には含まれていると知られています。
ナイトリービルド
これらの場所では、(毎晩/毎週)開発ビルドが公開されています:
- Linuxのナイトリービルドは builds.shipilev.net で入手可能です。
- Linux/x86_64 のナイトリービルドは Docker イメージ としても利用可能です。 例:
# イメージを最新のものに更新: $ docker pull shipilev/openjdk $ docker pull shipilev/openjdk:11 $ docker pull shipilev/openjdk-shenandoah:8 # 最新版の実行: $ docker run --rm -it shipilev/openjdk java -XX:+UseShenandoahGC -Xlog:gc -version [0.007s][info][gc] Using Shenandoah ... # JDK 11 バージョンを実行: $ docker run --rm -it shipilev/openjdk:11 java -XX:+UseShenandoahGC -Xlog:gc -version [0.008s][info][gc] Using Shenandoah ... # JDK 8 バックポート: $ docker run --rm -it shipilev/openjdk-shenandoah:8 java -XX:+UseShenandoahGC -verbose:gc -version ...
バグを報告 バグを報告するには、いくつかの方法があります。以下はそのチェックリストです:
- 最新のナイトリービルドを試す。上のセクションを参照。
- 以下の「機能診断」と「パフォーマンス診断」のセクションのテクニックを使って、バグを絞り込んでみてください。
- その問題に対する最小限のテストケースを考えてみてください。開発者が自分でビルドして実行できるのであれば、大規模なプロジェクトも問題ありません。
- 以下の3つの選択肢で、バグレポートを提出してください:
- すべてのJDKのバージョン:shenandoah-dev メーリングリストにメッセージを送る。このメーリングリストは管理されているので、最初に購読するか、進行役があなたのメッセージを受け入れるのを待ちます。
- JDK 8, JDK 11:Red Hatのサブスクリプションに加入しており、FedoraまたはRHELからバイナリを実行している場合、Red Hatのサポートを通じてバグを報告してください。
- JDK 12 以降:OpenJDKのバグレポートに、どのビルドで動作しているのかを明記して提出してください。これは、Shenandoahの開発者に渡す前に、Oracleの人々が最初にバグを受け入れることを必要とします。
- いくつかの追加の質問に答えられるように準備しておきましょう。
- 時間があれば、パッチやナイトリーバイナリーをテストする準備をしておいてください。