本文主要是介绍String的substring()方法导致的内存泄露问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
JDK 6的实现
String(int offset, int count, char value[]) {this.value = value;this.offset = offset;this.count = count;
}public String substring(int beginIndex, int endIndex) {//check boundaryreturn new String(offset + beginIndex, endIndex - beginIndex, value);
}
示例:
String string = "abcdef";
String subString = string.substring(1, 3);
string = null;
最后虽然将String赋值为null,但是subString仍然引用了最初的string,将不会被垃圾回收 。
在JDK 7之后,String的实现
public String(char value[], int offset, int count) {//check boundarythis.value = Arrays.copyOfRange(value, offset, offset + count);
}public String substring(int beginIndex, int endIndex) {//check boundaryint subLen = endIndex - beginIndex;return new String(value, beginIndex, subLen);
}
Arrays.copyOfRange将会拷贝一份新的数组,不使用之前的数组。就不会发生上面的内存泄露的问题了。
这篇关于String的substring()方法导致的内存泄露问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!