字符串已經在使用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