Remover Strings duplicadas sem aumentar o consumo de memória

4 respostas
M

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?

4 Respostas

E

Por que não usar um Set ?

ssh

entanglement:
Por que não usar um Set ?

http://docs.oracle.com/javase/7/docs/api/java/util/Set.html

M

entanglement:
Por que não usar um Set ?

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

E

http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html
http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html#removeEldestEntry(java.util.Map.Entry)

Criado 21 de outubro de 2012
Ultima resposta 22 de out. de 2012
Respostas 4
Participantes 3