黑马程序员技术交流社区
标题:
内存泄露和溢出
[打印本页]
作者:
杨剑
时间:
2013-1-31 12:39
标题:
内存泄露和溢出
本帖最后由 张向辉 于 2013-2-15 20:18 编辑
求解答,什么是内存泄露和内存溢出呢?
作者:
陈科宇
时间:
2013-2-1 17:49
内存溢出,简单地讲,就是内存不够用。形象地讲,就是你的程序是5升水,而计算机的剩余水容量是3升了,你把5升水倒进3升水的空间里,肯定是不能装下的,那么你的程序也就不能正常运行。
作者:
陈科宇
时间:
2013-2-1 17:54
内存泄露,可以说是程序运行时对内存没有有效管理发生的意外。内存是计算机中很紧张的资源。当一个程序申请的部分内存空间在某个时间段里都不再使用的时候,就应该还给计算机,操作系统便于及时调度该空间给其他程序使用。如果程序申请的空间使用后再不需要时不及时回收,就可能导致该程序在运行时占用的内存无限增长,使这部分不再使用的内存空间失去控制,影响操作系统正常分配调度内存空间。
作者:
杨剑
时间:
2013-2-3 07:54
非常感谢帮忙,应该明白了,我希望可以通过一个例子拉说明下内存溢出和泄露
作者:
王昕
时间:
2013-2-3 12:37
例子:内存溢出就像鱼缸里养鱼,鱼缸不够大,养的鱼太多,鱼都蹦出来了,可能是食人鱼,如果是食人鱼(还能在陆地上攻击人那种)就会捣乱。内存泄漏就是鱼缸里的鱼死了,还不把它捞出来扔了,让它在鱼缸里占地方。
作者:
李洪因
时间:
2013-2-3 14:31
内存泄露是指程序中间动态分配了内存,但在程序结束时没有释放这部分内存,从而造成那部分内存不可用的情况,重启计算机可以解决,但也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件设计缺陷引起的。
内存溢出就是你要分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。
当被分配的对象可达但已无用(未对作废数据内存单元的引用置null)即会引起。
如:
Java代码
1. Vector v=new Vector(10);
2. for (int i=1;i<100; i ) {
3. Object o=new Object();
4. v.add(o);
5. o=null;
6. }
7. // 此时,所有的Object对象都没有被释放,因为变量v引用这些对象。
8. // 对象加入到Vector后,还必须从Vector中删除,最简单释放方法就是将Vector对象设置为null。
作者:
陈科宇
时间:
2013-2-3 15:02
如果你想是用实例来证明,我先好好看看有没有比较形象的例子,然后给你回复。
作者:
王宝生
时间:
2013-2-4 11:36
内存泄露是特指“堆”的,当在堆上创建一个对象,而忘了释放就发生了所谓的内存泄露,在c/c++中经常发生,在java中一般不经常发生,因为有垃圾回收嘛。
内存异常一般发生在堆栈,但也可以发生在堆中。简单的说就是本来应该使用4字节内存,但是你却使用了5字节,那么超出的那一字节就会覆盖其他内存,这就是内存溢出。
作者:
王宝生
时间:
2013-2-4 11:37
最后在说一点,内存泄露之后,在进程结束之后,操作系统会回收所有资源,所以不用担心你的程序结束之后,还会有内存没有释放
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2