OpenJDKのコントリビュータたちの手によって、パワフルrなローレイテンシプロファイリング機能が、公開メンテナンスされているJava 8にバックポートされた。これにより、JVMのパフォーマンスを、低いオーバーヘッドで監視することが可能になる。Flight Recorderと呼ばれるこのツールは現在、AdoptOpenJDKを始めとするいくつかのオープンソース実装で使用することができる。
Java Flight Recorder(JFR)は、10年以上にわたって開発が続けられてきた、JRockitやWebLoguic Serverのパフォーマンス監視機能の基盤を形成するコンポーネントだ。JRockitとHotSpotがひとつのJVM実装に収束したことに伴い、Java 8およびJDK 7u40用HotSpotのタイムフレームに含まれることになった。外付けのパフォーマンス監視システムとは違い、JFRはJDKに直接組み込まれているため、サンプリングやセーフポイントに起因するミスリードの発生しない、正確な方法でのパフォーマンス監視が可能になる。パフォーマンス診断が正確であるだけでなく、計測に伴って発生するオーバーヘッドも約2パーセントと低く抑えられている。これらの診断により、開発者やオペレータは、計測ポイントの特定や推測を行わずとも、正確なパフォーマンスデータを収集することが可能になる。
JFRのコードはJDK 11でオープンソースとして公開されており、すべてのユーザが無償で使用できる。オープンソース化される以前は、Java SE Advancedライセンスの必要な有償機能として、Oracle JDKでのみ使用することが可能であった。Oracle JDKでこの機能を有効にするためには、有償機能フラグか、あるいは有償機能を有効にするJMX接続を必要としていた。今回、JFRがバックポートされたことにより、無償JVM実装のユーザは、Oracle JVM以外であれば、コストの発生なくJFRを使用できるようになる。OracleがJDK 8の公開サポートを可能にする一方で、JDK 11以降には有償ライセンスを求めていることから、多くの開発者が、AdoptOpenJDKのHotSpotディストリビューションなどの無償メンテナンスバージョンに乗り換えている。
JFRは2つのコアメカニズムを経由して使用可能になる。まず、Flight Recorde自体が自動ブラックボックスレコーダとしてJVMに事前に組み込まれており、情報の記録を行う。そして、別システムとして動作するビジュアルコンソールのMission Controlを使うことにより、メトリクスの評価やパフォーマンススナップショットの生成など、オペレータによるブラックボックスの操作が可能になる。
JFRと他の商用ないし公開プロファイラには、注目すべき相違点がいくつかある。最も大きな違いは、JFRがすでにJVM内にあり、追加や統合のための追加ツールを必要としないことだ。他の主要な差異は、この配置された位置から何が見えるか、という点に端を発している。また、多くのプロファイラは、要求/応答ロード時間などの高レベルなメトリックスに重点を置いているが、下位JDKレイヤには"Web要求"のような概念は存在しない。結果的に、JFRがデフォルトで提供するメトリックスは、JVMの生のオペレーションをより指向したものになっている。それを反映した機能のひとつが、高度なガベージコレクション解析だ。単にガベージコレクションの統計情報を報告する一般的なツールとは違い、JFRの持つ分析機能では、どのようなガベージが収集されたのか、誰がそれを廃棄したのか、といった詳細を知ることができる。この機能により、パフォーマンスを改善する2つの結論が導き出される。すなわち、改善すべき点を具体的に特定し、ガベージコレクションのチューニングが不適切なソリューションである場合には、別のことをするべきである、という認識を持つことが可能である。
Flight Recorderについて学びたい開発者は、JDK Mission ComntrolプロジェクトのりーだであるMarcus Hirt氏の以前のプレゼンテーション内容を確認してほしい。またQcon SFではMikael BVidstet氏が、自身の新たなプレゼンテーションの中で、これと同じ話題を取り上げている。
この分析システムは現在、JDK 8メンテナが中心となって開発を進めているAdoptOpenJDKの早期アクセス版で使用することができる。JFRと合わせた完全かつテスト済のビルドも、Azul Zuluからの入手可能だ。