内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。
内存泄漏就是没有及时清理内存垃圾,导致系统无法再给你提供内存资源(内存资源耗尽)。
看到上面的解释,可能有些朋友还是不太理解吧。没问题,看以下例子
1.内存泄露是说程序逻辑问题,造成申请的内存无法释放.这样的话无论多少内存,早晚都会被占用光的.
最简单的例子就是死循环了.由于程序判断错误导经常发生此事
2.内存泄漏是指在堆上分配的内存没有被释放,从而失去对其控制。这样会造成程序能使用的内存越来越少,导致系统运行速度减慢,严重情况会使程序当掉。
3.关于内存溢出有点出入。比如说你申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
举个现实中的例子
4.比如有一个桶,装满了水.你丢个苹果进去。桶的水正常。
如果你放个大石头。水就出溢出,内存溢出也就是这个原理
区别:内存溢出,提供的内存不够;内存泄漏,无法再提供内存资源
代码示例:
内存溢出
while(true){
Map map = new HashMap();
map.put(new StringBuffer("a'),"a");
}
内存泄露
Vector vector = new Vector();
while(true){
Object o = new Object();
vector.add(o);
o=null
}
导致垃圾回收期无法回收Object对象无法再提供内存