13

おそらく実装の詳細ですが、Oracle および IBM JDK の場合、少なくともコンパイルされたパターンはキャッシュされますか?それとも、アプリケーション開発者として、コンパイルされたパターンのキャッシュを自分で実行する必要がありますか?

4

5 に答える 5

13

コード(JDK 6)を見る限り、キャッシングは行われませんが、一度構築されると、パターンオブジェクトはアプリケーション側でキャッシュされ、複数のスレッド間で共有されます。標準的なパターンは、最終的な静的変数に割り当てることのようです:

private static final Pattern p = Pattern.compile(",");
于 2012-11-16T16:23:31.973 に答える
5

結果がキャッシュされているとは思えず、コードドキュメントにそのような動作の証拠はありません。そのようなキャッシュを自分で実装するのは (もちろん) 比較的簡単ですが、そのようなキャッシュが有益なユース ケースに興味があります。

再。以下のコメントとString.split()、コードが単純な1文字または2文字のパターンとより複雑な正規表現に対して異なるパスをとるという点で、異なるアプローチがあります。しかし、まだキャッシュされていないようです。

于 2012-11-16T16:21:57.473 に答える
4

そうではありません。パフォーマンスが重要な領域がある場合は、パターン オブジェクトをメンバー変数として保持することをお勧めします。

ただし、関数に正規表現がある場合、Clojureはこれを多かれ少なかれ自動的に行います。

于 2012-11-16T16:26:42.480 に答える