内存溢出和内存泄漏的区别
1. 内存溢出:out of memory ,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
例如:
1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3.代码中存在死循环或循环产生过多重复的对象实体;
4.使用的第三方软件中的BUG;
5.启动参数内存值设定的过小
2. 内存泄漏:memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
例如:
- 静态集合类:集合容器中的对象在程序结束前得不到释放,会造成内存堆积;
Vector v=new Vector(10);
for(int i=0;i<10;i++){
Object o=new Object();
v.add(o);
}
- 各种连接:数据库连接,网络连接,以及io连接,连接后得不到关闭,
- 监听器:在使用多个监听器后,释放了对象,而没有删除监听器,也可能导致内存溢出;
- 变量不合理的作用域:如果一个变量的定义的作用范围大于其使用范围,还有,没有及时把对象设置为null,可能这是我们比较经常出现的问题,所以有一些变量我们可以设置为方法作用范围内,当方法使用完,就释放了。
原文地址:https://www.cnblogs.com/liu-ya/p/9672296.html
时间: 2024-10-10 09:38:20