JVM (それらのいずれか) は、実行時に既にコンパイルされたコードを再コンパイルしていますか?
質問する
47 次
1 に答える
1
再コンパイルが何を意味するかによって異なりますが、HotSpot VM は、楽観的な仮定に依存するコードが間違っているか、もはや関連性がないことが証明された場合に破棄します。非最適化を参照してください:
最適化解除は、最適化されたスタック フレームを最適化されていないフレームに変更するプロセスです。コンパイルされたメソッドに関しては、無効な楽観的最適化を含むコードを破棄し、最適化されていないより堅牢なコードに置き換えるプロセスでもあります。
4 番目のポイントは特に興味深いものです。
以前のクラス階層分析を無効にするクラスがロードされた場合、影響を受けるすべてのメソッドのアクティブ化は、任意のスレッドでセーフポイントに強制され、最適化が解除されます。
これは、このペーパーで説明されているように、オプティミスティック メソッドのインライン化に適用されます。
クラス階層分析 (CHA) を使用して、現在適切なメソッドが 1 つしか存在しない仮想呼び出しサイトを検出します。このメソッドは楽観的にインライン展開されます。別の適切なメソッドを追加するクラスが後でロードされると、楽観的な仮定が成り立たなくなり、メソッドは最適化されなくなります。
于 2013-04-12T10:38:40.140 に答える