2016-06-21 22 views
0

HotSpotは、JIT最適化を実行してデッドコードを削除し、コードをより迅速かつ小さくできます。HotSpot JIT、デッドコードの除去と副作用?

削除しているコードに副作用がないこと、またはネイティブコードを呼び出すことがどのように分かっていますか。例えば、System.nanoTime()のようなHotSpotの組み込み関数を介して?式を呼び出すことを避け、式に副作用があるかどうかを知るために裏打ちに頼るか、ifのケースを排除するためにのみ機能しますか?

+1

これは、呼び出されていないコードまたは使用されていない結果のみを削除できます。メソッドが何をしているのかわからない場合は、それを削除することはできません。例えばSystem.nanoTime()を呼び出してもその結果を使用しないと、それを取り除くことはできません。 –

答えて

5

多くのホットスポット最適化はインライン展開後に行われるため、ローカル知識のみが必要です。 DCEはブランチおよび未使用の結果に適用されます。

デッドブランチは、到達できないときに副作用を起こすことができないため、簡単に削除できます。

未使用の結果は、ローカル(インライン展開後)のスコープを離れたり、使用された結果と変わらない副作用のあるものをヒットするまで、死んでしまうことがあります。

組み込み関数は、JNIと同じ意味でのネイティブコードではありません。メソッドはネイティブ宣言されていますが、組み込み関数のポイントは、任意のネイティブコードより最適化する方法についてのcompiler has more knowledgeです。