Remover Strings duplicadas sem aumentar o consumo de memória
4 respostas
M
marcio_gs
Estou lidando com uma aplicação que possui várias Strings duplicadas e o meu objetivo é fazer uma espécie de pool de Strings, para eduzir o consumo de memória. Não posso utilizar o método String.intern pois como há várias Strings que são utilizada apenas uma vez no código, o PermGen acaba crescendo muito mais do que o ganho que eu tenho ao remover as Strings duplicadas.
Alguma ideia de como eu possa implementar esse pool sem detonar a minha memória permanente ao mesmo tempo?
Como isso funcionaria? Imagine que eu tenha o seguinte método:
public static intern(String value) {
if(!pool.contains()) {
pool.add(value);
}
return //retornar o que agora? Não existe um get(object) em um Set e iterar sobre a coleção é muito custoso.
}
Sem dizer que essa implementação deixaria o código com o mesmo problema que o String.intern: ele iria prender na memória várias Strings que são utilizadas apenas uma vez