Java String.split内存泄漏?
我发现使用String.substring
是众所周知的与相关的内存问题String.split
。
使用中是否存在内存泄漏String.split
?
如果是,解决方法是什么?
以下链接显示了Java中子字符串的正确用法。
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4513622
另外一个博客谈论子字符串中可能的MLK。
http://nflath.com/2009/07/the-dangers-of-
stringsubstring/
回答:
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'd
String mySubstring = new String(parts[i]); // creates a new string.
或者,也许更直接
String mySubstring = new String(orig.split(";")[i]);
我必须说,这种行为对我来说似乎是“不必要的”。它可以使用弱引用或其他技术来解决。(特别考虑到这String
已经是一个特殊的类,是Java语言规范的一部分。)
以上是 Java String.split内存泄漏? 的全部内容, 来源链接: utcz.com/qa/405877.html