重複する文字列がたくさんあるアプリケーションに取り組んでいます。私のタスクは、それらを削除してメモリ使用量を減らすことです。私の最初の考えはString.intern
、文字列の参照が1つだけ存在することを保証するために使用することでした。ヒープメモリを減らすために機能しましたが、PermGenを大幅に増やしました。実際、一度だけ宣言される文字列が多いため、実際には、アプリケーションが使用するメモリの総量が増加しました。
別のアイデアを検索した後、私はこのアプローチを見つけました:https ://stackoverflow.com/a/725822/1384913 。
String.internと同じことが起こりました。文字列の使用量は減少しましたが、保存したメモリはクラスWeakHashMap
とWeakHashMap$Entry
クラスで使用されています。
回復しているのと同じ量のメモリを消費しない文字列ごとに1つの参照のみを維持する効果的な方法はありますか?