字符串已经在使用Flyweight设计模式。将共用字符串对象集合起来会有益还是不错。由于字符串已经从字符串池中拉出来了?Flyweight:字符串已经在使用字符串池:是否有意义为Flyweight缓冲字符串对象?
4
A
回答
2
没有关于您的系统的任何其他信息,我会说创建一个特定的字符串池将落入过早的优化类别。如果你的系统确实是非常繁重的字符串操作并且分析显示String对象是主要垃圾收集发生的原因,那么我建议将StringBuilder作为替代品,并且深入理解使用Strings的最佳实践,而不是为他们创建一个缓存。
6
字符串可以来自很多地方,默认情况下只有字符串字符串在字符串池中。例如,当您拨打BufferedReader.readLine()
时,它返回的字符串不在字符串池中。
无论是使用String.intern()
还是使用规范化映射来合并这些字符串是否合理,取决于您拥有多少重复以及可以节省多少内存以减少重复。
例如,如果您正在阅读XML文件,那么对规范化元素名称可能非常有用。如果您正在阅读地址数据文件,则可能需要对邮政编码和/或城市名称进行规范化。然而,在这两种情况下,我会考虑使用Map
而不是调用intern()
,因为后者消耗了permgen内存(这是比普通的堆内存稀少的资源)。
相关问题
- 1. 在C#字符串对象之间共享字符缓冲区
- 2. 字符串池(字符串和StringBuffer)
- 3. 字符串中使用没有得到的字符串池
- 4. JSON使用json字符串将对象字符串化为值
- 5. 使用字符数组作为字符串流缓冲区
- 6. 字符串连接vs字符串缓冲区在Javascript中
- 7. 在C.缓冲区一个字符串比较反对字符串文字
- 8. 意外空字符串字符串
- 9. 将字符串对象转换为Javascript中的字符串原始字符串
- 10. 字符串池8
- 11. 字符串和字符串缓冲区内存概念
- 12. 字符串缓冲区字符串转换异常?
- 13. 为什么使用new运算符创建的字符串在字符串池中创建字符串literal
- 14. 为什么字符串存储在Java中的字符串池?
- 15. Convert.ChangeType()对字符串值有意义吗?
- 16. 在对象中将空字符串转换为空字符串
- 17. Understading字符串文字池
- 18. 字符串文字池
- 19. 使用QuickCheck从字符串池中生成随机字符串
- 20. 字节缓冲区,字符串
- 21. 字符串常量池对象cardianality
- 22. Java字符串池对象创建
- 23. Java - 使用名称形式的对象字符串字符串
- 24. 使用字符串流操作底层字符串对象
- 25. C - 检查字符串是否是另一个字符串的子字符串
- 26. 使用“in”检查字符串中是否出现字符串
- 27. 意义(字符串,3)
- 28. SCSI意义的字符串
- 29. 检查对象是否存在,使用字段字符串
- 30. 检查字符串是否包含字(不是子字符串!)
+1 XML,很好的例子 – davin 2011-03-31 19:32:50