Java のデフォルトの文字列インターンには多くの悪評が寄せられているため、代替手段を探しています。
Java 文字列のインターンに代わる優れた API を提案できますか? 私のアプリケーションは Java 6 を使用しています。私の要件は、主にインターンによる文字列の重複を避けることです。
悪い報道について:
- 文字列インターンは、ネイティブ メソッドを介して実装されます。また、C の実装では、1k エントリの固定サイズを使用し、多数の文字列のスケーリングが非常に不十分です。
- Java 6 はインターンされた文字列を Perm gen に格納します。したがって、GC されず、perm gen エラーにつながる可能性があります。これは Java 7 で修正されていることはわかっていますが、Java 7 にアップグレードできません。
なぜインターリングを使用する必要があるのですか?
- 私のアプリケーションは、さまざまな展開でヒープ サイズが 10 ~ 20G のサーバー アプリです。
- プロファイリング中に、数十万の文字列が重複していることがわかりました。重複した文字列を保存しないようにすることで、メモリ使用量を大幅に改善できます。
- メモリは私たちにとってボトルネックであったため、時期尚早の最適化を行うのではなく、メモリをターゲットにしています。