文字列は不変であり、文字列プールで管理されます。このプールがどのように管理されているか知りたいです。アプリケーションで多数の文字列リテラルが使用されている場合 (追加、置換操作などの変更が多い場合は文字列ビルダーを使用する必要があることを理解しています)、プールは新しい文字列オブジェクトを何度も再作成しないことで、アプリケーションのパフォーマンスを向上させます。ただし、プールに存在する同じオブジェクトを使用すると、文字列は不変であり、そうしても悪影響はないため、これは可能です。
私の質問は、これString Pool
がどのように管理されているかです。いくつかの「k」文字列の頻度が非常に高く、一度作成されて再び使用されていない他の文字列オブジェクトがほとんどない場合。他の新しい文字列リテラルが使用されている可能性があります。
このような場合、String Pool は LRU キャッシュのように動作し、最新の使用済みリテラルへの参照を保持し、使用されていない古い文字列をプールから削除しますか?
String プールにはサイズがありますか、それともアプリケーションで制御できますか?
編集 :
通常、実装するカスタム オブジェクト プールにサイズを指定します。Sting Pool に LRU のような機能がないのはなぜでしょうか。これが特徴だったのかもしれません。大きな文字列の場合も問題はありませんでした。しかし、私はそれが実装された方法だと感じていますが、なぜそこにないのかを知りたかっただけです。つまり、何らかの正当な理由でそこにないことを意味します。この機能を使用すると、いくつかの悪影響が生じるでしょう. 誰かがそれらの悪影響に光を当てることができれば、それは良いことです.