A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨剑 中级黑马   /  2013-1-31 12:39  /  1973 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-2-15 20:18 编辑

求解答,什么是内存泄露和内存溢出呢?

9 个回复

倒序浏览
      内存溢出,简单地讲,就是内存不够用。形象地讲,就是你的程序是5升水,而计算机的剩余水容量是3升了,你把5升水倒进3升水的空间里,肯定是不能装下的,那么你的程序也就不能正常运行。

评分

参与人数 1黑马币 +9 收起 理由
黄锦成 + 9

查看全部评分

回复 使用道具 举报
      内存泄露,可以说是程序运行时对内存没有有效管理发生的意外。内存是计算机中很紧张的资源。当一个程序申请的部分内存空间在某个时间段里都不再使用的时候,就应该还给计算机,操作系统便于及时调度该空间给其他程序使用。如果程序申请的空间使用后再不需要时不及时回收,就可能导致该程序在运行时占用的内存无限增长,使这部分不再使用的内存空间失去控制,影响操作系统正常分配调度内存空间。
回复 使用道具 举报
非常感谢帮忙,应该明白了,我希望可以通过一个例子拉说明下内存溢出和泄露
回复 使用道具 举报
例子:内存溢出就像鱼缸里养鱼,鱼缸不够大,养的鱼太多,鱼都蹦出来了,可能是食人鱼,如果是食人鱼(还能在陆地上攻击人那种)就会捣乱。内存泄漏就是鱼缸里的鱼死了,还不把它捞出来扔了,让它在鱼缸里占地方。
回复 使用道具 举报
内存泄露是指程序中间动态分配了内存,但在程序结束时没有释放这部分内存,从而造成那部分内存不可用的情况,重启计算机可以解决,但也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件设计缺陷引起的。
内存溢出就是你要分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。
当被分配的对象可达但已无用(未对作废数据内存单元的引用置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。   

评分

参与人数 1黑马币 +9 收起 理由
黄锦成 + 9

查看全部评分

回复 使用道具 举报
如果你想是用实例来证明,我先好好看看有没有比较形象的例子,然后给你回复。
回复 使用道具 举报
内存泄露是特指“堆”的,当在堆上创建一个对象,而忘了释放就发生了所谓的内存泄露,在c/c++中经常发生,在java中一般不经常发生,因为有垃圾回收嘛。

内存异常一般发生在堆栈,但也可以发生在堆中。简单的说就是本来应该使用4字节内存,但是你却使用了5字节,那么超出的那一字节就会覆盖其他内存,这就是内存溢出。
   
回复 使用道具 举报
最后在说一点,内存泄露之后,在进程结束之后,操作系统会回收所有资源,所以不用担心你的程序结束之后,还会有内存没有释放
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马