5

字符串已经在使用享元设计模式。汇集常见的 String 对象是否有益/有效。由于字符串将已经从字符串池中拉出?

4

2 回答 2

7

字符串可以来自很多地方,默认情况下,字符串池中只有字符串文字。例如,当您调用 时BufferedReader.readLine(),它返回的字符串不在字符串池中。

使用或规范化映射池化此类字符串是否有意义String.intern(),取决于您有多少重复,以及您可以腾出多少内存来减少重复。

例如,如果您正在读取 XML 文件,规范化元素名称可能非常有用。如果您正在阅读地址数据文件,规范化邮政编码和/或城市名称可能会很有用。但是,在这两种情况下,我都会考虑使用 aMap而不是调用intern(),因为后者会消耗 permgen 内存(这是比普通堆内存更稀缺的资源)。

于 2011-03-31T19:09:36.520 回答
3

如果没有关于您的系统的任何其他信息,我会说创建一个特定用途的字符串池将属于过早的优化类别。如果您的系统确实非常繁重的字符串操作并且分析表明字符串对象是主要垃圾收集发生的原因,那么我建议您将 StringBuilder 视为替代品,并深入了解使用字符串的最佳实践,而不是为他们创建缓存。

于 2011-03-31T19:11:14.937 回答