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

回到顶部