内存泄漏是指一个不再被程序使用的对象或变量还在内存中占有存储空间。

在c/c++语言中,内存的分配和释放是由开发人员负责的。

在java语言中,判断一个内存空间是否符合垃圾回收的标准有两个:

(一)给对象赋予了null,以后再没有使用过;

(二)给对象赋予了新值,重新分配了内存空间。

在java语言中,内存泄漏主要有两种情况:

(一)是在堆中申请的空间没有被释放;

(二)是对象已经不再被使用,但仍然在内存中保留。

垃圾回收可以解决(一),但是无法保证不再被使用的对象会被释放。

在java语言中,内存泄漏的原因很多:

1.静态集合类:例如static HashMap和static Vector,由于它们的生命周期与程序一致,那么容器中的对象在程序结束之前将不能被释放。

2.各种连接:例如数据库连接、网络连接和IO连接等,当不再使用时,需调用close()方法来释放连接。

3.监听器:在释放对象的同时没有删除相应的监听器。

4.变量不合理的作用域:一个变量定义的作用范围大于其使用范围(例如一个本可以定义为方法内局部变量的变量,却被定义为程序对象内的全局变量),并且在使用完后没有及时地把它设为null。

 

风神