1

JVM (それらのいずれか) は、実行時に既にコンパイルされたコードを再コンパイルしていますか?

4

1 に答える 1

1

再コンパイルが何を意味するかによって異なりますが、HotSpot VM は、楽観的な仮定に依存するコードが間違っているか、もはや関連性がないことが証明された場合に破棄します。非最適化を参照してください:

最適化解除は、最適化されたスタック フレームを最適化されていないフレームに変更するプロセスです。コンパイルされたメソッドに関しては、無効な楽観的最適化を含むコードを破棄し、最適化されていないより堅牢なコードに置き換えるプロセスでもあります。

4 番目のポイントは特に興味深いものです。

以前のクラス階層分析を無効にするクラスがロードされた場合、影響を受けるすべてのメソッドのアクティブ化は、任意のスレッドでセーフポイントに強制され、最適化が解除されます。

これは、このペーパーで説明されているように、オプティミスティック メソッドのインライン化に適用されます。

クラス階層分析 (CHA) を使用して、現在適切なメソッドが 1 つしか存在しない仮想呼び出しサイトを検出します。このメソッドは楽観的にインライン展開されます。別の適切なメソッドを追加するクラスが後でロードされると、楽観的な仮定が成り立たなくなり、メソッドは最適化されなくなります。

于 2013-04-12T10:38:40.140 に答える