私は String クラス API を調べていましたが、元の String と同じ文字配列を共有しているため、部分文字列メソッドが原因でメモリ リークが発生する可能性があるようです。
元の文字列が巨大な場合、部分文字列によって返される小さな文字列は、Java でのガベージ コレクションから元の文字列 (大きな配列によってバックアップ) を防ぐことができます。
何か考えたり、APIを間違って読んだりしましたか。
私は String クラス API を調べていましたが、元の String と同じ文字配列を共有しているため、部分文字列メソッドが原因でメモリ リークが発生する可能性があるようです。
元の文字列が巨大な場合、部分文字列によって返される小さな文字列は、Java でのガベージ コレクションから元の文字列 (大きな配列によってバックアップ) を防ぐことができます。
何か考えたり、APIを間違って読んだりしましたか。
かなり大きな文字列の部分文字列を取得し、(通常はコンストラクターを介して) コピーを作成しないと、メモリ リークが発生する可能性があります。String(String)
これはJava 7u6から変更されたことに注意してください。https://bugs.openjdk.java.net/browse/JDK-7197183を参照してください。
flyweight パターンString
を実装するオブジェクトに関する元の仮定は、もはや有効とは見なされません。
詳細については、この回答を参照してください。
Java 7u6まではそうでした-通常、次のようにして問題に対処します。
String sub = new String(s.substring(...)); // create a new string
これにより、依存関係が効果的に削除され、元の文字列が GC で使用できるようになります。ちなみに、これは文字列コンストラクターの使用が理にかなっている唯一のシナリオの 1 つです。
Java 7u6以降、新しい文字列が作成され、メモリの問題はなくなりました。