文字列の割り当てによってメモリ リークが発生することはありません。
そのコードの他の場所で文字列がリークするかどうかは、このコードからは識別できないいくつかのことに依存します。
- JSON 実装がキーと値の文字列を作成する方法。(
String.substring()
はるかに大きな文字列で使用している場合、共有文字列バッキング配列を介してストレージをリークする可能性があります。)
someOtherJson
がリークされているかどうか。
(Java SE での) 通常のアプローチは、メモリ プロファイリングからリークがあるという証拠が得られるまでは、気にしないことです。Java ME 実装では、通常、メモリはより制約されており、GC 実装は比較的遅くなる可能性があります。そのため、オブジェクト (文字列を含む) の数とサイズを減らす必要がある場合があります。しかし、それはメモリ リークの問題ではありません...そして、労力の無駄になりかねないメモリ効率キャンペーンに飛びつくよりも、最初にプロファイリングを行うことをお勧めします。
新しいオブジェクトをインスタンス化する代わりに文字列のプールを使用するのは正しいアプローチですか、それともメモリリークを回避する文字列を割り当てる他のアプローチは何ですか?
私が言ったように、上記のコードにはリークはありません。
文字列プールはリークをなくすわけではなく、必ずしもガベージ オブジェクトの作成率を下げるわけではありません。ライブ String オブジェクトの数をいつでも減らすことができますが、これには代償が伴います。
このアプローチを試してみたい場合はString.intern()
、String プールの管理に使用するのが最も簡単です。しかし、必ずしも役立つとは限りません。そして、実際に事態を悪化させる可能性があります。(共有の可能性が十分にない場合、インターンされた文字列プールのスペース オーバーヘッドが節約を超える可能性があります。さらに、インターンされた文字列プールは、GC により多くの作業を作成します。より多くのトレースと、より効果的に対処する弱い参照です。 )