BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース AdoptOpenJDKがDragonwellを受け入れ

AdoptOpenJDKがDragonwellを受け入れ

原文(投稿日:2021/01/05)へのリンク

AdoptOpenJDKとAlibabaは、Dragonwell JDKをAdoptOpenJDKのインフラストラクチャを使って構築、テスト、配布すると発表した。これはユーザにとっての選択肢が増えるということであり、コルーチンやウォームアップサポートなどのユニークな機能を理由としたDragonwellの選択が可能になるということである。

AlibabaのDragonwellはOpenJDKのダウンストリームバージョンで、OpenJDKのメインラインでは使用不可能な、重要な機能をいくつか備えている。Alibabaはこれを、Eコマース、金融、流通アプリケーションに特化したOpenJDKビルドである、と説明している。同社はDragonwellを使用して、10万以上のサーバ上でアプリケーションを運用している。

2019年にDragonwellはオープンソース化されて、無償での使用が可能になった。Linuxx86-64が公式サポート対象だが、aarch64ビルドが公開されている他、Windows用の実験バージョンも存在する。Alibabaは長期サポートを提供するとしているが、正確な期限は決められていない。

DragonwellはTCK(Technology Compatibility Kit)の認定を受けている。Java TCK テストキットは、コンパイルされたJavaバイナリの適合性をテストして、Java SE標準への準拠性を確認することを目的とする、Oracleのプロプライエタリなテストスイートである。

Dragonwell 8および11ビルドは、AdoptOpenJDK Webサイト上で公開される予定である。これはつまり、バイナリのダウンロードにAdoptOpenJDK APIを使用できる、ということだ。新しいバイナリの取得を自動化している組織にとって、これは特に便利である。

Dragonwellのユニークな機能のひとつがJWarmupである。この機能は、JITコンパイルによって生じるウォームアップパフォーマンスの課題を軽減しようというものだ。パフォーマンス改善の手段として、コンパイル済のホットメソッドを使用する。これを実現するために2つのフェーズ — pre-runとnormal runが定義されている。

pre-runフェーズでは、ロードテスト宙にホットメソッドのプロファイリングデータが記録され、ディスク上のファイルに格納される。このファイルをnomal run中のJITスレッドが参照して、ファイル内のメソッドをネイティブバージョンにコンパイルする。コンパイルされたメソッドはインタプリタではなく、スタートアップ時点からネイティブに実行されるようになる。これにより、アプリケーションのウォームアップフェーズが削減され、起動時からアプリケーションのパフォーマンスが改善されるようになる。

ウォームアップ動作を低減するこれらのアイデアは、何年も前から議論されてきたものだ。例えばAzul Systemsは、自社のZing JVMに"Ready Now!"というテクノロジを備えている。以前の実行時にコンパイルされたデータの再利用も行われる。階層型コンパイルとjaotcコンパイラの導入は、インタプリタモードの実行量を削減ないし回避することによるスタートアップパフォーマンスの改善、という方向へのステップでもある。

もうひとつの興味深い機能がWisp2コルーチンのサポートだ。Wisp2はJavaスレッドをカーネルレベルのスレッドではなく、コルーチンにマップする。少ないコアのライン上で多数のコルーチンがスケジュール可能になるため、アプリケーションのパフォーマンスが改善される可能性がある。これにより、スケジューリングのオーバーヘッドを削減するとともに、実行するワークロードに応じて改善を行うことが可能になる。

Wisp2エンジンはいくつかの面でProject Loomの目標と共通点がある。Project Loomも同じように、開発者がスレッドを"仮想化"し、コルーチンと同様のアプローチを用いて少数のプラットフォームスレッド上にマルチプレクスすることによって、ライブスレッドにあるいくつかのボトルネックを取り除こうとしているのだ。

Wisp2の核となるアイデアは、(Loomとは異なり)次のようなJava引数で有効にすることで、既存コードでもアウトオブボックスに機能するようにする、というものだ。

java -XX:+UnlockExperimentalVMOptions -XX:+UseWisp2

ソースコードの変更が不要なため、マイグレーションコストは低い。開発者自身がコルーチンを実装する必要はなく、既存のJavaの並行機能もそのまま利用できる。

ただし、すべてのアプリケーションにメリットがある訳ではなく、すべてのスレッドを自動的にコルーチンに移行することの影響(ポジティブなものとは限らない)が極めて大きい場合もある。

タスクがイベント上でブロックされ、その後スケジュールされるようなI/Oインテンシブなアプリケーションであれば、コルーチンのサポートによるメリットが期待できる。逆にCPUインテンシブなアプリケーションでは、コルーチンによるメリットはおそらく望めないだろう。アプリケーションにとってメリットがあるかどうかを確かめる最も簡単な方法は、サポートを有効にしてパフォーマンステストを実行することだ。

Alibabaは、アップストリームのOpenJDKに対するこれらの機能やパッチのコントリビューションに積極的に取り組んでいる。例えばJWarmupはJEP(Java Enhancement Proposal)で説明されているが、本記事の時点ではまだドラフトの状態にある。

AdoptOpenJDKとDragonwellのは、OpenJDKべースのディストリビューションとして最も有名なものの2つだが、その他にもAmazonのCorrettoSapのSapMachineBellSoftのLibericaAzulのZuluojdkbuildなど多数の選択肢があり、それぞれが異なる機能やパッチのJDKとJREを提供している。さらにサポートレベルも組織によって異なっており、一部には有償のものもある。これによってユーザには、必要な機能やサポートに基いて適切なJDKを選択できるという、より多くの自由が与えられることになる。

この記事に星をつける

おすすめ度
スタイル

BT