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