2011-03-31 96 views

回答

2

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

6

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

无论是使用String.intern()还是使用规范化映射来合并这些字符串是否合理,取决于您拥有多少重复以及可以节省多少内存以减少重复。

例如,如果您正在阅读XML文件,那么对规范化元素名称可能非常有用。如果您正在阅读地址数据文件,则可能需要对邮政编码和/或城市名称进行规范化。然而,在这两种情况下,我会考虑使用Map而不是调用intern(),因为后者消耗了permgen内存(这是比普通的堆内存稀少的资源)。

+0

+1 XML,很好的例子 – davin 2011-03-31 19:32:50