内存泄露是指程序中间动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况。分配了内存而没有释放,逐渐耗尽内存资源,导致系统崩溃。
造成内存泄露的根本原因是:多重引用。程序员认为,对象在其生命周期结束的时候就是没有用的,即为null时候。但是,gc认为只有对象的计数为0的时候才可以进行垃圾回收。
如下表格所示:
|
程序员的观点 |
gc的观点 |
|
Object e = new Object(); class A a = e; class B b = e; class C c = e; class D d = e; |
e.count++ e.count++ e.count++ e.count++ e.count++ |
|
e = null; e无用了,释放。 |
e.count-- e.count为4,不能释放,造成内存泄露。 |
多重引用如图所示:
由此得出结论:要释放对象,必须使对象的引用计数为0。
感谢金丝燕大学校长
本文深入探讨了内存泄露现象的本质,解释了程序员观点与垃圾回收(GC)视角的差异,并通过实例展示了如何避免内存泄露,确保程序资源的有效管理。
220

被折叠的 条评论
为什么被折叠?



