大家讲道理2017-04-18 10:51:43
一般来说,Java中的内存泄漏指的是已经不再被程序需要的已分配内存无法被回收。
垃圾回收机制通过对象与Root对象的可达性判断内存是否可以被回收,但由于编程错误或其他原因,导致过期的对象引用仍然被持有,垃圾回收器无法回收相关空间。
PHPz2017-04-18 10:51:43
我自己的理解,说的不对的地方欢迎指正。
JDK6中,String的一个方法叫subString,这个是用来生成一个子字符串的。为了更加快速的生成,String有一个构造函数,
String(int offset, int count, char value[]) {
this.value = value;
this.offset = offset;
this.count = count;
}
直接指向了原来String的数组。我们都知道,每次都会生成一个新的常量池中的String字符串。然而这个引用就导致了原来的String无法被回收。因为subString的value会指向他。这里就会导致内存泄露。
JVM的确是自己进行GC的,不用程序员过多干涉,但是由于一些错误操作,导致一些本来不在需要使用的对象仍然有引用,才会导致内存泄露的。