84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
既然 Java 的垃圾回收机制能够自动的回收内存,怎么还会出现内存泄漏的情况呢
小伙看你根骨奇佳,潜力无限,来学PHP伐。
内存资源是有限的,垃圾回收只回收“垃圾”,对于你的程序运行有用的对象不会被回收。
内存溢出分两种情况:一种是栈溢出,比如调用了一个无限递归。还有一种是堆溢出,即new 出来的对象没有即使销毁,比如一直new。
因为有些写的很蠢的程序会在GC机制生效之前无限地创建对象。
一般来说,Java中的内存泄漏指的是已经不再被程序需要的已分配内存无法被回收。垃圾回收机制通过对象与Root对象的可达性判断内存是否可以被回收,但由于编程错误或其他原因,导致过期的对象引用仍然被持有,垃圾回收器无法回收相关空间。
占着茅坑不拉屎,他也没办法.推荐看下我同事写的博客:http://blog.csdn.net/zhanggan...
一些对象其实不需要了但却一直被引用,没办法回收
就目前来说,人做的东西还不能超越人本身,java的GC算法是人写出来的,奈何就有人会作死写出让GC无法回收的代码来
这就如同中国那么大,为什么还有人在朝阳区懵逼一样。
中国那么大,为什么还有人在朝阳区懵逼
我自己的理解,说的不对的地方欢迎指正。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的,不用程序员过多干涉,但是由于一些错误操作,导致一些本来不在需要使用的对象仍然有引用,才会导致内存泄露的。
JVM:程序员抓着垃圾不放,我也很为难啊。
内存资源是有限的,垃圾回收只回收“垃圾”,对于你的程序运行有用的对象不会被回收。
内存溢出分两种情况:一种是栈溢出,比如调用了一个无限递归。还有一种是堆溢出,即new 出来的对象没有即使销毁,比如一直new。
因为有些写的很蠢的程序会在GC机制生效之前无限地创建对象。
一般来说,Java中的内存泄漏指的是已经不再被程序需要的已分配内存无法被回收。
垃圾回收机制通过对象与Root对象的可达性判断内存是否可以被回收,但由于编程错误或其他原因,导致过期的对象引用仍然被持有,垃圾回收器无法回收相关空间。
占着茅坑不拉屎,他也没办法.
推荐看下我同事写的博客:http://blog.csdn.net/zhanggan...
一些对象其实不需要了但却一直被引用,没办法回收
就目前来说,人做的东西还不能超越人本身,java的GC算法是人写出来的,奈何就有人会作死写出让GC无法回收的代码来
这就如同
中国那么大,为什么还有人在朝阳区懵逼
一样。我自己的理解,说的不对的地方欢迎指正。
JDK6中,String的一个方法叫subString,这个是用来生成一个子字符串的。为了更加快速的生成,String有一个构造函数,
String(int offset, int count, char value[]) {
}
直接指向了原来String的数组。我们都知道,每次都会生成一个新的常量池中的String字符串。然而这个引用就导致了原来的String无法被回收。因为subString的value会指向他。这里就会导致内存泄露。
JVM的确是自己进行GC的,不用程序员过多干涉,但是由于一些错误操作,导致一些本来不在需要使用的对象仍然有引用,才会导致内存泄露的。
JVM:程序员抓着垃圾不放,我也很为难啊。