内存泄漏指无用对象或不再使用的对象持续占内存或无用对象的内存得不到及时释放,而造成的内存空间浪费。
会提示Out of memory
1、静态集合类引起内存泄漏
import java.util.ArrayList;
public class Test {
static ArrayList<Object> al = new ArrayList<Object>();
public static void main(String[] args) {
for (long i = 0; i <999999999 ; i++) {
Object o = new Object();
al.add(o);
o=null;
System.out.println(i);
}
}
}
结果:
2、各种连接
数据库连接(dataSourse.getConnection())、网络连接(socket)、io连接
显式调用close() 方法连接关闭
3、监听器
4、单例模式
单例对象持有外部引用
5、内部类和外部模块的引用
------------------------------------------
另加:
1、内存泄漏memory leak :是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。
2、内存溢出 out of memory :指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。