Sru*_*lla 15 java string memory-leaks
我正在浏览String类API,看起来像substring方法导致潜在的内存泄漏,因为它与原始String共享相同的字符数组.
如果原始字符串很大,则子字符串返回的小字符串可以防止原始字符串(由大数组备份)从Java中的垃圾收集.
任何想法或我读错了API.
Bri*_*new 18
还有就是对内存泄漏潜在的,如果你把一个相当大的字符串的一个子并不能复印(通常是通过String(String)构造函数).
请注意,自Java 7u6以来,这已发生了变化.请参见http://bugs.sun.com/view_bug.do?bug_id=4513622.
围绕String实现flyweight模式的对象的原始假设不再被视为有效.
有关详细信息,请参阅此答案.
在 Java 7u6 之前都是这种情况 - 您通常会通过执行以下操作来处理该问题:
String sub = new String(s.substring(...)); // create a new string
Run Code Online (Sandbox Code Playgroud)
这有效地消除了依赖性,原始字符串现在可用于 GC。顺便说一句,这是使用字符串构造函数有意义的唯一场景之一。
从Java 7u6开始,创建了一个新的String,并且不再存在内存问题。