更新:行爲1.7.0_06已經改變:請參見這篇文章:Changes to String internal representation made in Java 1.7.0_06在java-performance.info。
正如指出的@finnw的確有一種內存泄漏使用String.substring
時虎視眈眈。原因是String.substring
只返回給定字符串的一部分的視圖,即,底層字符串仍然保存在內存中。
要強制創建與源無關的新字符串,您必須使用new
關鍵字。即,你必須例如
String[] parts = orig.split(";");
//String mySubstring = parts[i]; // keeps orig from being GC'd
String mySubstring = new String(parts[i]); // creates a new string.
或做的,或許更直接
String mySubstring = new String(orig.split(";")[i]);
我必須說,這行爲似乎「不必要的」給我。它應該可以使用弱引用或其他技術來解決。 (尤其是考慮到String
已經是一個特殊的類,是Java語言規範的一部分。)
我知道英文可能不是你的第一語言,但這個問題沒有意義。請給我們一些背景。 – 2011-05-19 09:19:30
我不認爲這種常用的方法存在內存泄漏,這是自早期Java版本以來存在的。但是如果發現內存泄漏,請提供一些信息。 – 2011-05-19 09:21:47
你能告訴我們關於你提到的已知解決方法的鏈接嗎? – jabal 2011-05-19 09:21:51