2017-06-28 3 views
-4

は、以下のコードJavaはループ内でPatter.compile( "some regex")を自動的に最適化しますか?

while(100 times){ 
Pattern abc = Pattern.compile("[0-9]+"); 
} 

を検討したJavaは、一度パターンや100回をコンパイルしていますか?

+0

生成されたバイトコードを見て、メソッドがどのくらいの頻度で呼び出されているかを確認することができます。私はそれが100回呼ばれていると推測している、その方法について特別なものは何もない、Javaコンパイラはjdkのすべてのメソッドを知っていないかどうか、それは副作用があり、最適化することができます。 – luk2302

+0

良いコンパイラがこれを最適化できない理由はわかりませんが、この種の解析を行うことができるコンパイラを書くことには時間がかかります。だから私の答えはコンパイラに依存するが、_free_コンパイラはおそらく 'Pattern.compile'を100回呼び出すだろう。このようなものを最適化するためにかなりの余分な努力を払う組織は、努力。 – ajb

+0

も参照してください:https://stackoverflow.com/questions/13420321/does-pattern-compile-cache –

答えて

1

JIT 少なくとも理論的にはそれを最適化しますが、それでも100ループ以上が必要です。

表示されたコードは、パターンが変更されず、ループ外で宣言することで簡単に再利用できるため、コードが悪いだけです。もちろん100 Patternをコンパイルするのはまだ非常に速いので、実際には違いは見えません。

コンパイラは、非常に簡単なものだけを最適化するため、何も実行しようとしません。

関連する問題