HotSpotは、JIT最適化を実行してデッドコードを削除し、コードをより迅速かつ小さくできます。HotSpot JIT、デッドコードの除去と副作用?
削除しているコードに副作用がないこと、またはネイティブコードを呼び出すことがどのように分かっていますか。例えば、System.nanoTime()
のようなHotSpotの組み込み関数を介して?式を呼び出すことを避け、式に副作用があるかどうかを知るために裏打ちに頼るか、if
のケースを排除するためにのみ機能しますか?
HotSpotは、JIT最適化を実行してデッドコードを削除し、コードをより迅速かつ小さくできます。HotSpot JIT、デッドコードの除去と副作用?
削除しているコードに副作用がないこと、またはネイティブコードを呼び出すことがどのように分かっていますか。例えば、System.nanoTime()
のようなHotSpotの組み込み関数を介して?式を呼び出すことを避け、式に副作用があるかどうかを知るために裏打ちに頼るか、if
のケースを排除するためにのみ機能しますか?
多くのホットスポット最適化はインライン展開後に行われるため、ローカル知識のみが必要です。 DCEはブランチおよび未使用の結果に適用されます。
デッドブランチは、到達できないときに副作用を起こすことができないため、簡単に削除できます。
未使用の結果は、ローカル(インライン展開後)のスコープを離れたり、使用された結果と変わらない副作用のあるものをヒットするまで、死んでしまうことがあります。
組み込み関数は、JNIと同じ意味でのネイティブコードではありません。メソッドはネイティブ宣言されていますが、組み込み関数のポイントは、任意のネイティブコードより最適化する方法についてのcompiler has more knowledgeです。
これは、呼び出されていないコードまたは使用されていない結果のみを削除できます。メソッドが何をしているのかわからない場合は、それを削除することはできません。例えばSystem.nanoTime()を呼び出してもその結果を使用しないと、それを取り除くことはできません。 –