我最近發現java.lang.String.substring方法沒有返回一個新的字符串,而是一個被substringed的原始字符串的視圖。這可能會影響內存。例如,如果讀取ascii文件,並使用子字符串解析文件中的標記並將子字符串的結果存儲在內存中 - 實際上存儲在內存中的是子字符串操作之前的整個字符串!您當然可以通過在您自己的版本中包裝子字符串來解決這個問題,該子字符串返回子字符串結果的新字符串。有多少人被Java子串內存問題困擾了?
3
A
回答
11
我被它咬了一次,逐行閱讀字典文件。每行很短,但由BufferedReader
創建的緩衝區意味着每個字符串都由80個字符的數組支持。
那是我第一次學會了寫作的一點:
word = new String(word);
大部分它不是一個問題,但時間 - 當然它可以更有效率比「採取了完全獨立的副本「方法。
0
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html
在Java文檔,它指出的子方法確實返回一個新的字符串。
還是我誤解了這個問題?
此外,字符串是不可變的。 Here's a SO thread that explains why that is so.
+3
這是一個新的字符串對象,但底層數據可以共享 – Javier 2009-06-24 06:41:38
1
在2000年或2001年,早期的XML
解析器之一(我不記得是哪個)遇到了這個問題。我們花了一段時間才通過閱讀早期FpML
(描述金融產品的非常大的XML
文檔)中的大約3個字段來追蹤我們如何走出內存。
什麼是真的很煩人的是,如果寫
String copy = new String(s);
IntelliJ IDEA的警告我說,這是多餘的!愚蠢的IDE。
相關問題
- 1. Silverlight的困擾/問題
- 2. 內存管理困擾新手
- 3. 瞭解有多少人是在socket.io
- 4. 內存被吞噬問題
- 5. 頁腳困擾
- 6. php_xsl.dll困擾
- 7. 困擾我
- 8. HTML:CONTENTEDITABLE困擾
- 9. NSMutableArray arrayWithCapacity - 分配了多少內存?
- 10. Malloc - >分配了多少內存?
- 11. java類在內存中佔用了多少時間
- 12. 檢查java中使用了多少內存bufferedImage?
- 13. 我該怎麼辦Vim的糊而不被縮進問題困擾
- 14. 在一個字符串中有多少次子字符串[Java]
- 15. Java內存轉儲問題
- 16. Java中的內存問題
- 17. JAVA內存超限問題
- 18. java堆內存問題
- 19. Java AffineTransformOp內存問題
- 20. Loki函子 - 內存問題
- 21. SQL腳本困擾
- 22. 有很多內存問題的Java應用程序
- 23. iPhone,令人困惑的內存泄漏
- 24. 收到騷擾串了ajax
- 25. PHP JSON。令人困惑的問題
- 26. 干擾問題imageshow
- 27. 有多個敵人並且被導彈擊中的問題
- 28. 關於減少內存分配的內存問題
- 29. Objective-C內存泄漏了解問題
- 30. C++:新,瞭解內存問題
問題是...? – Javier 2009-06-24 06:42:20
如果你使用同一個字符串的多個子字符串,你實際上可以節省內存。 ;) – 2009-06-25 17:55:24
實際上,這在Java 7的某些更新中發生了變化。現在,子串是副本。 – Thilo 2015-01-22 12:38:08