【发布时间】:2014-10-26 10:56:47
【问题描述】:
我正在搜索由 java 中的 subString() 方法引起的内存泄漏。我在互联网上阅读了几篇文章并获得了一些知识,但最终我有点困惑。一篇文章提到了“String类内部的子字符串方法,调用String(int offset, int count, char value[])构造函数来创建新的String对象。这里有趣的是,value[],它与之前使用的字符数组相同。代表原始字符串”。这对我来说很清楚。
它还提到“如果原始字符串很长,并且具有大小为 1GB 的数组,那么无论子字符串多小,它都会容纳 1GB 数组。这也将阻止原始字符串被垃圾收集,如果没有任何实时参考”。
文章链接在这里 {http://javarevisited.blogspot.sg/2011/10/how-substring-in-java-works.html}
我无法理解这一点。请任何人解释一下,如果它没有任何实时引用,它如何阻止原始字符串被垃圾收集?
据我所知,在java中任何没有直接或间接引用的对象都可以被垃圾收集器收集。如果 subString 方法使用用于表示原始字符串的相同字符数组,原始字符串如何保留而不被垃圾收集?
同样我想知道内存泄漏是否是由于使用用于表示原始字符串的相同字符数组而引起的,因为与原始字符串相比,新字符串 {String 返回子字符串方法} 将非常少,或者因为原始字符串字符串仍然没有被垃圾收集吗?
请任何人帮助我澄清这一点
【问题讨论】: