1. ホーム
  2. java

[解決済み] なぜJVMはJITコンパイルされたコードをキャッシュしないのですか?

2022-10-01 19:14:48

質問

Sunからの標準的なJVM実装は、コードが数回実行された後、ネイティブに近い実行速度を得るために、バイトコードにいくつかの非常に洗練された最適化を適用します。

問題は、なぜこのコンパイルされたコードは、同じ関数/クラスの後続の使用中に使用するためにディスクにキャッシュされないのか、ということです。

現状では、プログラムが実行されるたびに、JIT コンパイラーはコードのプリコンパイルされたバージョンを使用するのではなく、新たに起動されます。この機能を追加することは、バイトコードが本質的に解釈されるとき、プログラムの最初の実行時間に重要なブーストを追加しないでしょうか?

どのように解決するのですか?

MYYN が投稿したリンクのカット アンド ペーストに頼ることなく、私は、JVM が実行する最適化が静的ではなく、コード パターンと同様にデータ パターンに基づいた動的であるためであると推測します。これらのデータ パターンは、アプリケーションの寿命の間に変更される可能性が高く、キャッシュされた最適化が最適でない状態になります。

そのため、保存された最適化がまだ最適であるかどうかを確立するメカニズムが必要になります。