BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース AzulがJavaクラウドコンパイラを起動

AzulがJavaクラウドコンパイラを起動

原文(投稿日:2022/02/08)へのリンク

Azulは、Java JITコンパイルをローカルシステムからエラスティックリソースにオフロードする新しいクラウドネイティブコンパイラをリリースした。これにより、アプリケーションの実行に必要なリソースの量が減り、パフォーマンスがピークに達するまでの時間が短縮される。

Javaランタイムは完全に自立したシステムであり、単一システム上でコードを実行し、改善するように設計されている。ランタイムはJust In Time(JIT)コンパイルを介して動作する。JITでは、速度とメモリを向上させるために、ローカルリソースを使って、Javaバイトコード(JARとクラスファイル)をネイティブマシンコードに変換する。Azulの副CTOのSimon Ritter氏は、Javaコンパイルの理解についてのブログでこのプロセスについて説明し、コードが時間の経過とともにどのように改善されるかについて詳しく説明している。JITコンパイルはほとんどのユーザに対して透明性があり、開発者や管理者の操作は必要ない。しかし、好奇心旺盛な開発者はJITWatchなどのツールを使ってその役割を監視できる。このJITコンパイルを別のシステムにオフロードすることで、AzulのクラウドコンパイラはJITをより高速に実行し、同じコードを実行するシステム間で最適化を共有できる。そして、アプリケーションにリソースを戻し、スループットを向上させるか、あるいは必要なCPU/RAMの合計を減らしてコストを削減できる。

Red Hatは、JITコンパイラがOpenJDKのパフォーマンスを向上させる方法についてのブログを公開した。このブログでは、JITが実行時にJavaアプリケーションを改善する方法について説明している。この投稿では、どのようにしてJavaアプリケーションを起動し、コードの監視し、パフォーマンスを向上させるための最適化の実行するかについて説明している。自立型JREで行われるこれらのJIT最適化は、実行中のアプリケーションとリソースを共有し、実行時にアプリケーション内で改善を行い、実行をより高速なJITコードに切り替える。

JITのもう1つの代替手段は、Ahead Of Time(AOT)コンパイルである。これは、バイトコードを経由するのではなく、Javaアプリケーションをネイティブマシンコードに直接コンパイルするものである。AOTの目的は、事前に作業を行うことにより、パフォーマンスがピークに達するまでの時間を短縮し、メモリ消費を改善することである。Baeldungの記事「新しいJava JITコンパイラの詳細」では、標準のOpenJDK JITコンパイラC1/C2とGraalVM AOTコンパイラの役割と違いについて説明している。JITもAOTも本質的にどちらが優れているというわけではない。AOTは多くの場合、より速く開始できるが、「ahead-of」という用語では、コードのどの部分が実行されるかを監視することから学習できる情報が見逃され、AOTのコンパイルにはバイトコードよりも大幅に時間がかかる。他にも動作上のトレードオフがある。

Azul Intelligence Cloudは、JIT(ピークパフォーマンス)の利点とAOT(高速起動時間)の利点を橋渡しする3つ目のオプションを取り入れるものである。チームは多くのシステムで同じコードを実行することが多いため、JREは組織の共有JITサーバーと通信することで各JREが同じ監視と最適化のサイクルを実行する必要がなくなる。クラウドコンパイラは、実行中のアプリケーションから分離されたCPUリソースを使用して、より詳細な分析を実行することもできる。結果として得られるアプリケーションは、この情報を転送し、改善されたコードで実行するために必要なネットワーク時間でピークパフォーマンスに達する可能性がある。QConで説明されているテストでは、パフォーマンスがピークに達するまでの時間が速く、スループットが25~100%速くなった。

Azulのクラウドコンパイラは、商用のAzul Primeディストリビューションで利用できるPrimeの無料バージョンは、開発、テスト、評価に利用できる。Kubernetesベースのクラウドコンパイラサービスを設定する手順は、Intelligence Cloudドキュメントに記載されている。

作者について

この記事に星をつける

おすすめ度
スタイル

BT