内存泄露是指程序中间动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况。分配了内存而没有释放,逐渐耗尽内存资源,导致系统崩溃。
造成内存泄露的根本原因是:多重引用。程序员认为,对象在其生命周期结束的时候就是没有用的,即为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。
感谢金丝燕大学校长