锁定老帖子 主题:java的内存泄露问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-26
public E remove(int index) { modCount++; int numMoved = size - index - 1; return oldValue; elementData[--size] = null; // Let gc do its work 百思不得其解,不明白为什么要做这样一个动作,有什么意义。无意见拿起手边的effective java这本书 ,原来这句代码是消除过期的对象的引用!!防止发生outofmemoryerror ,把这章看完,感觉仍然很模糊,为什么垃圾回收器不回收这些引用?什么时候一个类自己管理自己的内存?或者什么叫做一个类自己管理自己的内存?看书上的解释,似乎有数组的情况下,有可能发生这样的事情,那么有没有其他的存在情况呢? 还有就是作者所说的缓存也有可能存在这种情况,也很是茫然。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-09-26
java中所谓管理自己的内存,就是在对象中维护一些引用,即使外界暂时不再使用这些引用,GC也不会释放他们(因为还在被管理对象引用着)。当外界完全不再使用某引用时,管理对象应该及时的清除这个引用,否则就会造成内存泄露。
形象点说,你可以把引用当作钩子,管理对象当作架子,被管理的对象当作鸭子,GC就是在地上跑来跑去拣掉下来鸭子的狗。 鸭子通过钩子挂在架子上,我们需要的时候随时都能从架子上找到所需要的鸭子,即便我们暂时不用,鸭子也不会被狗叼走。可是如果一只鸭子臭了,我们以后永远用不着了,那么我们就会断开钩子,鸭子就会掉在地上被狗拣跑了。 也就是说,只要你自己管理了一个对象的引用,GC就不会帮你去释放,只有释放了引用,GC才会释放引用指向的对象。 |
|
返回顶楼 | |
发表时间:2007-09-26
timerri 写道 java中所谓管理自己的内存,就是在对象中维护一些引用,即使外界暂时不再使用这些引用,GC也不会释放他们(因为还在被管理对象引用着)。当外界完全不再使用某引用时,管理对象应该及时的清除这个引用,否则就会造成内存泄露。
解释的很明白
形象点说,你可以把引用当作钩子,管理对象当作架子,被管理的对象当作鸭子,GC就是在地上跑来跑去拣掉下来鸭子的狗。 鸭子通过钩子挂在架子上,我们需要的时候随时都能从架子上找到所需要的鸭子,即便我们暂时不用,鸭子也不会被狗叼走。可是如果一只鸭子臭了,我们以后永远用不着了,那么我们就会断开钩子,鸭子就会掉在地上被狗拣跑了。 也就是说,只要你自己管理了一个对象的引用,GC就不会帮你去释放,只有释放了引用,GC才会释放引用指向的对象。 |
|
返回顶楼 | |
发表时间:2007-09-26
timerri 写道 形象点说,你可以把引用当作钩子,管理对象当作架子,被管理的对象当作鸭子,GC就是在地上跑来跑去拣掉下来鸭子的狗。 鸭子通过钩子挂在架子上,我们需要的时候随时都能从架子上找到所需要的鸭子,即便我们暂时不用,鸭子也不会被狗叼走。可是如果一只鸭子臭了,我们以后永远用不着了,那么我们就会断开钩子,鸭子就会掉在地上被狗拣跑了。 这个比喻简直太拽了, 是原创??? 最佳创意奖!!! |
|
返回顶楼 | |
发表时间:2007-09-26
二楼的比喻很形象~~~
|
|
返回顶楼 | |
发表时间:2007-09-27
呵呵,谢谢。但是我有个疑问jvm是怎么知道什么时候这些引用是我们自己在管理的?
|
|
返回顶楼 | |
发表时间:2007-09-27
或者说我们什么时候去消除对象的过期引用?
|
|
返回顶楼 | |
发表时间:2007-09-27
回到最早的COM,你就会看到引用计数器,这个东西,有人用就+1,有人释放就-1,数值到0就从内存中清除掉。这是垃圾收集最直接的方法---引用计数算法。
引用计数无法解决环形数据的问题,所以还得引入追踪算法。 其他的算法还有不少。 |
|
返回顶楼 | |
发表时间:2007-09-27
peacockbird 写道 呵呵,谢谢。但是我有个疑问jvm是怎么知道什么时候这些引用是我们自己在管理的?
jvm不知道,所有没法掉下来的鸭子他都不管。 所以,如果,鸭子你自己死命的拽着,越拽越多,那条叫GC的狗永远刁不到。 钩子一般有两种情况会断开 1,函数内局部变量,出函数会断开 2,手工设置null |
|
返回顶楼 | |
发表时间:2007-09-27
sum的JVM的GC,引用计数、mark and sweep、分代收集算法都用到了,对GC有兴趣可以去看《深入java虚拟机》第二版啊
|
|
返回顶楼 | |