なぜ、Zingは高速なJava環境を提供できるのか?

Zingは、標準のOracle HotspotJVMの強力な代替品です。Zingは、GCの一時停止とJITコンパイルの問題の両方に対処します。

Azul Zingは、JVMに、コンパイルされたメソッドとクラスの状態をプロファイルと呼ばれるものに「保存」させることで、これらの問題に対処しますReadyNow!®という名前のこの独自の機能は、再起動後もJavaアプリケーションが常に最適な速度で実行されていることを意味します。


既存のプロファイルを使用してアプリケーションを再起動すると、Azul JVMはすぐに以前の決定を呼び出し、概説されたメソッドを直接コンパイルして、Javaウォームアップの問題を解決します。

さらに、開発環境でプロファイルを作成して、本番環境の動作を模倣することができます。最適化されたプロファイルは、すべてのクリティカルパスがコンパイルおよび最適化されていることを認識して、本番環境にデプロイできます。

以下のグラフは、(シミュレートされた環境での)トレーディングアプリケーションの最大レイテンシーを示しています。

Hotspot JVMの大きなレイテンシーのピークがはっきりと見えますが、Zingのレイテンシーは時間の経過とともにかなり一定のままです。

パーセンタイル分布は、ZingJVMのレイテンシがHotspotJVMの16倍も良い事を示しています。


ガベージコレクション(GC)の一時停止への対処

2番目の問題は、ガベージコレクション中に、アプリケーション全体が数ミリ秒から数秒の間フリーズする可能性があり(遅延はコードの複雑さとヒープサイズとともに増加します)、さらに悪いことに、これをいつ制御する方法がありません。必ず起こります。

多くのJavaアプリケーションでは、アプリケーションを数ミリ秒または数秒休止することは許容できる場合がありますが、自動車、航空宇宙、医療、または金融の各セクターで、待ち時間の短いアプリケーションにとっては災害です。


Zingはごくわずかな一時停止で非常に高いスループットを達成することができます。

これは、ZingがC4(Continuously Concurrent Compacting Collector)と呼ばれる独自のコレクターを使用しており、Javaヒープサイズに関係なく、一時停止のないガベージコレクション (最大8テラバイト)を実現しているからです。

これは、アプリケーションの実行中にメモリのマッピングと圧縮を同時に行うことで実現されます。

さらに、コードを変更する必要がなく待ち時間と速度の両方の改善がすぐに確認できます。

このコンテキストでは、Javaプログラマーは、Javaの単純さ(新しいオブジェクトの作成について偏執的である必要はありません)とZingの基本的なパフォーマンスの両方の長所を享受でき、システム全体で高度に予測可能なレイテンシーを実現します。



このアプリケーションでは、GCは標準のOracle HotspotJVMよりもZingの方が約180倍小さくなっています。


原文はこちら(中段以降参照)

https://medium.com/@jadsarmo/why-we-chose-java-for-our-high-frequency-trading-application-600f7c04da94


21回の閲覧0件のコメント

最新記事

すべて表示

Javaのおさらい(有段者はご遠慮下さい・・)

まず、Javaはご存じの通り、ジャストインタイムコンパイラです。 C ++のような言語は、コンパイラを通じて提供されるコードは完全にバイナリであり、CPU上で直接実行可能であるため、コンパイル型言語と呼ばれます。 PHPまたはPerlは、インタープリターがコードの各行を実行時にコンパイルするため、 インタープリターと呼ばれます。 Javaはその中間にあります。コードをJavaバイトコードと呼ばれる