更新: 1.7.0_06中的行为已更改:请参阅本文:在Java-performance.info上对Java1.7.0_06中的String内部表示的更改。
正如@finnw指出的那样,使用时确实确实存在某种内存泄漏
String.substring。原因是
String.substring仅返回给定字符串的一部分的视图,即
基础字符串仍保留在内存中 。
要强制创建与源无关的新字符串,必须使用
new关键字。即,您必须例如
String[] parts = orig.split(";");//String mySubstring = parts[i]; // keeps orig from being GC'dString mySubstring = new String(parts[i]); // creates a new string.或者,也许更直接
String mySubstring = new String(orig.split(";")[i]);我必须说,这种行为对我来说似乎是“不必要的”。它可以使用弱引用或其他技术来解决。(特别考虑到这
String已经是一个特殊的类,是Java语言规范的一部分。)



